plcopen/plcopen.py
changeset 576 3f2024f30553
parent 566 6014ef82a98a
child 590 b2442bb10c0b
equal deleted inserted replaced
575:a7c706b9492e 576:3f2024f30553
   351                 raise ValueError, _("\"%s\" resource doesn't exist in \"%s\" configuration !!!")%(name, config_name)
   351                 raise ValueError, _("\"%s\" resource doesn't exist in \"%s\" configuration !!!")%(name, config_name)
   352     setattr(cls, "removeconfigurationResource", removeconfigurationResource)
   352     setattr(cls, "removeconfigurationResource", removeconfigurationResource)
   353 
   353 
   354     def updateElementName(self, old_name, new_name):
   354     def updateElementName(self, old_name, new_name):
   355         for datatype in self.types.getdataTypeElements():
   355         for datatype in self.types.getdataTypeElements():
   356             datatype_content = datatype.baseType.getcontent()
   356             datatype.updateElementName(old_name, new_name)
   357             if datatype_content["name"] == "derived" and datatype_content["value"].getname() == old_name:
       
   358                 datatype_content["value"].setname(new_name)
       
   359             elif datatype_content["name"] in ["array", "subrangeSigned", "subrangeUnsigned"]:
       
   360                 basetype_content = datatype_content["value"].baseType.getcontent()
       
   361                 if basetype_content["name"] == "derived" and basetype_content["value"].getname() == old_name:
       
   362                     basetype_content["value"].setname(new_name)
       
   363             elif datatype_content["name"] == "struct":
       
   364                 for element in datatype_content["value"].getvariable():
       
   365                     element_type = element.type.getcontent()
       
   366                     if element_type["name"] == "derived" and element_type["value"].getname() == old_name:
       
   367                         element_type["value"].setname(new_name)
       
   368         for pou in self.types.getpouElements():
   357         for pou in self.types.getpouElements():
   369             pou.updateElementName(old_name, new_name)
   358             pou.updateElementName(old_name, new_name)
   370         for configuration in self.instances.configurations.getconfiguration():
   359         for configuration in self.instances.configurations.getconfiguration():
   371             configuration.updateElementName(old_name, new_name)
   360             configuration.updateElementName(old_name, new_name)
   372     setattr(cls, "updateElementName", updateElementName)
   361     setattr(cls, "updateElementName", updateElementName)
   821                 result = address_model.match(var_address)
   810                 result = address_model.match(var_address)
   822                 if result is not None:
   811                 if result is not None:
   823                     variables.pop(i)
   812                     variables.pop(i)
   824 
   813 
   825 def _SearchInConfigurationResource(self, criteria, parent_infos=[]):
   814 def _SearchInConfigurationResource(self, criteria, parent_infos=[]):
   826     search_result = []
   815     search_result = _Search([("name", self.getname())], criteria, parent_infos)
   827     for result in TestTextElement(self.getname(), criteria):
       
   828         search_result.append((tuple(parent_infos + ["name"]),) + result)
       
   829     var_number = 0
   816     var_number = 0
   830     for varlist in self.getglobalVars():
   817     for varlist in self.getglobalVars():
   831         variable_type = searchResultVarTypes.get("globalVars", "var_local")
   818         variable_type = searchResultVarTypes.get("globalVars", "var_local")
   832         variables = varlist.getvariable()
   819         variables = varlist.getvariable()
   833         for modifier, has_modifier in [("constant", varlist.getconstant()),
   820         for modifier, has_modifier in [("constant", varlist.getconstant()),
  1095     setattr(cls, "removepouElement", removepouElement)
  1082     setattr(cls, "removepouElement", removepouElement)
  1096 
  1083 
  1097     def Search(self, criteria, parent_infos=[]):
  1084     def Search(self, criteria, parent_infos=[]):
  1098         search_result = []
  1085         search_result = []
  1099         filter = criteria["filter"]
  1086         filter = criteria["filter"]
  1100         #if filter == "all" or "datatype" in filter:
  1087         for datatype in self.dataTypes.getdataType():
  1101         #    for datatype in self.dataTypes.getdataType():
  1088             search_result.extend(datatype.Search(criteria, parent_infos))
  1102         #        search_result.extend(datatype.Search(criteria, parent_infos))
       
  1103         for pou in self.pous.getpou():
  1089         for pou in self.pous.getpou():
  1104             search_result.extend(pou.Search(criteria, parent_infos))
  1090             search_result.extend(pou.Search(criteria, parent_infos))
       
  1091         return search_result
       
  1092     setattr(cls, "Search", Search)
       
  1093 
       
  1094 def _updateBaseTypeElementName(self, old_name, new_name):
       
  1095     self.baseType.updateElementName(old_name, new_name)
       
  1096 
       
  1097 cls = PLCOpenClasses.get("dataTypes_dataType", None)
       
  1098 if cls:
       
  1099     setattr(cls, "updateElementName", _updateBaseTypeElementName)
       
  1100     
       
  1101     def Search(self, criteria, parent_infos=[]):
       
  1102         search_result = []
       
  1103         filter = criteria["filter"]
       
  1104         if filter == "all" or "datatype" in filter:
       
  1105             parent_infos = parent_infos + ["D::%s" % self.getname()]
       
  1106             search_result.extend(_Search([("name", self.getname())], criteria, parent_infos))
       
  1107             search_result.extend(self.baseType.Search(criteria, parent_infos))
       
  1108             if self.initialValue is not None:
       
  1109                 search_result.extend(_Search([("initial", self.initialValue.getvalue())], criteria, parent_infos))
       
  1110         return search_result
       
  1111     setattr(cls, "Search", Search)
       
  1112 
       
  1113 cls = PLCOpenClasses.get("dataType", None)
       
  1114 if cls:
       
  1115     
       
  1116     def updateElementName(self, old_name, new_name):
       
  1117         if self.content["name"] in ["derived", "array", "subrangeSigned", "subrangeUnsigned"]:
       
  1118             self.content["value"].updateElementName(old_name, new_name)
       
  1119         elif self.content["name"] == "struct":
       
  1120             for element in datatype_content["value"].getvariable():
       
  1121                 element_type = element.type.updateElementName(old_name, new_name)
       
  1122     setattr(cls, "updateElementName", updateElementName)
       
  1123 
       
  1124     def Search(self, criteria, parent_infos=[]):
       
  1125         search_result = []
       
  1126         if self.content["name"] in ["derived", "array", "enum", "subrangeSigned", "subrangeUnsigned"]:
       
  1127             search_result.extend(self.content["value"].Search(criteria, parent_infos))
       
  1128         elif self.content["name"] == "struct":
       
  1129             for i, element in enumerate(self.content["value"].getvariable()):
       
  1130                 search_result.extend(element.Search(criteria, parent_infos + ["struct", i]))
       
  1131         else:
       
  1132             basetype = self.content["name"]
       
  1133             if basetype in ["string", "wstring"]:
       
  1134                 basetype = basetype.upper()
       
  1135             search_result.extend(_Search([("base", basetype)], criteria, parent_infos))
       
  1136         return search_result
       
  1137     setattr(cls, "Search", Search)
       
  1138 
       
  1139 cls = PLCOpenClasses.get("derivedTypes_array", None)
       
  1140 if cls:
       
  1141     setattr(cls, "updateElementName", _updateBaseTypeElementName)
       
  1142     
       
  1143     def Search(self, criteria, parent_infos=[]):
       
  1144         search_result = self.baseType.Search(criteria, parent_infos)
       
  1145         for i, dimension in enumerate(self.getdimension()):
       
  1146             search_result.extend(_Search([("lower", dimension.getlower()),
       
  1147                                           ("upper", dimension.getupper())],
       
  1148                                          criteria, parent_infos + ["range", i]))
       
  1149         return search_result
       
  1150     setattr(cls, "Search", Search)
       
  1151 
       
  1152 def _SearchInSubrange(self, criteria, parent_infos=[]):
       
  1153     search_result = self.baseType.Search(criteria, parent_infos)
       
  1154     search_result.extend(_Search([("lower", self.range.getlower()),
       
  1155                                   ("upper", self.range.getupper())],
       
  1156                                  criteria, parent_infos))
       
  1157     return search_result
       
  1158 
       
  1159 cls = PLCOpenClasses.get("derivedTypes_subrangeSigned", None)
       
  1160 if cls:
       
  1161     setattr(cls, "updateElementName", _updateBaseTypeElementName)
       
  1162     setattr(cls, "Search", _SearchInSubrange)
       
  1163 
       
  1164 cls = PLCOpenClasses.get("derivedTypes_subrangeUnsigned", None)
       
  1165 if cls:
       
  1166     setattr(cls, "updateElementName", _updateBaseTypeElementName)
       
  1167     setattr(cls, "Search", _SearchInSubrange)
       
  1168 
       
  1169 cls = PLCOpenClasses.get("derivedTypes_enum", None)
       
  1170 if cls:
       
  1171     
       
  1172     def updateElementName(self, old_name, new_name):
       
  1173         pass
       
  1174     setattr(cls, "updateElementName", updateElementName)
       
  1175     
       
  1176     def Search(self, criteria, parent_infos=[]):
       
  1177         search_result = []
       
  1178         for i, value in enumerate(self.values.getvalue()):
       
  1179             for result in TestTextElement(value.getname(), criteria):
       
  1180                 search_result.append((tuple(parent_infos + ["value", i]),) + result)
  1105         return search_result
  1181         return search_result
  1106     setattr(cls, "Search", Search)
  1182     setattr(cls, "Search", Search)
  1107 
  1183 
  1108 cls = PLCOpenClasses.get("pous_pou", None)
  1184 cls = PLCOpenClasses.get("pous_pou", None)
  1109 if cls:
  1185 if cls:
  1431     def Search(self, criteria, parent_infos=[]):
  1507     def Search(self, criteria, parent_infos=[]):
  1432         search_result = []
  1508         search_result = []
  1433         filter = criteria["filter"]
  1509         filter = criteria["filter"]
  1434         if filter == "all" or self.getpouType() in filter:
  1510         if filter == "all" or self.getpouType() in filter:
  1435             parent_infos = parent_infos + ["P::%s" % self.getname()]
  1511             parent_infos = parent_infos + ["P::%s" % self.getname()]
  1436             for result in TestTextElement(self.getname(), criteria):
  1512             search_result.extend(_Search([("name", self.getname())], criteria, parent_infos))
  1437                 search_result.append((tuple(parent_infos + ["name"]),) + result)
       
  1438             if self.interface is not None:
  1513             if self.interface is not None:
  1439                 var_number = 0
  1514                 var_number = 0
  1440                 for content in self.interface.getcontent():
  1515                 for content in self.interface.getcontent():
  1441                     variable_type = searchResultVarTypes.get(content["value"], "var_local")
  1516                     variable_type = searchResultVarTypes.get(content["value"], "var_local")
  1442                     variables = content["value"].getvariable()
  1517                     variables = content["value"].getvariable()