diff -r f88e0ebd8fe4 -r 42150e041dbe PLCControler.py --- a/PLCControler.py Tue Feb 22 17:05:07 2011 +0100 +++ b/PLCControler.py Wed Mar 30 15:49:09 2011 +0200 @@ -898,9 +898,33 @@ # Create variable and change its properties tempvar = plcopen.varListPlain_variable() tempvar.setname(var["Name"]) - + var_type = plcopen.dataType() - if var["Type"] in self.GetBaseTypes(): + if isinstance(var["Type"], TupleType): + if var["Type"][0] == "array": + array_type, base_type_name, dimensions = var["Type"] + array = plcopen.derivedTypes_array() + for i, dimension in enumerate(dimensions): + dimension_range = plcopen.rangeSigned() + dimension_range.setlower(dimension[0]) + dimension_range.setupper(dimension[1]) + if i == 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}) + var_type.setcontent({"name" : "array", "value" : array}) + elif var["Type"] in self.GetBaseTypes(): if var["Type"] == "STRING": var_type.setcontent({"name" : "string", "value" : plcopen.elementaryTypes_string()}) elif var["Type"] == "WSTRING": @@ -941,6 +965,16 @@ vartype_content = var.gettype().getcontent() if vartype_content["name"] == "derived": tempvar["Type"] = vartype_content["value"].getname() + elif vartype_content["name"] == "array": + dimensions = [] + 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"] + else: + base_type_name = base_type["value"].getname() + tempvar["Type"] = ("array", base_type_name, dimensions) elif vartype_content["name"] in ["string", "wstring"]: tempvar["Type"] = vartype_content["name"].upper() else: