plcopen/plcopen.py
changeset 67 3a1b0afdaf84
parent 63 04a02b4b2a57
child 68 66308e07402c
equal deleted inserted replaced
66:fd138fc77510 67:3a1b0afdaf84
    21 #You should have received a copy of the GNU General Public
    21 #You should have received a copy of the GNU General Public
    22 #License along with this library; if not, write to the Free Software
    22 #License along with this library; if not, write to the Free Software
    23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    24 
    24 
    25 from xmlclass import *
    25 from xmlclass import *
       
    26 from types import *
    26 import os, sys
    27 import os, sys
    27 
    28 
    28 """
    29 """
    29 Dictionary that makes the relation between var names in plcopen and displayed values
    30 Dictionary that makes the relation between var names in plcopen and displayed values
    30 """
    31 """
    50     if os.path.isfile(os.path.join(path, "plcopen/TC6_XML_V10_B.xsd")):
    51     if os.path.isfile(os.path.join(path, "plcopen/TC6_XML_V10_B.xsd")):
    51         base_folder = path
    52         base_folder = path
    52 GenerateClassesFromXSD(os.path.join(base_folder, "plcopen/TC6_XML_V10_B.xsd"))
    53 GenerateClassesFromXSD(os.path.join(base_folder, "plcopen/TC6_XML_V10_B.xsd"))
    53 CreateClasses(PLCOpenClasses, PLCOpenTypes)
    54 CreateClasses(PLCOpenClasses, PLCOpenTypes)
    54 
    55 
    55 if "dataType" in PLCOpenClasses:
    56 cls = PLCOpenClasses.get("dataType", None)
    56     cls = PLCOpenClasses["dataType"]
    57 if cls:
    57     cls.value = None
    58     cls.value = None
    58     
    59     
    59     def getValue(self):
    60     def getValue(self):
    60         return self.value
    61         return self.value
    61     setattr(cls, "getValue", getValue)
    62     setattr(cls, "getValue", getValue)
    63     def setValue(self, value):
    64     def setValue(self, value):
    64         self.value = value
    65         self.value = value
    65     setattr(cls, "setValue", setValue)
    66     setattr(cls, "setValue", setValue)
    66     
    67     
    67     def loadXMLTree(self, tree):
    68     def loadXMLTree(self, tree):
    68         self.value = tree.childNodes[1].nodeName
    69         node = tree.childNodes[1]
       
    70         if node.nodeName == "derived":
       
    71             self.value = PLCOpenClasses["derived"]()
       
    72             self.value.loadXMLTree(node)
       
    73         else:
       
    74             self.value = node.nodeName
    69     setattr(cls, "loadXMLTree", loadXMLTree)
    75     setattr(cls, "loadXMLTree", loadXMLTree)
    70     
    76     
    71     def generateXMLText(self, name, indent, extras = {}):
    77     def generateXMLText(self, name, indent, extras = {}):
    72         ind1, ind2 = getIndent(indent, name)
    78         ind1, ind2 = getIndent(indent, name)
    73         text = ind1 + "<%s>\n"%name
    79         text = ind1 + "<%s>\n"%name
    74         ind3, ind4 = getIndent(indent + 1, self.value)
    80         if isinstance(self.value, (StringType, UnicodeType)):
    75         text += ind3 + "<%s/>\n"%self.value
    81             ind3, ind4 = getIndent(indent + 1, self.value)
       
    82             text += ind3 + "<%s/>\n"%self.value
       
    83         else:
       
    84             text += self.value.generateXMLText("derived", indent + 1)
    76         text += ind1 + "</%s>\n"%name
    85         text += ind1 + "</%s>\n"%name
    77         return text
    86         return text
    78     setattr(cls, "generateXMLText", generateXMLText)
    87     setattr(cls, "generateXMLText", generateXMLText)
    79 
    88 
    80 if "formattedText" in PLCOpenClasses:
    89 cls = PLCOpenClasses.get("formattedText", None)
    81     cls = PLCOpenClasses["formattedText"]
    90 if cls:
    82     cls.text = ""
    91     cls.text = ""
    83     
    92     
    84     def getText(self):
    93     def getText(self):
    85         return self.text
    94         return self.text
    86     setattr(cls, "getText", getText)
    95     setattr(cls, "getText", getText)
    96     setattr(cls, "loadXMLTree", loadXMLTree)
   105     setattr(cls, "loadXMLTree", loadXMLTree)
    97     
   106     
    98     def generateXMLText(self, name, indent, extras = {}):
   107     def generateXMLText(self, name, indent, extras = {}):
    99         ind1, ind2 = getIndent(indent, name)
   108         ind1, ind2 = getIndent(indent, name)
   100         if len(self.text.splitlines()) > 1:
   109         if len(self.text.splitlines()) > 1:
   101             text = ind1 + "<%s>\n"%name
   110             text = ind1 + "<%s>\n<![CDATA[\n"%name
   102             text += "%s\n"%self.text
   111             text += "%s\n"%self.text
   103             text += ind1 + "</%s>\n"%name
   112             text += "]]>\n" + ind1 + "</%s>\n"%name
   104             return text
   113             return text
   105         else:
   114         else:
   106             return ind1 + "<%s>%s</%s>\n"%(name, self.text, name)
   115             return ind1 + "<%s><![CDATA[%s]]></%s>\n"%(name, self.text, name)
   107     setattr(cls, "generateXMLText", generateXMLText)
   116     setattr(cls, "generateXMLText", generateXMLText)
   108     
   117     
   109     def updateElementName(self, old_name, new_name):
   118     def updateElementName(self, old_name, new_name):
   110         index = self.text.find(old_name)
   119         index = self.text.find(old_name)
   111         while index != -1:
   120         while index != -1:
   116             else:
   125             else:
   117                 self.text = self.text[:index] + new_name + self.text[index + len(old_name):]
   126                 self.text = self.text[:index] + new_name + self.text[index + len(old_name):]
   118                 index = self.text.find(old_name, index + len(new_name))
   127                 index = self.text.find(old_name, index + len(new_name))
   119     setattr(cls, "updateElementName", updateElementName)
   128     setattr(cls, "updateElementName", updateElementName)
   120     
   129     
   121 if "project" in PLCOpenClasses:
   130 cls = PLCOpenClasses.get("project", None)
   122     cls = PLCOpenClasses["project"]
   131 if cls:
   123     cls.singleLineAttributes = False
   132     cls.singleLineAttributes = False
   124     
   133     
   125     def getFileHeader(self):
   134     def getFileHeader(self):
   126         fileheader = {}
   135         fileheader = {}
   127         fileheader["companyName"] = self.fileHeader.getCompanyName()
   136         fileheader["companyName"] = self.fileHeader.getCompanyName()
   250             pou.updateElementName(old_name, new_name)
   259             pou.updateElementName(old_name, new_name)
   251         for configuration in self.instances.configurations.getConfiguration():
   260         for configuration in self.instances.configurations.getConfiguration():
   252             configuration.updateElementName(old_name, new_name)
   261             configuration.updateElementName(old_name, new_name)
   253     setattr(cls, "updateElementName", updateElementName)
   262     setattr(cls, "updateElementName", updateElementName)
   254 
   263 
   255 PLCOpenClasses["project_fileHeader"].singleLineAttributes = False
   264 cls = PLCOpenClasses.get("project_fileHeader", None)
   256 
   265 if cls:
   257 if "configurations_configuration" in PLCOpenClasses:
   266     cls.singleLineAttributes = False
   258     cls = PLCOpenClasses["configurations_configuration"]
   267 
   259     
   268 cls = PLCOpenClasses.get("configurations_configuration", None)
       
   269 if cls:
   260     def updateElementName(self, old_name, new_name):
   270     def updateElementName(self, old_name, new_name):
   261         for resource in self.getResource():
   271         for resource in self.getResource():
   262             resource.updateElementName(old_name, new_name)
   272             resource.updateElementName(old_name, new_name)
   263     setattr(cls, "updateElementName", updateElementName)
   273     setattr(cls, "updateElementName", updateElementName)
   264 
   274 
   265 
   275 
   266 if "configuration_resource" in PLCOpenClasses:
   276 cls = PLCOpenClasses.get("configuration_resource", None)
   267     cls = PLCOpenClasses["configuration_resource"]
   277 if cls:
   268     
       
   269     def updateElementName(self, old_name, new_name):
   278     def updateElementName(self, old_name, new_name):
   270         for instance in self.getPouInstance():
   279         for instance in self.getPouInstance():
   271             instance.updateElementName(old_name, new_name)
   280             instance.updateElementName(old_name, new_name)
   272         for task in self.getTask():
   281         for task in self.getTask():
   273             task.updateElementName(old_name, new_name)
   282             task.updateElementName(old_name, new_name)
   274     setattr(cls, "updateElementName", updateElementName)
   283     setattr(cls, "updateElementName", updateElementName)
   275 
   284 
   276 if "resource_task" in PLCOpenClasses:
   285 cls = PLCOpenClasses.get("resource_task", None)
   277     cls = PLCOpenClasses["resource_task"]
   286 if cls:
   278     
       
   279     def updateElementName(self, old_name, new_name):
   287     def updateElementName(self, old_name, new_name):
   280         if self.single == old_name:
   288         if self.single == old_name:
   281             self.single = new_name
   289             self.single = new_name
   282         for instance in self.getPouInstance():
   290         for instance in self.getPouInstance():
   283             instance.updateElementName(old_name, new_name)
   291             instance.updateElementName(old_name, new_name)
   284     setattr(cls, "updateElementName", updateElementName)
   292     setattr(cls, "updateElementName", updateElementName)
   285 
   293 
   286 if "pouInstance" in PLCOpenClasses:
   294 cls = PLCOpenClasses.get("pouInstance", None)
   287     cls = PLCOpenClasses["pouInstance"]
   295 if cls:
   288     
       
   289     def updateElementName(self, old_name, new_name):
   296     def updateElementName(self, old_name, new_name):
   290         if self.type == old_name:
   297         if self.type == old_name:
   291             self.type = new_name
   298             self.type = new_name
   292     setattr(cls, "updateElementName", updateElementName)
   299     setattr(cls, "updateElementName", updateElementName)
   293 
   300 
   294 if "project_types" in PLCOpenClasses:
   301 cls = PLCOpenClasses.get("project_types", None)
   295     cls = PLCOpenClasses["project_types"]
   302 if cls:
   296 
       
   297     def getPouElements(self):
   303     def getPouElements(self):
   298         return self.pous.getPou()
   304         return self.pous.getPou()
   299     setattr(cls, "getPouElements", getPouElements)
   305     setattr(cls, "getPouElements", getPouElements)
   300     
   306     
   301     def getPouElement(self, name):
   307     def getPouElement(self, name):
   373 
   379 
   374 def getText(self):
   380 def getText(self):
   375     return self.body.getText()
   381     return self.body.getText()
   376 setattr(cls, "getText", getText)
   382 setattr(cls, "getText", getText)
   377 
   383 
   378 if "pous_pou" in PLCOpenClasses:
   384 cls = PLCOpenClasses.get("pous_pou", None)
   379     cls = PLCOpenClasses["pous_pou"]
   385 if cls:
   380 
       
   381     setattr(cls, "setBodyType", setBodyType)
   386     setattr(cls, "setBodyType", setBodyType)
   382     setattr(cls, "getBodyType", getBodyType)
   387     setattr(cls, "getBodyType", getBodyType)
   383     setattr(cls, "addInstance", addInstance)
   388     setattr(cls, "addInstance", addInstance)
   384     setattr(cls, "getInstances", getInstances)
   389     setattr(cls, "getInstances", getInstances)
   385     setattr(cls, "getInstance", getInstance)
   390     setattr(cls, "getInstance", getInstance)
   403         self.interface.setContent([])
   408         self.interface.setContent([])
   404         for vartype, varlist in vars:
   409         for vartype, varlist in vars:
   405             self.interface.appendContent(VarTypes[vartype], varlist)
   410             self.interface.appendContent(VarTypes[vartype], varlist)
   406     setattr(cls, "setVars", setVars)
   411     setattr(cls, "setVars", setVars)
   407     
   412     
       
   413     def addPouVar(self, type, name):
       
   414         content = self.interface.getContent()
       
   415         if len(content) == 0 or content[-1]["name"] != "localVars":
       
   416             self.interface.appendContent("localVars", PLCOpenClasses["varList"]())
       
   417         var = PLCOpenClasses["varListPlain_variable"]()
       
   418         var.setName(name)
       
   419         var_type = PLCOpenClasses["dataType"]()
       
   420         derived_type = PLCOpenClasses["derived"]()
       
   421         derived_type.setName(type)
       
   422         var_type.setValue(derived_type)
       
   423         var.setType(var_type)
       
   424         content[-1]["value"].appendVariable(var)
       
   425     setattr(cls, "addPouVar", addPouVar)
       
   426     
       
   427     def removePouVar(self, type, name):
       
   428         content = self.interface.getContent()
       
   429         for varlist in content:
       
   430             variables = varlist["value"].getVariable()
       
   431             for var in variables:
       
   432                 if var.getName() == name:
       
   433                     var_type = var.getType().getValue()
       
   434                     if isinstance(var_type, PLCOpenClasses["derived"]) and var_type.getName() == type:
       
   435                         variables.remove(var)
       
   436                         break
       
   437             if len(varlist["value"].getVariable()) == 0:
       
   438                 content.remove(varlist)
       
   439                 break
       
   440     setattr(cls, "removePouVar", removePouVar)
       
   441         
   408     def addTransition(self, name, type):
   442     def addTransition(self, name, type):
   409         if not self.transitions:
   443         if not self.transitions:
   410             self.addTransitions()
   444             self.addTransitions()
   411             self.transitions.setTransition([])
   445             self.transitions.setTransition([])
   412         transition = PLCOpenClasses["transitions_transition"]()
   446         transition = PLCOpenClasses["transitions_transition"]()
   487             action.updateElementName(old_name, new_name)
   521             action.updateElementName(old_name, new_name)
   488         for transition in self.getTransitionList():
   522         for transition in self.getTransitionList():
   489             transition.updateElementName(old_name, new_name)
   523             transition.updateElementName(old_name, new_name)
   490     setattr(cls, "updateElementName", updateElementName)
   524     setattr(cls, "updateElementName", updateElementName)
   491 
   525 
   492 if "transitions_transition" in PLCOpenClasses:
   526 cls = PLCOpenClasses.get("transitions_transition", None)
   493     cls = PLCOpenClasses["transitions_transition"]
   527 if cls:
   494 
       
   495     setattr(cls, "setBodyType", setBodyType)
   528     setattr(cls, "setBodyType", setBodyType)
   496     setattr(cls, "getBodyType", getBodyType)
   529     setattr(cls, "getBodyType", getBodyType)
   497     setattr(cls, "addInstance", addInstance)
   530     setattr(cls, "addInstance", addInstance)
   498     setattr(cls, "getInstances", getInstances)
   531     setattr(cls, "getInstances", getInstances)
   499     setattr(cls, "getInstance", getInstance)
   532     setattr(cls, "getInstance", getInstance)
   505 
   538 
   506     def updateElementName(self, old_name, new_name):
   539     def updateElementName(self, old_name, new_name):
   507         self.body.updateElementName(old_name, new_name)
   540         self.body.updateElementName(old_name, new_name)
   508     setattr(cls, "updateElementName", updateElementName)
   541     setattr(cls, "updateElementName", updateElementName)
   509 
   542 
   510 if "actions_action" in PLCOpenClasses:
   543 cls = PLCOpenClasses.get("actions_action", None)
   511     cls = PLCOpenClasses["actions_action"]
   544 if cls:
   512 
       
   513     setattr(cls, "setBodyType", setBodyType)
   545     setattr(cls, "setBodyType", setBodyType)
   514     setattr(cls, "getBodyType", getBodyType)
   546     setattr(cls, "getBodyType", getBodyType)
   515     setattr(cls, "addInstance", addInstance)
   547     setattr(cls, "addInstance", addInstance)
   516     setattr(cls, "getInstances", getInstances)
   548     setattr(cls, "getInstances", getInstances)
   517     setattr(cls, "getInstance", getInstance)
   549     setattr(cls, "getInstance", getInstance)
   523 
   555 
   524     def updateElementName(self, old_name, new_name):
   556     def updateElementName(self, old_name, new_name):
   525         self.body.updateElementName(old_name, new_name)
   557         self.body.updateElementName(old_name, new_name)
   526     setattr(cls, "updateElementName", updateElementName)
   558     setattr(cls, "updateElementName", updateElementName)
   527 
   559 
   528 if "body" in PLCOpenClasses:
   560 cls = PLCOpenClasses.get("body", None)
   529     cls = PLCOpenClasses["body"]
   561 if cls:
   530     
       
   531     def appendContentInstance(self, name, instance):
   562     def appendContentInstance(self, name, instance):
   532         if self.content["name"] in ["LD","FBD","SFC"]:
   563         if self.content["name"] in ["LD","FBD","SFC"]:
   533             self.content["value"].appendContent(name, instance)
   564             self.content["value"].appendContent(name, instance)
   534         else:
   565         else:
   535             raise TypeError, "%s body don't have instances!"%self.content["name"]
   566             raise TypeError, "%s body don't have instances!"%self.content["name"]
   622     self.position.setX(x)
   653     self.position.setX(x)
   623     
   654     
   624 def setY(self, y):
   655 def setY(self, y):
   625     self.position.setY(y)
   656     self.position.setY(y)
   626 
   657 
   627 if "comment" in PLCOpenClasses:
   658 cls = PLCOpenClasses.get("comment", None)
   628     cls = PLCOpenClasses["comment"]
   659 if cls:
   629     setattr(cls, "getX", getX)
   660     setattr(cls, "getX", getX)
   630     setattr(cls, "getY", getY)
   661     setattr(cls, "getY", getY)
   631     setattr(cls, "setX", setX)
   662     setattr(cls, "setX", setX)
   632     setattr(cls, "setY", setY)
   663     setattr(cls, "setY", setY)
   633 
   664 
   641     
   672     
   642     def updateElementName(self, old_name, new_name):
   673     def updateElementName(self, old_name, new_name):
   643         self.content.updateElementName(old_name, new_name)
   674         self.content.updateElementName(old_name, new_name)
   644     setattr(cls, "updateElementName", updateElementName)
   675     setattr(cls, "updateElementName", updateElementName)
   645 
   676 
   646 if "block" in PLCOpenClasses:
   677 cls = PLCOpenClasses.get("block", None)
   647     cls = PLCOpenClasses["block"]
   678 if cls:
   648     setattr(cls, "getX", getX)
   679     setattr(cls, "getX", getX)
   649     setattr(cls, "getY", getY)
   680     setattr(cls, "getY", getY)
   650     setattr(cls, "setX", setX)
   681     setattr(cls, "setX", setX)
   651     setattr(cls, "setY", setY)
   682     setattr(cls, "setY", setY)
   652 
   683 
   653     def updateElementName(self, old_name, new_name):
   684     def updateElementName(self, old_name, new_name):
   654         if self.typeName == old_name:
   685         if self.typeName == old_name:
   655             self.typeName = new_name
   686             self.typeName = new_name
   656     setattr(cls, "updateElementName", updateElementName)
   687     setattr(cls, "updateElementName", updateElementName)
   657 
   688 
   658 if "inputVariables_variable" in PLCOpenClasses:
   689 cls = PLCOpenClasses.get("inputVariables_variable", None)
   659     cls = PLCOpenClasses["inputVariables_variable"]
   690 if cls:
   660 
       
   661     def setConnectorEdge(self, edge):
   691     def setConnectorEdge(self, edge):
   662         if not self.edge:
   692         if not self.edge:
   663             self.edge = PLCOpenClasses["edgeModifierType"]()
   693             self.edge = PLCOpenClasses["edgeModifierType"]()
   664         self.edge.setValue(edge)
   694         self.edge.setValue(edge)
   665     setattr(cls, "setConnectorEdge", setConnectorEdge)
   695     setattr(cls, "setConnectorEdge", setConnectorEdge)
   668         if self.edge:
   698         if self.edge:
   669             return self.edge.getValue()
   699             return self.edge.getValue()
   670         return None
   700         return None
   671     setattr(cls, "getConnectorEdge", getConnectorEdge)
   701     setattr(cls, "getConnectorEdge", getConnectorEdge)
   672 
   702 
   673 if "outputVariables_variable" in PLCOpenClasses:
   703 cls = PLCOpenClasses.get("outputVariables_variable", None)
   674     cls = PLCOpenClasses["outputVariables_variable"]
   704 if cls:
   675     
       
   676     def setConnectorEdge(self, edge):
   705     def setConnectorEdge(self, edge):
   677         if not self.edge:
   706         if not self.edge:
   678             self.edge = PLCOpenClasses["edgeModifierType"]()
   707             self.edge = PLCOpenClasses["edgeModifierType"]()
   679         self.edge.setValue(edge)
   708         self.edge.setValue(edge)
   680     setattr(cls, "setConnectorEdge", setConnectorEdge)
   709     setattr(cls, "setConnectorEdge", setConnectorEdge)
   683         if self.edge:
   712         if self.edge:
   684             return self.edge.getValue()
   713             return self.edge.getValue()
   685         return None
   714         return None
   686     setattr(cls, "getConnectorEdge", getConnectorEdge)
   715     setattr(cls, "getConnectorEdge", getConnectorEdge)
   687 
   716 
   688 if "leftPowerRail" in PLCOpenClasses:
   717 cls = PLCOpenClasses.get("leftPowerRail", None)
   689     cls = PLCOpenClasses["leftPowerRail"]
   718 if cls:
   690     setattr(cls, "getX", getX)
   719     setattr(cls, "getX", getX)
   691     setattr(cls, "getY", getY)
   720     setattr(cls, "getY", getY)
   692     setattr(cls, "setX", setX)
   721     setattr(cls, "setX", setX)
   693     setattr(cls, "setY", setY)
   722     setattr(cls, "setY", setY)
   694 
   723 
   695     def updateElementName(self, old_name, new_name):
   724     def updateElementName(self, old_name, new_name):
   696         pass
   725         pass
   697     setattr(cls, "updateElementName", updateElementName)
   726     setattr(cls, "updateElementName", updateElementName)
   698 
   727 
   699 if "contact" in PLCOpenClasses:
   728 cls = PLCOpenClasses.get("rightPowerRail", None)
   700     cls = PLCOpenClasses["contact"]
   729 if cls:
       
   730     setattr(cls, "getX", getX)
       
   731     setattr(cls, "getY", getY)
       
   732     setattr(cls, "setX", setX)
       
   733     setattr(cls, "setY", setY)
       
   734     
       
   735     def updateElementName(self, old_name, new_name):
       
   736         pass
       
   737     setattr(cls, "updateElementName", updateElementName)
       
   738 
       
   739 cls = PLCOpenClasses.get("contact", None)
       
   740 if cls:
   701     setattr(cls, "getX", getX)
   741     setattr(cls, "getX", getX)
   702     setattr(cls, "getY", getY)
   742     setattr(cls, "getY", getY)
   703     setattr(cls, "setX", setX)
   743     setattr(cls, "setX", setX)
   704     setattr(cls, "setY", setY)
   744     setattr(cls, "setY", setY)
   705 
   745 
   718     def updateElementName(self, old_name, new_name):
   758     def updateElementName(self, old_name, new_name):
   719         if self.variable == old_name:
   759         if self.variable == old_name:
   720             self.variable = new_name
   760             self.variable = new_name
   721     setattr(cls, "updateElementName", updateElementName)
   761     setattr(cls, "updateElementName", updateElementName)
   722 
   762 
   723 if "coil" in PLCOpenClasses:
   763 cls = PLCOpenClasses.get("coil", None)
   724     cls = PLCOpenClasses["coil"]
   764 if cls:
   725     setattr(cls, "getX", getX)
   765     setattr(cls, "getX", getX)
   726     setattr(cls, "getY", getY)
   766     setattr(cls, "getY", getY)
   727     setattr(cls, "setX", setX)
   767     setattr(cls, "setX", setX)
   728     setattr(cls, "setY", setY)
   768     setattr(cls, "setY", setY)
   729     
   769     
   742     def updateElementName(self, old_name, new_name):
   782     def updateElementName(self, old_name, new_name):
   743         if self.variable == old_name:
   783         if self.variable == old_name:
   744             self.variable = new_name
   784             self.variable = new_name
   745     setattr(cls, "updateElementName", updateElementName)
   785     setattr(cls, "updateElementName", updateElementName)
   746 
   786 
   747 if "rightPowerRail" in PLCOpenClasses:
   787 cls = PLCOpenClasses.get("step", None)
   748     cls = PLCOpenClasses["rightPowerRail"]
   788 if cls:
   749     setattr(cls, "getX", getX)
   789     setattr(cls, "getX", getX)
   750     setattr(cls, "getY", getY)
   790     setattr(cls, "getY", getY)
   751     setattr(cls, "setX", setX)
   791     setattr(cls, "setX", setX)
   752     setattr(cls, "setY", setY)
   792     setattr(cls, "setY", setY)
   753     
   793 
   754     def updateElementName(self, old_name, new_name):
   794     def updateElementName(self, old_name, new_name):
   755         pass
   795         pass
   756     setattr(cls, "updateElementName", updateElementName)
   796     setattr(cls, "updateElementName", updateElementName)
   757 
   797 
   758 if "step" in PLCOpenClasses:
   798 cls = PLCOpenClasses.get("transition", None)
   759     cls = PLCOpenClasses["step"]
   799 if cls:
   760     setattr(cls, "getX", getX)
       
   761     setattr(cls, "getY", getY)
       
   762     setattr(cls, "setX", setX)
       
   763     setattr(cls, "setY", setY)
       
   764 
       
   765     def updateElementName(self, old_name, new_name):
       
   766         pass
       
   767     setattr(cls, "updateElementName", updateElementName)
       
   768 
       
   769 if "transition" in PLCOpenClasses:
       
   770     cls = PLCOpenClasses["transition"]
       
   771     setattr(cls, "getX", getX)
   800     setattr(cls, "getX", getX)
   772     setattr(cls, "getY", getY)
   801     setattr(cls, "getY", getY)
   773     setattr(cls, "setX", setX)
   802     setattr(cls, "setX", setX)
   774     setattr(cls, "setY", setY)
   803     setattr(cls, "setY", setY)
   775 
   804 
   889         return None
   918         return None
   890     setattr(cls, "getConnectionParameter", getConnectionParameter)
   919     setattr(cls, "getConnectionParameter", getConnectionParameter)
   891     
   920     
   892     setattr(cls, "addConnection", addConnection)    
   921     setattr(cls, "addConnection", addConnection)    
   893 
   922 
   894 if "selectionDivergence" in PLCOpenClasses:
   923 cls = PLCOpenClasses.get("selectionDivergence", None)
   895     cls = PLCOpenClasses["selectionDivergence"]
   924 if cls:
   896     setattr(cls, "getX", getX)
   925     setattr(cls, "getX", getX)
   897     setattr(cls, "getY", getY)
   926     setattr(cls, "getY", getY)
   898     setattr(cls, "setX", setX)
   927     setattr(cls, "setX", setX)
   899     setattr(cls, "setY", setY)
   928     setattr(cls, "setY", setY)
   900 
   929 
   901     def updateElementName(self, old_name, new_name):
   930     def updateElementName(self, old_name, new_name):
   902         pass
   931         pass
   903     setattr(cls, "updateElementName", updateElementName)
   932     setattr(cls, "updateElementName", updateElementName)
   904 
   933 
   905 if "selectionConvergence" in PLCOpenClasses:
   934 cls = PLCOpenClasses.get("selectionConvergence", None)
   906     cls = PLCOpenClasses["selectionConvergence"]
   935 if cls:
   907     setattr(cls, "getX", getX)
   936     setattr(cls, "getX", getX)
   908     setattr(cls, "getY", getY)
   937     setattr(cls, "getY", getY)
   909     setattr(cls, "setX", setX)
   938     setattr(cls, "setX", setX)
   910     setattr(cls, "setY", setY)
   939     setattr(cls, "setY", setY)
   911     
   940     
   912     def updateElementName(self, old_name, new_name):
   941     def updateElementName(self, old_name, new_name):
   913         pass
   942         pass
   914     setattr(cls, "updateElementName", updateElementName)
   943     setattr(cls, "updateElementName", updateElementName)
   915     
   944     
   916 if "simultaneousDivergence" in PLCOpenClasses:
   945 cls = PLCOpenClasses.get("simultaneousDivergence", None)
   917     cls = PLCOpenClasses["simultaneousDivergence"]
   946 if cls:
   918     setattr(cls, "getX", getX)
   947     setattr(cls, "getX", getX)
   919     setattr(cls, "getY", getY)
   948     setattr(cls, "getY", getY)
   920     setattr(cls, "setX", setX)
   949     setattr(cls, "setX", setX)
   921     setattr(cls, "setY", setY)
   950     setattr(cls, "setY", setY)
   922     
   951     
   923     def updateElementName(self, old_name, new_name):
   952     def updateElementName(self, old_name, new_name):
   924         pass
   953         pass
   925     setattr(cls, "updateElementName", updateElementName)
   954     setattr(cls, "updateElementName", updateElementName)
   926     
   955     
   927 if "simultaneousDivergence" in PLCOpenClasses:
   956 cls = PLCOpenClasses.get("simultaneousConvergence", None)
   928     cls = PLCOpenClasses["simultaneousConvergence"]
   957 if cls:
   929     setattr(cls, "getX", getX)
   958     setattr(cls, "getX", getX)
   930     setattr(cls, "getY", getY)
   959     setattr(cls, "getY", getY)
   931     setattr(cls, "setX", setX)
   960     setattr(cls, "setX", setX)
   932     setattr(cls, "setY", setY)
   961     setattr(cls, "setY", setY)
   933     
   962     
   934     def updateElementName(self, old_name, new_name):
   963     def updateElementName(self, old_name, new_name):
   935         pass
   964         pass
   936     setattr(cls, "updateElementName", updateElementName)
   965     setattr(cls, "updateElementName", updateElementName)
   937 
   966 
   938 if "jumpStep" in PLCOpenClasses:
   967 cls = PLCOpenClasses.get("jumpStep", None)
   939     cls = PLCOpenClasses["jumpStep"]
   968 if cls:
   940     setattr(cls, "getX", getX)
   969     setattr(cls, "getX", getX)
   941     setattr(cls, "getY", getY)
   970     setattr(cls, "getY", getY)
   942     setattr(cls, "setX", setX)
   971     setattr(cls, "setX", setX)
   943     setattr(cls, "setY", setY)
   972     setattr(cls, "setY", setY)
   944     
   973     
   945     def updateElementName(self, old_name, new_name):
   974     def updateElementName(self, old_name, new_name):
   946         pass
   975         pass
   947     setattr(cls, "updateElementName", updateElementName)
   976     setattr(cls, "updateElementName", updateElementName)
   948 
   977 
   949 
   978 cls = PLCOpenClasses.get("actionBlock_action", None)
   950 if "actionBlock_action" in PLCOpenClasses:
   979 if cls:
   951     cls = PLCOpenClasses["actionBlock_action"]
       
   952     
       
   953     def setQualifierValue(self, value):
   980     def setQualifierValue(self, value):
   954         if self.qualifier:
   981         if self.qualifier:
   955             self.qualifier.setValue(value)
   982             self.qualifier.setValue(value)
   956     setattr(cls, "setQualifierValue", setQualifierValue)
   983     setattr(cls, "setQualifierValue", setQualifierValue)
   957     
   984     
   989             self.reference.setName(new_name)
  1016             self.reference.setName(new_name)
   990         if self.inline:
  1017         if self.inline:
   991             self.inline.updateElementName(old_name, new_name)
  1018             self.inline.updateElementName(old_name, new_name)
   992     setattr(cls, "updateElementName", updateElementName)
  1019     setattr(cls, "updateElementName", updateElementName)
   993 
  1020 
   994 if "actionBlock" in PLCOpenClasses:
  1021 cls = PLCOpenClasses.get("actionBlock", None)
   995     cls = PLCOpenClasses["actionBlock"]
  1022 if cls:
   996     setattr(cls, "getX", getX)
  1023     setattr(cls, "getX", getX)
   997     setattr(cls, "getY", getY)
  1024     setattr(cls, "getY", getY)
   998     setattr(cls, "setX", setX)
  1025     setattr(cls, "setX", setX)
   999     setattr(cls, "setY", setY)
  1026     setattr(cls, "setY", setY)
  1000 
  1027 
  1041     def updateElementName(self, old_name, new_name):
  1068     def updateElementName(self, old_name, new_name):
  1042         for action in self.action:
  1069         for action in self.action:
  1043             action.updateElementName(old_name, new_name)
  1070             action.updateElementName(old_name, new_name)
  1044     setattr(cls, "updateElementName", updateElementName)
  1071     setattr(cls, "updateElementName", updateElementName)
  1045 
  1072 
  1046 if "inVariable" in PLCOpenClasses:
  1073 cls = PLCOpenClasses.get("inVariable", None)
  1047     cls = PLCOpenClasses["inVariable"]
  1074 if cls:
  1048     setattr(cls, "getX", getX)
  1075     setattr(cls, "getX", getX)
  1049     setattr(cls, "getY", getY)
  1076     setattr(cls, "getY", getY)
  1050     setattr(cls, "setX", setX)
  1077     setattr(cls, "setX", setX)
  1051     setattr(cls, "setY", setY)
  1078     setattr(cls, "setY", setY)
  1052 
  1079 
  1065     def updateElementName(self, old_name, new_name):
  1092     def updateElementName(self, old_name, new_name):
  1066         if self.expression == old_name:
  1093         if self.expression == old_name:
  1067             self.expression = new_name
  1094             self.expression = new_name
  1068     setattr(cls, "updateElementName", updateElementName)
  1095     setattr(cls, "updateElementName", updateElementName)
  1069 
  1096 
  1070 if "outVariable" in PLCOpenClasses:
  1097 cls = PLCOpenClasses.get("outVariable", None)
  1071     cls = PLCOpenClasses["outVariable"]
  1098 if cls:
  1072     setattr(cls, "getX", getX)
  1099     setattr(cls, "getX", getX)
  1073     setattr(cls, "getY", getY)
  1100     setattr(cls, "getY", getY)
  1074     setattr(cls, "setX", setX)
  1101     setattr(cls, "setX", setX)
  1075     setattr(cls, "setY", setY)
  1102     setattr(cls, "setY", setY)
  1076 
  1103 
  1089     def updateElementName(self, old_name, new_name):
  1116     def updateElementName(self, old_name, new_name):
  1090         if self.expression == old_name:
  1117         if self.expression == old_name:
  1091             self.expression = new_name
  1118             self.expression = new_name
  1092     setattr(cls, "updateElementName", updateElementName)
  1119     setattr(cls, "updateElementName", updateElementName)
  1093 
  1120 
  1094 if "inOutVariable" in PLCOpenClasses:
  1121 cls = PLCOpenClasses.get("inOutVariable", None)
  1095     cls = PLCOpenClasses["inOutVariable"]
  1122 if cls:
  1096     setattr(cls, "getX", getX)
  1123     setattr(cls, "getX", getX)
  1097     setattr(cls, "getY", getY)
  1124     setattr(cls, "getY", getY)
  1098     setattr(cls, "setX", setX)
  1125     setattr(cls, "setX", setX)
  1099     setattr(cls, "setY", setY)
  1126     setattr(cls, "setY", setY)
  1100 
  1127 
  1125     def updateElementName(self, old_name, new_name):
  1152     def updateElementName(self, old_name, new_name):
  1126         if self.expression == old_name:
  1153         if self.expression == old_name:
  1127             self.expression = new_name
  1154             self.expression = new_name
  1128     setattr(cls, "updateElementName", updateElementName)
  1155     setattr(cls, "updateElementName", updateElementName)
  1129 
  1156 
  1130 if "continuation" in PLCOpenClasses:
  1157 cls = PLCOpenClasses.get("continuation", None)
  1131     cls = PLCOpenClasses["continuation"]
  1158 if cls:
  1132     setattr(cls, "getX", getX)
  1159     setattr(cls, "getX", getX)
  1133     setattr(cls, "getY", getY)
  1160     setattr(cls, "getY", getY)
  1134     setattr(cls, "setX", setX)
  1161     setattr(cls, "setX", setX)
  1135     setattr(cls, "setY", setY)
  1162     setattr(cls, "setY", setY)
  1136     
  1163     
  1137     def updateElementName(self, old_name, new_name):
  1164     def updateElementName(self, old_name, new_name):
  1138         pass
  1165         pass
  1139     setattr(cls, "updateElementName", updateElementName)
  1166     setattr(cls, "updateElementName", updateElementName)
  1140 
  1167 
  1141 if "connector" in PLCOpenClasses:
  1168 cls = PLCOpenClasses.get("connector", None)
  1142     cls = PLCOpenClasses["connector"]
  1169 if cls:
  1143     setattr(cls, "getX", getX)
  1170     setattr(cls, "getX", getX)
  1144     setattr(cls, "getY", getY)
  1171     setattr(cls, "getY", getY)
  1145     setattr(cls, "setX", setX)
  1172     setattr(cls, "setX", setX)
  1146     setattr(cls, "setY", setY)
  1173     setattr(cls, "setY", setY)
  1147     
  1174     
  1148     def updateElementName(self, old_name, new_name):
  1175     def updateElementName(self, old_name, new_name):
  1149         pass
  1176         pass
  1150     setattr(cls, "updateElementName", updateElementName)
  1177     setattr(cls, "updateElementName", updateElementName)
  1151 
  1178 
  1152 if "connection" in PLCOpenClasses:
  1179 cls = PLCOpenClasses.get("connection", None)
  1153     cls = PLCOpenClasses["connection"]
  1180 if cls:
  1154     
       
  1155     def setPoints(self, points):
  1181     def setPoints(self, points):
  1156         self.position = []
  1182         self.position = []
  1157         for point in points:
  1183         for point in points:
  1158             position = PLCOpenClasses["position"]()
  1184             position = PLCOpenClasses["position"]()
  1159             position.setX(point.x)
  1185             position.setX(point.x)
  1166         for position in self.position:
  1192         for position in self.position:
  1167             points.append((position.getX(),position.getY()))
  1193             points.append((position.getX(),position.getY()))
  1168         return points
  1194         return points
  1169     setattr(cls, "getPoints", getPoints)
  1195     setattr(cls, "getPoints", getPoints)
  1170 
  1196 
  1171 if "connectionPointIn" in PLCOpenClasses:
  1197 cls = PLCOpenClasses.get("connectionPointIn", None)
  1172     cls = PLCOpenClasses["connectionPointIn"]
  1198 if cls:
  1173 
       
  1174     def setRelPosition(self, x, y):
  1199     def setRelPosition(self, x, y):
  1175         self.relPosition = PLCOpenClasses["position"]()
  1200         self.relPosition = PLCOpenClasses["position"]()
  1176         self.relPosition.setX(x)
  1201         self.relPosition.setX(x)
  1177         self.relPosition.setY(y)
  1202         self.relPosition.setY(y)
  1178     setattr(cls, "setRelPosition", setRelPosition)
  1203     setattr(cls, "setRelPosition", setRelPosition)
  1239         if self.content:
  1264         if self.content:
  1240             return self.content["value"][idx].getFormalParameter()
  1265             return self.content["value"][idx].getFormalParameter()
  1241         return None
  1266         return None
  1242     setattr(cls, "getConnectionParameter", getConnectionParameter)
  1267     setattr(cls, "getConnectionParameter", getConnectionParameter)
  1243 
  1268 
  1244 if "connectionPointOut" in PLCOpenClasses:
  1269 cls = PLCOpenClasses.get("connectionPointOut", None)
  1245     cls = PLCOpenClasses["connectionPointOut"]
  1270 if cls:
  1246 
       
  1247     def setRelPosition(self, x, y):
  1271     def setRelPosition(self, x, y):
  1248         self.relPosition = PLCOpenClasses["position"]()
  1272         self.relPosition = PLCOpenClasses["position"]()
  1249         self.relPosition.setX(x)
  1273         self.relPosition.setX(x)
  1250         self.relPosition.setY(y)
  1274         self.relPosition.setY(y)
  1251     setattr(cls, "setRelPosition", setRelPosition)
  1275     setattr(cls, "setRelPosition", setRelPosition)
  1254         if self.relPosition:
  1278         if self.relPosition:
  1255             return self.relPosition.getX(), self.relPosition.getY()
  1279             return self.relPosition.getX(), self.relPosition.getY()
  1256         return self.relPosition
  1280         return self.relPosition
  1257     setattr(cls, "getRelPosition", getRelPosition)
  1281     setattr(cls, "getRelPosition", getRelPosition)
  1258 
  1282 
  1259 if "value" in PLCOpenClasses:
  1283 cls = PLCOpenClasses.get("value", None)
  1260     cls = PLCOpenClasses["value"]
  1284 if cls:
  1261     
       
  1262     def setValue(self, value):
  1285     def setValue(self, value):
  1263         try:
  1286         try:
  1264             value = eval(value)
  1287             value = eval(value)
  1265         except:
  1288         except:
  1266             pass
  1289             pass
  1285         except:
  1308         except:
  1286             pass
  1309             pass
  1287         return value
  1310         return value
  1288     setattr(cls, "getValue", getValue)
  1311     setattr(cls, "getValue", getValue)
  1289 
  1312 
  1290 if "value_arrayValue" in PLCOpenClasses:
  1313 cls = PLCOpenClasses.get("value_arrayValue", None)
  1291     cls = PLCOpenClasses["value_arrayValue"]
  1314 if cls:
  1292     
       
  1293     def setValue(self, array):
  1315     def setValue(self, array):
  1294         self.value = []
  1316         self.value = []
  1295         for value in array:
  1317         for value in array:
  1296             element = PLCOpenClasses["arrayValue_value"]()
  1318             element = PLCOpenClasses["arrayValue_value"]()
  1297             element.setValue(value)
  1319             element.setValue(value)
  1300     
  1322     
  1301     def getValue(self):
  1323     def getValue(self):
  1302         return [element.getValue() for element in self.value]
  1324         return [element.getValue() for element in self.value]
  1303     setattr(cls, "getValue", getValue)
  1325     setattr(cls, "getValue", getValue)
  1304 
  1326 
  1305 if "value_structValue" in PLCOpenClasses:
  1327 cls = PLCOpenClasses.get("value_structValue", None)
  1306     cls = PLCOpenClasses["value_structValue"]
  1328 if cls:
  1307     
       
  1308     def setValue(self, dict):
  1329     def setValue(self, dict):
  1309         self.value = []
  1330         self.value = []
  1310         for name,value in dict.items():
  1331         for name,value in dict.items():
  1311             element = PLCOpenClasses["structValue_value"]()
  1332             element = PLCOpenClasses["structValue_value"]()
  1312             element.setMember(name)
  1333             element.setMember(name)