changeset 566 | 6014ef82a98a |
parent 557 | 0f591ac019f3 |
child 576 | 3f2024f30553 |
565:94c11207aa6f | 566:6014ef82a98a |
---|---|
32 """ |
32 """ |
33 VarTypes = {"Local" : "localVars", "Temp" : "tempVars", "Input" : "inputVars", |
33 VarTypes = {"Local" : "localVars", "Temp" : "tempVars", "Input" : "inputVars", |
34 "Output" : "outputVars", "InOut" : "inOutVars", "External" : "externalVars", |
34 "Output" : "outputVars", "InOut" : "inOutVars", "External" : "externalVars", |
35 "Global" : "globalVars", "Access" : "accessVars"} |
35 "Global" : "globalVars", "Access" : "accessVars"} |
36 |
36 |
37 searchResultVarTypes = { |
|
38 "inputVars": "var_input", |
|
39 "outputVars": "var_output", |
|
40 "inOutVars": "var_inout" |
|
41 } |
|
42 |
|
37 """ |
43 """ |
38 Define in which order var types must be displayed |
44 Define in which order var types must be displayed |
39 """ |
45 """ |
40 VarOrder = ["Local","Temp","Input","Output","InOut","External","Global","Access"] |
46 VarOrder = ["Local","Temp","Input","Output","InOut","External","Global","Access"] |
41 |
47 |
94 if self.x_min is not None and self.x_max is not None: |
100 if self.x_min is not None and self.x_max is not None: |
95 width = self.x_max - self.x_min |
101 width = self.x_max - self.x_min |
96 if self.y_min is not None and self.y_max is not None: |
102 if self.y_min is not None and self.y_max is not None: |
97 height = self.y_max - self.y_min |
103 height = self.y_max - self.y_min |
98 return self.x_min, self.y_min, width, height |
104 return self.x_min, self.y_min, width, height |
99 |
105 |
106 def TextLenInRowColumn(text): |
|
107 if text == "": |
|
108 return (0, 0) |
|
109 lines = text.split("\n") |
|
110 return len(lines) - 1, len(lines[-1]) |
|
111 |
|
112 def TestTextElement(text, criteria): |
|
113 lines = text.splitlines() |
|
114 if not criteria["case_sensitive"]: |
|
115 text = text.upper() |
|
116 test_result = [] |
|
117 result = criteria["pattern"].search(text) |
|
118 while result is not None: |
|
119 start = TextLenInRowColumn(text[:result.start()]) |
|
120 end = TextLenInRowColumn(text[:result.end() - 1]) |
|
121 test_result.append((start, end, "\n".join(lines[start[0]:end[0] + 1]))) |
|
122 result = criteria["pattern"].search(text, result.end()) |
|
123 return test_result |
|
100 |
124 |
101 PLCOpenClasses = GenerateClassesFromXSD(os.path.join(os.path.split(__file__)[0], "tc6_xml_v201.xsd")) |
125 PLCOpenClasses = GenerateClassesFromXSD(os.path.join(os.path.split(__file__)[0], "tc6_xml_v201.xsd")) |
102 |
126 |
103 ElementNameToClass = {} |
127 ElementNameToClass = {} |
104 |
128 |
124 new_address = groups[0] + new_leading + groups[2] |
148 new_address = groups[0] + new_leading + groups[2] |
125 self.text = self.text[:result.start()] + new_address + self.text[result.end():] |
149 self.text = self.text[:result.start()] + new_address + self.text[result.end():] |
126 startpos = result.start() + len(new_address) |
150 startpos = result.start() + len(new_address) |
127 result = address_model.search(self.text, startpos) |
151 result = address_model.search(self.text, startpos) |
128 setattr(cls, "updateElementAddress", updateElementAddress) |
152 setattr(cls, "updateElementAddress", updateElementAddress) |
153 |
|
154 def Search(self, criteria, parent_infos): |
|
155 return [(tuple(parent_infos),) + result for result in TestTextElement(self.gettext(), criteria)] |
|
156 setattr(cls, "Search", Search) |
|
129 |
157 |
130 cls = PLCOpenClasses.get("project", None) |
158 cls = PLCOpenClasses.get("project", None) |
131 if cls: |
159 if cls: |
132 cls.singleLineAttributes = False |
160 cls.singleLineAttributes = False |
133 cls.EnumeratedDataTypeValues = {} |
161 cls.EnumeratedDataTypeValues = {} |
675 if base_type is not None: |
703 if base_type is not None: |
676 return self.IsLocatableType(base_type) |
704 return self.IsLocatableType(base_type) |
677 return True |
705 return True |
678 setattr(cls, "IsLocatableType", IsLocatableType) |
706 setattr(cls, "IsLocatableType", IsLocatableType) |
679 |
707 |
708 def Search(self, criteria, parent_infos=[]): |
|
709 result = self.types.Search(criteria, parent_infos) |
|
710 for configuration in self.instances.configurations.getconfiguration(): |
|
711 result.extend(configuration.Search(criteria, parent_infos)) |
|
712 return result |
|
713 setattr(cls, "Search", Search) |
|
714 |
|
680 cls = PLCOpenClasses.get("project_fileHeader", None) |
715 cls = PLCOpenClasses.get("project_fileHeader", None) |
681 if cls: |
716 if cls: |
682 cls.singleLineAttributes = False |
717 cls.singleLineAttributes = False |
683 |
718 |
684 cls = PLCOpenClasses.get("project_contentHeader", None) |
719 cls = PLCOpenClasses.get("project_contentHeader", None) |
744 elif language == "SFC": |
779 elif language == "SFC": |
745 return self.sfc.scaling.getx(), self.sfc.scaling.gety() |
780 return self.sfc.scaling.getx(), self.sfc.scaling.gety() |
746 return 0, 0 |
781 return 0, 0 |
747 setattr(cls, "getscaling", getscaling) |
782 setattr(cls, "getscaling", getscaling) |
748 |
783 |
784 def _Search(attributes, criteria, parent_infos): |
|
785 search_result = [] |
|
786 for attr, value in attributes: |
|
787 if value is not None: |
|
788 search_result.extend([(tuple(parent_infos + [attr]),) + result for result in TestTextElement(value, criteria)]) |
|
789 return search_result |
|
790 |
|
791 def _updateConfigurationResourceElementName(self, old_name, new_name): |
|
792 for varlist in self.getglobalVars(): |
|
793 for var in varlist.getvariable(): |
|
794 var_address = var.getaddress() |
|
795 if var_address is not None: |
|
796 if var_address == old_name: |
|
797 var.setaddress(new_name) |
|
798 if var.getname() == old_name: |
|
799 var.setname(new_name) |
|
800 |
|
801 def _updateConfigurationResourceElementAddress(self, address_model, new_leading): |
|
802 for varlist in self.getglobalVars(): |
|
803 for var in varlist.getvariable(): |
|
804 var_address = var.getaddress() |
|
805 if var_address is not None: |
|
806 var.setaddress(update_address(var_address, address_model, new_leading)) |
|
807 |
|
808 def _removeConfigurationResourceVariableByAddress(self, address): |
|
809 for varlist in self.getglobalVars(): |
|
810 variables = varlist.getvariable() |
|
811 for i in xrange(len(variables)-1, -1, -1): |
|
812 if variables[i].getaddress() == address: |
|
813 variables.pop(i) |
|
814 |
|
815 def _removeConfigurationResourceVariableByFilter(self, address_model): |
|
816 for varlist in self.getglobalVars(): |
|
817 variables = varlist.getvariable() |
|
818 for i in xrange(len(variables)-1, -1, -1): |
|
819 var_address = variables[i].getaddress() |
|
820 if var_address is not None: |
|
821 result = address_model.match(var_address) |
|
822 if result is not None: |
|
823 variables.pop(i) |
|
824 |
|
825 def _SearchInConfigurationResource(self, criteria, parent_infos=[]): |
|
826 search_result = [] |
|
827 for result in TestTextElement(self.getname(), criteria): |
|
828 search_result.append((tuple(parent_infos + ["name"]),) + result) |
|
829 var_number = 0 |
|
830 for varlist in self.getglobalVars(): |
|
831 variable_type = searchResultVarTypes.get("globalVars", "var_local") |
|
832 variables = varlist.getvariable() |
|
833 for modifier, has_modifier in [("constant", varlist.getconstant()), |
|
834 ("retain", varlist.getretain()), |
|
835 ("non_retain", varlist.getnonretain())]: |
|
836 if has_modifier: |
|
837 for result in TestTextElement(modifier, criteria): |
|
838 search_result.append((tuple(parent_infos + [variable_type, (var_number, var_number + len(variables)), modifier]),) + result) |
|
839 break |
|
840 for variable in variables: |
|
841 search_result.extend(variable.Search(criteria, parent_infos + [variable_type, var_number])) |
|
842 var_number += 1 |
|
843 return search_result |
|
844 |
|
749 cls = PLCOpenClasses.get("configurations_configuration", None) |
845 cls = PLCOpenClasses.get("configurations_configuration", None) |
750 if cls: |
846 if cls: |
751 def updateElementName(self, old_name, new_name): |
847 def updateElementName(self, old_name, new_name): |
752 for varlist in self.getglobalVars(): |
848 _updateConfigurationResourceElementName(self, old_name, new_name) |
753 for var in varlist.getvariable(): |
|
754 var_address = var.getaddress() |
|
755 if var_address is not None: |
|
756 if var_address == old_name: |
|
757 var.setaddress(new_name) |
|
758 if var.getname() == old_name: |
|
759 var.setname(new_name) |
|
760 for resource in self.getresource(): |
849 for resource in self.getresource(): |
761 resource.updateElementName(old_name, new_name) |
850 resource.updateElementName(old_name, new_name) |
762 setattr(cls, "updateElementName", updateElementName) |
851 setattr(cls, "updateElementName", updateElementName) |
763 |
852 |
764 def updateElementAddress(self, address_model, new_leading): |
853 def updateElementAddress(self, address_model, new_leading): |
765 for varlist in self.getglobalVars(): |
854 _updateConfigurationResourceElementAddress(self, address_model, new_leading) |
766 for var in varlist.getvariable(): |
|
767 var_address = var.getaddress() |
|
768 if var_address is not None: |
|
769 var.setaddress(update_address(var_address, address_model, new_leading)) |
|
770 for resource in self.getresource(): |
855 for resource in self.getresource(): |
771 resource.updateElementAddress(address_model, new_leading) |
856 resource.updateElementAddress(address_model, new_leading) |
772 setattr(cls, "updateElementAddress", updateElementAddress) |
857 setattr(cls, "updateElementAddress", updateElementAddress) |
773 |
858 |
774 def removeVariableByAddress(self, address): |
859 setattr(cls, "removeVariableByAddress", _removeConfigurationResourceVariableByAddress) |
775 for varlist in self.getglobalVars(): |
860 setattr(cls, "removeVariableByFilter", _removeConfigurationResourceVariableByFilter) |
776 variables = varlist.getvariable() |
861 |
777 for i in xrange(len(variables)-1, -1, -1): |
862 def Search(self, criteria, parent_infos=[]): |
778 if variables[i].getaddress() == address: |
863 search_result = [] |
779 variables.pop(i) |
864 parent_infos = parent_infos + ["C::%s" % self.getname()] |
780 setattr(cls, "removeVariableByAddress", removeVariableByAddress) |
865 filter = criteria["filter"] |
781 |
866 if filter == "all" or "configuration" in filter: |
782 def removeVariableByFilter(self, address_model): |
867 search_result = _SearchInConfigurationResource(self, criteria, parent_infos) |
783 for varlist in self.getglobalVars(): |
868 for resource in self.getresource(): |
784 variables = varlist.getvariable() |
869 search_result.extend(resource.Search(criteria, parent_infos)) |
785 for i in xrange(len(variables)-1, -1, -1): |
870 return search_result |
786 var_address = variables[i].getaddress() |
871 setattr(cls, "Search", Search) |
787 if var_address is not None: |
872 |
788 result = address_model.match(var_address) |
|
789 if result is not None: |
|
790 variables.pop(i) |
|
791 setattr(cls, "removeVariableByFilter", removeVariableByFilter) |
|
792 |
|
793 cls = PLCOpenClasses.get("configuration_resource", None) |
873 cls = PLCOpenClasses.get("configuration_resource", None) |
794 if cls: |
874 if cls: |
795 def updateElementName(self, old_name, new_name): |
875 def updateElementName(self, old_name, new_name): |
796 for varlist in self.getglobalVars(): |
876 _updateConfigurationResourceElementName(self, old_name, new_name) |
797 for var in varlist.getvariable(): |
|
798 var_address = var.getaddress() |
|
799 if var_address is not None: |
|
800 if var_address == old_name: |
|
801 var.setaddress(new_name) |
|
802 if var.getname() == old_name: |
|
803 var.setname(new_name) |
|
804 for instance in self.getpouInstance(): |
877 for instance in self.getpouInstance(): |
805 instance.updateElementName(old_name, new_name) |
878 instance.updateElementName(old_name, new_name) |
806 for task in self.gettask(): |
879 for task in self.gettask(): |
807 task.updateElementName(old_name, new_name) |
880 task.updateElementName(old_name, new_name) |
808 setattr(cls, "updateElementName", updateElementName) |
881 setattr(cls, "updateElementName", updateElementName) |
809 |
882 |
810 def updateElementAddress(self, address_model, new_leading): |
883 def updateElementAddress(self, address_model, new_leading): |
811 for varlist in self.getglobalVars(): |
884 _updateConfigurationResourceElementAddress(self, address_model, new_leading) |
812 for var in varlist.getvariable(): |
|
813 var_address = var.getaddress() |
|
814 if var_address is not None: |
|
815 var.setaddress(update_address(var_address, address_model, new_leading)) |
|
816 for task in self.gettask(): |
885 for task in self.gettask(): |
817 task.updateElementAddress(address_model, new_leading) |
886 task.updateElementAddress(address_model, new_leading) |
818 setattr(cls, "updateElementAddress", updateElementAddress) |
887 setattr(cls, "updateElementAddress", updateElementAddress) |
819 |
888 |
820 def removeVariableByAddress(self, address): |
889 setattr(cls, "removeVariableByAddress", _removeConfigurationResourceVariableByAddress) |
821 for varlist in self.getglobalVars(): |
890 setattr(cls, "removeVariableByFilter", _removeConfigurationResourceVariableByFilter) |
822 variables = varlist.getvariable() |
891 |
823 for i in xrange(len(variables)-1, -1, -1): |
892 def Search(self, criteria, parent_infos=[]): |
824 if variables[i].getaddress() == address: |
893 parent_infos = parent_infos[:-1] + ["R::%s::%s" % (parent_infos[-1].split("::")[1], self.getname())] |
825 variables.pop(i) |
894 search_result = _SearchInConfigurationResource(self, criteria, parent_infos) |
826 setattr(cls, "removeVariableByAddress", removeVariableByAddress) |
895 task_number = 0 |
827 |
896 instance_number = 0 |
828 def removeVariableByFilter(self, address_model): |
897 for task in self.gettask(): |
829 for varlist in self.getglobalVars(): |
898 results = TestTextElement(task.getname(), criteria) |
830 variables = varlist.getvariable() |
899 for result in results: |
831 for i in xrange(len(variables)-1, -1, -1): |
900 search_result.append((tuple(parent_infos + ["task", task_number, "name"]),) + result) |
832 var_address = variables[i].getaddress() |
901 search_result.extend(task.Search(criteria, parent_infos + ["task", task_number])) |
833 if var_address is not None: |
902 task_number += 1 |
834 result = address_model.match(var_address) |
903 for instance in task.getpouInstance(): |
835 if result is not None: |
904 search_result.extend(task.Search(criteria, parent_infos + ["instance", instance_number])) |
836 variables.pop(i) |
905 for result in results: |
837 setattr(cls, "removeVariableByFilter", removeVariableByFilter) |
906 search_result.append((tuple(parent_infos + ["instance", instance_number, "task"]),) + result) |
907 instance_number += 1 |
|
908 for instance in self.getpouInstance(): |
|
909 search_result.extend(instance.Search(criteria, parent_infos + ["instance", instance_number])) |
|
910 instance_number += 1 |
|
911 return search_result |
|
912 setattr(cls, "Search", Search) |
|
838 |
913 |
839 cls = PLCOpenClasses.get("resource_task", None) |
914 cls = PLCOpenClasses.get("resource_task", None) |
840 if cls: |
915 if cls: |
841 def compatibility(self, tree): |
916 def compatibility(self, tree): |
842 if tree.hasAttribute("interval"): |
917 if tree.hasAttribute("interval"): |
876 self.single = update_address(self.single, address_model, new_leading) |
951 self.single = update_address(self.single, address_model, new_leading) |
877 if self.interval is not None: |
952 if self.interval is not None: |
878 self.interval = update_address(self.interval, address_model, new_leading) |
953 self.interval = update_address(self.interval, address_model, new_leading) |
879 setattr(cls, "updateElementAddress", updateElementAddress) |
954 setattr(cls, "updateElementAddress", updateElementAddress) |
880 |
955 |
956 def Search(self, criteria, parent_infos=[]): |
|
957 return _Search([("single", self.getsingle()), |
|
958 ("interval", self.getinterval()), |
|
959 ("priority", str(self.getpriority()))], |
|
960 criteria, parent_infos) |
|
961 setattr(cls, "Search", Search) |
|
962 |
|
881 cls = PLCOpenClasses.get("pouInstance", None) |
963 cls = PLCOpenClasses.get("pouInstance", None) |
882 if cls: |
964 if cls: |
883 def compatibility(self, tree): |
965 def compatibility(self, tree): |
884 if tree.hasAttribute("type"): |
966 if tree.hasAttribute("type"): |
885 NodeRenameAttr(tree, "type", "typeName") |
967 NodeRenameAttr(tree, "type", "typeName") |
887 |
969 |
888 def updateElementName(self, old_name, new_name): |
970 def updateElementName(self, old_name, new_name): |
889 if self.typeName == old_name: |
971 if self.typeName == old_name: |
890 self.typeName = new_name |
972 self.typeName = new_name |
891 setattr(cls, "updateElementName", updateElementName) |
973 setattr(cls, "updateElementName", updateElementName) |
974 |
|
975 def Search(self, criteria, parent_infos=[]): |
|
976 return _Search([("name", self.getname()), |
|
977 ("type", self.gettypeName())], |
|
978 criteria, parent_infos) |
|
979 setattr(cls, "Search", Search) |
|
980 |
|
981 cls = PLCOpenClasses.get("varListPlain_variable", None) |
|
982 if cls: |
|
983 def gettypeAsText(self): |
|
984 vartype_content = self.gettype().getcontent() |
|
985 # Variable type is a user data type |
|
986 if vartype_content["name"] == "derived": |
|
987 return vartype_content["value"].getname() |
|
988 # Variable type is a string type |
|
989 elif vartype_content["name"] in ["string", "wstring"]: |
|
990 return vartype_content["name"].upper() |
|
991 # Variable type is an array |
|
992 elif vartype_content["name"] == "array": |
|
993 base_type = vartype_content["value"].baseType.getcontent() |
|
994 # Array derived directly from a user defined type |
|
995 if base_type["name"] == "derived": |
|
996 basetype_name = base_type["value"].getname() |
|
997 # Array derived directly from a string type |
|
998 elif base_type["name"] in ["string", "wstring"]: |
|
999 basetype_name = base_type["name"].upper() |
|
1000 # Array derived directly from an elementary type |
|
1001 else: |
|
1002 basetype_name = base_type["name"] |
|
1003 return "ARRAY [%s] OF %s" % (",".join(map(lambda x : "%s..%s" % (x.getlower(), x.getupper()), vartype_content["value"].getdimension())), basetype_name) |
|
1004 # Variable type is an elementary type |
|
1005 return vartype_content["name"] |
|
1006 setattr(cls, "gettypeAsText", gettypeAsText) |
|
1007 |
|
1008 def Search(self, criteria, parent_infos=[]): |
|
1009 search_result = _Search([("name", self.getname()), |
|
1010 ("type", self.gettypeAsText()), |
|
1011 ("address", self.getaddress())], |
|
1012 criteria, parent_infos) |
|
1013 initial = self.getinitialValue() |
|
1014 if initial is not None: |
|
1015 search_result.extend(_Search([("initial", initial.getvalue())], criteria, parent_infos)) |
|
1016 doc = self.getdocumentation() |
|
1017 if doc is not None: |
|
1018 search_result.extend(doc.Search(criterias, parent_infos + ["documentation"])) |
|
1019 return search_result |
|
1020 setattr(cls, "Search", Search) |
|
892 |
1021 |
893 cls = PLCOpenClasses.get("project_types", None) |
1022 cls = PLCOpenClasses.get("project_types", None) |
894 if cls: |
1023 if cls: |
895 def getdataTypeElements(self): |
1024 def getdataTypeElements(self): |
896 return self.dataTypes.getdataType() |
1025 return self.dataTypes.getdataType() |
962 found = True |
1091 found = True |
963 break |
1092 break |
964 if not found: |
1093 if not found: |
965 raise ValueError, _("\"%s\" POU doesn't exist !!!")%name |
1094 raise ValueError, _("\"%s\" POU doesn't exist !!!")%name |
966 setattr(cls, "removepouElement", removepouElement) |
1095 setattr(cls, "removepouElement", removepouElement) |
1096 |
|
1097 def Search(self, criteria, parent_infos=[]): |
|
1098 search_result = [] |
|
1099 filter = criteria["filter"] |
|
1100 #if filter == "all" or "datatype" in filter: |
|
1101 # for datatype in self.dataTypes.getdataType(): |
|
1102 # search_result.extend(datatype.Search(criteria, parent_infos)) |
|
1103 for pou in self.pous.getpou(): |
|
1104 search_result.extend(pou.Search(criteria, parent_infos)) |
|
1105 return search_result |
|
1106 setattr(cls, "Search", Search) |
|
967 |
1107 |
968 cls = PLCOpenClasses.get("pous_pou", None) |
1108 cls = PLCOpenClasses.get("pous_pou", None) |
969 if cls: |
1109 if cls: |
970 |
1110 |
971 def setbodyType(self, type): |
1111 def setbodyType(self, type): |
1285 if var_address is not None: |
1425 if var_address is not None: |
1286 result = address_model.match(var_address) |
1426 result = address_model.match(var_address) |
1287 if result is not None: |
1427 if result is not None: |
1288 variables.pop(i) |
1428 variables.pop(i) |
1289 setattr(cls, "removeVariableByFilter", removeVariableByFilter) |
1429 setattr(cls, "removeVariableByFilter", removeVariableByFilter) |
1430 |
|
1431 def Search(self, criteria, parent_infos=[]): |
|
1432 search_result = [] |
|
1433 filter = criteria["filter"] |
|
1434 if filter == "all" or self.getpouType() in filter: |
|
1435 parent_infos = parent_infos + ["P::%s" % self.getname()] |
|
1436 for result in TestTextElement(self.getname(), criteria): |
|
1437 search_result.append((tuple(parent_infos + ["name"]),) + result) |
|
1438 if self.interface is not None: |
|
1439 var_number = 0 |
|
1440 for content in self.interface.getcontent(): |
|
1441 variable_type = searchResultVarTypes.get(content["value"], "var_local") |
|
1442 variables = content["value"].getvariable() |
|
1443 for modifier, has_modifier in [("constant", content["value"].getconstant()), |
|
1444 ("retain", content["value"].getretain()), |
|
1445 ("non_retain", content["value"].getnonretain())]: |
|
1446 if has_modifier: |
|
1447 for result in TestTextElement(modifier, criteria): |
|
1448 search_result.append((tuple(parent_infos + [variable_type, (var_number, var_number + len(variables)), modifier]),) + result) |
|
1449 break |
|
1450 for variable in variables: |
|
1451 search_result.extend(variable.Search(criteria, parent_infos + [variable_type, var_number])) |
|
1452 var_number += 1 |
|
1453 if len(self.body) > 0: |
|
1454 search_result.extend(self.body[0].Search(criteria, parent_infos)) |
|
1455 for action in self.getactionList(): |
|
1456 search_result.extend(action.Search(criteria, parent_infos)) |
|
1457 for transition in self.gettransitionList(): |
|
1458 search_result.extend(transition.Search(criteria, parent_infos)) |
|
1459 return search_result |
|
1460 setattr(cls, "Search", Search) |
|
1290 |
1461 |
1291 def setbodyType(self, type): |
1462 def setbodyType(self, type): |
1292 if type == "IL": |
1463 if type == "IL": |
1293 self.body.setcontent({"name" : "IL", "value" : PLCOpenClasses["formattedText"]()}) |
1464 self.body.setcontent({"name" : "IL", "value" : PLCOpenClasses["formattedText"]()}) |
1294 elif type == "ST": |
1465 elif type == "ST": |
1368 if isinstance(instance, PLCOpenClasses["fbdObjects_block"]) and instance.getinstanceName() == name: |
1539 if isinstance(instance, PLCOpenClasses["fbdObjects_block"]) and instance.getinstanceName() == name: |
1369 return True |
1540 return True |
1370 return False |
1541 return False |
1371 setattr(cls, "hasblock", hasblock) |
1542 setattr(cls, "hasblock", hasblock) |
1372 |
1543 |
1544 def Search(self, criteria, parent_infos): |
|
1545 search_result = [] |
|
1546 parent_infos = parent_infos[:-1] + ["T::%s::%s" % (parent_infos[-1].split("::")[1], self.getname())] |
|
1547 for result in TestTextElement(self.getname(), criteria): |
|
1548 search_result.append((tuple(parent_infos + ["name"]),) + result) |
|
1549 search_result.extend(self.body.Search(criteria, parent_infos)) |
|
1550 return search_result |
|
1551 setattr(cls, "Search", Search) |
|
1552 |
|
1373 cls = PLCOpenClasses.get("actions_action", None) |
1553 cls = PLCOpenClasses.get("actions_action", None) |
1374 if cls: |
1554 if cls: |
1375 setattr(cls, "setbodyType", setbodyType) |
1555 setattr(cls, "setbodyType", setbodyType) |
1376 setattr(cls, "getbodyType", getbodyType) |
1556 setattr(cls, "getbodyType", getbodyType) |
1377 setattr(cls, "resetexecutionOrder", resetexecutionOrder) |
1557 setattr(cls, "resetexecutionOrder", resetexecutionOrder) |
1399 for instance in self.getinstances(): |
1579 for instance in self.getinstances(): |
1400 if isinstance(instance, PLCOpenClasses["fbdObjects_block"]) and instance.getinstanceName() == name: |
1580 if isinstance(instance, PLCOpenClasses["fbdObjects_block"]) and instance.getinstanceName() == name: |
1401 return True |
1581 return True |
1402 return False |
1582 return False |
1403 setattr(cls, "hasblock", hasblock) |
1583 setattr(cls, "hasblock", hasblock) |
1584 |
|
1585 def Search(self, criteria, parent_infos): |
|
1586 search_result = [] |
|
1587 parent_infos = parent_infos[:-1] + ["A::%s::%s" % (parent_infos[-1].split("::")[1], self.getname())] |
|
1588 for result in TestTextElement(self.getname(), criteria): |
|
1589 search_result.append((tuple(parent_infos + ["name"]),) + result) |
|
1590 search_result.extend(self.body.Search(criteria, parent_infos)) |
|
1591 return search_result |
|
1592 setattr(cls, "Search", Search) |
|
1404 |
1593 |
1405 cls = PLCOpenClasses.get("body", None) |
1594 cls = PLCOpenClasses.get("body", None) |
1406 if cls: |
1595 if cls: |
1407 cls.currentExecutionOrderId = 0 |
1596 cls.currentExecutionOrderId = 0 |
1408 |
1597 |
1567 else: |
1756 else: |
1568 for element in self.content["value"].getcontent(): |
1757 for element in self.content["value"].getcontent(): |
1569 element["value"].updateElementAddress(address_model, new_leading) |
1758 element["value"].updateElementAddress(address_model, new_leading) |
1570 setattr(cls, "updateElementAddress", updateElementAddress) |
1759 setattr(cls, "updateElementAddress", updateElementAddress) |
1571 |
1760 |
1761 def Search(self, criteria, parent_infos=[]): |
|
1762 if self.content["name"] in ["IL", "ST"]: |
|
1763 search_result = self.content["value"].Search(criteria, parent_infos + ["body", 0]) |
|
1764 else: |
|
1765 search_result = [] |
|
1766 for element in self.content["value"].getcontent(): |
|
1767 search_result.extend(element["value"].Search(criteria, parent_infos)) |
|
1768 return search_result |
|
1769 setattr(cls, "Search", Search) |
|
1770 |
|
1572 def getx(self): |
1771 def getx(self): |
1573 return self.position.getx() |
1772 return self.position.getx() |
1574 |
1773 |
1575 def gety(self): |
1774 def gety(self): |
1576 return self.position.gety() |
1775 return self.position.gety() |
1679 pass |
1878 pass |
1680 |
1879 |
1681 def _updateElementAddress(self, address_model, new_leading): |
1880 def _updateElementAddress(self, address_model, new_leading): |
1682 pass |
1881 pass |
1683 |
1882 |
1883 def _SearchInElement(self, criteria, parent_infos=[]): |
|
1884 return [] |
|
1885 |
|
1684 _connectionsFunctions = { |
1886 _connectionsFunctions = { |
1685 "bbox": {"none": _getBoundingBox, |
1887 "bbox": {"none": _getBoundingBox, |
1686 "single": _getBoundingBoxSingle, |
1888 "single": _getBoundingBoxSingle, |
1687 "multiple": _getBoundingBoxMultiple}, |
1889 "multiple": _getBoundingBoxMultiple}, |
1688 "translate": {"none": _translate, |
1890 "translate": {"none": _translate, |
1691 "filter": {"none": lambda self, connections: None, |
1893 "filter": {"none": lambda self, connections: None, |
1692 "single": _filterConnectionsSingle, |
1894 "single": _filterConnectionsSingle, |
1693 "multiple": _filterConnectionsMultiple}, |
1895 "multiple": _filterConnectionsMultiple}, |
1694 "update": {"none": lambda self, translation: {}, |
1896 "update": {"none": lambda self, translation: {}, |
1695 "single": _updateConnectionsIdSingle, |
1897 "single": _updateConnectionsIdSingle, |
1696 "multiple": _updateConnectionsIdMultiple} |
1898 "multiple": _updateConnectionsIdMultiple}, |
1697 } |
1899 } |
1698 |
1900 |
1699 def _initElementClass(name, classname, connectionPointInType="none"): |
1901 def _initElementClass(name, classname, connectionPointInType="none"): |
1700 ElementNameToClass[name] = classname |
1902 ElementNameToClass[name] = classname |
1701 cls = PLCOpenClasses.get(classname, None) |
1903 cls = PLCOpenClasses.get(classname, None) |
1708 setattr(cls, "updateElementAddress", _updateElementAddress) |
1910 setattr(cls, "updateElementAddress", _updateElementAddress) |
1709 setattr(cls, "getBoundingBox", _connectionsFunctions["bbox"][connectionPointInType]) |
1911 setattr(cls, "getBoundingBox", _connectionsFunctions["bbox"][connectionPointInType]) |
1710 setattr(cls, "translate", _connectionsFunctions["translate"][connectionPointInType]) |
1912 setattr(cls, "translate", _connectionsFunctions["translate"][connectionPointInType]) |
1711 setattr(cls, "filterConnections", _connectionsFunctions["filter"][connectionPointInType]) |
1913 setattr(cls, "filterConnections", _connectionsFunctions["filter"][connectionPointInType]) |
1712 setattr(cls, "updateConnectionsId", _connectionsFunctions["update"][connectionPointInType]) |
1914 setattr(cls, "updateConnectionsId", _connectionsFunctions["update"][connectionPointInType]) |
1915 setattr(cls, "Search", _SearchInElement) |
|
1713 return cls |
1916 return cls |
1714 |
1917 |
1715 def _getexecutionOrder(instance, specific_values): |
1918 def _getexecutionOrder(instance, specific_values): |
1716 executionOrder = instance.getexecutionOrderId() |
1919 executionOrder = instance.getexecutionOrderId() |
1717 if executionOrder is None: |
1920 if executionOrder is None: |
1865 |
2068 |
1866 def updateElementAddress(self, address_model, new_leading): |
2069 def updateElementAddress(self, address_model, new_leading): |
1867 self.content.updateElementAddress(address_model, new_leading) |
2070 self.content.updateElementAddress(address_model, new_leading) |
1868 setattr(cls, "updateElementAddress", updateElementAddress) |
2071 setattr(cls, "updateElementAddress", updateElementAddress) |
1869 |
2072 |
2073 def Search(self, criteria, parent_infos=[]): |
|
2074 return self.content.Search(criteria, parent_infos + ["comment", self.getlocalId(), "content"]) |
|
2075 setattr(cls, "Search", Search) |
|
2076 |
|
1870 cls = _initElementClass("block", "fbdObjects_block") |
2077 cls = _initElementClass("block", "fbdObjects_block") |
1871 if cls: |
2078 if cls: |
1872 def getBoundingBox(self): |
2079 def getBoundingBox(self): |
1873 bbox = _getBoundingBox(self) |
2080 bbox = _getBoundingBox(self) |
1874 for input in self.inputVariables.getvariable(): |
2081 for input in self.inputVariables.getvariable(): |
1910 _translate(self, dx, dy) |
2117 _translate(self, dx, dy) |
1911 for input in self.inputVariables.getvariable(): |
2118 for input in self.inputVariables.getvariable(): |
1912 _translateConnections(input.connectionPointIn, dx, dy) |
2119 _translateConnections(input.connectionPointIn, dx, dy) |
1913 setattr(cls, "translate", translate) |
2120 setattr(cls, "translate", translate) |
1914 |
2121 |
2122 def Search(self, criteria, parent_infos=[]): |
|
2123 parent_infos = parent_infos + ["block", self.getlocalId()] |
|
2124 search_result = _Search([("name", self.getinstanceName()), |
|
2125 ("type", self.gettypeName())], |
|
2126 criteria, parent_infos) |
|
2127 for i, variable in enumerate(self.inputVariables.getvariable()): |
|
2128 for result in TestTextElement(variable.getformalParameter(), criteria): |
|
2129 search_result.append((tuple(parent_infos + ["input", i]),) + result) |
|
2130 for i, variable in enumerate(self.outputVariables.getvariable()): |
|
2131 for result in TestTextElement(variable.getformalParameter(), criteria): |
|
2132 search_result.append((tuple(parent_infos + ["output", i]),) + result) |
|
2133 return search_result |
|
2134 setattr(cls, "Search", Search) |
|
2135 |
|
1915 cls = _initElementClass("leftPowerRail", "ldObjects_leftPowerRail") |
2136 cls = _initElementClass("leftPowerRail", "ldObjects_leftPowerRail") |
1916 if cls: |
2137 if cls: |
1917 setattr(cls, "getinfos", _getpowerrailinfosFunction("leftPowerRail")) |
2138 setattr(cls, "getinfos", _getpowerrailinfosFunction("leftPowerRail")) |
1918 |
2139 |
1919 cls = _initElementClass("rightPowerRail", "ldObjects_rightPowerRail", "multiple") |
2140 cls = _initElementClass("rightPowerRail", "ldObjects_rightPowerRail", "multiple") |
1931 |
2152 |
1932 def updateElementAddress(self, address_model, new_leading): |
2153 def updateElementAddress(self, address_model, new_leading): |
1933 self.variable = update_address(self.variable, address_model, new_leading) |
2154 self.variable = update_address(self.variable, address_model, new_leading) |
1934 setattr(cls, "updateElementAddress", updateElementAddress) |
2155 setattr(cls, "updateElementAddress", updateElementAddress) |
1935 |
2156 |
2157 def Search(self, criteria, parent_infos=[]): |
|
2158 return _Search([("reference", self.getvariable())], criteria, parent_infos + ["contact", self.getlocalId()]) |
|
2159 setattr(cls, "Search", Search) |
|
2160 |
|
1936 cls = _initElementClass("coil", "ldObjects_coil", "single") |
2161 cls = _initElementClass("coil", "ldObjects_coil", "single") |
1937 if cls: |
2162 if cls: |
1938 setattr(cls, "getinfos", _getldelementinfosFunction("coil")) |
2163 setattr(cls, "getinfos", _getldelementinfosFunction("coil")) |
1939 |
2164 |
1940 def updateElementName(self, old_name, new_name): |
2165 def updateElementName(self, old_name, new_name): |
1943 setattr(cls, "updateElementName", updateElementName) |
2168 setattr(cls, "updateElementName", updateElementName) |
1944 |
2169 |
1945 def updateElementAddress(self, address_model, new_leading): |
2170 def updateElementAddress(self, address_model, new_leading): |
1946 self.variable = update_address(self.variable, address_model, new_leading) |
2171 self.variable = update_address(self.variable, address_model, new_leading) |
1947 setattr(cls, "updateElementAddress", updateElementAddress) |
2172 setattr(cls, "updateElementAddress", updateElementAddress) |
2173 |
|
2174 def Search(self, criteria, parent_infos=[]): |
|
2175 return _Search([("reference", self.getvariable())], criteria, parent_infos + ["coil", self.getlocalId()]) |
|
2176 setattr(cls, "Search", Search) |
|
1948 |
2177 |
1949 cls = _initElementClass("step", "sfcObjects_step", "single") |
2178 cls = _initElementClass("step", "sfcObjects_step", "single") |
1950 if cls: |
2179 if cls: |
1951 def getinfos(self): |
2180 def getinfos(self): |
1952 infos = _getelementinfos(self) |
2181 infos = _getelementinfos(self) |
1960 infos["outputs"].append(_getconnectioninfos(self, self.connectionPointOut)) |
2189 infos["outputs"].append(_getconnectioninfos(self, self.connectionPointOut)) |
1961 if self.connectionPointOutAction: |
2190 if self.connectionPointOutAction: |
1962 specific_values["action"] = _getconnectioninfos(self, self.connectionPointOutAction) |
2191 specific_values["action"] = _getconnectioninfos(self, self.connectionPointOutAction) |
1963 return infos |
2192 return infos |
1964 setattr(cls, "getinfos", getinfos) |
2193 setattr(cls, "getinfos", getinfos) |
2194 |
|
2195 def Search(self, criteria, parent_infos=[]): |
|
2196 return _Search([("name", self.getname())], criteria, parent_infos + ["step", self.getlocalId()]) |
|
2197 setattr(cls, "Search", Search) |
|
1965 |
2198 |
1966 cls = PLCOpenClasses.get("transition_condition", None) |
2199 cls = PLCOpenClasses.get("transition_condition", None) |
1967 if cls: |
2200 if cls: |
1968 def compatibility(self, tree): |
2201 def compatibility(self, tree): |
1969 connections = [] |
2202 connections = [] |
2056 content = self.condition.getcontent() |
2289 content = self.condition.getcontent() |
2057 if content["name"] == "connectionPointIn": |
2290 if content["name"] == "connectionPointIn": |
2058 return content["value"].getconnections() |
2291 return content["value"].getconnections() |
2059 setattr(cls, "getconnections", getconnections) |
2292 setattr(cls, "getconnections", getconnections) |
2060 |
2293 |
2294 def Search(self, criteria, parent_infos=[]): |
|
2295 parent_infos = parent_infos + ["transition", self.getlocalId()] |
|
2296 search_result = [] |
|
2297 content = self.condition.getcontent() |
|
2298 if content["name"] == "reference": |
|
2299 search_result.extend(_Search([("reference", content["value"].getname())], criteria, parent_infos)) |
|
2300 elif content["name"] == "inline": |
|
2301 search_result.extend(content["value"].Search(criteria, parent_infos + ["inline"])) |
|
2302 return search_result |
|
2303 setattr(cls, "Search", Search) |
|
2304 |
|
2061 cls = _initElementClass("selectionDivergence", "sfcObjects_selectionDivergence", "single") |
2305 cls = _initElementClass("selectionDivergence", "sfcObjects_selectionDivergence", "single") |
2062 if cls: |
2306 if cls: |
2063 setattr(cls, "getinfos", _getdivergenceinfosFunction(True, False)) |
2307 setattr(cls, "getinfos", _getdivergenceinfosFunction(True, False)) |
2064 |
2308 |
2065 cls = _initElementClass("selectionConvergence", "sfcObjects_selectionConvergence", "multiple") |
2309 cls = _initElementClass("selectionConvergence", "sfcObjects_selectionConvergence", "multiple") |
2081 infos["type"] = "jump" |
2325 infos["type"] = "jump" |
2082 infos["specific_values"]["target"] = self.gettargetName() |
2326 infos["specific_values"]["target"] = self.gettargetName() |
2083 infos["inputs"].append(_getconnectioninfos(self, self.connectionPointIn, True)) |
2327 infos["inputs"].append(_getconnectioninfos(self, self.connectionPointIn, True)) |
2084 return infos |
2328 return infos |
2085 setattr(cls, "getinfos", getinfos) |
2329 setattr(cls, "getinfos", getinfos) |
2330 |
|
2331 def Search(self, criteria, parent_infos): |
|
2332 return _Search([("target", self.gettargetName())], criteria, parent_infos + ["jump", self.getlocalId()]) |
|
2333 setattr(cls, "Search", Search) |
|
2086 |
2334 |
2087 cls = PLCOpenClasses.get("actionBlock_action", None) |
2335 cls = PLCOpenClasses.get("actionBlock_action", None) |
2088 if cls: |
2336 if cls: |
2089 def compatibility(self, tree): |
2337 def compatibility(self, tree): |
2090 relPosition = reduce(lambda x, y: x | (y.nodeName == "relPosition"), tree.childNodes, False) |
2338 relPosition = reduce(lambda x, y: x | (y.nodeName == "relPosition"), tree.childNodes, False) |
2131 if self.reference: |
2379 if self.reference: |
2132 self.reference.setname(update_address(self.reference.getname(), address_model, new_leading)) |
2380 self.reference.setname(update_address(self.reference.getname(), address_model, new_leading)) |
2133 if self.inline: |
2381 if self.inline: |
2134 self.inline.updateElementAddress(address_model, new_leading) |
2382 self.inline.updateElementAddress(address_model, new_leading) |
2135 setattr(cls, "updateElementAddress", updateElementAddress) |
2383 setattr(cls, "updateElementAddress", updateElementAddress) |
2384 |
|
2385 def Search(self, criteria, parent_infos=[]): |
|
2386 qualifier = self.getqualifier() |
|
2387 if qualifier is None: |
|
2388 qualifier = "N" |
|
2389 return _Search([("inline", self.getinlineContent()), |
|
2390 ("reference", self.getreferenceName()), |
|
2391 ("qualifier", qualifier), |
|
2392 ("duration", self.getduration()), |
|
2393 ("indicator", self.getindicator())], |
|
2394 criteria, parent_infos) |
|
2395 setattr(cls, "Search", Search) |
|
2136 |
2396 |
2137 cls = _initElementClass("actionBlock", "commonObjects_actionBlock", "single") |
2397 cls = _initElementClass("actionBlock", "commonObjects_actionBlock", "single") |
2138 if cls: |
2398 if cls: |
2139 def compatibility(self, tree): |
2399 def compatibility(self, tree): |
2140 for child in tree.childNodes[:]: |
2400 for child in tree.childNodes[:]: |
2199 def updateElementAddress(self, address_model, new_leading): |
2459 def updateElementAddress(self, address_model, new_leading): |
2200 for action in self.action: |
2460 for action in self.action: |
2201 action.updateElementAddress(address_model, new_leading) |
2461 action.updateElementAddress(address_model, new_leading) |
2202 setattr(cls, "updateElementAddress", updateElementAddress) |
2462 setattr(cls, "updateElementAddress", updateElementAddress) |
2203 |
2463 |
2464 def Search(self, criteria, parent_infos=[]): |
|
2465 parent_infos = parent_infos + ["action_block", self.getlocalId()] |
|
2466 search_result = [] |
|
2467 for idx, action in enumerate(self.action): |
|
2468 search_result.extend(action.Search(criteria, parent_infos + ["action", idx])) |
|
2469 return search_result |
|
2470 setattr(cls, "Search", Search) |
|
2471 |
|
2472 def _SearchInIOVariable(self, criteria, parent_infos=[]): |
|
2473 return _Search([("expression", self.getexpression())], criteria, parent_infos + ["io_variable", self.getlocalId()]) |
|
2474 |
|
2204 cls = _initElementClass("inVariable", "fbdObjects_inVariable") |
2475 cls = _initElementClass("inVariable", "fbdObjects_inVariable") |
2205 if cls: |
2476 if cls: |
2206 setattr(cls, "getinfos", _getvariableinfosFunction("input", False, True)) |
2477 setattr(cls, "getinfos", _getvariableinfosFunction("input", False, True)) |
2207 |
2478 |
2208 def updateElementName(self, old_name, new_name): |
2479 def updateElementName(self, old_name, new_name): |
2212 |
2483 |
2213 def updateElementAddress(self, address_model, new_leading): |
2484 def updateElementAddress(self, address_model, new_leading): |
2214 self.expression = update_address(self.expression, address_model, new_leading) |
2485 self.expression = update_address(self.expression, address_model, new_leading) |
2215 setattr(cls, "updateElementAddress", updateElementAddress) |
2486 setattr(cls, "updateElementAddress", updateElementAddress) |
2216 |
2487 |
2488 setattr(cls, "Search", _SearchInIOVariable) |
|
2489 |
|
2217 cls = _initElementClass("outVariable", "fbdObjects_outVariable", "single") |
2490 cls = _initElementClass("outVariable", "fbdObjects_outVariable", "single") |
2218 if cls: |
2491 if cls: |
2219 setattr(cls, "getinfos", _getvariableinfosFunction("output", True, False)) |
2492 setattr(cls, "getinfos", _getvariableinfosFunction("output", True, False)) |
2220 |
2493 |
2221 def updateElementName(self, old_name, new_name): |
2494 def updateElementName(self, old_name, new_name): |
2225 |
2498 |
2226 def updateElementAddress(self, address_model, new_leading): |
2499 def updateElementAddress(self, address_model, new_leading): |
2227 self.expression = update_address(self.expression, address_model, new_leading) |
2500 self.expression = update_address(self.expression, address_model, new_leading) |
2228 setattr(cls, "updateElementAddress", updateElementAddress) |
2501 setattr(cls, "updateElementAddress", updateElementAddress) |
2229 |
2502 |
2503 setattr(cls, "Search", _SearchInIOVariable) |
|
2504 |
|
2230 cls = _initElementClass("inOutVariable", "fbdObjects_inOutVariable", "single") |
2505 cls = _initElementClass("inOutVariable", "fbdObjects_inOutVariable", "single") |
2231 if cls: |
2506 if cls: |
2232 setattr(cls, "getinfos", _getvariableinfosFunction("inout", True, True)) |
2507 setattr(cls, "getinfos", _getvariableinfosFunction("inout", True, True)) |
2233 |
2508 |
2234 def updateElementName(self, old_name, new_name): |
2509 def updateElementName(self, old_name, new_name): |
2238 |
2513 |
2239 def updateElementAddress(self, address_model, new_leading): |
2514 def updateElementAddress(self, address_model, new_leading): |
2240 self.expression = update_address(self.expression, address_model, new_leading) |
2515 self.expression = update_address(self.expression, address_model, new_leading) |
2241 setattr(cls, "updateElementAddress", updateElementAddress) |
2516 setattr(cls, "updateElementAddress", updateElementAddress) |
2242 |
2517 |
2518 setattr(cls, "Search", _SearchInIOVariable) |
|
2519 |
|
2520 |
|
2521 def _SearchInConnector(self, criteria, parent_infos=[]): |
|
2522 return _Search([("name", self.getname())], criteria, parent_infos + ["connector", self.getlocalId()]) |
|
2523 |
|
2243 cls = _initElementClass("continuation", "commonObjects_continuation") |
2524 cls = _initElementClass("continuation", "commonObjects_continuation") |
2244 if cls: |
2525 if cls: |
2245 setattr(cls, "getinfos", _getconnectorinfosFunction("continuation")) |
2526 setattr(cls, "getinfos", _getconnectorinfosFunction("continuation")) |
2527 setattr(cls, "Search", _SearchInConnector) |
|
2246 |
2528 |
2247 cls = _initElementClass("connector", "commonObjects_connector", "single") |
2529 cls = _initElementClass("connector", "commonObjects_connector", "single") |
2248 if cls: |
2530 if cls: |
2249 setattr(cls, "getinfos", _getconnectorinfosFunction("connector")) |
2531 setattr(cls, "getinfos", _getconnectorinfosFunction("connector")) |
2532 setattr(cls, "Search", _SearchInConnector) |
|
2250 |
2533 |
2251 cls = PLCOpenClasses.get("connection", None) |
2534 cls = PLCOpenClasses.get("connection", None) |
2252 if cls: |
2535 if cls: |
2253 def setpoints(self, points): |
2536 def setpoints(self, points): |
2254 self.position = [] |
2537 self.position = [] |