plcopen/plcopen.py
changeset 295 c6ef6d92ce16
parent 286 67da12c94d2d
child 348 09fdd7616a86
equal deleted inserted replaced
294:4a36f2ec8967 295:c6ef6d92ce16
   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: