PLCControler.py
changeset 383 25ffba02b6a8
parent 369 b506dea7a103
child 384 ed27a676d5c9
--- a/PLCControler.py	Fri Jul 24 09:55:11 2009 +0200
+++ b/PLCControler.py	Fri Jul 24 10:47:35 2009 +0200
@@ -1592,282 +1592,10 @@
             else:
                 instance = element.getrandomInstance(exclude)
         if instance is not None:
-            if id is not None:
-                infos["id"] = id
-            else:
-                infos["id"] = instance.getlocalId() 
-            infos["x"] = instance.getx()
-            infos["y"] = instance.gety()
-            infos["height"] = instance.getheight()
-            infos["width"] = instance.getwidth()
-            if isinstance(instance, plcopen.fbdObjects_block):
-                infos["name"] = instance.getinstanceName()
-                infos["type"] = instance.gettypeName()
-                executionOrder = instance.getexecutionOrderId()
-                if executionOrder is not None:
-                    infos["executionOrder"] = executionOrder
-                else:
-                    infos["executionOrder"] = 0
-                infos["connectors"] = {"inputs":[],"outputs":[]}
-                for variable in instance.inputVariables.getvariable():
-                    connector = {}
-                    connector["name"] = variable.getformalParameter()
-                    connector["position"] = variable.connectionPointIn.getrelPositionXY()
-                    connector["negated"] = variable.getnegated()
-                    connector["edge"] = variable.getedge()
-                    connector["links"] = []
-                    connections = variable.connectionPointIn.getconnections()
-                    if connections:
-                        for link in connections:
-                            dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
-                            connector["links"].append(dic)
-                    infos["connectors"]["inputs"].append(connector)
-                for variable in instance.outputVariables.getvariable():
-                    connector = {}
-                    connector["name"] = variable.getformalParameter()
-                    connector["position"] = variable.connectionPointOut.getrelPositionXY()
-                    connector["negated"] = variable.getnegated()
-                    connector["edge"] = variable.getedge()
-                    infos["connectors"]["outputs"].append(connector)
-            elif isinstance(instance, plcopen.fbdObjects_inVariable):
-                infos["name"] = instance.getexpression()
-                infos["value_type"] = self.GetEditedElementVarValueType(tagname, infos["name"], debug)
-                infos["type"] = "input"
-                executionOrder = instance.getexecutionOrderId()
-                if executionOrder is not None:
-                    infos["executionOrder"] = executionOrder
-                else:
-                    infos["executionOrder"] = 0
-                infos["connector"] = {}
-                infos["connector"]["position"] = instance.connectionPointOut.getrelPositionXY()
-                infos["connector"]["negated"] = instance.getnegated()
-                infos["connector"]["edge"] = instance.getedge()
-            elif isinstance(instance, plcopen.fbdObjects_outVariable):
-                infos["name"] = instance.getexpression()
-                infos["value_type"] = self.GetEditedElementVarValueType(tagname, infos["name"], debug)
-                infos["type"] = "output"
-                executionOrder = instance.getexecutionOrderId()
-                if executionOrder is not None:
-                    infos["executionOrder"] = executionOrder
-                else:
-                    infos["executionOrder"] = 0
-                infos["connector"] = {}
-                infos["connector"]["position"] = instance.connectionPointIn.getrelPositionXY()
-                infos["connector"]["negated"] = instance.getnegated()
-                infos["connector"]["edge"] = instance.getedge()
-                infos["connector"]["links"] = []
-                connections = instance.connectionPointIn.getconnections()
-                if connections:
-                    for link in connections:
-                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
-                        infos["connector"]["links"].append(dic)
-            elif isinstance(instance, plcopen.fbdObjects_inOutVariable):
-                infos["name"] = instance.getexpression()
-                infos["value_type"] = self.GetEditedElementVarValueType(tagname, infos["name"], debug)
-                infos["type"] = "inout"
-                executionOrder = instance.getexecutionOrderId()
-                if executionOrder is not None:
-                    infos["executionOrder"] = executionOrder
-                else:
-                    infos["executionOrder"] = 0
-                infos["connectors"] = {"input":{},"output":{}}
-                infos["connectors"]["output"]["position"] = instance.connectionPointOut.getrelPositionXY()
-                infos["connectors"]["output"]["negated"] = instance.getnegatedOut()
-                infos["connectors"]["output"]["edge"] = instance.getedgeOut()
-                infos["connectors"]["input"]["position"] = instance.connectionPointIn.getrelPositionXY()
-                infos["connectors"]["input"]["negated"] = instance.getnegatedIn()
-                infos["connectors"]["input"]["edge"] = instance.getedgeIn()
-                infos["connectors"]["input"]["links"] = []
-                connections = instance.connectionPointIn.getconnections()
-                if connections:
-                    for link in connections:
-                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
-                        infos["connectors"]["input"]["links"].append(dic)
-            elif isinstance(instance, plcopen.commonObjects_continuation):
-                infos["name"] = instance.getname()
-                infos["type"] = "continuation"
-                infos["connector"] = {}
-                infos["connector"]["position"] = instance.connectionPointOut.getrelPositionXY()
-            elif isinstance(instance, plcopen.commonObjects_connector):
-                infos["name"] = instance.getname()
-                infos["type"] = "connection"
-                infos["connector"] = {}
-                infos["connector"]["position"] = instance.connectionPointIn.getrelPositionXY()
-                infos["connector"]["links"] = []
-                connections = instance.connectionPointIn.getconnections()
-                if connections:
-                    for link in connections:
-                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
-                        infos["connector"]["links"].append(dic)
-            elif isinstance(instance, plcopen.commonObjects_comment):
-                infos["type"] = "comment"
-                infos["content"] = instance.getcontentText()
-            elif isinstance(instance, plcopen.ldObjects_leftPowerRail):
-                infos["type"] = "leftPowerRail"
-                infos["connectors"] = []
-                for connection in instance.getconnectionPointOut():
-                    connector = {}
-                    connector["position"] = connection.getrelPositionXY()
-                    infos["connectors"].append(connector)
-            elif isinstance(instance, plcopen.ldObjects_rightPowerRail):
-                infos["type"] = "rightPowerRail"
-                infos["connectors"] = []
-                for connection in instance.getconnectionPointIn():
-                    connector = {}
-                    connector["position"] = connection.getrelPositionXY()
-                    connector["links"] = []
-                    connections = connection.getconnections()
-                    if connections:
-                        for link in connection.getconnections():
-                            dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
-                            connector["links"].append(dic)
-                    infos["connectors"].append(connector)
-            elif isinstance(instance, plcopen.ldObjects_contact):
-                infos["name"] = instance.getvariable()
-                infos["type"] = "contact"
-                executionOrder = instance.getexecutionOrderId()
-                if executionOrder is not None:
-                    infos["executionOrder"] = executionOrder
-                else:
-                    infos["executionOrder"] = 0
-                infos["negated"] = instance.getnegated()
-                infos["edge"] = instance.getedge()
-                infos["connectors"] = {"input":{},"output":{}}
-                infos["connectors"]["input"]["position"] = instance.connectionPointIn.getrelPositionXY()
-                infos["connectors"]["input"]["links"] = []
-                connections = instance.connectionPointIn.getconnections()
-                if connections:
-                    for link in connections:
-                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
-                        infos["connectors"]["input"]["links"].append(dic)
-                infos["connectors"]["output"]["position"] = instance.connectionPointOut.getrelPositionXY()
-            elif isinstance(instance, plcopen.ldObjects_coil):
-                infos["name"] = instance.getvariable()
-                infos["type"] = "coil"
-                executionOrder = instance.getexecutionOrderId()
-                if executionOrder is not None:
-                    infos["executionOrder"] = executionOrder
-                else:
-                    infos["executionOrder"] = 0
-                infos["negated"] = instance.getnegated()
-                infos["edge"] = instance.getedge()
-                infos["storage"] = instance.getstorage()
-                infos["connectors"] = {"input":{},"output":{}}
-                infos["connectors"]["input"]["position"] = instance.connectionPointIn.getrelPositionXY()
-                infos["connectors"]["input"]["links"] = []
-                connections = instance.connectionPointIn.getconnections()
-                if connections:
-                    for link in connections:
-                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
-                        infos["connectors"]["input"]["links"].append(dic)
-                infos["connectors"]["output"]["position"] = instance.connectionPointOut.getrelPositionXY()
-            elif isinstance(instance, plcopen.sfcObjects_step):
-                infos["name"] = instance.getname()
-                infos["type"] = "step"
-                infos["initial"] = instance.getinitialStep()
-                infos["connectors"] = {}
-                if instance.connectionPointIn:
-                    infos["connectors"]["input"] = {}
-                    infos["connectors"]["input"]["position"] = instance.connectionPointIn.getrelPositionXY()
-                    infos["connectors"]["input"]["links"] = []
-                    connections = instance.connectionPointIn.getconnections()
-                    if connections:
-                        for link in connections:
-                            dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
-                            infos["connectors"]["input"]["links"].append(dic)
-                if instance.connectionPointOut:
-                    infos["connectors"]["output"] = {"position" : instance.connectionPointOut.getrelPositionXY()}
-                if instance.connectionPointOutAction:
-                    infos["connectors"]["action"] = {"position" : instance.connectionPointOutAction.getrelPositionXY()}
-            elif isinstance(instance, plcopen.sfcObjects_transition):
-                infos["type"] = "transition"
-                condition = instance.getconditionContent()
-                priority = instance.getpriority()
-                if priority == None:
-                    infos["priority"] = 0
-                else:
-                    infos["priority"] = priority
-                infos["condition_type"] = condition["type"]
-                infos["connectors"] = {"input":{},"output":{}}
-                infos["connectors"]["input"]["position"] = instance.connectionPointIn.getrelPositionXY()
-                infos["connectors"]["input"]["links"] = []
-                connections = instance.connectionPointIn.getconnections()
-                if connections:
-                    for link in connections:
-                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
-                        infos["connectors"]["input"]["links"].append(dic)
-                infos["connectors"]["output"]["position"] = instance.connectionPointOut.getrelPositionXY()
-                if infos["condition_type"] == "connection":
-                    infos["connectors"]["connection"] = {}
-                    infos["connectors"]["connection"]["links"] = []
-                    connections = instance.getconnections()
-                    if connections:
-                        for link in connections:
-                            dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
-                            infos["connectors"]["connection"]["links"].append(dic)
-                    infos["condition"] = None
-                else:
-                    infos["condition"] = condition["value"]
-            elif isinstance(instance, (plcopen.sfcObjects_selectionDivergence, plcopen.sfcObjects_simultaneousDivergence)):
-                if isinstance(instance, plcopen.sfcObjects_selectionDivergence):
-                    infos["type"] = "selectionDivergence"
-                else:
-                    infos["type"] = "simultaneousDivergence"
-                infos["connectors"] = {"inputs":[],"outputs":[]}
-                connector = {}
-                connector["position"] = instance.connectionPointIn.getrelPositionXY()
-                connector["links"] = []
-                connections = instance.connectionPointIn.getconnections()
-                if connections:
-                    for link in connections:
-                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
-                        connector["links"].append(dic)
-                infos["connectors"]["inputs"].append(connector)
-                for sequence in instance.getconnectionPointOut():
-                    connector = {}
-                    connector["position"] = sequence.getrelPositionXY()
-                    infos["connectors"]["outputs"].append(connector)
-            elif isinstance(instance, (plcopen.sfcObjects_selectionConvergence, plcopen.sfcObjects_simultaneousConvergence)):
-                if isinstance(instance, plcopen.sfcObjects_selectionConvergence):
-                    infos["type"] = "selectionConvergence"
-                else:
-                    infos["type"] = "simultaneousConvergence"
-                infos["connectors"] = {"inputs":[],"outputs":[]}
-                for sequence in instance.getconnectionPointIn():
-                    connector = {}
-                    connector["position"] = sequence.getrelPositionXY()
-                    connector["links"] = []
-                    connections = sequence.getconnections()
-                    if connections:
-                        for link in connections:
-                            dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
-                            connector["links"].append(dic)
-                    infos["connectors"]["inputs"].append(connector)
-                connector = {}
-                connector["position"] = instance.connectionPointOut.getrelPositionXY()
-                infos["connectors"]["outputs"].append(connector)
-            elif isinstance(instance, plcopen.sfcObjects_jumpStep):
-                infos["type"] = "jump"
-                infos["target"] = instance.gettargetName()
-                infos["connector"] = {}
-                infos["connector"]["position"] = instance.connectionPointIn.getrelPositionXY()
-                infos["connector"]["links"] = []
-                connections = instance.connectionPointIn.getconnections()
-                if connections:
-                    for link in connections:
-                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
-                        infos["connector"]["links"].append(dic)
-            elif isinstance(instance, plcopen.commonObjects_actionBlock):
-                infos["type"] = "actionBlock"
-                infos["actions"] = instance.getactions()
-                infos["connector"] = {}
-                infos["connector"]["position"] = instance.connectionPointIn.getrelPositionXY()
-                infos["connector"]["links"] = []
-                connections = instance.connectionPointIn.getconnections()
-                if connections:
-                    for link in connections:
-                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
-                        infos["connector"]["links"].append(dic)
+            infos = instance.getinfos()
+            if infos["type"] in ["input", "output", "inout"]:
+                var_type = self.GetEditedElementVarValueType(tagname, infos["specific_values"]["name"], debug)
+                infos["specific_values"]["value_type"] = var_type
             return infos
         return None
     
@@ -2067,39 +1795,29 @@
                 elif param == "y":
                     variable.sety(value)
                 elif param == "connectors":
-                    if isinstance(variable, plcopen.fbdObjects_inVariable):
-                        if value["output"].IsNegated():
-                            variable.setnegated(True)
-                        if value["output"].GetEdge() != "none":
-                            variable.setedge(value["output"].GetEdge())
-                        position = value["output"].GetRelPosition()
+                    if len(value["outputs"]) > 0:
+                        output = value["outputs"][0]
+                        if len(value["inputs"]) > 0:
+                            variable.setnegatedOut(output.IsNegated())
+                            variable.setedgeOut(output.GetEdge())
+                        else:
+                            variable.setnegated(output.IsNegated())
+                            variable.setedge(output.GetEdge())
+                        position = output.GetRelPosition()
                         variable.addconnectionPointOut()
                         variable.connectionPointOut.setrelPositionXY(position.x, position.y)
-                    elif isinstance(variable, plcopen.fbdObjects_outVariable):
-                        if value["input"].IsNegated():
-                            variable.setnegated(True)
-                        if value["input"].GetEdge() != "none":
-                            variable.setedge(value["input"].GetEdge())
-                        position = value["input"].GetRelPosition()
+                    if len(value["inputs"]) > 0:
+                        input = value["inputs"][0]
+                        if len(value["outputs"]) > 0:
+                            variable.setnegatedIn(input.IsNegated())
+                            variable.setedgeIn(input.GetEdge())
+                        else:
+                            variable.setnegated(input.IsNegated())
+                            variable.setedge(input.GetEdge())
+                        position = input.GetRelPosition()
                         variable.addconnectionPointIn()
                         variable.connectionPointIn.setrelPositionXY(position.x, position.y)
-                        self.SetConnectionWires(variable.connectionPointIn, value["input"])
-                    elif isinstance(variable, plcopen.fbdObjects_inOutVariable):
-                        if value["input"].IsNegated():
-                            variable.setnegatedIn(True)
-                        if value["input"].GetEdge() != "none":
-                            variable.setedgeIn(value["input"].GetEdge())
-                        if value["output"].IsNegated():
-                            variable.setnegatedOut(True)
-                        if value["output"].GetEdge() != "none":
-                            variable.setedgeOut(value["output"].GetEdge())
-                        position = value["output"].GetRelPosition()
-                        variable.addconnectionPointOut()
-                        variable.connectionPointOut.setrelPositionXY(position.x, position.y)
-                        position = value["input"].GetRelPosition()
-                        variable.addconnectionPointIn()
-                        variable.connectionPointIn.setrelPositionXY(position.x, position.y)
-                        self.SetConnectionWires(variable.connectionPointIn, value["input"])
+                        self.SetConnectionWires(variable.connectionPointIn, input)
 
     def AddEditedElementConnection(self, tagname, id, type):
         element = self.GetEditedElement(tagname)
@@ -2193,14 +1911,14 @@
                 elif param == "connectors":
                     if isinstance(powerrail, plcopen.ldObjects_leftPowerRail):
                         powerrail.setconnectionPointOut([])
-                        for connector in value:
+                        for connector in value["outputs"]:
                             position = connector.GetRelPosition()
                             connection = plcopen.leftPowerRail_connectionPointOut()
                             connection.setrelPositionXY(position.x, position.y)
                             powerrail.connectionPointOut.append(connection)
                     elif isinstance(powerrail, plcopen.ldObjects_rightPowerRail):
                         powerrail.setconnectionPointIn([])
-                        for connector in value:
+                        for connector in value["inputs"]:
                             position = connector.GetRelPosition()
                             connection = plcopen.connectionPointIn()
                             connection.setrelPositionXY(position.x, position.y)
@@ -2245,12 +1963,12 @@
                 elif param == "y":
                     contact.sety(value)
                 elif param == "connectors":
-                    input_connector = value["input"]
+                    input_connector = value["inputs"][0]
                     position = input_connector.GetRelPosition()
                     contact.addconnectionPointIn()
                     contact.connectionPointIn.setrelPositionXY(position.x, position.y)
                     self.SetConnectionWires(contact.connectionPointIn, input_connector)
-                    output_connector = value["output"]
+                    output_connector = value["outputs"][0]
                     position = output_connector.GetRelPosition()
                     contact.addconnectionPointOut()
                     contact.connectionPointOut.setrelPositionXY(position.x, position.y)
@@ -2305,12 +2023,12 @@
                 elif param == "y":
                     coil.sety(value)
                 elif param == "connectors":
-                    input_connector = value["input"]
+                    input_connector = value["inputs"][0]
                     position = input_connector.GetRelPosition()
                     coil.addconnectionPointIn()
                     coil.connectionPointIn.setrelPositionXY(position.x, position.y)
                     self.SetConnectionWires(coil.connectionPointIn, input_connector)
-                    output_connector = value["output"]
+                    output_connector = value["outputs"][0]
                     position = output_connector.GetRelPosition()
                     coil.addconnectionPointOut()
                     coil.connectionPointOut.setrelPositionXY(position.x, position.y)
@@ -2342,24 +2060,24 @@
                 elif param == "y":
                     step.sety(value)
                 elif param == "connectors":
-                    input_connector = value["input"]
-                    if input_connector:
+                    if len(value["inputs"]) > 0:
+                        input_connector = value["inputs"][0]
                         position = input_connector.GetRelPosition()
                         step.addconnectionPointIn()
                         step.connectionPointIn.setrelPositionXY(position.x, position.y)
                         self.SetConnectionWires(step.connectionPointIn, input_connector)
                     else:
                         step.deleteconnectionPointIn()
-                    output_connector = value["output"]
-                    if output_connector:
+                    if len(value["outputs"]) > 0:
+                        output_connector = value["outputs"][0]
                         position = output_connector.GetRelPosition()
                         step.addconnectionPointOut()
                         step.connectionPointOut.setrelPositionXY(position.x, position.y)
                     else:
                         step.deleteconnectionPointOut()
-                    action_connector = value["action"]
-                    if action_connector:
-                        position = action_connector.GetRelPosition()
+                elif param == "action":
+                    if value:
+                        position = value.GetRelPosition()
                         step.addconnectionPointOutAction()
                         step.connectionPointOutAction.setrelPositionXY(position.x, position.y)
                     else:
@@ -2395,19 +2113,18 @@
                     else:
                         transition.setpriority(None)
                 elif param == "connectors":
-                    input_connector = value["input"]
+                    input_connector = value["inputs"][0]
                     position = input_connector.GetRelPosition()
                     transition.addconnectionPointIn()
                     transition.connectionPointIn.setrelPositionXY(position.x, position.y)
                     self.SetConnectionWires(transition.connectionPointIn, input_connector)
-                    output_connector = value["output"]
+                    output_connector = value["outputs"][0]
                     position = output_connector.GetRelPosition()
                     transition.addconnectionPointOut()
                     transition.connectionPointOut.setrelPositionXY(position.x, position.y)
-                    if infos.get("type", None) == "connection":
-                        transition.setconditionContent("connection", None)
-                        connection_connector = value["connection"]
-                        self.SetConnectionWires(transition, connection_connector)
+                elif infos.get("type", None) == "connection" and param == "connection" and value:
+                    transition.setconditionContent("connection", None)
+                    self.SetConnectionWires(transition, value)
     
     def AddEditedElementDivergence(self, tagname, id, type):
         element = self.GetEditedElement(tagname)