PLCControler.py
changeset 118 0c53d6a36013
parent 117 bbe0697cf1ea
child 121 40b91ba978db
equal deleted inserted replaced
117:bbe0697cf1ea 118:0c53d6a36013
  1231             infos["height"] = instance.getHeight()
  1231             infos["height"] = instance.getHeight()
  1232             infos["width"] = instance.getWidth()
  1232             infos["width"] = instance.getWidth()
  1233             if isinstance(instance, plcopen.block):
  1233             if isinstance(instance, plcopen.block):
  1234                 infos["name"] = instance.getInstanceName()
  1234                 infos["name"] = instance.getInstanceName()
  1235                 infos["type"] = instance.getTypeName()
  1235                 infos["type"] = instance.getTypeName()
       
  1236                 executionOrder = instance.getExecutionOrderId()
       
  1237                 if executionOrder is not None:
       
  1238                     infos["executionOrder"] = executionOrder
       
  1239                 else:
       
  1240                     infos["executionOrder"] = 0
  1236                 infos["connectors"] = {"inputs":[],"outputs":[]}
  1241                 infos["connectors"] = {"inputs":[],"outputs":[]}
  1237                 for variable in instance.inputVariables.getVariable():
  1242                 for variable in instance.inputVariables.getVariable():
  1238                     connector = {}
  1243                     connector = {}
  1239                     connector["name"] = variable.getFormalParameter()
  1244                     connector["name"] = variable.getFormalParameter()
  1240                     connector["position"] = variable.connectionPointIn.getRelPosition()
  1245                     connector["position"] = variable.connectionPointIn.getRelPosition()
  1256                     infos["connectors"]["outputs"].append(connector)
  1261                     infos["connectors"]["outputs"].append(connector)
  1257             elif isinstance(instance, plcopen.inVariable):
  1262             elif isinstance(instance, plcopen.inVariable):
  1258                 infos["name"] = instance.getExpression()
  1263                 infos["name"] = instance.getExpression()
  1259                 infos["value_type"] = self.GetCurrentPouVarValueType(infos["name"])
  1264                 infos["value_type"] = self.GetCurrentPouVarValueType(infos["name"])
  1260                 infos["type"] = "input"
  1265                 infos["type"] = "input"
       
  1266                 executionOrder = instance.getExecutionOrderId()
       
  1267                 if executionOrder is not None:
       
  1268                     infos["executionOrder"] = executionOrder
       
  1269                 else:
       
  1270                     infos["executionOrder"] = 0
  1261                 infos["connector"] = {}
  1271                 infos["connector"] = {}
  1262                 infos["connector"]["position"] = instance.connectionPointOut.getRelPosition()
  1272                 infos["connector"]["position"] = instance.connectionPointOut.getRelPosition()
  1263                 infos["connector"]["negated"] = instance.getNegated()
  1273                 infos["connector"]["negated"] = instance.getNegated()
  1264                 infos["connector"]["edge"] = instance.getConnectorEdge()
  1274                 infos["connector"]["edge"] = instance.getConnectorEdge()
  1265             elif isinstance(instance, plcopen.outVariable):
  1275             elif isinstance(instance, plcopen.outVariable):
  1266                 infos["name"] = instance.getExpression()
  1276                 infos["name"] = instance.getExpression()
  1267                 infos["value_type"] = self.GetCurrentPouVarValueType(infos["name"])
  1277                 infos["value_type"] = self.GetCurrentPouVarValueType(infos["name"])
  1268                 infos["type"] = "output"
  1278                 infos["type"] = "output"
       
  1279                 executionOrder = instance.getExecutionOrderId()
       
  1280                 if executionOrder is not None:
       
  1281                     infos["executionOrder"] = executionOrder
       
  1282                 else:
       
  1283                     infos["executionOrder"] = 0
  1269                 infos["connector"] = {}
  1284                 infos["connector"] = {}
  1270                 infos["connector"]["position"] = instance.connectionPointIn.getRelPosition()
  1285                 infos["connector"]["position"] = instance.connectionPointIn.getRelPosition()
  1271                 infos["connector"]["negated"] = instance.getNegated()
  1286                 infos["connector"]["negated"] = instance.getNegated()
  1272                 infos["connector"]["edge"] = instance.getConnectorEdge()
  1287                 infos["connector"]["edge"] = instance.getConnectorEdge()
  1273                 infos["connector"]["links"] = []
  1288                 infos["connector"]["links"] = []
  1278                         infos["connector"]["links"].append(dic)
  1293                         infos["connector"]["links"].append(dic)
  1279             elif isinstance(instance, plcopen.inOutVariable):
  1294             elif isinstance(instance, plcopen.inOutVariable):
  1280                 infos["name"] = instance.getExpression()
  1295                 infos["name"] = instance.getExpression()
  1281                 infos["value_type"] = self.GetCurrentPouVarValueType(infos["name"])
  1296                 infos["value_type"] = self.GetCurrentPouVarValueType(infos["name"])
  1282                 infos["type"] = "inout"
  1297                 infos["type"] = "inout"
       
  1298                 executionOrder = instance.getExecutionOrderId()
       
  1299                 if executionOrder is not None:
       
  1300                     infos["executionOrder"] = executionOrder
       
  1301                 else:
       
  1302                     infos["executionOrder"] = 0
  1283                 infos["connectors"] = {"input":{},"output":{}}
  1303                 infos["connectors"] = {"input":{},"output":{}}
  1284                 infos["connectors"]["output"]["position"] = instance.connectionPointOut.getRelPosition()
  1304                 infos["connectors"]["output"]["position"] = instance.connectionPointOut.getRelPosition()
  1285                 infos["connectors"]["output"]["negated"] = instance.getNegatedOut()
  1305                 infos["connectors"]["output"]["negated"] = instance.getNegatedOut()
  1286                 infos["connectors"]["output"]["edge"] = instance.getOutputEdge()
  1306                 infos["connectors"]["output"]["edge"] = instance.getOutputEdge()
  1287                 infos["connectors"]["input"]["position"] = instance.connectionPointIn.getRelPosition()
  1307                 infos["connectors"]["input"]["position"] = instance.connectionPointIn.getRelPosition()
  1295                         infos["connectors"]["input"]["links"].append(dic)
  1315                         infos["connectors"]["input"]["links"].append(dic)
  1296             elif isinstance(instance, plcopen.continuation):
  1316             elif isinstance(instance, plcopen.continuation):
  1297                 infos["name"] = instance.getName()
  1317                 infos["name"] = instance.getName()
  1298                 infos["value_type"] = self.GetCurrentPouVarValueType(infos["name"])
  1318                 infos["value_type"] = self.GetCurrentPouVarValueType(infos["name"])
  1299                 infos["type"] = "continuation"
  1319                 infos["type"] = "continuation"
       
  1320                 executionOrder = instance.getExecutionOrderId()
       
  1321                 if executionOrder is not None:
       
  1322                     infos["executionOrder"] = executionOrder
       
  1323                 else:
       
  1324                     infos["executionOrder"] = 0
  1300                 infos["connector"] = {}
  1325                 infos["connector"] = {}
  1301                 infos["connector"]["position"] = instance.connectionPointOut.getRelPosition()
  1326                 infos["connector"]["position"] = instance.connectionPointOut.getRelPosition()
  1302             elif isinstance(instance, plcopen.connector):
  1327             elif isinstance(instance, plcopen.connector):
  1303                 infos["name"] = instance.getName()
  1328                 infos["name"] = instance.getName()
  1304                 infos["value_type"] = self.GetCurrentPouVarValueType(infos["name"])
  1329                 infos["value_type"] = self.GetCurrentPouVarValueType(infos["name"])
  1305                 infos["type"] = "connection"
  1330                 infos["type"] = "connection"
       
  1331                 executionOrder = instance.getExecutionOrderId()
       
  1332                 if executionOrder is not None:
       
  1333                     infos["executionOrder"] = executionOrder
       
  1334                 else:
       
  1335                     infos["executionOrder"] = 0
  1306                 infos["connector"] = {}
  1336                 infos["connector"] = {}
  1307                 infos["connector"]["position"] = instance.connectionPointIn.getRelPosition()
  1337                 infos["connector"]["position"] = instance.connectionPointIn.getRelPosition()
  1308                 infos["connector"]["links"] = []
  1338                 infos["connector"]["links"] = []
  1309                 connections = instance.connectionPointIn.getConnections()
  1339                 connections = instance.connectionPointIn.getConnections()
  1310                 if connections:
  1340                 if connections:
  1331                     for link in connection.getConnections():
  1361                     for link in connection.getConnections():
  1332                         dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
  1362                         dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
  1333                         connector["links"].append(dic)
  1363                         connector["links"].append(dic)
  1334                     infos["connectors"].append(connector)
  1364                     infos["connectors"].append(connector)
  1335             elif isinstance(instance, plcopen.contact):
  1365             elif isinstance(instance, plcopen.contact):
       
  1366                 infos["name"] = instance.getVariable()
  1336                 infos["type"] = "contact"
  1367                 infos["type"] = "contact"
  1337                 infos["name"] = instance.getVariable()
  1368                 executionOrder = instance.getExecutionOrderId()
       
  1369                 if executionOrder is not None:
       
  1370                     infos["executionOrder"] = executionOrder
       
  1371                 else:
       
  1372                     infos["executionOrder"] = 0
  1338                 infos["negated"] = instance.getNegated()
  1373                 infos["negated"] = instance.getNegated()
  1339                 infos["edge"] = instance.getContactEdge()
  1374                 infos["edge"] = instance.getContactEdge()
  1340                 infos["connectors"] = {"input":{},"output":{}}
  1375                 infos["connectors"] = {"input":{},"output":{}}
  1341                 infos["connectors"]["input"]["position"] = instance.connectionPointIn.getRelPosition()
  1376                 infos["connectors"]["input"]["position"] = instance.connectionPointIn.getRelPosition()
  1342                 infos["connectors"]["input"]["links"] = []
  1377                 infos["connectors"]["input"]["links"] = []
  1345                     for link in connections:
  1380                     for link in connections:
  1346                         dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
  1381                         dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
  1347                         infos["connectors"]["input"]["links"].append(dic)
  1382                         infos["connectors"]["input"]["links"].append(dic)
  1348                 infos["connectors"]["output"]["position"] = instance.connectionPointOut.getRelPosition()
  1383                 infos["connectors"]["output"]["position"] = instance.connectionPointOut.getRelPosition()
  1349             elif isinstance(instance, plcopen.coil):
  1384             elif isinstance(instance, plcopen.coil):
       
  1385                 infos["name"] = instance.getVariable()
  1350                 infos["type"] = "coil"
  1386                 infos["type"] = "coil"
  1351                 infos["name"] = instance.getVariable()
  1387                 executionOrder = instance.getExecutionOrderId()
       
  1388                 if executionOrder is not None:
       
  1389                     infos["executionOrder"] = executionOrder
       
  1390                 else:
       
  1391                     infos["executionOrder"] = 0
  1352                 infos["negated"] = instance.getNegated()
  1392                 infos["negated"] = instance.getNegated()
  1353                 infos["storage"] = instance.getCoilStorage()
  1393                 infos["storage"] = instance.getCoilStorage()
  1354                 infos["connectors"] = {"input":{},"output":{}}
  1394                 infos["connectors"] = {"input":{},"output":{}}
  1355                 infos["connectors"]["input"]["position"] = instance.connectionPointIn.getRelPosition()
  1395                 infos["connectors"]["input"]["position"] = instance.connectionPointIn.getRelPosition()
  1356                 infos["connectors"]["input"]["links"] = []
  1396                 infos["connectors"]["input"]["links"] = []
  1359                     for link in connections:
  1399                     for link in connections:
  1360                         dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
  1400                         dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
  1361                         infos["connectors"]["input"]["links"].append(dic)
  1401                         infos["connectors"]["input"]["links"].append(dic)
  1362                 infos["connectors"]["output"]["position"] = instance.connectionPointOut.getRelPosition()
  1402                 infos["connectors"]["output"]["position"] = instance.connectionPointOut.getRelPosition()
  1363             elif isinstance(instance, plcopen.step):
  1403             elif isinstance(instance, plcopen.step):
       
  1404                 infos["name"] = instance.getName()
  1364                 infos["type"] = "step"
  1405                 infos["type"] = "step"
  1365                 infos["name"] = instance.getName()
       
  1366                 infos["initial"] = instance.getInitialStep()
  1406                 infos["initial"] = instance.getInitialStep()
  1367                 infos["connectors"] = {}
  1407                 infos["connectors"] = {}
  1368                 if instance.connectionPointIn:
  1408                 if instance.connectionPointIn:
  1369                     infos["connectors"]["input"] = {}
  1409                     infos["connectors"]["input"] = {}
  1370                     infos["connectors"]["input"]["position"] = instance.connectionPointIn.getRelPosition()
  1410                     infos["connectors"]["input"]["position"] = instance.connectionPointIn.getRelPosition()
  1468                         dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
  1508                         dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
  1469                         infos["connector"]["links"].append(dic)
  1509                         infos["connector"]["links"].append(dic)
  1470             return infos
  1510             return infos
  1471         return False
  1511         return False
  1472     
  1512     
       
  1513     def ClearCurrentExecutionOrder(self):
       
  1514         self.GetCurrentElementEditing().resetExecutionOrder()
       
  1515     
       
  1516     def ResetCurrentExecutionOrder(self):
       
  1517         self.GetCurrentElementEditing().compileExecutionOrder()
       
  1518     
  1473     # Return the variable type of the given pou
  1519     # Return the variable type of the given pou
  1474     def GetCurrentPouVarValueType(self, varname):
  1520     def GetCurrentPouVarValueType(self, varname):
  1475         current_name = self.ElementsOpened[self.CurrentElementEditing]
  1521         current_name = self.ElementsOpened[self.CurrentElementEditing]
  1476         words = current_name.split("::")
  1522         words = current_name.split("::")
  1477         if words[0] in ["P","T","A"]:
  1523         if words[0] in ["P","T","A"]:
  1531         for param, value in infos.items():
  1577         for param, value in infos.items():
  1532             if param == "name":
  1578             if param == "name":
  1533                 block.setInstanceName(value)
  1579                 block.setInstanceName(value)
  1534             elif param == "type":
  1580             elif param == "type":
  1535                 block.setTypeName(value)
  1581                 block.setTypeName(value)
       
  1582             elif param == "executionOrder" and block.getExecutionOrderId() != value:
       
  1583                 self.GetCurrentElementEditing().setElementExecutionOrder(block, value)
  1536             elif param == "height":
  1584             elif param == "height":
  1537                 block.setHeight(value)
  1585                 block.setHeight(value)
  1538             elif param == "width":
  1586             elif param == "width":
  1539                 block.setWidth(value)
  1587                 block.setWidth(value)
  1540             elif param == "x":
  1588             elif param == "x":
  1584     def SetCurrentElementEditingVariableInfos(self, id, infos):
  1632     def SetCurrentElementEditingVariableInfos(self, id, infos):
  1585         variable = self.GetCurrentElementEditing().getInstance(id)
  1633         variable = self.GetCurrentElementEditing().getInstance(id)
  1586         for param, value in infos.items():
  1634         for param, value in infos.items():
  1587             if param == "name":
  1635             if param == "name":
  1588                 variable.setExpression(value)    
  1636                 variable.setExpression(value)    
       
  1637             elif param == "executionOrder" and variable.getExecutionOrderId() != value:
       
  1638                 self.GetCurrentElementEditing().setElementExecutionOrder(variable, value)
  1589             elif param == "height":
  1639             elif param == "height":
  1590                 variable.setHeight(value)
  1640                 variable.setHeight(value)
  1591             elif param == "width":
  1641             elif param == "width":
  1592                 variable.setWidth(value)
  1642                 variable.setWidth(value)
  1593             elif param == "x":
  1643             elif param == "x":