PLCControler.py
changeset 507 42150e041dbe
parent 500 b3499ff87178
child 526 79900abdfa3c
--- 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: