--- a/PLCControler.py Fri Oct 19 18:10:31 2012 +0200
+++ b/PLCControler.py Sun Oct 21 16:53:46 2012 +0200
@@ -1210,8 +1210,8 @@
for dimension in vartype_content["value"].getdimension():
dimensions.append((dimension.getlower(), dimension.getupper()))
base_type = vartype_content["value"].baseType.getcontent()
- if base_type["value"] is None:
- base_type_name = base_type["name"]
+ if base_type["value"] is None or base_type["name"] in ["string", "wstring"]:
+ base_type_name = base_type["name"].upper()
else:
base_type_name = base_type["value"].getname()
tempvar["Type"] = ("array", base_type_name, dimensions)
@@ -1763,6 +1763,16 @@
element_type = element.type.getcontent()
if element_type["value"] is None or element_type["name"] in ["string", "wstring"]:
element_infos["Type"] = element_type["name"].upper()
+ elif element_type["name"] == "array":
+ dimensions = []
+ for dimension in element_type["value"].getdimension():
+ dimensions.append((dimension.getlower(), dimension.getupper()))
+ base_type = element_type["value"].baseType.getcontent()
+ if base_type["value"] is None or base_type["name"] in ["string", "wstring"]:
+ base_type_name = base_type["name"].upper()
+ else:
+ base_type_name = base_type["value"].getname()
+ element_infos["Type"] = ("array", base_type_name, dimensions)
else:
element_infos["Type"] = element_type["value"].getname()
if element.initialValue is not None:
@@ -1846,7 +1856,31 @@
for i, element_infos in enumerate(infos["elements"]):
element = plcopen.varListPlain_variable()
element.setname(element_infos["Name"])
- if element_infos["Type"] in self.GetBaseTypes():
+ if isinstance(element_infos["Type"], TupleType):
+ if element_infos["Type"][0] == "array":
+ array_type, base_type_name, dimensions = element_infos["Type"]
+ array = plcopen.derivedTypes_array()
+ for j, dimension in enumerate(dimensions):
+ dimension_range = plcopen.rangeSigned()
+ dimension_range.setlower(dimension[0])
+ dimension_range.setupper(dimension[1])
+ if j == 0:
+ array.setdimension([dimension_range])
+ else:
+ array.appenddimension(dimension_range)
+ if base_type_name in self.GetBaseTypes():
+ if base_type_name == "STRING":
+ array.baseType.setcontent({"name" : "string", "value" : plcopen.elementaryTypes_string()})
+ elif base_type_name == "WSTRING":
+ array.baseType.setcontent({"name" : "wstring", "value" : plcopen.wstring()})
+ else:
+ array.baseType.setcontent({"name" : base_type_name, "value" : None})
+ else:
+ derived_datatype = plcopen.derivedTypes_derived()
+ derived_datatype.setname(base_type_name)
+ array.baseType.setcontent({"name" : "derived", "value" : derived_datatype})
+ element.type.setcontent({"name" : "array", "value" : array})
+ elif element_infos["Type"] in self.GetBaseTypes():
if element_infos["Type"] == "STRING":
element.type.setcontent({"name" : "string", "value" : plcopen.elementaryTypes_string()})
elif element_infos["Type"] == "WSTRING":