896 elif var["Option"] == "Non-Retain": |
896 elif var["Option"] == "Non-Retain": |
897 current_varlist.setnonretain(True) |
897 current_varlist.setnonretain(True) |
898 # Create variable and change its properties |
898 # Create variable and change its properties |
899 tempvar = plcopen.varListPlain_variable() |
899 tempvar = plcopen.varListPlain_variable() |
900 tempvar.setname(var["Name"]) |
900 tempvar.setname(var["Name"]) |
901 |
901 |
902 var_type = plcopen.dataType() |
902 var_type = plcopen.dataType() |
903 if var["Type"] in self.GetBaseTypes(): |
903 if isinstance(var["Type"], TupleType): |
|
904 if var["Type"][0] == "array": |
|
905 array_type, base_type_name, dimensions = var["Type"] |
|
906 array = plcopen.derivedTypes_array() |
|
907 for i, dimension in enumerate(dimensions): |
|
908 dimension_range = plcopen.rangeSigned() |
|
909 dimension_range.setlower(dimension[0]) |
|
910 dimension_range.setupper(dimension[1]) |
|
911 if i == 0: |
|
912 array.setdimension([dimension_range]) |
|
913 else: |
|
914 array.appenddimension(dimension_range) |
|
915 if base_type_name in self.GetBaseTypes(): |
|
916 if base_type_name == "STRING": |
|
917 array.baseType.setcontent({"name" : "string", "value" : plcopen.elementaryTypes_string()}) |
|
918 elif base_type_name == "WSTRING": |
|
919 array.baseType.setcontent({"name" : "wstring", "value" : plcopen.wstring()}) |
|
920 else: |
|
921 array.baseType.setcontent({"name" : base_type_name, "value" : None}) |
|
922 else: |
|
923 derived_datatype = plcopen.derivedTypes_derived() |
|
924 derived_datatype.setname(base_type_name) |
|
925 array.baseType.setcontent({"name" : "derived", "value" : derived_datatype}) |
|
926 var_type.setcontent({"name" : "array", "value" : array}) |
|
927 elif var["Type"] in self.GetBaseTypes(): |
904 if var["Type"] == "STRING": |
928 if var["Type"] == "STRING": |
905 var_type.setcontent({"name" : "string", "value" : plcopen.elementaryTypes_string()}) |
929 var_type.setcontent({"name" : "string", "value" : plcopen.elementaryTypes_string()}) |
906 elif var["Type"] == "WSTRING": |
930 elif var["Type"] == "WSTRING": |
907 var_type.setcontent({"name" : "wstring", "value" : plcopen.elementaryTypes_wstring()}) |
931 var_type.setcontent({"name" : "wstring", "value" : plcopen.elementaryTypes_wstring()}) |
908 else: |
932 else: |
939 tempvar = {"Name": var.getname()} |
963 tempvar = {"Name": var.getname()} |
940 |
964 |
941 vartype_content = var.gettype().getcontent() |
965 vartype_content = var.gettype().getcontent() |
942 if vartype_content["name"] == "derived": |
966 if vartype_content["name"] == "derived": |
943 tempvar["Type"] = vartype_content["value"].getname() |
967 tempvar["Type"] = vartype_content["value"].getname() |
|
968 elif vartype_content["name"] == "array": |
|
969 dimensions = [] |
|
970 for dimension in vartype_content["value"].getdimension(): |
|
971 dimensions.append((dimension.getlower(), dimension.getupper())) |
|
972 base_type = vartype_content["value"].baseType.getcontent() |
|
973 if base_type["value"] is None: |
|
974 base_type_name = base_type["name"] |
|
975 else: |
|
976 base_type_name = base_type["value"].getname() |
|
977 tempvar["Type"] = ("array", base_type_name, dimensions) |
944 elif vartype_content["name"] in ["string", "wstring"]: |
978 elif vartype_content["name"] in ["string", "wstring"]: |
945 tempvar["Type"] = vartype_content["name"].upper() |
979 tempvar["Type"] = vartype_content["name"].upper() |
946 else: |
980 else: |
947 tempvar["Type"] = vartype_content["name"] |
981 tempvar["Type"] = vartype_content["name"] |
948 |
982 |