plcopen/plcopen.py
changeset 145 4fb225afddf4
parent 143 015a34da60eb
child 147 5ef987c1b927
equal deleted inserted replaced
144:b67a5de5a24a 145:4fb225afddf4
    89     
    89     
    90 cls = PLCOpenClasses.get("project", None)
    90 cls = PLCOpenClasses.get("project", None)
    91 if cls:
    91 if cls:
    92     cls.singleLineAttributes = False
    92     cls.singleLineAttributes = False
    93     
    93     
       
    94     def setName(self, name):
       
    95         self.contentHeader.setName(name)
       
    96     setattr(cls, "setName", setName)
       
    97         
       
    98     def getName(self):
       
    99         return self.contentHeader.getName()
       
   100     setattr(cls, "getName", getName)
       
   101     
    94     def getFileHeader(self):
   102     def getFileHeader(self):
    95         fileheader = {}
   103         fileheader = {}
    96         fileheader["companyName"] = self.fileHeader.getCompanyName()
   104         fileheader["companyName"] = self.fileHeader.getCompanyName()
    97         if self.fileHeader.getCompanyURL():
   105         if self.fileHeader.getCompanyURL():
    98             fileheader["companyURL"] = self.fileHeader.getCompanyURL()
   106             fileheader["companyURL"] = self.fileHeader.getCompanyURL()
   117         self.fileHeader.setCreationDateTime(fileheader["creationDateTime"])
   125         self.fileHeader.setCreationDateTime(fileheader["creationDateTime"])
   118         if "contentDescription" in fileheader:
   126         if "contentDescription" in fileheader:
   119             self.fileHeader.setContentDescription(fileheader["contentDescription"])
   127             self.fileHeader.setContentDescription(fileheader["contentDescription"])
   120     setattr(cls, "setFileHeader", setFileHeader)
   128     setattr(cls, "setFileHeader", setFileHeader)
   121     
   129     
   122     def setName(self, name):
   130     def getContentHeader(self):
   123         self.contentHeader.setName(name)
   131         contentheader = {}
   124     setattr(cls, "setName", setName)
   132         contentheader["projectName"] = self.contentHeader.getName()
   125         
   133         if self.contentHeader.getVersion():
   126     def getName(self):
   134             contentheader["projectVersion"] = self.contentHeader.getVersion()
   127         return self.contentHeader.getName()
   135         if self.contentHeader.getModificationDateTime():
   128     setattr(cls, "getName", getName)
   136             contentheader["modificationDateTime"] = self.contentHeader.getModificationDateTime()
   129 
   137         if self.contentHeader.getOrganization():
       
   138             contentheader["organization"] = self.contentHeader.getOrganization()
       
   139         if self.contentHeader.getAuthor():
       
   140             contentheader["authorName"] = self.contentHeader.getAuthor()
       
   141         if self.contentHeader.getLanguage():
       
   142             contentheader["language"] = self.contentHeader.getLanguage()
       
   143         contentheader["pageSize"] = self.contentHeader.getPageSize()
       
   144         contentheader["scaling"] = self.contentHeader.getScaling()
       
   145         return contentheader
       
   146     setattr(cls, "getContentHeader", getContentHeader)
       
   147     
       
   148     def setContentHeader(self, contentheader):
       
   149         self.contentHeader.setName(contentheader["projectName"])
       
   150         if "projectVersion" in contentheader:
       
   151             self.contentHeader.setVersion(contentheader["projectVersion"])
       
   152         if "modificationDateTime" in contentheader:
       
   153             self.contentHeader.setModificationDateTime(contentheader["modificationDateTime"])
       
   154         if "organization" in contentheader:
       
   155             self.contentHeader.setOrganization(contentheader["organization"])
       
   156         if "authorName" in contentheader:
       
   157             self.contentHeader.setAuthor(contentheader["authorName"])
       
   158         if "language" in contentheader:
       
   159             self.contentHeader.setLanguage(contentheader["language"])
       
   160         self.contentHeader.setPageSize(*contentheader["pageSize"])
       
   161         self.contentHeader.setScaling(contentheader["scaling"])
       
   162     setattr(cls, "setContentHeader", setContentHeader)
       
   163     
   130     def getDataTypes(self):
   164     def getDataTypes(self):
   131         return self.types.getDataTypeElements()
   165         return self.types.getDataTypeElements()
   132     setattr(cls, "getDataTypes", getDataTypes)
   166     setattr(cls, "getDataTypes", getDataTypes)
   133     
   167     
   134     def getDataType(self, name):
   168     def getDataType(self, name):
   217                 if resource.getName() == name:
   251                 if resource.getName() == name:
   218                     raise ValueError, "\"%s\" resource already exists in \"%s\" configuration !!!"%(name, config_name)
   252                     raise ValueError, "\"%s\" resource already exists in \"%s\" configuration !!!"%(name, config_name)
   219             new_resource = PLCOpenClasses["configuration_resource"]()
   253             new_resource = PLCOpenClasses["configuration_resource"]()
   220             new_resource.setName(name)
   254             new_resource.setName(name)
   221             configuration.appendResource(new_resource)
   255             configuration.appendResource(new_resource)
   222     setattr(cls, "addConfigurationResource", addConfigurationResource)    
   256     setattr(cls, "addConfigurationResource", addConfigurationResource)
   223 
   257 
   224     def removeConfigurationResource(self, config_name, name):
   258     def removeConfigurationResource(self, config_name, name):
   225         configuration = self.getConfiguration(config_name)
   259         configuration = self.getConfiguration(config_name)
   226         if configuration:
   260         if configuration:
   227             found = False
   261             found = False
   242     setattr(cls, "updateElementName", updateElementName)
   276     setattr(cls, "updateElementName", updateElementName)
   243 
   277 
   244 cls = PLCOpenClasses.get("project_fileHeader", None)
   278 cls = PLCOpenClasses.get("project_fileHeader", None)
   245 if cls:
   279 if cls:
   246     cls.singleLineAttributes = False
   280     cls.singleLineAttributes = False
       
   281 
       
   282 cls = PLCOpenClasses.get("project_contentHeader", None)
       
   283 if cls:
       
   284     cls.singleLineAttributes = False
       
   285     
       
   286     def setPageSize(self, width, height):
       
   287         self.coordinateInfo.setPageSize(width, height)
       
   288     setattr(cls, "setPageSize", setPageSize)
       
   289     
       
   290     def getPageSize(self):
       
   291         return self.coordinateInfo.getPageSize()
       
   292     setattr(cls, "getPageSize", getPageSize)
       
   293 
       
   294     def setScaling(self, scaling):
       
   295         for language, (x, y) in scaling.items():
       
   296             self.coordinateInfo.setScaling(language, x, y)
       
   297     setattr(cls, "setScaling", setScaling)
       
   298     
       
   299     def getScaling(self):
       
   300         scaling = {}
       
   301         scaling["FBD"] = self.coordinateInfo.getScaling("FBD")
       
   302         scaling["LD"] = self.coordinateInfo.getScaling("LD")
       
   303         scaling["SFC"] = self.coordinateInfo.getScaling("SFC")
       
   304         return scaling
       
   305     setattr(cls, "getScaling", getScaling)
       
   306 
       
   307 cls = PLCOpenClasses.get("contentHeader_coordinateInfo", None)
       
   308 if cls:
       
   309     def setPageSize(self, width, height):
       
   310         if width == 0 and height == 0:
       
   311             self.deletePageSize()
       
   312         else:
       
   313             if self.pageSize is None:
       
   314                 self.addPageSize()
       
   315             self.pageSize.setX(width)
       
   316             self.pageSize.setY(height)
       
   317     setattr(cls, "setPageSize", setPageSize)
       
   318     
       
   319     def getPageSize(self):
       
   320         if self.pageSize is not None:
       
   321             return self.pageSize.getX(), self.pageSize.getY()
       
   322         return 0, 0
       
   323     setattr(cls, "getPageSize", getPageSize)
       
   324 
       
   325     def setScaling(self, language, x, y):
       
   326         if language == "FBD":
       
   327             self.fbd.scaling.setX(x)
       
   328             self.fbd.scaling.setY(y)
       
   329         elif language == "LD":
       
   330             self.ld.scaling.setX(x)
       
   331             self.ld.scaling.setY(y)
       
   332         elif language == "SFC":
       
   333             self.sfc.scaling.setX(x)
       
   334             self.sfc.scaling.setY(y)
       
   335     setattr(cls, "setScaling", setScaling)
       
   336     
       
   337     def getScaling(self, language):
       
   338         if language == "FBD":
       
   339             return self.fbd.scaling.getX(), self.fbd.scaling.getY()
       
   340         elif language == "LD":
       
   341             return self.ld.scaling.getX(), self.ld.scaling.getY()
       
   342         elif language == "SFC":
       
   343             return self.sfc.scaling.getX(), self.sfc.scaling.getY()
       
   344         return 0, 0
       
   345     setattr(cls, "getScaling", getScaling)
   247 
   346 
   248 cls = PLCOpenClasses.get("configurations_configuration", None)
   347 cls = PLCOpenClasses.get("configurations_configuration", None)
   249 if cls:
   348 if cls:
   250     def updateElementName(self, old_name, new_name):
   349     def updateElementName(self, old_name, new_name):
   251         for resource in self.getResource():
   350         for resource in self.getResource():
  1453     
  1552     
  1454     def getValue(self):
  1553     def getValue(self):
  1455         return self.content["value"].getValue()
  1554         return self.content["value"].getValue()
  1456     setattr(cls, "getValue", getValue)
  1555     setattr(cls, "getValue", getValue)
  1457 
  1556 
       
  1557 def extractValues(self, values):
       
  1558     items = values.split(",")
       
  1559     i = 1
       
  1560     while i < len(items):
       
  1561         opened = items[i - 1].count("(") + items[i - 1].count("[")
       
  1562         closed = items[i - 1].count(")") + items[i - 1].count("]")
       
  1563         if opened > closed:
       
  1564             items[i - 1] = ','.join([items[i - 1], items.pop(i)])
       
  1565         elif opened == closed:
       
  1566             i += 1
       
  1567         else:
       
  1568             raise ValueError, "\"%s\" is an invalid value!"%value
       
  1569     return items
       
  1570 
  1458 cls = PLCOpenClasses.get("value_arrayValue", None)
  1571 cls = PLCOpenClasses.get("value_arrayValue", None)
  1459 if cls:
  1572 if cls:
  1460     arrayValue_model = re.compile("([0-9]*)\((.*)\)")
  1573     arrayValue_model = re.compile("([0-9]*)\((.*)\)$")
  1461     
  1574     
  1462     def setValue(self, value):
  1575     def setValue(self, value):
  1463         self.value = []
  1576         self.value = []
  1464         for item in value[1:-1].split(","):
  1577         for item in extractValues(value[1:-1]):
  1465             item = item.strip()
  1578             item = item.strip()
  1466             element = PLCOpenClasses["arrayValue_value"]()
  1579             element = PLCOpenClasses["arrayValue_value"]()
  1467             result = arrayValue_model.match(item)
  1580             result = arrayValue_model.match(item)
  1468             if result is not None:
  1581             if result is not None:
  1469                 groups = result.groups()
  1582                 groups = result.groups()
  1489 if cls:
  1602 if cls:
  1490     structValue_model = re.compile("(.*):=(.*)")
  1603     structValue_model = re.compile("(.*):=(.*)")
  1491     
  1604     
  1492     def setValue(self, value):
  1605     def setValue(self, value):
  1493         self.value = []
  1606         self.value = []
  1494         for item in value[1:-1].split(","):
  1607         for item in extractValues(value[1:-1]):
  1495             result = arrayValue_model.match(item)
  1608             result = arrayValue_model.match(item)
  1496             if result is not None:
  1609             if result is not None:
  1497                 groups = result.groups()
  1610                 groups = result.groups()
  1498                 element = PLCOpenClasses["structValue_value"]()
  1611                 element = PLCOpenClasses["structValue_value"]()
  1499                 element.setMember(groups[0].strip())
  1612                 element.setMember(groups[0].strip())