plcopen/plcopen.py
changeset 151 aaa80b48bead
parent 147 5ef987c1b927
child 166 de1845119cdd
equal deleted inserted replaced
150:f7832baaad84 151:aaa80b48bead
    42 Define which action qualifier must be associated with a duration 
    42 Define which action qualifier must be associated with a duration 
    43 """
    43 """
    44 QualifierList = {"N" : False, "R" : False, "S" : False, "L" : True, "D" : True, 
    44 QualifierList = {"N" : False, "R" : False, "S" : False, "L" : True, "D" : True, 
    45     "P" : False, "P0" : False, "P1" : False, "SD" : True, "DS" : True, "SL" : True}
    45     "P" : False, "P0" : False, "P1" : False, "SD" : True, "DS" : True, "SL" : True}
    46 
    46 
    47 PLCOpenClasses, PLCOpenTypes = GenerateClassesFromXSD(os.path.join(os.path.split(__file__)[0], "TC6_XML_V10_B.xsd"))
    47 PLCOpenClasses = GenerateClassesFromXSD(os.path.join(os.path.split(__file__)[0], "TC6_XML_V10_B.xsd"))
    48 
    48 
    49 cls = PLCOpenClasses.get("formattedText", None)
    49 cls = PLCOpenClasses.get("formattedText", None)
    50 if cls:
    50 if cls:
    51     cls.text = ""
       
    52     
       
    53     def getText(self):
       
    54         return self.text
       
    55     setattr(cls, "getText", getText)
       
    56     
       
    57     def setText(self, text):
       
    58         self.text = text
       
    59     setattr(cls, "setText", setText)
       
    60     
       
    61     def loadXMLTree(self, tree):
       
    62         self.text = GetAttributeValue(tree)
       
    63         if len(self.text.splitlines()) > 1:
       
    64             self.text = self.text[1:].rstrip()
       
    65     setattr(cls, "loadXMLTree", loadXMLTree)
       
    66     
       
    67     def generateXMLText(self, name, indent, extras = {}):
       
    68         ind1, ind2 = getIndent(indent, name)
       
    69         if len(self.text.splitlines()) > 1:
       
    70             text = ind1 + "<%s>\n<![CDATA[\n"%name
       
    71             text += "%s\n"%self.text
       
    72             text += "]]>\n" + ind1 + "</%s>\n"%name
       
    73             return text
       
    74         else:
       
    75             return ind1 + "<%s><![CDATA[%s]]></%s>\n"%(name, self.text, name)
       
    76     setattr(cls, "generateXMLText", generateXMLText)
       
    77     
       
    78     def updateElementName(self, old_name, new_name):
    51     def updateElementName(self, old_name, new_name):
    79         index = self.text.find(old_name)
    52         index = self.text.find(old_name)
    80         while index != -1:
    53         while index != -1:
    81             if index > 0 and (self.text[index - 1].isalnum() or self.text[index - 1] == "_"):
    54             if index > 0 and (self.text[index - 1].isalnum() or self.text[index - 1] == "_"):
    82                 index = self.text.find(old_name, index + len(old_name))
    55                 index = self.text.find(old_name, index + len(old_name))
    89     
    62     
    90 cls = PLCOpenClasses.get("project", None)
    63 cls = PLCOpenClasses.get("project", None)
    91 if cls:
    64 if cls:
    92     cls.singleLineAttributes = False
    65     cls.singleLineAttributes = False
    93     
    66     
    94     def setName(self, name):
    67     def setname(self, name):
    95         self.contentHeader.setName(name)
    68         self.contentHeader.setname(name)
    96     setattr(cls, "setName", setName)
    69     setattr(cls, "setname", setname)
    97         
    70         
    98     def getName(self):
    71     def getname(self):
    99         return self.contentHeader.getName()
    72         return self.contentHeader.getname()
   100     setattr(cls, "getName", getName)
    73     setattr(cls, "getname", getname)
   101     
    74     
   102     def getFileHeader(self):
    75     def getfileHeader(self):
   103         fileheader = {}
    76         fileheader = {}
   104         fileheader["companyName"] = self.fileHeader.getCompanyName()
    77         fileheader["companyName"] = self.fileHeader.getcompanyName()
   105         if self.fileHeader.getCompanyURL():
    78         if self.fileHeader.getcompanyURL():
   106             fileheader["companyURL"] = self.fileHeader.getCompanyURL()
    79             fileheader["companyURL"] = self.fileHeader.getcompanyURL()
   107         fileheader["productName"] = self.fileHeader.getProductName()
    80         fileheader["productName"] = self.fileHeader.getproductName()
   108         fileheader["productVersion"] = self.fileHeader.getProductVersion()
    81         fileheader["productVersion"] = self.fileHeader.getproductVersion()
   109         if self.fileHeader.getProductRelease():
    82         if self.fileHeader.getproductRelease():
   110             fileheader["productRelease"] = self.fileHeader.getProductRelease()
    83             fileheader["productRelease"] = self.fileHeader.getproductRelease()
   111         fileheader["creationDateTime"] = self.fileHeader.getCreationDateTime()
    84         fileheader["creationDateTime"] = self.fileHeader.getcreationDateTime()
   112         if self.fileHeader.getContentDescription():
    85         if self.fileHeader.getcontentDescription():
   113             fileheader["contentDescription"] = self.fileHeader.getContentDescription()
    86             fileheader["contentDescription"] = self.fileHeader.getcontentDescription()
   114         return fileheader
    87         return fileheader
   115     setattr(cls, "getFileHeader", getFileHeader)
    88     setattr(cls, "getfileHeader", getfileHeader)
   116     
    89     
   117     def setFileHeader(self, fileheader):
    90     def setfileHeader(self, fileheader):
   118         self.fileHeader.setCompanyName(fileheader["companyName"])
    91         self.fileHeader.setcompanyName(fileheader["companyName"])
   119         if "companyURL" in fileheader:
    92         if "companyURL" in fileheader:
   120             self.fileHeader.setCompanyURL(fileheader["companyURL"])
    93             self.fileHeader.setcompanyURL(fileheader["companyURL"])
   121         self.fileHeader.setProductName(fileheader["productName"])
    94         self.fileHeader.setproductName(fileheader["productName"])
   122         self.fileHeader.setProductVersion(fileheader["productVersion"])
    95         self.fileHeader.setproductVersion(fileheader["productVersion"])
   123         if "productRelease" in fileheader:
    96         if "productRelease" in fileheader:
   124             self.fileHeader.setProductRelease(fileheader["productRelease"])
    97             self.fileHeader.setproductRelease(fileheader["productRelease"])
   125         self.fileHeader.setCreationDateTime(fileheader["creationDateTime"])
    98         self.fileHeader.setcreationDateTime(fileheader["creationDateTime"])
   126         if "contentDescription" in fileheader:
    99         if "contentDescription" in fileheader:
   127             self.fileHeader.setContentDescription(fileheader["contentDescription"])
   100             self.fileHeader.setcontentDescription(fileheader["contentDescription"])
   128     setattr(cls, "setFileHeader", setFileHeader)
   101     setattr(cls, "setfileHeader", setfileHeader)
   129     
   102     
   130     def getContentHeader(self):
   103     def getcontentHeader(self):
   131         contentheader = {}
   104         contentheader = {}
   132         contentheader["projectName"] = self.contentHeader.getName()
   105         contentheader["projectName"] = self.contentHeader.getname()
   133         if self.contentHeader.getVersion():
   106         if self.contentHeader.getversion():
   134             contentheader["projectVersion"] = self.contentHeader.getVersion()
   107             contentheader["projectVersion"] = self.contentHeader.getversion()
   135         if self.contentHeader.getModificationDateTime():
   108         if self.contentHeader.getmodificationDateTime():
   136             contentheader["modificationDateTime"] = self.contentHeader.getModificationDateTime()
   109             contentheader["modificationDateTime"] = self.contentHeader.getmodificationDateTime()
   137         if self.contentHeader.getOrganization():
   110         if self.contentHeader.getorganization():
   138             contentheader["organization"] = self.contentHeader.getOrganization()
   111             contentheader["organization"] = self.contentHeader.getorganization()
   139         if self.contentHeader.getAuthor():
   112         if self.contentHeader.getauthor():
   140             contentheader["authorName"] = self.contentHeader.getAuthor()
   113             contentheader["authorName"] = self.contentHeader.getauthor()
   141         if self.contentHeader.getLanguage():
   114         if self.contentHeader.getlanguage():
   142             contentheader["language"] = self.contentHeader.getLanguage()
   115             contentheader["language"] = self.contentHeader.getlanguage()
   143         contentheader["pageSize"] = self.contentHeader.getPageSize()
   116         contentheader["pageSize"] = self.contentHeader.getpageSize()
   144         contentheader["scaling"] = self.contentHeader.getScaling()
   117         contentheader["scaling"] = self.contentHeader.getscaling()
   145         return contentheader
   118         return contentheader
   146     setattr(cls, "getContentHeader", getContentHeader)
   119     setattr(cls, "getcontentHeader", getcontentHeader)
   147     
   120     
   148     def setContentHeader(self, contentheader):
   121     def setcontentHeader(self, contentheader):
   149         self.contentHeader.setName(contentheader["projectName"])
   122         self.contentHeader.setname(contentheader["projectName"])
   150         if "projectVersion" in contentheader:
   123         if "projectVersion" in contentheader:
   151             self.contentHeader.setVersion(contentheader["projectVersion"])
   124             self.contentHeader.setversion(contentheader["projectVersion"])
   152         if "modificationDateTime" in contentheader:
   125         if "modificationDateTime" in contentheader:
   153             self.contentHeader.setModificationDateTime(contentheader["modificationDateTime"])
   126             self.contentHeader.setmodificationDateTime(contentheader["modificationDateTime"])
   154         if "organization" in contentheader:
   127         if "organization" in contentheader:
   155             self.contentHeader.setOrganization(contentheader["organization"])
   128             self.contentHeader.setorganization(contentheader["organization"])
   156         if "authorName" in contentheader:
   129         if "authorName" in contentheader:
   157             self.contentHeader.setAuthor(contentheader["authorName"])
   130             self.contentHeader.setauthor(contentheader["authorName"])
   158         if "language" in contentheader:
   131         if "language" in contentheader:
   159             self.contentHeader.setLanguage(contentheader["language"])
   132             self.contentHeader.setlanguage(contentheader["language"])
   160         self.contentHeader.setPageSize(*contentheader["pageSize"])
   133         self.contentHeader.setpageSize(*contentheader["pageSize"])
   161         self.contentHeader.setScaling(contentheader["scaling"])
   134         self.contentHeader.setscaling(contentheader["scaling"])
   162     setattr(cls, "setContentHeader", setContentHeader)
   135     setattr(cls, "setcontentHeader", setcontentHeader)
   163     
   136     
   164     def getDataTypes(self):
   137     def getdataTypes(self):
   165         return self.types.getDataTypeElements()
   138         return self.types.getdataTypeElements()
   166     setattr(cls, "getDataTypes", getDataTypes)
   139     setattr(cls, "getdataTypes", getdataTypes)
   167     
   140     
   168     def getDataType(self, name):
   141     def getdataType(self, name):
   169         return self.types.getDataTypeElement(name)
   142         return self.types.getdataTypeElement(name)
   170     setattr(cls, "getDataType", getDataType)
   143     setattr(cls, "getdataType", getdataType)
   171     
   144     
   172     def appendDataType(self, name):
   145     def appenddataType(self, name):
   173         self.types.appendDataTypeElement(name)
   146         self.types.appenddataTypeElement(name)
   174     setattr(cls, "appendDataType", appendDataType)
   147     setattr(cls, "appenddataType", appenddataType)
   175         
   148         
   176     def insertDataType(self, index, datatype):
   149     def insertdataType(self, index, datatype):
   177         self.types.insertDataTypeElement(index, datatype)
   150         self.types.insertdataTypeElement(index, datatype)
   178     setattr(cls, "insertDataType", insertDataType)
   151     setattr(cls, "insertdataType", insertdataType)
   179     
   152     
   180     def removeDataType(self, name):
   153     def removedataType(self, name):
   181         self.types.removeDataTypeElement(name)
   154         self.types.removedataTypeElement(name)
   182     setattr(cls, "removeDataType", removeDataType)
   155     setattr(cls, "removedataType", removedataType)
   183     
   156     
   184     def getPous(self):
   157     def getpous(self):
   185         return self.types.getPouElements()
   158         return self.types.getpouElements()
   186     setattr(cls, "getPous", getPous)
   159     setattr(cls, "getpous", getpous)
   187     
   160     
   188     def getPou(self, name):
   161     def getpou(self, name):
   189         return self.types.getPouElement(name)
   162         return self.types.getpouElement(name)
   190     setattr(cls, "getPou", getPou)
   163     setattr(cls, "getpou", getpou)
   191     
   164     
   192     def appendPou(self, name, pou_type, body_type):
   165     def appendpou(self, name, pou_type, body_type):
   193         self.types.appendPouElement(name, pou_type, body_type)
   166         self.types.appendpouElement(name, pou_type, body_type)
   194     setattr(cls, "appendPou", appendPou)
   167     setattr(cls, "appendpou", appendpou)
   195         
   168         
   196     def insertPou(self, index, pou):
   169     def insertpou(self, index, pou):
   197         self.types.insertPouElement(index, pou)
   170         self.types.insertpouElement(index, pou)
   198     setattr(cls, "insertPou", insertPou)
   171     setattr(cls, "insertpou", insertpou)
   199     
   172     
   200     def removePou(self, name):
   173     def removepou(self, name):
   201         self.types.removePouElement(name)
   174         self.types.removepouElement(name)
   202     setattr(cls, "removePou", removePou)
   175     setattr(cls, "removepou", removepou)
   203 
   176 
   204     def getConfigurations(self):
   177     def getconfigurations(self):
   205         configurations = self.instances.configurations.getConfiguration()
   178         configurations = self.instances.configurations.getconfiguration()
   206         if configurations:
   179         if configurations:
   207             return configurations
   180             return configurations
   208         return []
   181         return []
   209     setattr(cls, "getConfigurations", getConfigurations)
   182     setattr(cls, "getconfigurations", getconfigurations)
   210 
   183 
   211     def getConfiguration(self, name):
   184     def getconfiguration(self, name):
   212         for configuration in self.instances.configurations.getConfiguration():
   185         for configuration in self.instances.configurations.getconfiguration():
   213             if configuration.getName() == name:
   186             if configuration.getname() == name:
   214                 return configuration
   187                 return configuration
   215         return None
   188         return None
   216     setattr(cls, "getConfiguration", getConfiguration)
   189     setattr(cls, "getconfiguration", getconfiguration)
   217 
   190 
   218     def addConfiguration(self, name):
   191     def addconfiguration(self, name):
   219         for configuration in self.instances.configurations.getConfiguration():
   192         for configuration in self.instances.configurations.getconfiguration():
   220             if configuration.getName() == name:
   193             if configuration.getname() == name:
   221                 raise ValueError, "\"%s\" configuration already exists !!!"%name
   194                 raise ValueError, "\"%s\" configuration already exists !!!"%name
   222         new_configuration = PLCOpenClasses["configurations_configuration"]()
   195         new_configuration = PLCOpenClasses["configurations_configuration"]()
   223         new_configuration.setName(name)
   196         new_configuration.setname(name)
   224         self.instances.configurations.appendConfiguration(new_configuration)
   197         self.instances.configurations.appendconfiguration(new_configuration)
   225     setattr(cls, "addConfiguration", addConfiguration)    
   198     setattr(cls, "addconfiguration", addconfiguration)    
   226 
   199 
   227     def removeConfiguration(self, name):
   200     def removeconfiguration(self, name):
   228         found = False
   201         found = False
   229         for idx, configuration in enumerate(self.instances.configurations.getConfiguration()):
   202         for idx, configuration in enumerate(self.instances.configurations.getconfiguration()):
   230             if configuration.getName() == name:
   203             if configuration.getname() == name:
   231                 self.instances.configurations.removeConfiguration(idx)
   204                 self.instances.configurations.removeconfiguration(idx)
   232                 found = True
   205                 found = True
   233                 break
   206                 break
   234         if not found:
   207         if not found:
   235             raise ValueError, "\"%s\" configuration doesn't exist !!!"%name
   208             raise ValueError, "\"%s\" configuration doesn't exist !!!"%name
   236     setattr(cls, "removeConfiguration", removeConfiguration)
   209     setattr(cls, "removeconfiguration", removeconfiguration)
   237 
   210 
   238     def getConfigurationResource(self, config_name, name):
   211     def getconfigurationResource(self, config_name, name):
   239         configuration = self.getConfiguration(config_name)
   212         configuration = self.getconfiguration(config_name)
   240         if configuration:
   213         if configuration:
   241             for resource in configuration.getResource():
   214             for resource in configuration.getresource():
   242                 if resource.getName() == name:
   215                 if resource.getname() == name:
   243                     return resource
   216                     return resource
   244         return None
   217         return None
   245     setattr(cls, "getConfigurationResource", getConfigurationResource)
   218     setattr(cls, "getconfigurationResource", getconfigurationResource)
   246 
   219 
   247     def addConfigurationResource(self, config_name, name):
   220     def addconfigurationResource(self, config_name, name):
   248         configuration = self.getConfiguration(config_name)
   221         configuration = self.getconfiguration(config_name)
   249         if configuration:
   222         if configuration:
   250             for resource in configuration.getResource():
   223             for resource in configuration.getresource():
   251                 if resource.getName() == name:
   224                 if resource.getname() == name:
   252                     raise ValueError, "\"%s\" resource already exists in \"%s\" configuration !!!"%(name, config_name)
   225                     raise ValueError, "\"%s\" resource already exists in \"%s\" configuration !!!"%(name, config_name)
   253             new_resource = PLCOpenClasses["configuration_resource"]()
   226             new_resource = PLCOpenClasses["configuration_resource"]()
   254             new_resource.setName(name)
   227             new_resource.setname(name)
   255             configuration.appendResource(new_resource)
   228             configuration.appendresource(new_resource)
   256     setattr(cls, "addConfigurationResource", addConfigurationResource)
   229     setattr(cls, "addconfigurationResource", addconfigurationResource)
   257 
   230 
   258     def removeConfigurationResource(self, config_name, name):
   231     def removeconfigurationResource(self, config_name, name):
   259         configuration = self.getConfiguration(config_name)
   232         configuration = self.getconfiguration(config_name)
   260         if configuration:
   233         if configuration:
   261             found = False
   234             found = False
   262             for idx, resource in enumerate(configuration.getResource()):
   235             for idx, resource in enumerate(configuration.getresource()):
   263                 if resource.getName() == name:
   236                 if resource.getname() == name:
   264                     configuration.removeResource(idx)
   237                     configuration.removeresource(idx)
   265                     found = True
   238                     found = True
   266                     break
   239                     break
   267             if not found:
   240             if not found:
   268                 raise ValueError, "\"%s\" resource doesn't exist in \"%s\" configuration !!!"%(name, config_name)
   241                 raise ValueError, "\"%s\" resource doesn't exist in \"%s\" configuration !!!"%(name, config_name)
   269     setattr(cls, "removeConfigurationResource", removeConfigurationResource)
   242     setattr(cls, "removeconfigurationResource", removeconfigurationResource)
   270 
   243 
   271     def updateElementName(self, old_name, new_name):
   244     def updateElementName(self, old_name, new_name):
   272         for pou in self.types.getPouElements():
   245         for pou in self.types.getpouElements():
   273             pou.updateElementName(old_name, new_name)
   246             pou.updateElementName(old_name, new_name)
   274         for configuration in self.instances.configurations.getConfiguration():
   247         for configuration in self.instances.configurations.getconfiguration():
   275             configuration.updateElementName(old_name, new_name)
   248             configuration.updateElementName(old_name, new_name)
   276     setattr(cls, "updateElementName", updateElementName)
   249     setattr(cls, "updateElementName", updateElementName)
   277 
   250 
   278 cls = PLCOpenClasses.get("project_fileHeader", None)
   251 cls = PLCOpenClasses.get("project_fileHeader", None)
   279 if cls:
   252 if cls:
   281 
   254 
   282 cls = PLCOpenClasses.get("project_contentHeader", None)
   255 cls = PLCOpenClasses.get("project_contentHeader", None)
   283 if cls:
   256 if cls:
   284     cls.singleLineAttributes = False
   257     cls.singleLineAttributes = False
   285     
   258     
   286     def setPageSize(self, width, height):
   259     def setpageSize(self, width, height):
   287         self.coordinateInfo.setPageSize(width, height)
   260         self.coordinateInfo.setpageSize(width, height)
   288     setattr(cls, "setPageSize", setPageSize)
   261     setattr(cls, "setpageSize", setpageSize)
   289     
   262     
   290     def getPageSize(self):
   263     def getpageSize(self):
   291         return self.coordinateInfo.getPageSize()
   264         return self.coordinateInfo.getpageSize()
   292     setattr(cls, "getPageSize", getPageSize)
   265     setattr(cls, "getpageSize", getpageSize)
   293 
   266 
   294     def setScaling(self, scaling):
   267     def setscaling(self, scaling):
   295         for language, (x, y) in scaling.items():
   268         for language, (x, y) in scaling.items():
   296             self.coordinateInfo.setScaling(language, x, y)
   269             self.coordinateInfo.setscaling(language, x, y)
   297     setattr(cls, "setScaling", setScaling)
   270     setattr(cls, "setscaling", setscaling)
   298     
   271     
   299     def getScaling(self):
   272     def getscaling(self):
   300         scaling = {}
   273         scaling = {}
   301         scaling["FBD"] = self.coordinateInfo.getScaling("FBD")
   274         scaling["FBD"] = self.coordinateInfo.getscaling("FBD")
   302         scaling["LD"] = self.coordinateInfo.getScaling("LD")
   275         scaling["LD"] = self.coordinateInfo.getscaling("LD")
   303         scaling["SFC"] = self.coordinateInfo.getScaling("SFC")
   276         scaling["SFC"] = self.coordinateInfo.getscaling("SFC")
   304         return scaling
   277         return scaling
   305     setattr(cls, "getScaling", getScaling)
   278     setattr(cls, "getscaling", getscaling)
   306 
   279 
   307 cls = PLCOpenClasses.get("contentHeader_coordinateInfo", None)
   280 cls = PLCOpenClasses.get("contentHeader_coordinateInfo", None)
   308 if cls:
   281 if cls:
   309     def setPageSize(self, width, height):
   282     def setpageSize(self, width, height):
   310         if width == 0 and height == 0:
   283         if width == 0 and height == 0:
   311             self.deletePageSize()
   284             self.deletepageSize()
   312         else:
   285         else:
   313             if self.pageSize is None:
   286             if self.pageSize is None:
   314                 self.addPageSize()
   287                 self.addpageSize()
   315             self.pageSize.setX(width)
   288             self.pageSize.setx(width)
   316             self.pageSize.setY(height)
   289             self.pageSize.sety(height)
   317     setattr(cls, "setPageSize", setPageSize)
   290     setattr(cls, "setpageSize", setpageSize)
   318     
   291     
   319     def getPageSize(self):
   292     def getpageSize(self):
   320         if self.pageSize is not None:
   293         if self.pageSize is not None:
   321             return self.pageSize.getX(), self.pageSize.getY()
   294             return self.pageSize.getx(), self.pageSize.gety()
   322         return 0, 0
   295         return 0, 0
   323     setattr(cls, "getPageSize", getPageSize)
   296     setattr(cls, "getpageSize", getpageSize)
   324 
   297 
   325     def setScaling(self, language, x, y):
   298     def setscaling(self, language, x, y):
   326         if language == "FBD":
   299         if language == "FBD":
   327             self.fbd.scaling.setX(x)
   300             self.fbd.scaling.setx(x)
   328             self.fbd.scaling.setY(y)
   301             self.fbd.scaling.sety(y)
   329         elif language == "LD":
   302         elif language == "LD":
   330             self.ld.scaling.setX(x)
   303             self.ld.scaling.setx(x)
   331             self.ld.scaling.setY(y)
   304             self.ld.scaling.sety(y)
   332         elif language == "SFC":
   305         elif language == "SFC":
   333             self.sfc.scaling.setX(x)
   306             self.sfc.scaling.setx(x)
   334             self.sfc.scaling.setY(y)
   307             self.sfc.scaling.sety(y)
   335     setattr(cls, "setScaling", setScaling)
   308     setattr(cls, "setscaling", setscaling)
   336     
   309     
   337     def getScaling(self, language):
   310     def getscaling(self, language):
   338         if language == "FBD":
   311         if language == "FBD":
   339             return self.fbd.scaling.getX(), self.fbd.scaling.getY()
   312             return self.fbd.scaling.getx(), self.fbd.scaling.gety()
   340         elif language == "LD":
   313         elif language == "LD":
   341             return self.ld.scaling.getX(), self.ld.scaling.getY()
   314             return self.ld.scaling.getx(), self.ld.scaling.gety()
   342         elif language == "SFC":
   315         elif language == "SFC":
   343             return self.sfc.scaling.getX(), self.sfc.scaling.getY()
   316             return self.sfc.scaling.getx(), self.sfc.scaling.gety()
   344         return 0, 0
   317         return 0, 0
   345     setattr(cls, "getScaling", getScaling)
   318     setattr(cls, "getscaling", getscaling)
   346 
   319 
   347 cls = PLCOpenClasses.get("configurations_configuration", None)
   320 cls = PLCOpenClasses.get("configurations_configuration", None)
   348 if cls:
   321 if cls:
   349     def updateElementName(self, old_name, new_name):
   322     def updateElementName(self, old_name, new_name):
   350         for resource in self.getResource():
   323         for resource in self.getresource():
   351             resource.updateElementName(old_name, new_name)
   324             resource.updateElementName(old_name, new_name)
   352     setattr(cls, "updateElementName", updateElementName)
   325     setattr(cls, "updateElementName", updateElementName)
   353 
   326 
   354 
   327 
   355 cls = PLCOpenClasses.get("configuration_resource", None)
   328 cls = PLCOpenClasses.get("configuration_resource", None)
   377             self.type = new_name
   350             self.type = new_name
   378     setattr(cls, "updateElementName", updateElementName)
   351     setattr(cls, "updateElementName", updateElementName)
   379 
   352 
   380 cls = PLCOpenClasses.get("project_types", None)
   353 cls = PLCOpenClasses.get("project_types", None)
   381 if cls:
   354 if cls:
   382     def getDataTypeElements(self):
   355     def getdataTypeElements(self):
   383         return self.dataTypes.getDataType()
   356         return self.dataTypes.getdataType()
   384     setattr(cls, "getDataTypeElements", getDataTypeElements)
   357     setattr(cls, "getdataTypeElements", getdataTypeElements)
   385     
   358     
   386     def getDataTypeElement(self, name):
   359     def getdataTypeElement(self, name):
   387         elements = self.dataTypes.getDataType()
   360         elements = self.dataTypes.getdataType()
   388         for element in elements:
   361         for element in elements:
   389             if element.getName() == name:
   362             if element.getname() == name:
   390                 return element
   363                 return element
   391         return None
   364         return None
   392     setattr(cls, "getDataTypeElement", getDataTypeElement)
   365     setattr(cls, "getdataTypeElement", getdataTypeElement)
   393 
   366 
   394     def appendDataTypeElement(self, name):
   367     def appenddataTypeElement(self, name):
   395         for element in self.dataTypes.getDataType():
   368         for element in self.dataTypes.getdataType():
   396             if element.getName() == name:
   369             if element.getname() == name:
   397                 raise ValueError, "\"%s\" Data Type already exists !!!"%name
   370                 raise ValueError, "\"%s\" Data Type already exists !!!"%name
   398         new_datatype = PLCOpenClasses["dataTypes_dataType"]()
   371         new_datatype = PLCOpenClasses["dataTypes_dataType"]()
   399         new_datatype.setName(name)
   372         new_datatype.setname(name)
   400         new_datatype.baseType.setContent("BOOL", None)
   373         new_datatype.baseType.setcontent({"name" : "BOOL", "value" : None})
   401         self.dataTypes.appendDataType(new_datatype)
   374         self.dataTypes.appenddataType(new_datatype)
   402     setattr(cls, "appendDataTypeElement", appendDataTypeElement)
   375     setattr(cls, "appenddataTypeElement", appenddataTypeElement)
   403         
   376         
   404     def insertDataTypeElement(self, index, datatype):
   377     def insertdataTypeElement(self, index, dataType):
   405         self.dataTypes.insertDataType(index, datatype)
   378         self.dataTypes.insertdataType(index, dataType)
   406     setattr(cls, "insertDataTypeElement", insertDataTypeElement)
   379     setattr(cls, "insertdataTypeElement", insertdataTypeElement)
   407     
   380     
   408     def removeDataTypeElement(self, name):
   381     def removedataTypeElement(self, name):
   409         found = False
   382         found = False
   410         for idx, element in enumerate(self.dataTypes.getDataType()):
   383         for idx, element in enumerate(self.dataTypes.getdataType()):
   411             if element.getName() == name:
   384             if element.getname() == name:
   412                 self.dataTypes.removeDataType(idx)
   385                 self.dataTypes.removedataType(idx)
   413                 found = True
   386                 found = True
   414                 break
   387                 break
   415         if not found:
   388         if not found:
   416             raise ValueError, "\"%s\" Data Type doesn't exist !!!"%name
   389             raise ValueError, "\"%s\" Data Type doesn't exist !!!"%name
   417     setattr(cls, "removeDataTypeElement", removeDataTypeElement)
   390     setattr(cls, "removedataTypeElement", removedataTypeElement)
   418     
   391     
   419     def getPouElements(self):
   392     def getpouElements(self):
   420         return self.pous.getPou()
   393         return self.pous.getpou()
   421     setattr(cls, "getPouElements", getPouElements)
   394     setattr(cls, "getpouElements", getpouElements)
   422     
   395     
   423     def getPouElement(self, name):
   396     def getpouElement(self, name):
   424         elements = self.pous.getPou()
   397         elements = self.pous.getpou()
   425         for element in elements:
   398         for element in elements:
   426             if element.getName() == name:
   399             if element.getname() == name:
   427                 return element
   400                 return element
   428         return None
   401         return None
   429     setattr(cls, "getPouElement", getPouElement)
   402     setattr(cls, "getpouElement", getpouElement)
   430 
   403 
   431     def appendPouElement(self, name, pou_type, body_type):
   404     def appendpouElement(self, name, pou_type, body_type):
   432         for element in self.pous.getPou():
   405         for element in self.pous.getpou():
   433             if element.getName() == name:
   406             if element.getname() == name:
   434                 raise ValueError, "\"%s\" POU already exists !!!"%name
   407                 raise ValueError, "\"%s\" POU already exists !!!"%name
   435         new_pou = PLCOpenClasses["pous_pou"]()
   408         new_pou = PLCOpenClasses["pous_pou"]()
   436         new_pou.setName(name)
   409         new_pou.setname(name)
   437         new_pou.pouType.setValue(pou_type)
   410         new_pou.setpouType(pou_type)
   438         new_pou.setBody(PLCOpenClasses["body"]())
   411         new_pou.setbody(PLCOpenClasses["body"]())
   439         new_pou.setBodyType(body_type)
   412         new_pou.setbodyType(body_type)
   440         self.pous.appendPou(new_pou)
   413         self.pous.appendpou(new_pou)
   441     setattr(cls, "appendPouElement", appendPouElement)
   414     setattr(cls, "appendpouElement", appendpouElement)
   442         
   415         
   443     def insertPouElement(self, index, pou):
   416     def insertpouElement(self, index, pou):
   444         self.pous.insertPou(index, pou)
   417         self.pous.insertpou(index, pou)
   445     setattr(cls, "insertPouElement", insertPouElement)
   418     setattr(cls, "insertpouElement", insertpouElement)
   446     
   419     
   447     def removePouElement(self, name):
   420     def removepouElement(self, name):
   448         found = False
   421         found = False
   449         for idx, element in enumerate(self.pous.getPou()):
   422         for idx, element in enumerate(self.pous.getpou()):
   450             if element.getName() == name:
   423             if element.getname() == name:
   451                 self.pous.removePou(idx)
   424                 self.pous.removepou(idx)
   452                 found = True
   425                 found = True
   453                 break
   426                 break
   454         if not found:
   427         if not found:
   455             raise ValueError, "\"%s\" POU doesn't exist !!!"%name
   428             raise ValueError, "\"%s\" POU doesn't exist !!!"%name
   456     setattr(cls, "removePouElement", removePouElement)
   429     setattr(cls, "removepouElement", removepouElement)
   457 
   430 
   458 def setBodyType(self, type):
   431 def setbodyType(self, type):
   459     if type == "IL":
   432     if type == "IL":
   460         self.body.setContent("IL", PLCOpenClasses["formattedText"]())
   433         self.body.setcontent({"name" : "IL", "value" : PLCOpenClasses["formattedText"]()})
   461     elif type == "ST":
   434     elif type == "ST":
   462         self.body.setContent("ST", PLCOpenClasses["formattedText"]())
   435         self.body.setcontent({"name" : "ST", "value" : PLCOpenClasses["formattedText"]()})
   463     elif type == "LD":
   436     elif type == "LD":
   464         self.body.setContent("LD", PLCOpenClasses["body_LD"]())
   437         self.body.setcontent({"name" : "LD", "value" : PLCOpenClasses["body_LD"]()})
   465     elif type == "FBD":
   438     elif type == "FBD":
   466         self.body.setContent("FBD", PLCOpenClasses["body_FBD"]())
   439         self.body.setcontent({"name" : "FBD", "value" : PLCOpenClasses["body_FBD"]()})
   467     elif type == "SFC":
   440     elif type == "SFC":
   468         self.body.setContent("SFC", PLCOpenClasses["body_SFC"]())
   441         self.body.setcontent({"name" : "SFC", "value" : PLCOpenClasses["body_SFC"]()})
   469     else:
   442     else:
   470         raise ValueError, "%s isn't a valid body type!"%type
   443         raise ValueError, "%s isn't a valid body type!"%type
   471         
   444         
   472 def getBodyType(self):
   445 def getbodyType(self):
   473     return self.body.getContent()["name"]
   446     return self.body.getcontent()["name"]
   474 
   447 
   475 def resetExecutionOrder(self):
   448 def resetexecutionOrder(self):
   476     self.body.resetExecutionOrder()
   449     self.body.resetexecutionOrder()
   477 
   450 
   478 def compileExecutionOrder(self):
   451 def compileexecutionOrder(self):
   479     self.body.compileExecutionOrder()
   452     self.body.compileexecutionOrder()
   480 
   453 
   481 def setElementExecutionOrder(self, instance, new_executionOrder):
   454 def setelementExecutionOrder(self, instance, new_executionOrder):
   482     self.body.setElementExecutionOrder(instance, new_executionOrder)
   455     self.body.setelementExecutionOrder(instance, new_executionOrder)
   483 
   456 
   484 def addInstance(self, name, instance):
   457 def addinstance(self, name, instance):
   485     self.body.appendContentInstance(name, instance)
   458     self.body.appendcontentInstance(name, instance)
   486 
   459 
   487 def getInstances(self):
   460 def getinstances(self):
   488     return self.body.getContentInstances()
   461     return self.body.getcontentInstances()
   489 
   462 
   490 def getInstance(self, id):
   463 def getinstance(self, id):
   491     return self.body.getContentInstance(id)
   464     return self.body.getcontentInstance(id)
   492 
   465 
   493 def getRandomInstance(self, exclude):
   466 def getrandomInstance(self, exclude):
   494     return self.body.getContentRandomInstance(exclude)
   467     return self.body.getcontentRandomInstance(exclude)
   495 
   468 
   496 def getInstanceByName(self, name):
   469 def getinstanceByName(self, name):
   497     return self.body.getContentInstanceByName(name)
   470     return self.body.getcontentInstanceByName(name)
   498 
   471 
   499 def removeInstance(self, id):
   472 def removeinstance(self, id):
   500     self.body.removeContentInstance(id)
   473     self.body.removecontentInstance(id)
   501 
   474 
   502 def setText(self, text):
   475 def settext(self, text):
   503     self.body.setText(text)
   476     self.body.settext(text)
   504 
   477 
   505 def getText(self):
   478 def gettext(self):
   506     return self.body.getText()
   479     return self.body.gettext()
   507 setattr(cls, "getText", getText)
   480 setattr(cls, "gettext", gettext)
   508 
   481 
   509 cls = PLCOpenClasses.get("pous_pou", None)
   482 cls = PLCOpenClasses.get("pous_pou", None)
   510 if cls:
   483 if cls:
   511     setattr(cls, "setBodyType", setBodyType)
   484     setattr(cls, "setbodyType", setbodyType)
   512     setattr(cls, "getBodyType", getBodyType)
   485     setattr(cls, "getbodyType", getbodyType)
   513     setattr(cls, "resetExecutionOrder", resetExecutionOrder)
   486     setattr(cls, "resetexecutionOrder", resetexecutionOrder)
   514     setattr(cls, "compileExecutionOrder", compileExecutionOrder)
   487     setattr(cls, "compileexecutionOrder", compileexecutionOrder)
   515     setattr(cls, "setElementExecutionOrder", setElementExecutionOrder)
   488     setattr(cls, "setelementExecutionOrder", setelementExecutionOrder)
   516     setattr(cls, "addInstance", addInstance)
   489     setattr(cls, "addinstance", addinstance)
   517     setattr(cls, "getInstances", getInstances)
   490     setattr(cls, "getinstances", getinstances)
   518     setattr(cls, "getInstance", getInstance)
   491     setattr(cls, "getinstance", getinstance)
   519     setattr(cls, "getRandomInstance", getRandomInstance)
   492     setattr(cls, "getrandomInstance", getrandomInstance)
   520     setattr(cls, "getInstanceByName", getInstanceByName)
   493     setattr(cls, "getinstanceByName", getinstanceByName)
   521     setattr(cls, "removeInstance", removeInstance)
   494     setattr(cls, "removeinstance", removeinstance)
   522     setattr(cls, "setText", setText)
   495     setattr(cls, "settext", settext)
   523     setattr(cls, "getText", getText)
   496     setattr(cls, "gettext", gettext)
   524 
   497 
   525     def getVars(self):
   498     def getvars(self):
   526         vars = []
   499         vars = []
   527         reverse_types = {}
   500         reverse_types = {}
   528         for name, value in VarTypes.items():
   501         for name, value in VarTypes.items():
   529             reverse_types[value] = name
   502             reverse_types[value] = name
   530         for varlist in self.interface.getContent():
   503         for varlist in self.interface.getcontent():
   531             vars.append((reverse_types[varlist["name"]], varlist["value"]))
   504             vars.append((reverse_types[varlist["name"]], varlist["value"]))
   532         return vars
   505         return vars
   533     setattr(cls, "getVars", getVars)
   506     setattr(cls, "getvars", getvars)
   534     
   507     
   535     def setVars(self, vars):
   508     def setvars(self, vars):
   536         self.interface.setContent([])
   509         self.interface.setcontent([])
   537         for vartype, varlist in vars:
   510         for vartype, varlist in vars:
   538             self.interface.appendContent(VarTypes[vartype], varlist)
   511             self.interface.appendcontent({"name" : VarTypes[vartype], "value" : varlist})
   539     setattr(cls, "setVars", setVars)
   512     setattr(cls, "setvars", setvars)
   540     
   513     
   541     def addPouVar(self, type, name):
   514     def addpouVar(self, type, name):
   542         content = self.interface.getContent()
   515         content = self.interface.getcontent()
   543         if len(content) == 0 or content[-1]["name"] != "localVars":
   516         if len(content) == 0 or content[-1]["name"] != "localVars":
   544             content.append({"name" : "localVars", "value" : PLCOpenClasses["varList"]()})
   517             content.append({"name" : "localVars", "value" : PLCOpenClasses["interface_localVars"]()})
   545         else:
   518         else:
   546             varlist = content[-1]["value"]
   519             varlist = content[-1]["value"]
   547             variables = varlist.getVariable()
   520             variables = varlist.getvariable()
   548             if varlist.getConstant() or varlist.getRetain() or len(variables) > 0 and variables[0].getAddress():
   521             if varlist.getconstant() or varlist.getretain() or len(variables) > 0 and variables[0].getaddress():
   549                 content.append({"name" : "localVars", "value" : PLCOpenClasses["varList"]()})
   522                 content.append({"name" : "localVars", "value" : PLCOpenClasses["interface_localVars"]()})
   550         var = PLCOpenClasses["varListPlain_variable"]()
   523         var = PLCOpenClasses["varListPlain_variable"]()
   551         var.setName(name)
   524         var.setname(name)
   552         var_type = PLCOpenClasses["dataType"]()
   525         var_type = PLCOpenClasses["dataType"]()
   553         derived_type = PLCOpenClasses["derived"]()
   526         derived_type = PLCOpenClasses["derivedTypes_derived"]()
   554         derived_type.setName(type)
   527         derived_type.setname(type)
   555         var_type.setContent("derived", derived_type)
   528         var_type.setcontent({"name" : "derived", "value" : derived_type})
   556         var.setType(var_type)
   529         var.settype(var_type)
   557         content[-1]["value"].appendVariable(var)
   530         content[-1]["value"].appendvariable(var)
   558     setattr(cls, "addPouVar", addPouVar)
   531     setattr(cls, "addpouVar", addpouVar)
   559     
   532     
   560     def changePouVar(self, old_type, old_name, new_type, new_name):
   533     def changepouVar(self, old_type, old_name, new_type, new_name):
   561         content = self.interface.getContent()
   534         content = self.interface.getcontent()
   562         for varlist in content:
   535         for varlist in content:
   563             variables = varlist["value"].getVariable()
   536             variables = varlist["value"].getvariable()
   564             for var in variables:
   537             for var in variables:
   565                 if var.getName() == old_name:
   538                 if var.getname() == old_name:
   566                     vartype_content = var.getType().getContent()
   539                     vartype_content = var.gettype().getcontent()
   567                     if vartype_content["name"] == "derived" and vartype_content["value"].getName() == old_type:
   540                     if vartype_content["name"] == "derived" and vartype_content["value"].getname() == old_type:
   568                         var.setName(new_name)
   541                         var.setname(new_name)
   569                         vartype_content["value"].setName(new_type)
   542                         vartype_content["value"].setname(new_type)
   570                         return
   543                         return
   571     setattr(cls, "changePouVar", changePouVar)
   544     setattr(cls, "changepouVar", changepouVar)
   572     
   545     
   573     def removePouVar(self, type, name):
   546     def removepouVar(self, type, name):
   574         content = self.interface.getContent()
   547         content = self.interface.getcontent()
   575         for varlist in content:
   548         for varlist in content:
   576             variables = varlist["value"].getVariable()
   549             variables = varlist["value"].getvariable()
   577             for var in variables:
   550             for var in variables:
   578                 if var.getName() == name:
   551                 if var.getname() == name:
   579                     vartype_content = var.getType().getContent()
   552                     vartype_content = var.gettype().getcontent()
   580                     if vartype_content["name"] == "derived" and vartype_content["value"].getName() == type:
   553                     if vartype_content["name"] == "derived" and vartype_content["value"].getname() == type:
   581                         variables.remove(var)
   554                         variables.remove(var)
   582                         break
   555                         break
   583             if len(varlist["value"].getVariable()) == 0:
   556             if len(varlist["value"].getvariable()) == 0:
   584                 content.remove(varlist)
   557                 content.remove(varlist)
   585                 break
   558                 break
   586     setattr(cls, "removePouVar", removePouVar)
   559     setattr(cls, "removepouVar", removepouVar)
   587     
   560     
   588     def hasBlock(self, name):
   561     def hasblock(self, name):
   589         if self.getBodyType() in ["FBD", "LD", "SFC"]:
   562         if self.getbodyType() in ["FBD", "LD", "SFC"]:
   590             for instance in self.getInstances():
   563             for instance in self.getinstances():
   591                 if isinstance(instance, PLCOpenClasses["block"]) and instance.getInstanceName() == name:
   564                 if isinstance(instance, PLCOpenClasses["fbdObjects_block"]) and instance.getinstanceName() == name:
   592                     return True
   565                     return True
   593             if self.transitions:
   566             if self.transitions:
   594                 for transition in self.transitions.getTransition():
   567                 for transition in self.transitions.gettransition():
   595                     result = transition.hasBlock(name)
   568                     result = transition.hasblock(name)
   596                     if result:
   569                     if result:
   597                         return result
   570                         return result
   598             if self.actions:
   571             if self.actions:
   599                 for action in self.actions.getAction():
   572                 for action in self.actions.getaction():
   600                     result = action.hasBlock(name)
   573                     result = action.hasblock(name)
   601                     if result:
   574                     if result:
   602                         return result
   575                         return result
   603         return False
   576         return False
   604     setattr(cls, "hasBlock", hasBlock)
   577     setattr(cls, "hasblock", hasblock)
   605     
   578     
   606     def addTransition(self, name, type):
   579     def addtransition(self, name, type):
   607         if not self.transitions:
   580         if not self.transitions:
   608             self.addTransitions()
   581             self.addtransitions()
   609             self.transitions.setTransition([])
   582             self.transitions.settransition([])
   610         transition = PLCOpenClasses["transitions_transition"]()
   583         transition = PLCOpenClasses["transitions_transition"]()
   611         transition.setName(name)
   584         transition.setname(name)
   612         transition.setBodyType(type)
   585         transition.setbodyType(type)
   613         self.transitions.appendTransition(transition)
   586         self.transitions.appendtransition(transition)
   614     setattr(cls, "addTransition", addTransition)
   587     setattr(cls, "addtransition", addtransition)
   615     
   588     
   616     def getTransition(self, name):
   589     def gettransition(self, name):
   617         if self.transitions:
   590         if self.transitions:
   618             for transition in self.transitions.getTransition():
   591             for transition in self.transitions.gettransition():
   619                 if transition.getName() == name:
   592                 if transition.getname() == name:
   620                     return transition
   593                     return transition
   621         return None
   594         return None
   622     setattr(cls, "getTransition", getTransition)
   595     setattr(cls, "gettransition", gettransition)
   623         
   596         
   624     def getTransitionList(self):
   597     def gettransitionList(self):
   625         if self.transitions:
   598         if self.transitions:
   626             return self.transitions.getTransition()
   599             return self.transitions.gettransition()
   627         return []
   600         return []
   628     setattr(cls, "getTransitionList", getTransitionList)
   601     setattr(cls, "gettransitionList", gettransitionList)
   629     
   602     
   630     def removeTransition(self, name):
   603     def removetransition(self, name):
   631         if self.transitions:
   604         if self.transitions:
   632             transitions = self.transitions.getTransition()
   605             transitions = self.transitions.gettransition()
   633             i = 0
   606             i = 0
   634             removed = False
   607             removed = False
   635             while i < len(transitions) and not removed:
   608             while i < len(transitions) and not removed:
   636                 if transitions[i].getName() == name:
   609                 if transitions[i].getname() == name:
   637                     transitions.pop(i)
   610                     transitions.pop(i)
   638                     removed = True
   611                     removed = True
   639                 i += 1
   612                 i += 1
   640             if not removed:
   613             if not removed:
   641                 raise ValueError, "Transition with name %s doesn't exists!"%name
   614                 raise ValueError, "Transition with name %s doesn't exists!"%name
   642     setattr(cls, "removeTransition", removeTransition)
   615     setattr(cls, "removetransition", removetransition)
   643 
   616 
   644     def addAction(self, name, type):
   617     def addaction(self, name, type):
   645         if not self.actions:
   618         if not self.actions:
   646             self.addActions()
   619             self.addactions()
   647             self.actions.setAction([])
   620             self.actions.setaction([])
   648         action = PLCOpenClasses["actions_action"]()
   621         action = PLCOpenClasses["actions_action"]()
   649         action.setName(name)
   622         action.setname(name)
   650         action.setBodyType(type)
   623         action.setbodyType(type)
   651         self.actions.appendAction(action)
   624         self.actions.appendaction(action)
   652     setattr(cls, "addAction", addAction)
   625     setattr(cls, "addaction", addaction)
   653     
   626     
   654     def getAction(self, name):
   627     def getaction(self, name):
   655         if self.actions:
   628         if self.actions:
   656             for action in self.actions.getAction():
   629             for action in self.actions.getaction():
   657                 if action.getName() == name:
   630                 if action.getname() == name:
   658                     return action
   631                     return action
   659         return None
   632         return None
   660     setattr(cls, "getAction", getAction)
   633     setattr(cls, "getaction", getaction)
   661     
   634     
   662     def getActionList(self):
   635     def getactionList(self):
   663         if self.actions:
   636         if self.actions:
   664             return self.actions.getAction()
   637             return self.actions.getaction()
   665         return []
   638         return []
   666     setattr(cls, "getActionList", getActionList)
   639     setattr(cls, "getactionList", getactionList)
   667         
   640         
   668     def removeAction(self, name):
   641     def removeaction(self, name):
   669         if self.actions:
   642         if self.actions:
   670             actions = self.actions.getAction()
   643             actions = self.actions.getaction()
   671             i = 0
   644             i = 0
   672             removed = False
   645             removed = False
   673             while i < len(actions) and not removed:
   646             while i < len(actions) and not removed:
   674                 if actions[i].getName() == name:
   647                 if actions[i].getname() == name:
   675                     actions.pop(i)
   648                     actions.pop(i)
   676                     removed = True
   649                     removed = True
   677                 i += 1
   650                 i += 1
   678             if not removed:
   651             if not removed:
   679                 raise ValueError, "Action with name %s doesn't exists!"%name
   652                 raise ValueError, "Action with name %s doesn't exists!"%name
   680     setattr(cls, "removeAction", removeAction)
   653     setattr(cls, "removeaction", removeaction)
   681 
   654 
   682     def updateElementName(self, old_name, new_name):
   655     def updateElementName(self, old_name, new_name):
   683         self.body.updateElementName(old_name, new_name)
   656         self.body.updateElementName(old_name, new_name)
   684         for action in self.getActionList():
   657         for action in self.getactionList():
   685             action.updateElementName(old_name, new_name)
   658             action.updateElementName(old_name, new_name)
   686         for transition in self.getTransitionList():
   659         for transition in self.gettransitionList():
   687             transition.updateElementName(old_name, new_name)
   660             transition.updateElementName(old_name, new_name)
   688     setattr(cls, "updateElementName", updateElementName)
   661     setattr(cls, "updateElementName", updateElementName)
   689 
   662 
   690 cls = PLCOpenClasses.get("transitions_transition", None)
   663 cls = PLCOpenClasses.get("transitions_transition", None)
   691 if cls:
   664 if cls:
   692     setattr(cls, "setBodyType", setBodyType)
   665     setattr(cls, "setbodyType", setbodyType)
   693     setattr(cls, "getBodyType", getBodyType)
   666     setattr(cls, "getbodyType", getbodyType)
   694     setattr(cls, "resetExecutionOrder", resetExecutionOrder)
   667     setattr(cls, "resetexecutionOrder", resetexecutionOrder)
   695     setattr(cls, "compileExecutionOrder", compileExecutionOrder)
   668     setattr(cls, "compileexecutionOrder", compileexecutionOrder)
   696     setattr(cls, "setElementExecutionOrder", setElementExecutionOrder)
   669     setattr(cls, "setelementExecutionOrder", setelementExecutionOrder)
   697     setattr(cls, "addInstance", addInstance)
   670     setattr(cls, "addinstance", addinstance)
   698     setattr(cls, "getInstances", getInstances)
   671     setattr(cls, "getinstances", getinstances)
   699     setattr(cls, "getInstance", getInstance)
   672     setattr(cls, "getinstance", getinstance)
   700     setattr(cls, "getRandomInstance", getRandomInstance)
   673     setattr(cls, "getrandomInstance", getrandomInstance)
   701     setattr(cls, "getInstanceByName", getInstanceByName)
   674     setattr(cls, "getinstanceByName", getinstanceByName)
   702     setattr(cls, "removeInstance", removeInstance)
   675     setattr(cls, "removeinstance", removeinstance)
   703     setattr(cls, "setText", setText)
   676     setattr(cls, "settext", settext)
   704     setattr(cls, "getText", getText)
   677     setattr(cls, "gettext", gettext)
   705 
   678 
   706     def updateElementName(self, old_name, new_name):
   679     def updateElementName(self, old_name, new_name):
   707         self.body.updateElementName(old_name, new_name)
   680         self.body.updateElementName(old_name, new_name)
   708     setattr(cls, "updateElementName", updateElementName)
   681     setattr(cls, "updateElementName", updateElementName)
   709 
   682 
   710     def hasBlock(self, name):
   683     def hasblock(self, name):
   711         if self.getBodyType() in ["FBD", "LD", "SFC"]:
   684         if self.getbodyType() in ["FBD", "LD", "SFC"]:
   712             for instance in self.getInstances():
   685             for instance in self.getinstances():
   713                 if isinstance(instance, PLCOpenClasses["block"]) and instance.getInstanceName() == name:
   686                 if isinstance(instance, PLCOpenClasses["fbdObjects_block"]) and instance.getinstanceName() == name:
   714                     return True
   687                     return True
   715         return False
   688         return False
   716     setattr(cls, "hasBlock", hasBlock)
   689     setattr(cls, "hasblock", hasblock)
   717 
   690 
   718 cls = PLCOpenClasses.get("actions_action", None)
   691 cls = PLCOpenClasses.get("actions_action", None)
   719 if cls:
   692 if cls:
   720     setattr(cls, "setBodyType", setBodyType)
   693     setattr(cls, "setbodyType", setbodyType)
   721     setattr(cls, "getBodyType", getBodyType)
   694     setattr(cls, "getbodyType", getbodyType)
   722     setattr(cls, "resetExecutionOrder", resetExecutionOrder)
   695     setattr(cls, "resetexecutionOrder", resetexecutionOrder)
   723     setattr(cls, "compileExecutionOrder", compileExecutionOrder)
   696     setattr(cls, "compileexecutionOrder", compileexecutionOrder)
   724     setattr(cls, "setElementExecutionOrder", setElementExecutionOrder)
   697     setattr(cls, "setelementExecutionOrder", setelementExecutionOrder)
   725     setattr(cls, "addInstance", addInstance)
   698     setattr(cls, "addinstance", addinstance)
   726     setattr(cls, "getInstances", getInstances)
   699     setattr(cls, "getinstances", getinstances)
   727     setattr(cls, "getInstance", getInstance)
   700     setattr(cls, "getinstance", getinstance)
   728     setattr(cls, "getRandomInstance", getRandomInstance)
   701     setattr(cls, "getrandomInstance", getrandomInstance)
   729     setattr(cls, "getInstanceByName", getInstanceByName)
   702     setattr(cls, "getinstanceByName", getinstanceByName)
   730     setattr(cls, "removeInstance", removeInstance)
   703     setattr(cls, "removeinstance", removeinstance)
   731     setattr(cls, "setText", setText)
   704     setattr(cls, "settext", settext)
   732     setattr(cls, "getText", getText)
   705     setattr(cls, "gettext", gettext)
   733 
   706 
   734     def updateElementName(self, old_name, new_name):
   707     def updateElementName(self, old_name, new_name):
   735         self.body.updateElementName(old_name, new_name)
   708         self.body.updateElementName(old_name, new_name)
   736     setattr(cls, "updateElementName", updateElementName)
   709     setattr(cls, "updateElementName", updateElementName)
   737 
   710 
   738     def hasBlock(self, name):
   711     def hasblock(self, name):
   739         if self.getBodyType() in ["FBD", "LD", "SFC"]:
   712         if self.getbodyType() in ["FBD", "LD", "SFC"]:
   740             for instance in self.getInstances():
   713             for instance in self.getinstances():
   741                 if isinstance(instance, PLCOpenClasses["block"]) and instance.getInstanceName() == name:
   714                 if isinstance(instance, PLCOpenClasses["fbdObjects_block"]) and instance.getinstanceName() == name:
   742                     return True
   715                     return True
   743         return False
   716         return False
   744     setattr(cls, "hasBlock", hasBlock)
   717     setattr(cls, "hasblock", hasblock)
   745 
   718 
   746 cls = PLCOpenClasses.get("body", None)
   719 cls = PLCOpenClasses.get("body", None)
   747 if cls:
   720 if cls:
   748     cls.currentExecutionOrderId = 0
   721     cls.currentExecutionOrderId = 0
   749     
   722     
   750     def resetCurrentExecutionOrderId(self):
   723     def resetcurrentExecutionOrderId(self):
   751         self.currentExecutionOrderId = 0
   724         self.currentExecutionOrderId = 0
   752     setattr(cls, "resetCurrentExecutionOrderId", resetCurrentExecutionOrderId)
   725     setattr(cls, "resetcurrentExecutionOrderId", resetcurrentExecutionOrderId)
   753     
   726     
   754     def getNewExecutionOrderId(self):
   727     def getnewExecutionOrderId(self):
   755         self.currentExecutionOrderId += 1
   728         self.currentExecutionOrderId += 1
   756         return self.currentExecutionOrderId
   729         return self.currentExecutionOrderId
   757     setattr(cls, "getNewExecutionOrderId", getNewExecutionOrderId)
   730     setattr(cls, "getnewExecutionOrderId", getnewExecutionOrderId)
   758     
   731     
   759     def resetExecutionOrder(self):
   732     def resetexecutionOrder(self):
   760         if self.content["name"] == "FBD":
   733         if self.content["name"] == "FBD":
   761             for element in self.content["value"].getContent():
   734             for element in self.content["value"].getcontent():
   762                 if not isinstance(element["value"], (PLCOpenClasses.get("comment", None), PLCOpenClasses.get("connector", None), PLCOpenClasses.get("continuation", None))):
   735                 if not isinstance(element["value"], (PLCOpenClasses.get("commonObjects_comment", None), 
   763                     element["value"].setExecutionOrderId(0)
   736                                                      PLCOpenClasses.get("commonObjects_connector", None), 
       
   737                                                      PLCOpenClasses.get("commonObjects_continuation", None))):
       
   738                     element["value"].setexecutionOrderId(0)
   764         else:
   739         else:
   765             raise TypeError, "Can only generate execution order on FBD networks!"
   740             raise TypeError, "Can only generate execution order on FBD networks!"
   766     setattr(cls, "resetExecutionOrder", resetExecutionOrder)
   741     setattr(cls, "resetexecutionOrder", resetexecutionOrder)
   767     
   742     
   768     def compileExecutionOrder(self):
   743     def compileexecutionOrder(self):
   769         if self.content["name"] == "FBD":
   744         if self.content["name"] == "FBD":
   770             self.resetExecutionOrder()
   745             self.resetexecutionOrder()
   771             self.resetCurrentExecutionOrderId()
   746             self.resetcurrentExecutionOrderId()
   772             for element in self.content["value"].getContent():
   747             for element in self.content["value"].getcontent():
   773                 if isinstance(element["value"], PLCOpenClasses.get("outVariable", None)) and element["value"].getExecutionOrderId() == 0:
   748                 if isinstance(element["value"], PLCOpenClasses.get("fbdObjects_outVariable", None)) and element["value"].getExecutionOrderId() == 0:
   774                     connections = element["value"].connectionPointIn.getConnections()
   749                     connections = element["value"].connectionPointIn.getconnections()
   775                     if connections and len(connections) == 1:
   750                     if connections and len(connections) == 1:
   776                         self.compileElementExecutionOrder(connections[0])
   751                         self.compileelementExecutionOrder(connections[0])
   777                     element["value"].setExecutionOrderId(self.getNewExecutionOrderId())
   752                     element["value"].setexecutionOrderId(self.getnewExecutionOrderId())
   778         else:
   753         else:
   779             raise TypeError, "Can only generate execution order on FBD networks!"
   754             raise TypeError, "Can only generate execution order on FBD networks!"
   780     setattr(cls, "compileExecutionOrder", compileExecutionOrder)
   755     setattr(cls, "compileexecutionOrder", compileexecutionOrder)
   781     
   756     
   782     def compileElementExecutionOrder(self, link):
   757     def compileelementExecutionOrder(self, link):
   783         if self.content["name"] == "FBD":
   758         if self.content["name"] == "FBD":
   784             localid = link.getRefLocalId()
   759             localid = link.getrefLocalId()
   785             instance = self.getContentInstance(localid)
   760             instance = self.getcontentInstance(localid)
   786             if isinstance(instance, PLCOpenClasses.get("block", None)) and instance.getExecutionOrderId() == 0:
   761             if isinstance(instance, PLCOpenClasses.get("fbdObjects_block", None)) and instance.getexecutionOrderId() == 0:
   787                 for variable in instance.inputVariables.getVariable():
   762                 for variable in instance.inputVariables.getvariable():
   788                     connections = variable.connectionPointIn.getConnections()
   763                     connections = variable.connectionPointIn.getconnections()
   789                     if connections and len(connections) == 1:
   764                     if connections and len(connections) == 1:
   790                         self.compileElementExecutionOrder(connections[0])
   765                         self.compileelementExecutionOrder(connections[0])
   791                 instance.setExecutionOrderId(self.getNewExecutionOrderId())
   766                 instance.setexecutionOrderId(self.getnewExecutionOrderId())
   792             elif isinstance(instance, PLCOpenClasses.get("continuation", None)) and instance.getExecutionOrderId() == 0:
   767             elif isinstance(instance, PLCOpenClasses.get("commonObjects_continuation", None)) and instance.getexecutionOrderId() == 0:
   793                 name = instance.getName()
   768                 name = instance.getname()
   794                 for tmp_instance in self.getContentInstances():
   769                 for tmp_instance in self.getcontentInstances():
   795                     if isinstance(tmp_instance, PLCOpenClasses.get("connector", None)) and tmp_instance.getName() == name and tmp_instance.getExecutionOrderId() == 0:
   770                     if isinstance(tmp_instance, PLCOpenClasses.get("commonObjects_connector", None)) and tmp_instance.getname() == name and tmp_instance.getexecutionOrderId() == 0:
   796                         connections = tmp_instance.connectionPointIn.getConnections()
   771                         connections = tmp_instance.connectionPointIn.getconnections()
   797                         if connections and len(connections) == 1:
   772                         if connections and len(connections) == 1:
   798                             self.compileElementExecutionOrder(connections[0])
   773                             self.compileelementExecutionOrder(connections[0])
   799         else:
   774         else:
   800             raise TypeError, "Can only generate execution order on FBD networks!"
   775             raise TypeError, "Can only generate execution order on FBD networks!"
   801     setattr(cls, "compileElementExecutionOrder", compileElementExecutionOrder)
   776     setattr(cls, "compileelementExecutionOrder", compileelementExecutionOrder)
   802     
   777     
   803     def setElementExecutionOrder(self, instance, new_executionOrder):
   778     def setelementExecutionOrder(self, instance, new_executionOrder):
   804         if self.content["name"] == "FBD":
   779         if self.content["name"] == "FBD":
   805             old_executionOrder = instance.getExecutionOrderId()
   780             old_executionOrder = instance.getexecutionOrderId()
   806             if old_executionOrder is not None and old_executionOrder != 0 and new_executionOrder != 0:
   781             if old_executionOrder is not None and old_executionOrder != 0 and new_executionOrder != 0:
   807                 for element in self.content["value"].getContent():
   782                 for element in self.content["value"].getcontent():
   808                     if element["value"] != instance and not isinstance(element["value"], PLCOpenClasses.get("comment", None)):
   783                     if element["value"] != instance and not isinstance(element["value"], PLCOpenClasses.get("commonObjects_comment", None)):
   809                         element_executionOrder = element["value"].getExecutionOrderId()
   784                         element_executionOrder = element["value"].getexecutionOrderId()
   810                         if old_executionOrder <= element_executionOrder <= new_executionOrder:
   785                         if old_executionOrder <= element_executionOrder <= new_executionOrder:
   811                             element["value"].setExecutionOrderId(element_executionOrder - 1)
   786                             element["value"].setexecutionOrderId(element_executionOrder - 1)
   812                         if new_executionOrder <= element_executionOrder <= old_executionOrder:
   787                         if new_executionOrder <= element_executionOrder <= old_executionOrder:
   813                             element["value"].setExecutionOrderId(element_executionOrder + 1)
   788                             element["value"].setexecutionOrderId(element_executionOrder + 1)
   814             instance.setExecutionOrderId(new_executionOrder)
   789             instance.setexecutionOrderId(new_executionOrder)
   815         else:
   790         else:
   816             raise TypeError, "Can only generate execution order on FBD networks!"
   791             raise TypeError, "Can only generate execution order on FBD networks!"
   817     setattr(cls, "setElementExecutionOrder", setElementExecutionOrder)
   792     setattr(cls, "setelementExecutionOrder", setelementExecutionOrder)
   818     
   793     
   819     def appendContentInstance(self, name, instance):
   794     def appendcontentInstance(self, name, instance):
   820         if self.content["name"] in ["LD","FBD","SFC"]:
   795         if self.content["name"] in ["LD","FBD","SFC"]:
   821             self.content["value"].appendContent(name, instance)
   796             self.content["value"].appendcontent({"name" : name, "value" : instance})
   822         else:
   797         else:
   823             raise TypeError, "%s body don't have instances!"%self.content["name"]
   798             raise TypeError, "%s body don't have instances!"%self.content["name"]
   824     setattr(cls, "appendContentInstance", appendContentInstance)
   799     setattr(cls, "appendcontentInstance", appendcontentInstance)
   825     
   800     
   826     def getContentInstances(self):
   801     def getcontentInstances(self):
   827         if self.content["name"] in ["LD","FBD","SFC"]:
   802         if self.content["name"] in ["LD","FBD","SFC"]:
   828             instances = []
   803             instances = []
   829             for element in self.content["value"].getContent():
   804             for element in self.content["value"].getcontent():
   830                 instances.append(element["value"])
   805                 instances.append(element["value"])
   831             return instances
   806             return instances
   832         else:
   807         else:
   833             raise TypeError, "%s body don't have instances!"%self.content["name"]
   808             raise TypeError, "%s body don't have instances!"%self.content["name"]
   834     setattr(cls, "getContentInstances", getContentInstances)
   809     setattr(cls, "getcontentInstances", getcontentInstances)
   835 
   810 
   836     def getContentInstance(self, id):
   811     def getcontentInstance(self, id):
   837         if self.content["name"] in ["LD","FBD","SFC"]:
   812         if self.content["name"] in ["LD","FBD","SFC"]:
   838             for element in self.content["value"].getContent():
   813             for element in self.content["value"].getcontent():
   839                 if element["value"].getLocalId() == id:
   814                 if element["value"].getlocalId() == id:
   840                     return element["value"]
   815                     return element["value"]
   841             return None
   816             return None
   842         else:
   817         else:
   843             raise TypeError, "%s body don't have instances!"%self.content["name"]
   818             raise TypeError, "%s body don't have instances!"%self.content["name"]
   844     setattr(cls, "getContentInstance", getContentInstance)
   819     setattr(cls, "getcontentInstance", getcontentInstance)
   845     
   820     
   846     def getContentRandomInstance(self, exclude):
   821     def getcontentRandomInstance(self, exclude):
   847         if self.content["name"] in ["LD","FBD","SFC"]:
   822         if self.content["name"] in ["LD","FBD","SFC"]:
   848             for element in self.content["value"].getContent():
   823             for element in self.content["value"].getcontent():
   849                 if element["value"].getLocalId() not in exclude:
   824                 if element["value"].getlocalId() not in exclude:
   850                     return element["value"]
   825                     return element["value"]
   851             return None
   826             return None
   852         else:
   827         else:
   853             raise TypeError, "%s body don't have instances!"%self.content["name"]
   828             raise TypeError, "%s body don't have instances!"%self.content["name"]
   854     setattr(cls, "getContentRandomInstance", getContentRandomInstance)
   829     setattr(cls, "getcontentRandomInstance", getcontentRandomInstance)
   855     
   830     
   856     def getContentInstanceByName(self, name):
   831     def getcontentInstanceByName(self, name):
   857         if self.content["name"] in ["LD","FBD","SFC"]:
   832         if self.content["name"] in ["LD","FBD","SFC"]:
   858             for element in self.content["value"].getContent():
   833             for element in self.content["value"].getcontent():
   859                 if element["value"].getLocalId() == name:
   834                 if element["value"].getLocalId() == name:
   860                     return element["value"]
   835                     return element["value"]
   861         else:
   836         else:
   862             raise TypeError, "%s body don't have instances!"%self.content["name"]
   837             raise TypeError, "%s body don't have instances!"%self.content["name"]
   863     setattr(cls, "getContentInstanceByName", getContentInstanceByName)
   838     setattr(cls, "getcontentInstanceByName", getcontentInstanceByName)
   864     
   839     
   865     def removeContentInstance(self, id):
   840     def removecontentInstance(self, id):
   866         if self.content["name"] in ["LD","FBD","SFC"]:
   841         if self.content["name"] in ["LD","FBD","SFC"]:
   867             i = 0
   842             i = 0
   868             removed = False
   843             removed = False
   869             elements = self.content["value"].getContent()
   844             elements = self.content["value"].getcontent()
   870             while i < len(elements) and not removed:
   845             while i < len(elements) and not removed:
   871                 if elements[i]["value"].getLocalId() == id:
   846                 if elements[i]["value"].getlocalId() == id:
   872                     self.content["value"].removeContent(i)
   847                     self.content["value"].removecontent(i)
   873                     removed = True
   848                     removed = True
   874                 i += 1
   849                 i += 1
   875             if not removed:
   850             if not removed:
   876                 raise ValueError, "Instance with id %d doesn't exists!"%id
   851                 raise ValueError, "Instance with id %d doesn't exists!"%id
   877         else:
   852         else:
   878             raise TypeError, "%s body don't have instances!"%self.content["name"]
   853             raise TypeError, "%s body don't have instances!"%self.content["name"]
   879     setattr(cls, "removeContentInstance", removeContentInstance)
   854     setattr(cls, "removecontentInstance", removecontentInstance)
   880     
   855     
   881     def setText(self, text):
   856     def settext(self, text):
   882         if self.content["name"] in ["IL","ST"]:
   857         if self.content["name"] in ["IL","ST"]:
   883             self.content["value"].setText(text)
   858             self.content["value"].settext(text)
   884         else:
   859         else:
   885             raise TypeError, "%s body don't have text!"%self.content["name"]
   860             raise TypeError, "%s body don't have text!"%self.content["name"]
   886     setattr(cls, "setText", setText)
   861     setattr(cls, "settext", settext)
   887 
   862 
   888     def getText(self):
   863     def gettext(self):
   889         if self.content["name"] in ["IL","ST"]:
   864         if self.content["name"] in ["IL","ST"]:
   890             return self.content["value"].getText()
   865             return self.content["value"].gettext()
   891         else:
   866         else:
   892             raise TypeError, "%s body don't have text!"%self.content["name"]
   867             raise TypeError, "%s body don't have text!"%self.content["name"]
   893     setattr(cls, "getText", getText)
   868     setattr(cls, "gettext", gettext)
   894     
   869     
   895     def updateElementName(self, old_name, new_name):
   870     def updateElementName(self, old_name, new_name):
   896         if self.content["name"] in ["IL", "ST"]:
   871         if self.content["name"] in ["IL", "ST"]:
   897             self.content["value"].updateElementName(old_name, new_name)
   872             self.content["value"].updateElementName(old_name, new_name)
   898         else:
   873         else:
   899             for element in self.content["value"].getContent():
   874             for element in self.content["value"].getcontent():
   900                 element["value"].updateElementName(old_name, new_name)
   875                 element["value"].updateElementName(old_name, new_name)
   901     setattr(cls, "updateElementName", updateElementName)
   876     setattr(cls, "updateElementName", updateElementName)
   902 
   877 
   903 def getX(self):
   878 def getx(self):
   904     return self.position.getX()
   879     return self.position.getx()
   905 
   880 
   906 def getY(self):
   881 def gety(self):
   907     return self.position.getY()
   882     return self.position.gety()
   908 
   883 
   909 def setX(self, x):
   884 def setx(self, x):
   910     self.position.setX(x)
   885     self.position.setx(x)
   911     
   886     
   912 def setY(self, y):
   887 def sety(self, y):
   913     self.position.setY(y)
   888     self.position.sety(y)
   914 
   889 
   915 cls = PLCOpenClasses.get("comment", None)
   890 cls = PLCOpenClasses.get("commonObjects_comment", None)
   916 if cls:
   891 if cls:
   917     setattr(cls, "getX", getX)
   892     setattr(cls, "getx", getx)
   918     setattr(cls, "getY", getY)
   893     setattr(cls, "gety", gety)
   919     setattr(cls, "setX", setX)
   894     setattr(cls, "setx", setx)
   920     setattr(cls, "setY", setY)
   895     setattr(cls, "sety", sety)
   921 
   896 
   922     def setContentText(self, text):
   897     def setcontentText(self, text):
   923         self.content.setText(text)
   898         self.content.settext(text)
   924     setattr(cls, "setContentText", setContentText)
   899     setattr(cls, "setcontentText", setcontentText)
   925         
   900         
   926     def getContentText(self):
   901     def getcontentText(self):
   927         return self.content.getText()
   902         return self.content.gettext()
   928     setattr(cls, "getContentText", getContentText)
   903     setattr(cls, "getcontentText", getcontentText)
   929     
   904     
   930     def updateElementName(self, old_name, new_name):
   905     def updateElementName(self, old_name, new_name):
   931         self.content.updateElementName(old_name, new_name)
   906         self.content.updateElementName(old_name, new_name)
   932     setattr(cls, "updateElementName", updateElementName)
   907     setattr(cls, "updateElementName", updateElementName)
   933 
   908 
   934 cls = PLCOpenClasses.get("block", None)
   909 cls = PLCOpenClasses.get("fbdObjects_block", None)
   935 if cls:
   910 if cls:
   936     setattr(cls, "getX", getX)
   911     setattr(cls, "getx", getx)
   937     setattr(cls, "getY", getY)
   912     setattr(cls, "gety", gety)
   938     setattr(cls, "setX", setX)
   913     setattr(cls, "setx", setx)
   939     setattr(cls, "setY", setY)
   914     setattr(cls, "sety", sety)
   940 
   915 
   941     def updateElementName(self, old_name, new_name):
   916     def updateElementName(self, old_name, new_name):
   942         if self.typeName == old_name:
   917         if self.typeName == old_name:
   943             self.typeName = new_name
   918             self.typeName = new_name
   944     setattr(cls, "updateElementName", updateElementName)
   919     setattr(cls, "updateElementName", updateElementName)
   945 
   920 
   946 cls = PLCOpenClasses.get("inputVariables_variable", None)
   921 cls = PLCOpenClasses.get("ldObjects_leftPowerRail", None)
   947 if cls:
   922 if cls:
   948     def setConnectorEdge(self, edge):
   923     setattr(cls, "getx", getx)
   949         if not self.edge:
   924     setattr(cls, "gety", gety)
   950             self.edge = PLCOpenClasses["edgeModifierType"]()
   925     setattr(cls, "setx", setx)
   951         self.edge.setValue(edge)
   926     setattr(cls, "sety", sety)
   952     setattr(cls, "setConnectorEdge", setConnectorEdge)
       
   953     
       
   954     def getConnectorEdge(self):
       
   955         if self.edge:
       
   956             return self.edge.getValue()
       
   957         return None
       
   958     setattr(cls, "getConnectorEdge", getConnectorEdge)
       
   959 
       
   960 cls = PLCOpenClasses.get("outputVariables_variable", None)
       
   961 if cls:
       
   962     def setConnectorEdge(self, edge):
       
   963         if not self.edge:
       
   964             self.edge = PLCOpenClasses["edgeModifierType"]()
       
   965         self.edge.setValue(edge)
       
   966     setattr(cls, "setConnectorEdge", setConnectorEdge)
       
   967     
       
   968     def getConnectorEdge(self):
       
   969         if self.edge:
       
   970             return self.edge.getValue()
       
   971         return None
       
   972     setattr(cls, "getConnectorEdge", getConnectorEdge)
       
   973 
       
   974 cls = PLCOpenClasses.get("leftPowerRail", None)
       
   975 if cls:
       
   976     setattr(cls, "getX", getX)
       
   977     setattr(cls, "getY", getY)
       
   978     setattr(cls, "setX", setX)
       
   979     setattr(cls, "setY", setY)
       
   980 
   927 
   981     def updateElementName(self, old_name, new_name):
   928     def updateElementName(self, old_name, new_name):
   982         pass
   929         pass
   983     setattr(cls, "updateElementName", updateElementName)
   930     setattr(cls, "updateElementName", updateElementName)
   984 
   931 
   985 cls = PLCOpenClasses.get("rightPowerRail", None)
   932 cls = PLCOpenClasses.get("ldObjects_rightPowerRail", None)
   986 if cls:
   933 if cls:
   987     setattr(cls, "getX", getX)
   934     setattr(cls, "getx", getx)
   988     setattr(cls, "getY", getY)
   935     setattr(cls, "gety", gety)
   989     setattr(cls, "setX", setX)
   936     setattr(cls, "setx", setx)
   990     setattr(cls, "setY", setY)
   937     setattr(cls, "sety", sety)
   991     
   938     
   992     def updateElementName(self, old_name, new_name):
   939     def updateElementName(self, old_name, new_name):
   993         pass
   940         pass
   994     setattr(cls, "updateElementName", updateElementName)
   941     setattr(cls, "updateElementName", updateElementName)
   995 
   942 
   996 cls = PLCOpenClasses.get("contact", None)
   943 cls = PLCOpenClasses.get("ldObjects_contact", None)
   997 if cls:
   944 if cls:
   998     setattr(cls, "getX", getX)
   945     setattr(cls, "getx", getx)
   999     setattr(cls, "getY", getY)
   946     setattr(cls, "gety", gety)
  1000     setattr(cls, "setX", setX)
   947     setattr(cls, "setx", setx)
  1001     setattr(cls, "setY", setY)
   948     setattr(cls, "sety", sety)
  1002 
       
  1003     def setContactEdge(self, edge):
       
  1004         if not self.edge:
       
  1005             self.edge = PLCOpenClasses["edgeModifierType"]()
       
  1006         self.edge.setValue(edge)
       
  1007     setattr(cls, "setContactEdge", setContactEdge)
       
  1008     
       
  1009     def getContactEdge(self):
       
  1010         if self.edge:
       
  1011             return self.edge.getValue()
       
  1012         return None
       
  1013     setattr(cls, "getContactEdge", getContactEdge)
       
  1014 
   949 
  1015     def updateElementName(self, old_name, new_name):
   950     def updateElementName(self, old_name, new_name):
  1016         if self.variable == old_name:
   951         if self.variable == old_name:
  1017             self.variable = new_name
   952             self.variable = new_name
  1018     setattr(cls, "updateElementName", updateElementName)
   953     setattr(cls, "updateElementName", updateElementName)
  1019 
   954 
  1020 cls = PLCOpenClasses.get("coil", None)
   955 cls = PLCOpenClasses.get("ldObjects_coil", None)
  1021 if cls:
   956 if cls:
  1022     setattr(cls, "getX", getX)
   957     setattr(cls, "getx", getx)
  1023     setattr(cls, "getY", getY)
   958     setattr(cls, "gety", gety)
  1024     setattr(cls, "setX", setX)
   959     setattr(cls, "setx", setx)
  1025     setattr(cls, "setY", setY)
   960     setattr(cls, "sety", sety)
  1026     
       
  1027     def setCoilStorage(self, edge):
       
  1028         if not self.storage:
       
  1029             self.storage = PLCOpenClasses["storageModifierType"]()
       
  1030         self.storage.setValue(edge)
       
  1031     setattr(cls, "setCoilStorage", setCoilStorage)
       
  1032     
       
  1033     def getCoilStorage(self):
       
  1034         if self.storage:
       
  1035             return self.storage.getValue()
       
  1036         return None
       
  1037     setattr(cls, "getCoilStorage", getCoilStorage)
       
  1038 
   961 
  1039     def updateElementName(self, old_name, new_name):
   962     def updateElementName(self, old_name, new_name):
  1040         if self.variable == old_name:
   963         if self.variable == old_name:
  1041             self.variable = new_name
   964             self.variable = new_name
  1042     setattr(cls, "updateElementName", updateElementName)
   965     setattr(cls, "updateElementName", updateElementName)
  1043 
   966 
  1044 cls = PLCOpenClasses.get("step", None)
   967 cls = PLCOpenClasses.get("sfcObjects_step", None)
  1045 if cls:
   968 if cls:
  1046     setattr(cls, "getX", getX)
   969     setattr(cls, "getx", getx)
  1047     setattr(cls, "getY", getY)
   970     setattr(cls, "gety", gety)
  1048     setattr(cls, "setX", setX)
   971     setattr(cls, "setx", setx)
  1049     setattr(cls, "setY", setY)
   972     setattr(cls, "sety", sety)
  1050 
   973 
  1051     def updateElementName(self, old_name, new_name):
   974     def updateElementName(self, old_name, new_name):
  1052         pass
   975         pass
  1053     setattr(cls, "updateElementName", updateElementName)
   976     setattr(cls, "updateElementName", updateElementName)
  1054 
   977 
  1055 cls = PLCOpenClasses.get("transition", None)
   978 cls = PLCOpenClasses.get("sfcObjects_transition", None)
  1056 if cls:
   979 if cls:
  1057     setattr(cls, "getX", getX)
   980     setattr(cls, "getx", getx)
  1058     setattr(cls, "getY", getY)
   981     setattr(cls, "gety", gety)
  1059     setattr(cls, "setX", setX)
   982     setattr(cls, "setx", setx)
  1060     setattr(cls, "setY", setY)
   983     setattr(cls, "sety", sety)
  1061 
   984 
  1062     def setConditionContent(self, type, value):
   985     def setconditionContent(self, type, value):
  1063         if not self.condition:
   986         if not self.condition:
  1064             self.addCondition()
   987             self.addcondition()
  1065         if type == "reference":
   988         if type == "reference":
  1066             condition = PLCOpenClasses["condition_reference"]()
   989             condition = PLCOpenClasses["condition_reference"]()
  1067             condition.setName(value)
   990             condition.setname(value)
  1068         elif type == "inline":
   991         elif type == "inline":
  1069             condition = PLCOpenClasses["condition_inline"]()
   992             condition = PLCOpenClasses["condition_inline"]()
  1070             condition.setContent("ST", PLCOpenClasses["formattedText"]())
   993             condition.setcontent({"name" : "ST", "value" : PLCOpenClasses["formattedText"]()})
  1071             condition.setText(value)
   994             condition.settext(value)
  1072         elif type == "connection":
   995         elif type == "connection":
  1073             condition = []
   996             condition = []
  1074         self.condition.setContent(type, condition)
   997         self.condition.setcontent({"name" : type, "value" : condition})
  1075     setattr(cls, "setConditionContent", setConditionContent)
   998     setattr(cls, "setconditionContent", setconditionContent)
  1076         
   999         
  1077     def getConditionContent(self):
  1000     def getconditionContent(self):
  1078         if self.condition:
  1001         if self.condition:
  1079             content = self.condition.getContent()
  1002             content = self.condition.getcontent()
  1080             values = {"type" : content["name"]}
  1003             values = {"type" : content["name"]}
  1081             if values["type"] == "reference":
  1004             if values["type"] == "reference":
  1082                 values["value"] = content["value"].getName()
  1005                 values["value"] = content["value"].getname()
  1083             elif values["type"] == "inline":
  1006             elif values["type"] == "inline":
  1084                 values["value"] = content["value"].getText()
  1007                 values["value"] = content["value"].gettext()
  1085             return values
  1008             return values
  1086         return ""
  1009         return ""
  1087     setattr(cls, "getConditionContent", getConditionContent)
  1010     setattr(cls, "getconditionContent", getconditionContent)
  1088 
  1011 
  1089     def updateElementName(self, old_name, new_name):
  1012     def updateElementName(self, old_name, new_name):
  1090         if self.condition:
  1013         if self.condition:
  1091             content = self.condition.getContent()
  1014             content = self.condition.getcontent()
  1092             if content["name"] == "reference":
  1015             if content["name"] == "reference":
  1093                 if content["value"].getName() == old_name:
  1016                 if content["value"].getname() == old_name:
  1094                     content["value"].setName(new_name)
  1017                     content["value"].setname(new_name)
  1095             elif content["name"] == "inline":
  1018             elif content["name"] == "inline":
  1096                 content["value"].updateElementName(old_name, new_name)
  1019                 content["value"].updateElementName(old_name, new_name)
  1097     setattr(cls, "updateElementName", updateElementName)
  1020     setattr(cls, "updateElementName", updateElementName)
  1098 
  1021 
  1099     def addConnection(self):
  1022     def addconnection(self):
  1100         if self.condition:
  1023         if self.condition:
  1101             content = self.condition.getContent()
  1024             content = self.condition.getcontent()
  1102             if content["name"] != "connection":
  1025             if content["name"] != "connection":
  1103                 self.condition.setContent("connection", [])
  1026                 self.condition.setcontent({"name" : "connection", "value" : []})
  1104                 content = self.condition.getContent()
  1027                 content = self.condition.getcontent()
  1105             content["value"].append(PLCOpenClasses["connection"]())
  1028             content["value"].append(PLCOpenClasses["connection"]())
  1106     setattr(cls, "addConnection", addConnection)
  1029     setattr(cls, "addconnection", addconnection)
  1107     
  1030     
  1108     def removeConnection(self, idx):
  1031     def removeconnection(self, idx):
  1109         if self.condition:
  1032         if self.condition:
  1110             content = self.condition.getContent()
  1033             content = self.condition.getcontent()
  1111             if content["name"] == "connection":
  1034             if content["name"] == "connection":
  1112                 content["value"].pop(idx)
  1035                 content["value"].pop(idx)
  1113         setattr(cls, "removeConnection", removeConnection)
  1036         setattr(cls, "removeconnection", removeconnection)
  1114 
  1037 
  1115     def removeConnections(self):
  1038     def removeconnections(self):
  1116         if self.condition:
  1039         if self.condition:
  1117             content = self.condition.getContent()
  1040             content = self.condition.getcontent()
  1118             if content["name"] == "connection":
  1041             if content["name"] == "connection":
  1119                 content["value"] = []
  1042                 content["value"] = []
  1120     setattr(cls, "removeConnections", removeConnections)
  1043     setattr(cls, "removeconnections", removeconnections)
  1121     
  1044     
  1122     def getConnections(self):
  1045     def getconnections(self):
  1123         if self.condition:
  1046         if self.condition:
  1124             content = self.condition.getContent()
  1047             content = self.condition.getcontent()
  1125             if content["name"] == "connection":
  1048             if content["name"] == "connection":
  1126                 return content["value"]
  1049                 return content["value"]
  1127     setattr(cls, "getConnections", getConnections)
  1050     setattr(cls, "getconnections", getconnections)
  1128     
  1051     
  1129     def setConnectionId(self, idx, id):
  1052     def setconnectionId(self, idx, id):
  1130         if self.condition:
  1053         if self.condition:
  1131             content = self.condition.getContent()
  1054             content = self.condition.getcontent()
  1132             if content["name"] == "connection":
  1055             if content["name"] == "connection":
  1133                 content["value"][idx].setRefLocalId(id)
  1056                 content["value"][idx].setrefLocalId(id)
  1134     setattr(cls, "setConnectionId", setConnectionId)
  1057     setattr(cls, "setconnectionId", setconnectionId)
  1135     
  1058     
  1136     def getConnectionId(self, idx):
  1059     def getconnectionId(self, idx):
  1137         if self.condition:
  1060         if self.condition:
  1138             content = self.condition.getContent()
  1061             content = self.condition.getcontent()
  1139             if content["name"] == "connection":
  1062             if content["name"] == "connection":
  1140                 return content["value"][idx].getRefLocalId()
  1063                 return content["value"][idx].getrefLocalId()
  1141         return None
  1064         return None
  1142     setattr(cls, "getConnectionId", getConnectionId)
  1065     setattr(cls, "getconnectionId", getconnectionId)
  1143     
  1066     
  1144     def setConnectionPoints(self, idx, points):
  1067     def setconnectionPoints(self, idx, points):
  1145         if self.condition:
  1068         if self.condition:
  1146             content = self.condition.getContent()
  1069             content = self.condition.getcontent()
  1147             if content["name"] == "connection":
  1070             if content["name"] == "connection":
  1148                 content["value"][idx].setPoints(points)
  1071                 content["value"][idx].setpoints(points)
  1149     setattr(cls, "setConnectionPoints", setConnectionPoints)
  1072     setattr(cls, "setconnectionPoints", setconnectionPoints)
  1150 
  1073 
  1151     def getConnectionPoints(self, idx):
  1074     def getconnectionPoints(self, idx):
  1152         if self.condition:
  1075         if self.condition:
  1153             content = self.condition.getContent()
  1076             content = self.condition.getcontent()
  1154             if content["name"] == "connection":
  1077             if content["name"] == "connection":
  1155                 return content["value"][idx].getPoints()
  1078                 return content["value"][idx].getpoints()
  1156         return None
  1079         return None
  1157     setattr(cls, "getConnectionPoints", getConnectionPoints)
  1080     setattr(cls, "getconnectionPoints", getconnectionPoints)
  1158 
  1081 
  1159     def setConnectionParameter(self, idx, parameter):
  1082     def setconnectionParameter(self, idx, parameter):
  1160         if self.condition:
  1083         if self.condition:
  1161             content = self.condition.getContent()
  1084             content = self.condition.getcontent()
  1162             if content["name"] == "connection":
  1085             if content["name"] == "connection":
  1163                 content["value"][idx].setFormalParameter(parameter)
  1086                 content["value"][idx].setformalParameter(parameter)
  1164     setattr(cls, "setConnectionParameter", setConnectionParameter)
  1087     setattr(cls, "setconnectionParameter", setconnectionParameter)
  1165     
  1088     
  1166     def getConnectionParameter(self, idx):
  1089     def getconnectionParameter(self, idx):
  1167         if self.condition:
  1090         if self.condition:
  1168             content = self.condition.getContent()
  1091             content = self.condition.getcontent()
  1169             if content["name"] == "connection":
  1092             if content["name"] == "connection":
  1170                 return content["value"][idx].getFormalParameter()
  1093                 return content["value"][idx].getformalParameter()
  1171         return None
  1094         return None
  1172     setattr(cls, "getConnectionParameter", getConnectionParameter)
  1095     setattr(cls, "getconnectionParameter", getconnectionParameter)
  1173     
  1096 
  1174     setattr(cls, "addConnection", addConnection)    
  1097 cls = PLCOpenClasses.get("sfcObjects_selectionDivergence", None)
  1175 
  1098 if cls:
  1176 cls = PLCOpenClasses.get("selectionDivergence", None)
  1099     setattr(cls, "getx", getx)
  1177 if cls:
  1100     setattr(cls, "gety", gety)
  1178     setattr(cls, "getX", getX)
  1101     setattr(cls, "setx", setx)
  1179     setattr(cls, "getY", getY)
  1102     setattr(cls, "sety", sety)
  1180     setattr(cls, "setX", setX)
       
  1181     setattr(cls, "setY", setY)
       
  1182 
  1103 
  1183     def updateElementName(self, old_name, new_name):
  1104     def updateElementName(self, old_name, new_name):
  1184         pass
  1105         pass
  1185     setattr(cls, "updateElementName", updateElementName)
  1106     setattr(cls, "updateElementName", updateElementName)
  1186 
  1107 
  1187 cls = PLCOpenClasses.get("selectionConvergence", None)
  1108 cls = PLCOpenClasses.get("sfcObjects_selectionConvergence", None)
  1188 if cls:
  1109 if cls:
  1189     setattr(cls, "getX", getX)
  1110     setattr(cls, "getx", getx)
  1190     setattr(cls, "getY", getY)
  1111     setattr(cls, "gety", gety)
  1191     setattr(cls, "setX", setX)
  1112     setattr(cls, "setx", setx)
  1192     setattr(cls, "setY", setY)
  1113     setattr(cls, "sety", sety)
  1193     
  1114     
  1194     def updateElementName(self, old_name, new_name):
  1115     def updateElementName(self, old_name, new_name):
  1195         pass
  1116         pass
  1196     setattr(cls, "updateElementName", updateElementName)
  1117     setattr(cls, "updateElementName", updateElementName)
  1197     
  1118     
  1198 cls = PLCOpenClasses.get("simultaneousDivergence", None)
  1119 cls = PLCOpenClasses.get("sfcObjects_simultaneousDivergence", None)
  1199 if cls:
  1120 if cls:
  1200     setattr(cls, "getX", getX)
  1121     setattr(cls, "getx", getx)
  1201     setattr(cls, "getY", getY)
  1122     setattr(cls, "gety", gety)
  1202     setattr(cls, "setX", setX)
  1123     setattr(cls, "setx", setx)
  1203     setattr(cls, "setY", setY)
  1124     setattr(cls, "sety", sety)
  1204     
  1125     
  1205     def updateElementName(self, old_name, new_name):
  1126     def updateElementName(self, old_name, new_name):
  1206         pass
  1127         pass
  1207     setattr(cls, "updateElementName", updateElementName)
  1128     setattr(cls, "updateElementName", updateElementName)
  1208     
  1129     
  1209 cls = PLCOpenClasses.get("simultaneousConvergence", None)
  1130 cls = PLCOpenClasses.get("sfcObjects_simultaneousConvergence", None)
  1210 if cls:
  1131 if cls:
  1211     setattr(cls, "getX", getX)
  1132     setattr(cls, "getx", getx)
  1212     setattr(cls, "getY", getY)
  1133     setattr(cls, "gety", gety)
  1213     setattr(cls, "setX", setX)
  1134     setattr(cls, "setx", setx)
  1214     setattr(cls, "setY", setY)
  1135     setattr(cls, "sety", sety)
  1215     
  1136     
  1216     def updateElementName(self, old_name, new_name):
  1137     def updateElementName(self, old_name, new_name):
  1217         pass
  1138         pass
  1218     setattr(cls, "updateElementName", updateElementName)
  1139     setattr(cls, "updateElementName", updateElementName)
  1219 
  1140 
  1220 cls = PLCOpenClasses.get("jumpStep", None)
  1141 cls = PLCOpenClasses.get("sfcObjects_jumpStep", None)
  1221 if cls:
  1142 if cls:
  1222     setattr(cls, "getX", getX)
  1143     setattr(cls, "getx", getx)
  1223     setattr(cls, "getY", getY)
  1144     setattr(cls, "gety", gety)
  1224     setattr(cls, "setX", setX)
  1145     setattr(cls, "setx", setx)
  1225     setattr(cls, "setY", setY)
  1146     setattr(cls, "sety", sety)
  1226     
  1147     
  1227     def updateElementName(self, old_name, new_name):
  1148     def updateElementName(self, old_name, new_name):
  1228         pass
  1149         pass
  1229     setattr(cls, "updateElementName", updateElementName)
  1150     setattr(cls, "updateElementName", updateElementName)
  1230 
  1151 
  1231 cls = PLCOpenClasses.get("actionBlock_action", None)
  1152 cls = PLCOpenClasses.get("actionBlock_action", None)
  1232 if cls:
  1153 if cls:
  1233     def setQualifierValue(self, value):
  1154     def setreferenceName(self, name):
  1234         if self.qualifier:
  1155         if self.reference:
  1235             self.qualifier.setValue(value)
  1156             self.reference.setname(name)
  1236     setattr(cls, "setQualifierValue", setQualifierValue)
  1157     setattr(cls, "setreferenceName", setreferenceName)
  1237     
  1158     
  1238     def getQualifierValue(self):
  1159     def getreferenceName(self):
  1239         if self.qualifier:
  1160         if self.reference:
  1240             return self.qualifier.getValue()
  1161             return self.reference.getname()
  1241         return None
  1162         return None
  1242     setattr(cls, "getQualifierValue", getQualifierValue)
  1163     setattr(cls, "getreferenceName", getreferenceName)
  1243 
  1164 
  1244     def setReferenceName(self, name):
  1165     def setinlineContent(self, content):
  1245         if self.reference:
  1166         if self.inline:
  1246             self.reference.setName(name)
  1167             self.inline.setcontent({"name" : "ST", "value" : PLCOpenClasses["formattedText"]()})
  1247     setattr(cls, "setReferenceName", setReferenceName)
  1168             self.inline.settext(content)
  1248     
  1169     setattr(cls, "setinlineContent", setinlineContent)
  1249     def getReferenceName(self):
  1170     
  1250         if self.reference:
  1171     def getinlineContent(self):
  1251             return self.reference.getName()
  1172         if self.inline:
       
  1173             return self.inline.gettext()
  1252         return None
  1174         return None
  1253     setattr(cls, "getReferenceName", getReferenceName)
  1175     setattr(cls, "getinlineContent", getinlineContent)
  1254 
  1176 
  1255     def setInlineContent(self, content):
  1177     def updateElementName(self, old_name, new_name):
  1256         if self.inline:
  1178         if self.reference and self.reference.getname() == old_name:
  1257             self.inline.setContent("ST", PLCOpenClasses["formattedText"]())
  1179             self.reference.setname(new_name)
  1258             self.inline.setText(content)
       
  1259     setattr(cls, "setInlineContent", setInlineContent)
       
  1260     
       
  1261     def getInlineContent(self):
       
  1262         if self.inline:
       
  1263             return self.inline.getText()
       
  1264         return None
       
  1265     setattr(cls, "getInlineContent", getInlineContent)
       
  1266 
       
  1267     def updateElementName(self, old_name, new_name):
       
  1268         if self.reference and self.reference.getName() == old_name:
       
  1269             self.reference.setName(new_name)
       
  1270         if self.inline:
  1180         if self.inline:
  1271             self.inline.updateElementName(old_name, new_name)
  1181             self.inline.updateElementName(old_name, new_name)
  1272     setattr(cls, "updateElementName", updateElementName)
  1182     setattr(cls, "updateElementName", updateElementName)
  1273 
  1183 
  1274 cls = PLCOpenClasses.get("actionBlock", None)
  1184 cls = PLCOpenClasses.get("commonObjects_actionBlock", None)
  1275 if cls:
  1185 if cls:
  1276     setattr(cls, "getX", getX)
  1186     setattr(cls, "getx", getx)
  1277     setattr(cls, "getY", getY)
  1187     setattr(cls, "gety", gety)
  1278     setattr(cls, "setX", setX)
  1188     setattr(cls, "setx", setx)
  1279     setattr(cls, "setY", setY)
  1189     setattr(cls, "sety", sety)
  1280 
  1190 
  1281     def setActions(self, actions):
  1191     def setactions(self, actions):
  1282         self.action = []
  1192         self.action = []
  1283         for params in actions:
  1193         for params in actions:
  1284             action = PLCOpenClasses["actionBlock_action"]()
  1194             action = PLCOpenClasses["actionBlock_action"]()
  1285             action.addQualifier()
  1195             action.setqualifier(params["qualifier"])
  1286             action.setQualifierValue(params["qualifier"])
       
  1287             if params["type"] == "reference":
  1196             if params["type"] == "reference":
  1288                 action.addReference()
  1197                 action.addreference()
  1289                 action.setReferenceName(params["value"])
  1198                 action.setreferenceName(params["value"])
  1290             else:
  1199             else:
  1291                 action.addInline()
  1200                 action.addinline()
  1292                 action.setInlineContent(params["value"])
  1201                 action.setinlineContent(params["value"])
  1293             if "duration" in params:
  1202             if "duration" in params:
  1294                 action.setDuration(params["duration"])
  1203                 action.setduration(params["duration"])
  1295             if "indicator" in params:
  1204             if "indicator" in params:
  1296                 action.setIndicator(params["indicator"])
  1205                 action.setindicator(params["indicator"])
  1297             self.action.append(action)
  1206             self.action.append(action)
  1298     setattr(cls, "setActions", setActions)
  1207     setattr(cls, "setactions", setactions)
  1299 
  1208 
  1300     def getActions(self):
  1209     def getactions(self):
  1301         actions = []
  1210         actions = []
  1302         for action in self.action:
  1211         for action in self.action:
  1303             params = {}
  1212             params = {}
  1304             params["qualifier"] = action.getQualifierValue()
  1213             params["qualifier"] = action.getqualifier()
  1305             if params["qualifier"] is None:
  1214             if params["qualifier"] is None:
  1306                 params["qualifier"] = "N"
  1215                 params["qualifier"] = "N"
  1307             if action.getReference():
  1216             if action.getreference():
  1308                 params["type"] = "reference"
  1217                 params["type"] = "reference"
  1309                 params["value"] = action.getReferenceName()
  1218                 params["value"] = action.getreferenceName()
  1310             elif action.getInline():
  1219             elif action.getinline():
  1311                 params["type"] = "inline"
  1220                 params["type"] = "inline"
  1312                 params["value"] = action.getInlineContent()
  1221                 params["value"] = action.getinlineContent()
  1313             duration = action.getDuration()
  1222             duration = action.getduration()
  1314             if duration:
  1223             if duration:
  1315                 params["duration"] = duration
  1224                 params["duration"] = duration
  1316             indicator = action.getIndicator()
  1225             indicator = action.getindicator()
  1317             if indicator:
  1226             if indicator:
  1318                 params["indicator"] = indicator
  1227                 params["indicator"] = indicator
  1319             actions.append(params)
  1228             actions.append(params)
  1320         return actions
  1229         return actions
  1321     setattr(cls, "getActions", getActions)
  1230     setattr(cls, "getactions", getactions)
  1322 
  1231 
  1323     def updateElementName(self, old_name, new_name):
  1232     def updateElementName(self, old_name, new_name):
  1324         for action in self.action:
  1233         for action in self.action:
  1325             action.updateElementName(old_name, new_name)
  1234             action.updateElementName(old_name, new_name)
  1326     setattr(cls, "updateElementName", updateElementName)
  1235     setattr(cls, "updateElementName", updateElementName)
  1327 
  1236 
  1328 cls = PLCOpenClasses.get("inVariable", None)
  1237 cls = PLCOpenClasses.get("fbdObjects_inVariable", None)
  1329 if cls:
  1238 if cls:
  1330     setattr(cls, "getX", getX)
  1239     setattr(cls, "getx", getx)
  1331     setattr(cls, "getY", getY)
  1240     setattr(cls, "gety", gety)
  1332     setattr(cls, "setX", setX)
  1241     setattr(cls, "setx", setx)
  1333     setattr(cls, "setY", setY)
  1242     setattr(cls, "sety", sety)
  1334 
       
  1335     def setConnectorEdge(self, edge):
       
  1336         if not self.edge:
       
  1337             self.edge = PLCOpenClasses["edgeModifierType"]()
       
  1338         self.edge.setValue(edge)
       
  1339     setattr(cls, "setConnectorEdge", setConnectorEdge)
       
  1340     
       
  1341     def getConnectorEdge(self):
       
  1342         if self.edge:
       
  1343             return self.edge.getValue()
       
  1344         return None
       
  1345     setattr(cls, "getConnectorEdge", getConnectorEdge)
       
  1346     
  1243     
  1347     def updateElementName(self, old_name, new_name):
  1244     def updateElementName(self, old_name, new_name):
  1348         if self.expression == old_name:
  1245         if self.expression == old_name:
  1349             self.expression = new_name
  1246             self.expression = new_name
  1350     setattr(cls, "updateElementName", updateElementName)
  1247     setattr(cls, "updateElementName", updateElementName)
  1351 
  1248 
  1352 cls = PLCOpenClasses.get("outVariable", None)
  1249 cls = PLCOpenClasses.get("fbdObjects_outVariable", None)
  1353 if cls:
  1250 if cls:
  1354     setattr(cls, "getX", getX)
  1251     setattr(cls, "getx", getx)
  1355     setattr(cls, "getY", getY)
  1252     setattr(cls, "gety", gety)
  1356     setattr(cls, "setX", setX)
  1253     setattr(cls, "setx", setx)
  1357     setattr(cls, "setY", setY)
  1254     setattr(cls, "sety", sety)
  1358 
       
  1359     def setConnectorEdge(self, edge):
       
  1360         if not self.edge:
       
  1361             self.edge = PLCOpenClasses["edgeModifierType"]()
       
  1362         self.edge.setValue(edge)
       
  1363     setattr(cls, "setConnectorEdge", setConnectorEdge)
       
  1364     
       
  1365     def getConnectorEdge(self):
       
  1366         if self.edge:
       
  1367             return self.edge.getValue()
       
  1368         return None
       
  1369     setattr(cls, "getConnectorEdge", getConnectorEdge)
       
  1370 
  1255 
  1371     def updateElementName(self, old_name, new_name):
  1256     def updateElementName(self, old_name, new_name):
  1372         if self.expression == old_name:
  1257         if self.expression == old_name:
  1373             self.expression = new_name
  1258             self.expression = new_name
  1374     setattr(cls, "updateElementName", updateElementName)
  1259     setattr(cls, "updateElementName", updateElementName)
  1375 
  1260 
  1376 cls = PLCOpenClasses.get("inOutVariable", None)
  1261 cls = PLCOpenClasses.get("fbdObjects_inOutVariable", None)
  1377 if cls:
  1262 if cls:
  1378     setattr(cls, "getX", getX)
  1263     setattr(cls, "getx", getx)
  1379     setattr(cls, "getY", getY)
  1264     setattr(cls, "gety", gety)
  1380     setattr(cls, "setX", setX)
  1265     setattr(cls, "setx", setx)
  1381     setattr(cls, "setY", setY)
  1266     setattr(cls, "sety", sety)
  1382 
       
  1383     def setInputEdge(self, edge):
       
  1384         if not self.edgeIn:
       
  1385             self.edgeIn = PLCOpenClasses["edgeModifierType"]()
       
  1386         self.edgeIn.setValue(edge)
       
  1387     setattr(cls, "setInputEdge", setInputEdge)
       
  1388     
       
  1389     def getInputEdge(self):
       
  1390         if self.edgeIn:
       
  1391             return self.edgeIn.getValue()
       
  1392         return None
       
  1393     setattr(cls, "getInputEdge", getInputEdge)
       
  1394 
       
  1395     def setOutputEdge(self, edge):
       
  1396         if not self.edgeOut:
       
  1397             self.edgeOut = PLCOpenClasses["edgeModifierType"]()
       
  1398         self.edgeOut.setValue(edge)
       
  1399     setattr(cls, "setInputEdge", setInputEdge)
       
  1400     
       
  1401     def getOutputEdge(self):
       
  1402         if self.edgeOut:
       
  1403             return self.edgeOut.getValue()
       
  1404         return None
       
  1405     setattr(cls, "getOutputEdge", getOutputEdge)
       
  1406 
  1267 
  1407     def updateElementName(self, old_name, new_name):
  1268     def updateElementName(self, old_name, new_name):
  1408         if self.expression == old_name:
  1269         if self.expression == old_name:
  1409             self.expression = new_name
  1270             self.expression = new_name
  1410     setattr(cls, "updateElementName", updateElementName)
  1271     setattr(cls, "updateElementName", updateElementName)
  1411 
  1272 
  1412 cls = PLCOpenClasses.get("continuation", None)
  1273 cls = PLCOpenClasses.get("commonObjects_continuation", None)
  1413 if cls:
  1274 if cls:
  1414     setattr(cls, "getX", getX)
  1275     setattr(cls, "getx", getx)
  1415     setattr(cls, "getY", getY)
  1276     setattr(cls, "gety", gety)
  1416     setattr(cls, "setX", setX)
  1277     setattr(cls, "setx", setx)
  1417     setattr(cls, "setY", setY)
  1278     setattr(cls, "sety", sety)
  1418     
  1279     
  1419     def updateElementName(self, old_name, new_name):
  1280     def updateElementName(self, old_name, new_name):
  1420         pass
  1281         pass
  1421     setattr(cls, "updateElementName", updateElementName)
  1282     setattr(cls, "updateElementName", updateElementName)
  1422 
  1283 
  1423 cls = PLCOpenClasses.get("connector", None)
  1284 cls = PLCOpenClasses.get("commonObjects_connector", None)
  1424 if cls:
  1285 if cls:
  1425     setattr(cls, "getX", getX)
  1286     setattr(cls, "getx", getx)
  1426     setattr(cls, "getY", getY)
  1287     setattr(cls, "gety", gety)
  1427     setattr(cls, "setX", setX)
  1288     setattr(cls, "setx", setx)
  1428     setattr(cls, "setY", setY)
  1289     setattr(cls, "sety", sety)
  1429     
  1290     
  1430     def updateElementName(self, old_name, new_name):
  1291     def updateElementName(self, old_name, new_name):
  1431         pass
  1292         pass
  1432     setattr(cls, "updateElementName", updateElementName)
  1293     setattr(cls, "updateElementName", updateElementName)
  1433 
  1294 
  1434 cls = PLCOpenClasses.get("connection", None)
  1295 cls = PLCOpenClasses.get("connection", None)
  1435 if cls:
  1296 if cls:
  1436     def setPoints(self, points):
  1297     def setpoints(self, points):
  1437         self.position = []
  1298         self.position = []
  1438         for point in points:
  1299         for point in points:
  1439             position = PLCOpenClasses["position"]()
  1300             position = PLCOpenClasses["position"]()
  1440             position.setX(point.x)
  1301             position.setx(point.x)
  1441             position.setY(point.y)
  1302             position.sety(point.y)
  1442             self.position.append(position)
  1303             self.position.append(position)
  1443     setattr(cls, "setPoints", setPoints)
  1304     setattr(cls, "setpoints", setpoints)
  1444 
  1305 
  1445     def getPoints(self):
  1306     def getpoints(self):
  1446         points = []
  1307         points = []
  1447         for position in self.position:
  1308         for position in self.position:
  1448             points.append((position.getX(),position.getY()))
  1309             points.append((position.getx(),position.gety()))
  1449         return points
  1310         return points
  1450     setattr(cls, "getPoints", getPoints)
  1311     setattr(cls, "getpoints", getpoints)
  1451 
  1312 
  1452 cls = PLCOpenClasses.get("connectionPointIn", None)
  1313 cls = PLCOpenClasses.get("connectionPointIn", None)
  1453 if cls:
  1314 if cls:
  1454     def setRelPosition(self, x, y):
  1315     def setrelPositionXY(self, x, y):
  1455         self.relPosition = PLCOpenClasses["position"]()
  1316         self.relPosition = PLCOpenClasses["position"]()
  1456         self.relPosition.setX(x)
  1317         self.relPosition.setx(x)
  1457         self.relPosition.setY(y)
  1318         self.relPosition.sety(y)
  1458     setattr(cls, "setRelPosition", setRelPosition)
  1319     setattr(cls, "setrelPositionXY", setrelPositionXY)
  1459 
  1320 
  1460     def getRelPosition(self):
  1321     def getrelPositionXY(self):
  1461         if self.relPosition:
  1322         if self.relPosition:
  1462             return self.relPosition.getX(), self.relPosition.getY()
  1323             return self.relPosition.getx(), self.relPosition.gety()
  1463         else:
  1324         else:
  1464             return self.relPosition
  1325             return self.relPosition
  1465     setattr(cls, "getRelPosition", getRelPosition)
  1326     setattr(cls, "getrelPositionXY", getrelPositionXY)
  1466 
  1327 
  1467     def addConnection(self):
  1328     def addconnection(self):
  1468         if not self.content:
  1329         if not self.content:
  1469             self.content = {"name":"connection","value":[PLCOpenClasses["connection"]()]}
  1330             self.content = {"name" : "connection", "value" : [PLCOpenClasses["connection"]()]}
  1470         else:
  1331         else:
  1471             self.content["value"].append(PLCOpenClasses["connection"]())
  1332             self.content["value"].append(PLCOpenClasses["connection"]())
  1472     setattr(cls, "addConnection", addConnection)
  1333     setattr(cls, "addconnection", addconnection)
  1473 
  1334 
  1474     def removeConnection(self, idx):
  1335     def removeconnection(self, idx):
  1475         if self.content:
  1336         if self.content:
  1476             self.content["value"].pop(idx)
  1337             self.content["value"].pop(idx)
  1477         if len(self.content["value"]) == 0:
  1338         if len(self.content["value"]) == 0:
  1478             self.content = None
  1339             self.content = None
  1479     setattr(cls, "removeConnection", removeConnection)
  1340     setattr(cls, "removeconnection", removeconnection)
  1480 
  1341 
  1481     def removeConnections(self):
  1342     def removeconnections(self):
  1482         if self.content:
  1343         if self.content:
  1483             self.content = None
  1344             self.content = None
  1484     setattr(cls, "removeConnections", removeConnections)
  1345     setattr(cls, "removeconnections", removeconnections)
  1485     
  1346     
  1486     def getConnections(self):
  1347     def getconnections(self):
  1487         if self.content:
  1348         if self.content:
  1488             return self.content["value"]
  1349             return self.content["value"]
  1489     setattr(cls, "getConnections", getConnections)
  1350     setattr(cls, "getconnections", getconnections)
  1490     
  1351     
  1491     def setConnectionId(self, idx, id):
  1352     def setconnectionId(self, idx, id):
  1492         if self.content:
  1353         if self.content:
  1493             self.content["value"][idx].setRefLocalId(id)
  1354             self.content["value"][idx].setrefLocalId(id)
  1494     setattr(cls, "setConnectionId", setConnectionId)
  1355     setattr(cls, "setconnectionId", setconnectionId)
  1495     
  1356     
  1496     def getConnectionId(self, idx):
  1357     def getconnectionId(self, idx):
  1497         if self.content:
  1358         if self.content:
  1498             return self.content["value"][idx].getRefLocalId()
  1359             return self.content["value"][idx].getrefLocalId()
  1499         return None
  1360         return None
  1500     setattr(cls, "getConnectionId", getConnectionId)
  1361     setattr(cls, "getconnectionId", getconnectionId)
  1501     
  1362     
  1502     def setConnectionPoints(self, idx, points):
  1363     def setconnectionPoints(self, idx, points):
  1503         if self.content:
  1364         if self.content:
  1504             self.content["value"][idx].setPoints(points)
  1365             self.content["value"][idx].setpoints(points)
  1505     setattr(cls, "setConnectionPoints", setConnectionPoints)
  1366     setattr(cls, "setconnectionPoints", setconnectionPoints)
  1506 
  1367 
  1507     def getConnectionPoints(self, idx):
  1368     def getconnectionPoints(self, idx):
  1508         if self.content:
  1369         if self.content:
  1509             return self.content["value"][idx].getPoints()
  1370             return self.content["value"][idx].getpoints()
  1510         return None
  1371         return None
  1511     setattr(cls, "getConnectionPoints", getConnectionPoints)
  1372     setattr(cls, "getconnectionPoints", getconnectionPoints)
  1512 
  1373 
  1513     def setConnectionParameter(self, idx, parameter):
  1374     def setconnectionParameter(self, idx, parameter):
  1514         if self.content:
  1375         if self.content:
  1515             self.content["value"][idx].setFormalParameter(parameter)
  1376             self.content["value"][idx].setformalParameter(parameter)
  1516     setattr(cls, "setConnectionParameter", setConnectionParameter)
  1377     setattr(cls, "setconnectionParameter", setconnectionParameter)
  1517     
  1378     
  1518     def getConnectionParameter(self, idx):
  1379     def getconnectionParameter(self, idx):
  1519         if self.content:
  1380         if self.content:
  1520             return self.content["value"][idx].getFormalParameter()
  1381             return self.content["value"][idx].getformalParameter()
  1521         return None
  1382         return None
  1522     setattr(cls, "getConnectionParameter", getConnectionParameter)
  1383     setattr(cls, "getconnectionParameter", getconnectionParameter)
  1523 
  1384 
  1524 cls = PLCOpenClasses.get("connectionPointOut", None)
  1385 cls = PLCOpenClasses.get("connectionPointOut", None)
  1525 if cls:
  1386 if cls:
  1526     def setRelPosition(self, x, y):
  1387     def setrelPositionXY(self, x, y):
  1527         self.relPosition = PLCOpenClasses["position"]()
  1388         self.relPosition = PLCOpenClasses["position"]()
  1528         self.relPosition.setX(x)
  1389         self.relPosition.setx(x)
  1529         self.relPosition.setY(y)
  1390         self.relPosition.sety(y)
  1530     setattr(cls, "setRelPosition", setRelPosition)
  1391     setattr(cls, "setrelPositionXY", setrelPositionXY)
  1531 
  1392 
  1532     def getRelPosition(self):
  1393     def getrelPositionXY(self):
  1533         if self.relPosition:
  1394         if self.relPosition:
  1534             return self.relPosition.getX(), self.relPosition.getY()
  1395             return self.relPosition.getx(), self.relPosition.gety()
  1535         return self.relPosition
  1396         return self.relPosition
  1536     setattr(cls, "getRelPosition", getRelPosition)
  1397     setattr(cls, "getrelPositionXY", getrelPositionXY)
  1537 
  1398 
  1538 cls = PLCOpenClasses.get("value", None)
  1399 cls = PLCOpenClasses.get("value", None)
  1539 if cls:
  1400 if cls:
  1540     def setValue(self, value):
  1401     def setvalue(self, value):
  1541         if value.startswith("[") and value.endswith("]"):
  1402         if value.startswith("[") and value.endswith("]"):
  1542             arrayValue = PLCOpenClasses["value_arrayValue"]()
  1403             arrayValue = PLCOpenClasses["value_arrayValue"]()
  1543             self.content = {"name":"arrayValue","value":arrayValue}
  1404             self.content = {"name" : "arrayValue", "value" : arrayValue}
  1544         elif value.startswith("(") and value.endswith(")"):
  1405         elif value.startswith("(") and value.endswith(")"):
  1545             structValue = PLCOpenClasses["value_structValue"]()
  1406             structValue = PLCOpenClasses["value_structValue"]()
  1546             self.content = {"name":"structValue","value":structValue}
  1407             self.content = {"name" : "structValue", "value" : structValue}
  1547         else:
  1408         else:
  1548             simpleValue = PLCOpenClasses["value_simpleValue"]()
  1409             simpleValue = PLCOpenClasses["value_simpleValue"]()
  1549             self.content = {"name":"simpleValue","value":simpleValue}
  1410             self.content = {"name" : "simpleValue", "value": simpleValue}
  1550         self.content["value"].setValue(value)
  1411         self.content["value"].setvalue(value)
  1551     setattr(cls, "setValue", setValue)
  1412     setattr(cls, "setvalue", setvalue)
  1552     
  1413     
  1553     def getValue(self):
  1414     def getvalue(self):
  1554         return self.content["value"].getValue()
  1415         return self.content["value"].getvalue()
  1555     setattr(cls, "getValue", getValue)
  1416     setattr(cls, "getvalue", getvalue)
  1556 
  1417 
  1557 def extractValues(values):
  1418 def extractValues(values):
  1558     items = values.split(",")
  1419     items = values.split(",")
  1559     i = 1
  1420     i = 1
  1560     while i < len(items):
  1421     while i < len(items):
  1570 
  1431 
  1571 cls = PLCOpenClasses.get("value_arrayValue", None)
  1432 cls = PLCOpenClasses.get("value_arrayValue", None)
  1572 if cls:
  1433 if cls:
  1573     arrayValue_model = re.compile("([0-9]*)\((.*)\)$")
  1434     arrayValue_model = re.compile("([0-9]*)\((.*)\)$")
  1574     
  1435     
  1575     def setValue(self, value):
  1436     def setvalue(self, value):
  1576         self.value = []
  1437         self.value = []
  1577         for item in extractValues(value[1:-1]):
  1438         for item in extractValues(value[1:-1]):
  1578             item = item.strip()
  1439             item = item.strip()
  1579             element = PLCOpenClasses["arrayValue_value"]()
  1440             element = PLCOpenClasses["arrayValue_value"]()
  1580             result = arrayValue_model.match(item)
  1441             result = arrayValue_model.match(item)
  1581             if result is not None:
  1442             if result is not None:
  1582                 groups = result.groups()
  1443                 groups = result.groups()
  1583                 element.setRepetitionValue(int(groups[0]))
  1444                 element.setrepetitionValue(int(groups[0]))
  1584                 element.setValue(groups[1].strip())
  1445                 element.setvalue(groups[1].strip())
  1585             else:
  1446             else:
  1586                 element.setValue(item)
  1447                 element.setvalue(item)
  1587             self.value.append(element)
  1448             self.value.append(element)
  1588     setattr(cls, "setValue", setValue)
  1449     setattr(cls, "setvalue", setvalue)
  1589     
  1450     
  1590     def getValue(self):
  1451     def getvalue(self):
  1591         values = []
  1452         values = []
  1592         for element in self.value:
  1453         for element in self.value:
  1593             repetition = element.getRepetitionValue()
  1454             repetition = element.getrepetitionValue()
  1594             if repetition is not None and repetition > 1:
  1455             if repetition is not None and repetition > 1:
  1595                 values.append("%d(%s)"%(repetition, element.getValue()))
  1456                 values.append("%d(%s)"%(repetition, element.getvalue()))
  1596             else:
  1457             else:
  1597                 values.append(element.getValue())
  1458                 values.append(element.getvalue())
  1598         return "[%s]"%", ".join(values)
  1459         return "[%s]"%", ".join(values)
  1599     setattr(cls, "getValue", getValue)
  1460     setattr(cls, "getvalue", getvalue)
  1600 
  1461 
  1601 cls = PLCOpenClasses.get("value_structValue", None)
  1462 cls = PLCOpenClasses.get("value_structValue", None)
  1602 if cls:
  1463 if cls:
  1603     structValue_model = re.compile("(.*):=(.*)")
  1464     structValue_model = re.compile("(.*):=(.*)")
  1604     
  1465     
  1605     def setValue(self, value):
  1466     def setvalue(self, value):
  1606         self.value = []
  1467         self.value = []
  1607         for item in extractValues(value[1:-1]):
  1468         for item in extractValues(value[1:-1]):
  1608             result = arrayValue_model.match(item)
  1469             result = arrayValue_model.match(item)
  1609             if result is not None:
  1470             if result is not None:
  1610                 groups = result.groups()
  1471                 groups = result.groups()
  1611                 element = PLCOpenClasses["structValue_value"]()
  1472                 element = PLCOpenClasses["structValue_value"]()
  1612                 element.setMember(groups[0].strip())
  1473                 element.setmember(groups[0].strip())
  1613                 element.setValue(groups[1].strip())
  1474                 element.setvalue(groups[1].strip())
  1614             self.value.append(element)
  1475             self.value.append(element)
  1615     setattr(cls, "setValue", setValue)
  1476     setattr(cls, "setvalue", setvalue)
  1616     
  1477     
  1617     def getValue(self):
  1478     def getvalue(self):
  1618         values = []
  1479         values = []
  1619         for element in self.value:
  1480         for element in self.value:
  1620             values.append("%s := %s"%(element.getMember(), element.getValue()))
  1481             values.append("%s := %s"%(element.getmember(), element.getvalue()))
  1621         return "(%s)"%", ".join(values)
  1482         return "(%s)"%", ".join(values)
  1622     setattr(cls, "getValue", getValue)
  1483     setattr(cls, "getvalue", getvalue)