PLCGenerator.py
changeset 507 42150e041dbe
parent 501 edfa63d3c26d
child 526 79900abdfa3c
--- a/PLCGenerator.py	Tue Feb 22 17:05:07 2011 +0100
+++ b/PLCGenerator.py	Wed Mar 30 15:49:09 2011 +0200
@@ -265,6 +265,20 @@
                 # Variable type is a string type
                 elif vartype_content["name"] in ["string", "wstring"]:
                     var_type = vartype_content["name"].upper()
+                # Variable type is an array
+                elif vartype_content["name"] == "array":
+                    base_type = vartype_content["value"].baseType.getcontent()
+                    # Array derived directly from a user defined type 
+                    if base_type["name"] == "derived":
+                        basetype_name = base_type["value"].getname()
+                        self.GenerateDataType(basetype_name)
+                    # Array derived directly from a string type 
+                    elif base_type["name"] in ["string", "wstring"]:
+                        basetype_name = base_type["name"].upper()
+                    # Array derived directly from an elementary type 
+                    else:
+                        basetype_name = base_type["name"]
+                    var_type = "ARRAY [%s] OF %s" % (",".join(map(lambda x : "%s..%s" % (dimension.getlower(), dimension.getupper()), vartype_content["value"].getdimension())), basetype_name)
                 # Variable type is an elementary type
                 else:
                     var_type = vartype_content["name"]
@@ -320,6 +334,20 @@
                 # Variable type is a string type
                 elif vartype_content["name"] in ["string", "wstring"]:
                     var_type = vartype_content["name"].upper()
+                # Variable type is an array
+                elif vartype_content["name"] == "array":
+                    base_type = vartype_content["value"].baseType.getcontent()
+                    # Array derived directly from a user defined type 
+                    if base_type["name"] == "derived":
+                        basetype_name = base_type["value"].getname()
+                        self.GenerateDataType(basetype_name)
+                    # Array derived directly from a string type 
+                    elif base_type["name"] in ["string", "wstring"]:
+                        basetype_name = base_type["name"].upper()
+                    # Array derived directly from an elementary type 
+                    else:
+                        basetype_name = base_type["name"]
+                    var_type = "ARRAY [%s] OF %s" % (",".join(map(lambda x : "%s..%s" % (dimension.getlower(), dimension.getupper()), vartype_content["value"].getdimension())), basetype_name)
                 # Variable type is an elementary type
                 else:
                     var_type = vartype_content["name"]
@@ -588,14 +616,27 @@
                             initial_value = None
                         address = var.getaddress()
                         if vartype_content["name"] in ["string", "wstring"]:
-                            if address is not None:
-                                located.append((vartype_content["name"].upper(), var.getname(), address, initial_value))
+                            var_type = vartype_content["name"].upper()
+                        # Variable type is an array
+                        elif vartype_content["name"] == "array":
+                            base_type = vartype_content["value"].baseType.getcontent()
+                            # Array derived directly from a user defined type 
+                            if base_type["name"] == "derived":
+                                basetype_name = base_type["value"].getname()
+                                self.GenerateDataType(basetype_name)
+                            # Array derived directly from a string type 
+                            elif base_type["name"] in ["string", "wstring"]:
+                                basetype_name = base_type["name"].upper()
+                            # Array derived directly from an elementary type 
                             else:
-                                variables.append((vartype_content["name"].upper(), var.getname(), None, initial_value))
-                        elif address is not None:
-                            located.append((vartype_content["name"], var.getname(), address, initial_value))
+                                basetype_name = base_type["name"]
+                            var_type = "ARRAY [%s] OF %s" % (",".join(map(lambda x : "%s..%s" % (x.getlower(), x.getupper()), vartype_content["value"].getdimension())), basetype_name)
                         else:
-                            variables.append((vartype_content["name"], var.getname(), None, initial_value))
+                            var_type = vartype_content["name"]
+                        if address is not None:
+                            located.append((var_type, var.getname(), address, initial_value))
+                        else:
+                            variables.append((var_type, var.getname(), None, initial_value))
                 if varlist["value"].getconstant():
                     option = "CONSTANT"
                 elif varlist["value"].getretain():