plcopen/plcopen.py
changeset 1534 d2abe4109467
parent 1406 82db84fe88ea
child 1556 32e9d0ef30dc
equal deleted inserted replaced
1532:a191e137a5bb 1534:d2abe4109467
  1557     setattr(cls, "Search", Search)
  1557     setattr(cls, "Search", Search)
  1558 
  1558 
  1559 cls = PLCOpenParser.GetElementClass("body")
  1559 cls = PLCOpenParser.GetElementClass("body")
  1560 if cls:
  1560 if cls:
  1561     cls.currentExecutionOrderId = 0
  1561     cls.currentExecutionOrderId = 0
  1562     
  1562     checkedBlocksDict = {}
  1563     def resetcurrentExecutionOrderId(self):
  1563     def resetcurrentExecutionOrderId(self):
  1564         object.__setattr__(self, "currentExecutionOrderId", 0)
  1564         object.__setattr__(self, "currentExecutionOrderId", 0)
  1565     setattr(cls, "resetcurrentExecutionOrderId", resetcurrentExecutionOrderId)
  1565     setattr(cls, "resetcurrentExecutionOrderId", resetcurrentExecutionOrderId)
  1566     
  1566     
  1567     def getnewExecutionOrderId(self):
  1567     def getnewExecutionOrderId(self):
  1574             for element in self.content.getcontent():
  1574             for element in self.content.getcontent():
  1575                 if not isinstance(element, (PLCOpenParser.GetElementClass("comment", "commonObjects"), 
  1575                 if not isinstance(element, (PLCOpenParser.GetElementClass("comment", "commonObjects"), 
  1576                                             PLCOpenParser.GetElementClass("connector", "commonObjects"), 
  1576                                             PLCOpenParser.GetElementClass("connector", "commonObjects"), 
  1577                                             PLCOpenParser.GetElementClass("continuation", "commonObjects"))):
  1577                                             PLCOpenParser.GetElementClass("continuation", "commonObjects"))):
  1578                     element.setexecutionOrderId(0)
  1578                     element.setexecutionOrderId(0)
       
  1579             checkedBlocksDict.clear()
  1579         else:
  1580         else:
  1580             raise TypeError, _("Can only generate execution order on FBD networks!")
  1581             raise TypeError, _("Can only generate execution order on FBD networks!")
  1581     setattr(cls, "resetexecutionOrder", resetexecutionOrder)
  1582     setattr(cls, "resetexecutionOrder", resetexecutionOrder)
  1582     
  1583     
  1583     def compileexecutionOrder(self):
  1584     def compileexecutionOrder(self):
  1596     
  1597     
  1597     def compileelementExecutionOrder(self, link):
  1598     def compileelementExecutionOrder(self, link):
  1598         if self.content.getLocalTag() == "FBD":
  1599         if self.content.getLocalTag() == "FBD":
  1599             localid = link.getrefLocalId()
  1600             localid = link.getrefLocalId()
  1600             instance = self.getcontentInstance(localid)
  1601             instance = self.getcontentInstance(localid)
       
  1602             checkedBlocksDict[localid] = True
  1601             if isinstance(instance, PLCOpenParser.GetElementClass("block", "fbdObjects")) and instance.getexecutionOrderId() == 0:
  1603             if isinstance(instance, PLCOpenParser.GetElementClass("block", "fbdObjects")) and instance.getexecutionOrderId() == 0:
  1602                 for variable in instance.inputVariables.getvariable():
  1604                 for variable in instance.inputVariables.getvariable():
  1603                     connections = variable.connectionPointIn.getconnections()
  1605                     connections = variable.connectionPointIn.getconnections()
  1604                     if connections and len(connections) == 1:
  1606                     if connections and len(connections) == 1:
  1605                         self.compileelementExecutionOrder(connections[0])
  1607                         if (checkedBlocksDict.has_key(connections[0].getrefLocalId()) == False):
  1606                 instance.setexecutionOrderId(self.getnewExecutionOrderId())
  1608                             self.compileelementExecutionOrder(connections[0])
       
  1609                 if instance.getexecutionOrderId() == 0:
       
  1610                     instance.setexecutionOrderId(self.getnewExecutionOrderId())
  1607             elif isinstance(instance, PLCOpenParser.GetElementClass("continuation", "commonObjects")) and instance.getexecutionOrderId() == 0:
  1611             elif isinstance(instance, PLCOpenParser.GetElementClass("continuation", "commonObjects")) and instance.getexecutionOrderId() == 0:
  1608                 name = instance.getname()
  1612                 name = instance.getname()
  1609                 for tmp_instance in self.getcontentInstances():
  1613                 for tmp_instance in self.getcontentInstances():
  1610                     if isinstance(tmp_instance, PLCOpenParser.GetElementClass("connector", "commonObjects")) and tmp_instance.getname() == name and tmp_instance.getexecutionOrderId() == 0:
  1614                     if isinstance(tmp_instance, PLCOpenParser.GetElementClass("connector", "commonObjects")) and tmp_instance.getname() == name and tmp_instance.getexecutionOrderId() == 0:
  1611                         connections = tmp_instance.connectionPointIn.getconnections()
  1615                         connections = tmp_instance.connectionPointIn.getconnections()