326 self.DataTypeUsingTree[name] = [] |
326 self.DataTypeUsingTree[name] = [] |
327 # Analyze each data type |
327 # Analyze each data type |
328 for datatype in datatypes: |
328 for datatype in datatypes: |
329 name = datatype.getName() |
329 name = datatype.getName() |
330 basetype_content = datatype.getBaseType().getContent() |
330 basetype_content = datatype.getBaseType().getContent() |
331 if basetype_content["value"] is not None: |
331 if basetype_content["name"] == "derived": |
332 if basetype_content["name"] == "derived": |
332 basetype_name = basetype_content["value"].getName() |
333 basetype_name = basetype_content["value"].getName() |
333 if basetype_name in datatypenames and name not in self.DataTypeUsingTree[basetype_name]: |
|
334 self.DataTypeUsingTree[basetype_name].append(name) |
|
335 elif basetype_content["name"] in ["subrangeSigned", "subrangeUnsigned", "array"]: |
|
336 base_type = basetype_content["value"].baseType.getContent() |
|
337 if base_type["value"] is not None: |
|
338 basetype_name = base_type["value"].getName() |
334 if basetype_name in datatypenames and name not in self.DataTypeUsingTree[basetype_name]: |
339 if basetype_name in datatypenames and name not in self.DataTypeUsingTree[basetype_name]: |
335 self.DataTypeUsingTree[basetype_name].append(name) |
340 self.DataTypeUsingTree[basetype_name].append(name) |
336 elif basetype_content["name"] in ["subrangeSigned", "subrangeUnsigned", "array"]: |
|
337 base_type = basetype_content["value"].baseType.getContent() |
|
338 if base_type["value"] is not None: |
|
339 basetype_name = base_type["value"].getName() |
|
340 if basetype_name in datatypenames and name not in self.DataTypeUsingTree[basetype_name]: |
|
341 self.DataTypeUsingTree[basetype_name].append(name) |
|
342 |
341 |
343 # Refresh the tree of user-defined pou cross-use |
342 # Refresh the tree of user-defined pou cross-use |
344 def RefreshPouUsingTree(self): |
343 def RefreshPouUsingTree(self): |
345 # Reset the tree of user-defined pou cross-use |
344 # Reset the tree of user-defined pou cross-use |
346 self.PouUsingTree = {} |
345 self.PouUsingTree = {} |
357 if pou.interface: |
356 if pou.interface: |
358 # Extract variables from every varLists |
357 # Extract variables from every varLists |
359 for type, varlist in pou.getVars(): |
358 for type, varlist in pou.getVars(): |
360 for var in varlist.getVariable(): |
359 for var in varlist.getVariable(): |
361 vartype_content = var.getType().getContent() |
360 vartype_content = var.getType().getContent() |
362 if vartype_content["value"] is not None: |
361 if vartype_content["name"] == "derived": |
363 typename = vartype_content["value"].getName() |
362 typename = vartype_content["value"].getName() |
364 if typename in pounames and name not in self.PouUsingTree[typename]: |
363 if typename in pounames and name not in self.PouUsingTree[typename]: |
365 self.PouUsingTree[typename].append(name) |
364 self.PouUsingTree[typename].append(name) |
366 bodytype = pou.getBodyType() |
365 bodytype = pou.getBodyType() |
367 # If pou is written in a graphical language |
366 # If pou is written in a graphical language |
656 # Create variable and change its properties |
655 # Create variable and change its properties |
657 tempvar = plcopen.varListPlain_variable() |
656 tempvar = plcopen.varListPlain_variable() |
658 tempvar.setName(var["Name"]) |
657 tempvar.setName(var["Name"]) |
659 var_type = plcopen.dataType() |
658 var_type = plcopen.dataType() |
660 if var["Type"] not in var_type.getChoices(): |
659 if var["Type"] not in var_type.getChoices(): |
661 derived_type = plcopen.derived() |
660 if var["Type"] == "STRING": |
662 derived_type.setName(var["Type"]) |
661 var_type.setContent("string", plcopen.string()) |
663 var_type.setContent("derived", derived_type) |
662 elif var["Type"] == "WSTRING": |
|
663 var_type.setContent("wstring", plcopen.wstring()) |
|
664 else: |
|
665 derived_type = plcopen.derived() |
|
666 derived_type.setName(var["Type"]) |
|
667 var_type.setContent("derived", derived_type) |
664 else: |
668 else: |
665 var_type.setContent(var["Type"], None) |
669 var_type.setContent(var["Type"], None) |
666 tempvar.setType(var_type) |
670 tempvar.setType(var_type) |
667 if var["Initial Value"] != "": |
671 if var["Initial Value"] != "": |
668 value = plcopen.value() |
672 value = plcopen.value() |
696 # Extract variables from every varLists |
700 # Extract variables from every varLists |
697 for varlist in configuration.getGlobalVars(): |
701 for varlist in configuration.getGlobalVars(): |
698 for var in varlist.getVariable(): |
702 for var in varlist.getVariable(): |
699 tempvar = {"Name":var.getName(),"Class":"Global"} |
703 tempvar = {"Name":var.getName(),"Class":"Global"} |
700 vartype_content = var.getType().getContent() |
704 vartype_content = var.getType().getContent() |
701 if vartype_content["value"] is None: |
705 if vartype_content["name"] == "derived": |
|
706 tempvar["Type"] = vartype_content["value"].getName() |
|
707 elif vartype_content["name"] in ["string", "wstring"]: |
|
708 tempvar["Type"] = vartype_content["name"].upper() |
|
709 else: |
702 tempvar["Type"] = vartype_content["name"] |
710 tempvar["Type"] = vartype_content["name"] |
703 else: |
|
704 tempvar["Type"] = vartype_content["value"].getName() |
|
705 tempvar["Edit"] = True |
711 tempvar["Edit"] = True |
706 initial = var.getInitialValue() |
712 initial = var.getInitialValue() |
707 if initial: |
713 if initial: |
708 tempvar["Initial Value"] = initial.getValue() |
714 tempvar["Initial Value"] = initial.getValue() |
709 else: |
715 else: |
744 # Extract variables from every varLists |
750 # Extract variables from every varLists |
745 for varlist in resource.getGlobalVars(): |
751 for varlist in resource.getGlobalVars(): |
746 for var in varlist.getVariable(): |
752 for var in varlist.getVariable(): |
747 tempvar = {"Name":var.getName(),"Class":"Global"} |
753 tempvar = {"Name":var.getName(),"Class":"Global"} |
748 vartype_content = var.getType().getContent() |
754 vartype_content = var.getType().getContent() |
749 if vartype_content["value"] is None: |
755 if vartype_content["name"] == "derived": |
|
756 tempvar["Type"] = vartype_content["value"].getName() |
|
757 elif vartype_content["name"] in ["string", "wstring"]: |
|
758 tempvar["Type"] = vartype_content["name"].upper() |
|
759 else: |
750 tempvar["Type"] = vartype_content["name"] |
760 tempvar["Type"] = vartype_content["name"] |
751 else: |
|
752 tempvar["Type"] = vartype_content["value"].getName() |
|
753 tempvar["Edit"] = True |
761 tempvar["Edit"] = True |
754 initial = var.getInitialValue() |
762 initial = var.getInitialValue() |
755 if initial: |
763 if initial: |
756 tempvar["Initial Value"] = initial.getValue() |
764 tempvar["Initial Value"] = initial.getValue() |
757 else: |
765 else: |
785 # Extract variables from every varLists |
793 # Extract variables from every varLists |
786 for type, varlist in pou.getVars(): |
794 for type, varlist in pou.getVars(): |
787 for var in varlist.getVariable(): |
795 for var in varlist.getVariable(): |
788 tempvar = {"Name":var.getName(),"Class":type} |
796 tempvar = {"Name":var.getName(),"Class":type} |
789 vartype_content = var.getType().getContent() |
797 vartype_content = var.getType().getContent() |
790 if vartype_content["value"] is None: |
798 if vartype_content["name"] == "derived": |
791 tempvar["Type"] = vartype_content["name"] |
|
792 tempvar["Edit"] = True |
|
793 else: |
|
794 tempvar["Type"] = vartype_content["value"].getName() |
799 tempvar["Type"] = vartype_content["value"].getName() |
795 tempvar["Edit"] = not pou.hasBlock(tempvar["Name"]) |
800 tempvar["Edit"] = not pou.hasBlock(tempvar["Name"]) |
|
801 else: |
|
802 if vartype_content["name"] in ["string", "wstring"]: |
|
803 tempvar["Type"] = vartype_content["name"].upper() |
|
804 else: |
|
805 tempvar["Type"] = vartype_content["name"] |
|
806 tempvar["Edit"] = True |
796 initial = var.getInitialValue() |
807 initial = var.getInitialValue() |
797 if initial: |
808 if initial: |
798 tempvar["Initial Value"] = initial.getValue() |
809 tempvar["Initial Value"] = initial.getValue() |
799 else: |
810 else: |
800 tempvar["Initial Value"] = "" |
811 tempvar["Initial Value"] = "" |
880 for datatype in self.Project.getDataTypes(): |
893 for datatype in self.Project.getDataTypes(): |
881 name = datatype.getName() |
894 name = datatype.getName() |
882 basetype_content = datatype.getBaseType().getContent() |
895 basetype_content = datatype.getBaseType().getContent() |
883 if basetype_content["value"] is None: |
896 if basetype_content["value"] is None: |
884 AddDataTypeHierarchy(name, basetype_content["name"]) |
897 AddDataTypeHierarchy(name, basetype_content["name"]) |
|
898 elif basetype_content["name"] in ["string", "wstring"]: |
|
899 AddDataTypeHierarchy(name, basetype_content["name"].upper()) |
885 elif basetype_content["name"] == "derived": |
900 elif basetype_content["name"] == "derived": |
886 AddDataTypeHierarchy(name, basetype_content["value"].getName()) |
901 AddDataTypeHierarchy(name, basetype_content["value"].getName()) |
887 elif basetype_content["name"] in ["subrangeSigned", "subrangeUnsigned"]: |
902 elif basetype_content["name"] in ["subrangeSigned", "subrangeUnsigned"]: |
888 base_type = basetype_content["value"].baseType.getContent() |
903 base_type = basetype_content["value"].baseType.getContent() |
889 if base_type["value"] is None: |
904 if base_type["value"] is None: |
915 if pou.getInterface(): |
930 if pou.getInterface(): |
916 for type, varlist in pou.getVars(): |
931 for type, varlist in pou.getVars(): |
917 if type == "InOut": |
932 if type == "InOut": |
918 for var in varlist.getVariable(): |
933 for var in varlist.getVariable(): |
919 var_type = var.type.getContent() |
934 var_type = var.type.getContent() |
920 if var_type["value"] is None: |
935 if var_type["name"] == "derived": |
|
936 block_infos["inputs"].append((var.getName(),var_type["value"].getName(),"none")) |
|
937 block_infos["outputs"].append((var.getName(),var_type["value"].getName(),"none")) |
|
938 elif var_type["name"] in ["string", "wstring"]: |
|
939 block_infos["inputs"].append((var.getName(),var_type["name"].upper(),"none")) |
|
940 block_infos["outputs"].append((var.getName(),var_type["name"].upper(),"none")) |
|
941 else: |
921 block_infos["inputs"].append((var.getName(),var_type["name"],"none")) |
942 block_infos["inputs"].append((var.getName(),var_type["name"],"none")) |
922 block_infos["outputs"].append((var.getName(),var_type["name"],"none")) |
943 block_infos["outputs"].append((var.getName(),var_type["name"],"none")) |
923 else: |
|
924 block_infos["inputs"].append((var.getName(),var_type["value"].getName(),"none")) |
|
925 block_infos["outputs"].append((var.getName(),var_type["value"].getName(),"none")) |
|
926 elif type == "Input": |
944 elif type == "Input": |
927 for var in varlist.getVariable(): |
945 for var in varlist.getVariable(): |
928 var_type = var.type.getContent() |
946 var_type = var.type.getContent() |
929 if var_type["value"] is None: |
947 if var_type["name"] == "derived": |
|
948 block_infos["inputs"].append((var.getName(),var_type["value"].getName(),"none")) |
|
949 elif var_type["name"] in ["string", "wstring"]: |
|
950 block_infos["inputs"].append((var.getName(),var_type["name"].upper(),"none")) |
|
951 else: |
930 block_infos["inputs"].append((var.getName(),var_type["name"],"none")) |
952 block_infos["inputs"].append((var.getName(),var_type["name"],"none")) |
931 else: |
|
932 block_infos["inputs"].append((var.getName(),var_type["value"].getName(),"none")) |
|
933 elif type == "Output": |
953 elif type == "Output": |
934 for var in varlist.getVariable(): |
954 for var in varlist.getVariable(): |
935 var_type = var.type.getContent() |
955 var_type = var.type.getContent() |
936 if var_type["value"] is None: |
956 if var_type["name"] == "derived": |
937 block_infos["outputs"].append((var.getName(),var_type["name"],"none")) |
957 block_infos["outputs"].append((var.getName(),var_type["value"].getName(),"none")) |
|
958 elif var_type["name"] in ["string", "wstring"]: |
|
959 block_infos["outputs"].append((var.getName(),var_type["name"].upper(),"none")) |
938 else: |
960 else: |
939 block_infos["outputs"].append((var.getName(),var_type["value"].getName(),"none")) |
961 block_infos["outputs"].append((var.getName(),var_type["name"],"none")) |
940 return_type = pou.interface.getReturnType() |
962 return_type = pou.interface.getReturnType() |
941 if return_type: |
963 if return_type: |
942 var_type = return_type.getContent() |
964 var_type = return_type.getContent() |
943 if var_type["value"] is None: |
965 if var_type["name"] == "derived": |
|
966 block_infos["outputs"].append(("",var_type["value"].getName(),"none")) |
|
967 elif var_type["name"] in ["string", "wstring"]: |
|
968 block_infos["outputs"].append(("",var_type["name"].upper(),"none")) |
|
969 else: |
944 block_infos["outputs"].append(("",var_type["name"],"none")) |
970 block_infos["outputs"].append(("",var_type["name"],"none")) |
945 else: |
|
946 block_infos["outputs"].append(("",var_type["value"].getName(),"none")) |
|
947 if pou.getBodyType() in ["FBD","LD","SFC"]: |
971 if pou.getBodyType() in ["FBD","LD","SFC"]: |
948 for instance in pou.getInstances(): |
972 for instance in pou.getInstances(): |
949 if isinstance(instance, plcopen.comment): |
973 if isinstance(instance, plcopen.comment): |
950 block_infos["comment"] = instance.getContentText() |
974 block_infos["comment"] = instance.getContentText() |
951 BlockTypes[-1]["list"].append(block_infos) |
975 BlockTypes[-1]["list"].append(block_infos) |
1121 words = tagname.split("::") |
1145 words = tagname.split("::") |
1122 if words[0] == "D": |
1146 if words[0] == "D": |
1123 datatype = self.Project.getDataType(words[1]) |
1147 datatype = self.Project.getDataType(words[1]) |
1124 if infos["type"] == "Directly": |
1148 if infos["type"] == "Directly": |
1125 if infos["base_type"] in self.GetBaseTypes(): |
1149 if infos["base_type"] in self.GetBaseTypes(): |
1126 datatype.baseType.setContent(infos["base_type"], None) |
1150 if infos["base_type"] == "STRING": |
|
1151 datatype.baseType.setContent("string", plcopen.string()) |
|
1152 elif infos["base_type"] == "WSTRING": |
|
1153 datatype.baseType.setContent("wstring", plcopen.wstring()) |
|
1154 else: |
|
1155 datatype.baseType.setContent(infos["base_type"], None) |
1127 else: |
1156 else: |
1128 derived_datatype = plcopen.derived() |
1157 derived_datatype = plcopen.derived() |
1129 derived_datatype.setName(infos["base_type"]) |
1158 derived_datatype.setName(infos["base_type"]) |
1130 datatype.baseType.setContent("derived", derived_datatype) |
1159 datatype.baseType.setContent("derived", derived_datatype) |
1131 elif infos["type"] == "Subrange": |
1160 elif infos["type"] == "Subrange": |
1156 dimension_range = plcopen.rangeSigned() |
1185 dimension_range = plcopen.rangeSigned() |
1157 dimension_range.setLower(1) |
1186 dimension_range.setLower(1) |
1158 dimension_range.setUpper(int(dimension)) |
1187 dimension_range.setUpper(int(dimension)) |
1159 array.appendDimension(dimension_range) |
1188 array.appendDimension(dimension_range) |
1160 if infos["base_type"] in self.GetBaseTypes(): |
1189 if infos["base_type"] in self.GetBaseTypes(): |
1161 array.baseType.setContent(infos["base_type"], None) |
1190 if infos["base_type"] == "STRING": |
|
1191 array.baseType.setContent("string", plcopen.string()) |
|
1192 elif infos["base_type"] == "WSTRING": |
|
1193 array.baseType.setContent("wstring", plcopen.wstring()) |
|
1194 else: |
|
1195 array.baseType.setContent(infos["base_type"], None) |
1162 else: |
1196 else: |
1163 derived_datatype = plcopen.derived() |
1197 derived_datatype = plcopen.derived() |
1164 derived_datatype.setName(infos["base_type"]) |
1198 derived_datatype.setName(infos["base_type"]) |
1165 array.baseType.setContent("derived", derived_datatype) |
1199 array.baseType.setContent("derived", derived_datatype) |
1166 datatype.baseType.setContent("array", array) |
1200 datatype.baseType.setContent("array", array) |
1598 pou = self.Project.getPou(words[1]) |
1632 pou = self.Project.getPou(words[1]) |
1599 for type, varlist in pou.getVars(): |
1633 for type, varlist in pou.getVars(): |
1600 for var in varlist.getVariable(): |
1634 for var in varlist.getVariable(): |
1601 if var.getName() == varname: |
1635 if var.getName() == varname: |
1602 vartype_content = var.getType().getContent() |
1636 vartype_content = var.getType().getContent() |
1603 if vartype_content["value"] is None: |
1637 if vartype_content["name"] == "derived": |
|
1638 return vartype_content["value"].getName() |
|
1639 elif vartype_content["name"] in ["string", "wstring"]: |
|
1640 return vartype_content["name"].upper() |
|
1641 else: |
1604 return vartype_content["name"] |
1642 return vartype_content["name"] |
1605 else: |
|
1606 return vartype_content["value"].getName() |
|
1607 return None |
1643 return None |
1608 |
1644 |
1609 def SetConnectionWires(self, connection, connector): |
1645 def SetConnectionWires(self, connection, connector): |
1610 wires = connector.GetWires() |
1646 wires = connector.GetWires() |
1611 idx = 0 |
1647 idx = 0 |