--- a/plcopen/plcopen.py Mon Dec 15 09:45:16 2008 +0100
+++ b/plcopen/plcopen.py Fri Dec 19 15:07:54 2008 +0100
@@ -365,11 +365,34 @@
# Reset the tree of user-defined element cross-use
self.ElementUsingTree = {}
pous = self.getpous()
+ datatypes = self.getdataTypes()
# Reference all the user-defined elementu names and initialize the tree of
# user-defined elemnt cross-use
- pounames = [pou.getname() for pou in pous]
- for name in pounames:
+ elementnames = [datatype.getname() for datatype in datatypes] + \
+ [pou.getname() for pou in pous]
+ for name in elementnames:
self.ElementUsingTree[name] = []
+ # Analyze each datatype
+ for datatype in datatypes:
+ name = datatype.getname()
+ basetype_content = datatype.baseType.getcontent()
+ if basetype_content["name"] == "derived":
+ typename = basetype_content["value"].getname()
+ if typename in elementnames and name not in self.ElementUsingTree[typename]:
+ self.ElementUsingTree[typename].append(name)
+ elif basetype_content["name"] in ["subrangeSigned", "subrangeUnsigned", "array"]:
+ base_type = basetype_content["value"].baseType.getcontent()
+ if base_type["name"] == "derived":
+ typename = base_type["value"].getname()
+ if typename in elementnames and name not in self.ElementUsingTree[typename]:
+ self.ElementUsingTree[typename].append(name)
+ elif basetype_content["name"] == "struct":
+ for element in basetype_content["value"].getvariable():
+ type_content = element.type.getcontent()
+ if type_content["name"] == "derived":
+ typename = type_content["value"].getname()
+ if typename in elementnames and name not in self.ElementUsingTree[typename]:
+ self.ElementUsingTree[typename].append(name)
# Analyze each pou
for pou in pous:
name = pou.getname()
@@ -380,7 +403,7 @@
vartype_content = var.gettype().getcontent()
if vartype_content["name"] == "derived":
typename = vartype_content["value"].getname()
- if typename in pounames and name not in self.ElementUsingTree[typename]:
+ if typename in elementnames and name not in self.ElementUsingTree[typename]:
self.ElementUsingTree[typename].append(name)
setattr(cls, "RefreshElementUsingTree", RefreshElementUsingTree)
@@ -1760,13 +1783,13 @@
def setvalue(self, value):
self.value = []
for item in extractValues(value[1:-1]):
- result = arrayValue_model.match(item)
+ result = structValue_model.match(item)
if result is not None:
groups = result.groups()
element = PLCOpenClasses["structValue_value"]()
element.setmember(groups[0].strip())
element.setvalue(groups[1].strip())
- self.value.append(element)
+ self.value.append(element)
setattr(cls, "setvalue", setvalue)
def getvalue(self):