diff -r b1ead41fbd3b -r bf4f7f0801b9 PLCControler.py --- 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":