964 blocktype = self.GetBlockType(typename, debug = debug) |
964 blocktype = self.GetBlockType(typename, debug = debug) |
965 if blocktype is not None: |
965 if blocktype is not None: |
966 tree = [] |
966 tree = [] |
967 for var_name, var_type, var_modifier in blocktype["inputs"] + blocktype["outputs"]: |
967 for var_name, var_type, var_modifier in blocktype["inputs"] + blocktype["outputs"]: |
968 tree.append((var_name, var_type, self.GenerateVarTree(var_type, debug))) |
968 tree.append((var_name, var_type, self.GenerateVarTree(var_type, debug))) |
969 return tree |
969 return tree, [] |
970 datatype = project.getdataType(typename) |
970 datatype = project.getdataType(typename) |
971 if datatype is not None: |
971 if datatype is not None: |
972 tree = [] |
972 tree = [] |
973 basetype_content = datatype.baseType.getcontent() |
973 basetype_content = datatype.baseType.getcontent() |
974 if basetype_content["name"] == "derived": |
974 if basetype_content["name"] == "derived": |
975 tree = self.GenerateVarTree(basetype_content["value"].getname()) |
975 return self.GenerateVarTree(basetype_content["value"].getname()) |
976 elif basetype_content["name"] == "array": |
976 elif basetype_content["name"] == "array": |
|
977 dimensions = [] |
977 base_type = basetype_content["value"].baseType.getcontent() |
978 base_type = basetype_content["value"].baseType.getcontent() |
978 if base_type["name"] == "derived": |
979 if base_type["name"] == "derived": |
979 tree = [self.GenerateVarTree(base_type["value"].getname())] |
980 tree = self.GenerateVarTree(base_type["value"].getname()) |
|
981 if len(tree[1]) == 0: |
|
982 tree = tree[0] |
|
983 for dimension in basetype_content["value"].getdimension(): |
|
984 dimensions.append((dimension.getlower(), dimension.getupper())) |
|
985 return tree, dimensions |
980 elif basetype_content["name"] == "struct": |
986 elif basetype_content["name"] == "struct": |
981 for element in basetype_content["value"].getvariable(): |
987 for element in basetype_content["value"].getvariable(): |
982 element_type = element.type.getcontent() |
988 element_type = element.type.getcontent() |
983 if element_type["name"] == "derived": |
989 if element_type["name"] == "derived": |
984 tree.append((element.getname(), element_type["value"].getname(), self.GenerateVarTree(element_type["value"].getname()))) |
990 tree.append((element.getname(), element_type["value"].getname(), self.GenerateVarTree(element_type["value"].getname()))) |
985 else: |
991 else: |
986 tree.append((element.getname(), element_type["name"], [])) |
992 tree.append((element.getname(), element_type["name"], ([], []))) |
987 return tree |
993 return tree, [] |
988 return {} |
994 return [], [] |
989 |
995 |
990 # Return the interface for the given pou |
996 # Return the interface for the given pou |
991 def GetPouInterfaceVars(self, pou, debug = False): |
997 def GetPouInterfaceVars(self, pou, debug = False): |
992 vars = [] |
998 vars = [] |
993 # Verify that the pou has an interface |
999 # Verify that the pou has an interface |
994 if pou.interface is not None: |
1000 if pou.interface is not None: |
995 # Extract variables from every varLists |
1001 # Extract variables from every varLists |
996 for type, varlist in pou.getvars(): |
1002 for type, varlist in pou.getvars(): |
997 for var in varlist.getvariable(): |
1003 for var in varlist.getvariable(): |
998 tempvar = {"Name" : var.getname(), "Class" : type, "Tree" : []} |
1004 tempvar = {"Name" : var.getname(), "Class" : type, "Tree" : ([], [])} |
999 vartype_content = var.gettype().getcontent() |
1005 vartype_content = var.gettype().getcontent() |
1000 if vartype_content["name"] == "derived": |
1006 if vartype_content["name"] == "derived": |
1001 tempvar["Type"] = vartype_content["value"].getname() |
1007 tempvar["Type"] = vartype_content["value"].getname() |
1002 tempvar["Edit"] = not pou.hasblock(tempvar["Name"]) |
1008 tempvar["Edit"] = not pou.hasblock(tempvar["Name"]) |
1003 tempvar["Tree"] = self.GenerateVarTree(tempvar["Type"], debug) |
1009 tempvar["Tree"] = self.GenerateVarTree(tempvar["Type"], debug) |