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() |