diff -r f88e0ebd8fe4 -r 42150e041dbe PLCGenerator.py --- 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():