363 |
363 |
364 def RefreshElementUsingTree(self): |
364 def RefreshElementUsingTree(self): |
365 # Reset the tree of user-defined element cross-use |
365 # Reset the tree of user-defined element cross-use |
366 self.ElementUsingTree = {} |
366 self.ElementUsingTree = {} |
367 pous = self.getpous() |
367 pous = self.getpous() |
|
368 datatypes = self.getdataTypes() |
368 # Reference all the user-defined elementu names and initialize the tree of |
369 # Reference all the user-defined elementu names and initialize the tree of |
369 # user-defined elemnt cross-use |
370 # user-defined elemnt cross-use |
370 pounames = [pou.getname() for pou in pous] |
371 elementnames = [datatype.getname() for datatype in datatypes] + \ |
371 for name in pounames: |
372 [pou.getname() for pou in pous] |
|
373 for name in elementnames: |
372 self.ElementUsingTree[name] = [] |
374 self.ElementUsingTree[name] = [] |
|
375 # Analyze each datatype |
|
376 for datatype in datatypes: |
|
377 name = datatype.getname() |
|
378 basetype_content = datatype.baseType.getcontent() |
|
379 if basetype_content["name"] == "derived": |
|
380 typename = basetype_content["value"].getname() |
|
381 if typename in elementnames and name not in self.ElementUsingTree[typename]: |
|
382 self.ElementUsingTree[typename].append(name) |
|
383 elif basetype_content["name"] in ["subrangeSigned", "subrangeUnsigned", "array"]: |
|
384 base_type = basetype_content["value"].baseType.getcontent() |
|
385 if base_type["name"] == "derived": |
|
386 typename = base_type["value"].getname() |
|
387 if typename in elementnames and name not in self.ElementUsingTree[typename]: |
|
388 self.ElementUsingTree[typename].append(name) |
|
389 elif basetype_content["name"] == "struct": |
|
390 for element in basetype_content["value"].getvariable(): |
|
391 type_content = element.type.getcontent() |
|
392 if type_content["name"] == "derived": |
|
393 typename = type_content["value"].getname() |
|
394 if typename in elementnames and name not in self.ElementUsingTree[typename]: |
|
395 self.ElementUsingTree[typename].append(name) |
373 # Analyze each pou |
396 # Analyze each pou |
374 for pou in pous: |
397 for pou in pous: |
375 name = pou.getname() |
398 name = pou.getname() |
376 if pou.interface: |
399 if pou.interface: |
377 # Extract variables from every varLists |
400 # Extract variables from every varLists |
378 for type, varlist in pou.getvars(): |
401 for type, varlist in pou.getvars(): |
379 for var in varlist.getvariable(): |
402 for var in varlist.getvariable(): |
380 vartype_content = var.gettype().getcontent() |
403 vartype_content = var.gettype().getcontent() |
381 if vartype_content["name"] == "derived": |
404 if vartype_content["name"] == "derived": |
382 typename = vartype_content["value"].getname() |
405 typename = vartype_content["value"].getname() |
383 if typename in pounames and name not in self.ElementUsingTree[typename]: |
406 if typename in elementnames and name not in self.ElementUsingTree[typename]: |
384 self.ElementUsingTree[typename].append(name) |
407 self.ElementUsingTree[typename].append(name) |
385 setattr(cls, "RefreshElementUsingTree", RefreshElementUsingTree) |
408 setattr(cls, "RefreshElementUsingTree", RefreshElementUsingTree) |
386 |
409 |
387 def GetParentType(self, type): |
410 def GetParentType(self, type): |
388 if type in self.CustomTypeHierarchy: |
411 if type in self.CustomTypeHierarchy: |
1758 structValue_model = re.compile("(.*):=(.*)") |
1781 structValue_model = re.compile("(.*):=(.*)") |
1759 |
1782 |
1760 def setvalue(self, value): |
1783 def setvalue(self, value): |
1761 self.value = [] |
1784 self.value = [] |
1762 for item in extractValues(value[1:-1]): |
1785 for item in extractValues(value[1:-1]): |
1763 result = arrayValue_model.match(item) |
1786 result = structValue_model.match(item) |
1764 if result is not None: |
1787 if result is not None: |
1765 groups = result.groups() |
1788 groups = result.groups() |
1766 element = PLCOpenClasses["structValue_value"]() |
1789 element = PLCOpenClasses["structValue_value"]() |
1767 element.setmember(groups[0].strip()) |
1790 element.setmember(groups[0].strip()) |
1768 element.setvalue(groups[1].strip()) |
1791 element.setvalue(groups[1].strip()) |
1769 self.value.append(element) |
1792 self.value.append(element) |
1770 setattr(cls, "setvalue", setvalue) |
1793 setattr(cls, "setvalue", setvalue) |
1771 |
1794 |
1772 def getvalue(self): |
1795 def getvalue(self): |
1773 values = [] |
1796 values = [] |
1774 for element in self.value: |
1797 for element in self.value: |