25 from xmlclass import * |
25 from xmlclass import * |
26 from structures import * |
26 from structures import * |
27 from types import * |
27 from types import * |
28 import os, re |
28 import os, re |
29 from lxml import etree |
29 from lxml import etree |
30 from collections import OrderedDict |
|
31 """ |
30 """ |
32 Dictionary that makes the relation between var names in plcopen and displayed values |
31 Dictionary that makes the relation between var names in plcopen and displayed values |
33 """ |
32 """ |
34 VarTypes = {"Local" : "localVars", "Temp" : "tempVars", "Input" : "inputVars", |
33 VarTypes = {"Local" : "localVars", "Temp" : "tempVars", "Input" : "inputVars", |
35 "Output" : "outputVars", "InOut" : "inOutVars", "External" : "externalVars", |
34 "Output" : "outputVars", "InOut" : "inOutVars", "External" : "externalVars", |
267 } |
266 } |
268 setattr(cls, "getfileHeader", getfileHeader) |
267 setattr(cls, "getfileHeader", getfileHeader) |
269 |
268 |
270 def setfileHeader(self, fileheader): |
269 def setfileHeader(self, fileheader): |
271 fileheader_obj = self.fileHeader |
270 fileheader_obj = self.fileHeader |
272 for attr, value in fileheader.iteritems(): |
271 for attr in ["companyName", "companyURL", "productName", |
273 setattr(fileheader_obj, attr, value) |
272 "productVersion", "productRelease", "creationDateTime", |
|
273 "contentDescription"]: |
|
274 value = fileheader.get(attr) |
|
275 if value is not None: |
|
276 setattr(fileheader_obj, attr, value) |
274 setattr(cls, "setfileHeader", setfileHeader) |
277 setattr(cls, "setfileHeader", setfileHeader) |
275 |
278 |
276 def getcontentHeader(self): |
279 def getcontentHeader(self): |
277 contentheader_obj = self.contentHeader |
280 contentheader_obj = self.contentHeader |
278 contentheader = { |
281 contentheader = { |
295 for attr, value in contentheader.iteritems(): |
298 for attr, value in contentheader.iteritems(): |
296 if attr == "projectName": |
299 if attr == "projectName": |
297 contentheader_obj.setname(value) |
300 contentheader_obj.setname(value) |
298 elif attr == "projectVersion": |
301 elif attr == "projectVersion": |
299 contentheader_obj.setversion(value) |
302 contentheader_obj.setversion(value) |
|
303 elif attr == "authorName": |
|
304 contentheader_obj.setauthor(value) |
300 elif attr == "pageSize": |
305 elif attr == "pageSize": |
301 contentheader_obj.setpageSize(*contentheader["pageSize"]) |
306 contentheader_obj.setpageSize(*contentheader["pageSize"]) |
302 elif attr == "scaling": |
307 elif attr == "scaling": |
303 contentheader_obj.setscaling(contentheader["scaling"]) |
308 contentheader_obj.setscaling(contentheader["scaling"]) |
304 else: |
309 elif attr in ["modificationDateTime", "organization", "language"]: |
305 setattr(contentheader_obj, attr, value) |
310 setattr(contentheader_obj, attr, value) |
306 setattr(cls, "setcontentHeader", setcontentHeader) |
311 setattr(cls, "setcontentHeader", setcontentHeader) |
307 |
312 |
308 def gettypeElementFunc(element_type): |
313 def gettypeElementFunc(element_type): |
309 elements_xpath = PLCOpen_XPath( |
314 elements_xpath = PLCOpen_XPath( |
601 if len(globalvars) == 0: |
606 if len(globalvars) == 0: |
602 globalvars.append(PLCOpenParser.CreateElement("varList")) |
607 globalvars.append(PLCOpenParser.CreateElement("varList")) |
603 var = PLCOpenParser.CreateElement("variable", "varListPlain") |
608 var = PLCOpenParser.CreateElement("variable", "varListPlain") |
604 var.setname(name) |
609 var.setname(name) |
605 var_type_obj = PLCOpenParser.CreateElement("dataType") |
610 var_type_obj = PLCOpenParser.CreateElement("dataType") |
606 if var_type in [x for x,y in TypeHierarchy_list if not x.startswith("ANY")]: |
611 if not var_type.startswith("ANY") and TypeHierarchy.get(var_type): |
607 var_type_obj.setcontent(PLCOpenParser.CreateElement( |
612 var_type_obj.setcontent(PLCOpenParser.CreateElement( |
608 var_type.lower() if var_type in ["STRING", "WSTRING"] |
613 var_type.lower() if var_type in ["STRING", "WSTRING"] |
609 else vartype, "dataType")) |
614 else vartype, "dataType")) |
610 else: |
615 else: |
611 derived_type = PLCOpenParser.CreateElement("derived", "dataType") |
616 derived_type = PLCOpenParser.CreateElement("derived", "dataType") |
1160 varlist = PLCOpenParser.CreateElement(var_class, "interface") |
1165 varlist = PLCOpenParser.CreateElement(var_class, "interface") |
1161 content[-1].addnext(varlist) |
1166 content[-1].addnext(varlist) |
1162 var = PLCOpenParser.CreateElement("variable", "varListPlain") |
1167 var = PLCOpenParser.CreateElement("variable", "varListPlain") |
1163 var.setname(name) |
1168 var.setname(name) |
1164 var_type_obj = PLCOpenParser.CreateElement("type", "variable") |
1169 var_type_obj = PLCOpenParser.CreateElement("type", "variable") |
1165 if var_type in [x for x,y in TypeHierarchy_list if not x.startswith("ANY")]: |
1170 if not var_type.startswith("ANY") and TypeHierarchy.get(var_type): |
1166 var_type_obj.setcontent(PLCOpenParser.CreateElement( |
1171 var_type_obj.setcontent(PLCOpenParser.CreateElement( |
1167 var_type.lower() if var_type in ["STRING", "WSTRING"] |
1172 var_type.lower() if var_type in ["STRING", "WSTRING"] |
1168 else var_type, "dataType")) |
1173 else var_type, "dataType")) |
1169 else: |
1174 else: |
1170 derived_type = PLCOpenParser.CreateElement("derived", "dataType") |
1175 derived_type = PLCOpenParser.CreateElement("derived", "dataType") |