plcopen/plcopen.py
changeset 68 66308e07402c
parent 67 3a1b0afdaf84
child 69 8fbff50141f8
equal deleted inserted replaced
67:3a1b0afdaf84 68:66308e07402c
   411     setattr(cls, "setVars", setVars)
   411     setattr(cls, "setVars", setVars)
   412     
   412     
   413     def addPouVar(self, type, name):
   413     def addPouVar(self, type, name):
   414         content = self.interface.getContent()
   414         content = self.interface.getContent()
   415         if len(content) == 0 or content[-1]["name"] != "localVars":
   415         if len(content) == 0 or content[-1]["name"] != "localVars":
   416             self.interface.appendContent("localVars", PLCOpenClasses["varList"]())
   416             content.append({"name" : "localVars", "value" : PLCOpenClasses["varList"]()})
       
   417         else:
       
   418             varlist = content[-1]["value"]
       
   419             variables = varlist.getVariable()
       
   420             if varlist.getConstant() or varlist.getRetain() or len(variables) > 0 and variables[0].getAddress():
       
   421                 content.append({"name" : "localVars", "value" : PLCOpenClasses["varList"]()})
   417         var = PLCOpenClasses["varListPlain_variable"]()
   422         var = PLCOpenClasses["varListPlain_variable"]()
   418         var.setName(name)
   423         var.setName(name)
   419         var_type = PLCOpenClasses["dataType"]()
   424         var_type = PLCOpenClasses["dataType"]()
   420         derived_type = PLCOpenClasses["derived"]()
   425         derived_type = PLCOpenClasses["derived"]()
   421         derived_type.setName(type)
   426         derived_type.setName(type)
   436                         break
   441                         break
   437             if len(varlist["value"].getVariable()) == 0:
   442             if len(varlist["value"].getVariable()) == 0:
   438                 content.remove(varlist)
   443                 content.remove(varlist)
   439                 break
   444                 break
   440     setattr(cls, "removePouVar", removePouVar)
   445     setattr(cls, "removePouVar", removePouVar)
   441         
   446     
       
   447     def hasBlock(self, name):
       
   448         if self.getBodyType() in ["FBD", "LD", "SFC"]:
       
   449             for instance in self.getInstances():
       
   450                 if isinstance(instance, PLCOpenClasses["block"]) and instance.getInstanceName() == name:
       
   451                     return True
       
   452             for transition in self.transitions.getTransition():
       
   453                 result = transition.hasBlock(name)
       
   454                 if result:
       
   455                     return result
       
   456             for action in self.actions.getAction():
       
   457                 result = action.hasBlock(name)
       
   458                 if result:
       
   459                     return result
       
   460         return False
       
   461     setattr(cls, "hasBlock", hasBlock)
       
   462     
   442     def addTransition(self, name, type):
   463     def addTransition(self, name, type):
   443         if not self.transitions:
   464         if not self.transitions:
   444             self.addTransitions()
   465             self.addTransitions()
   445             self.transitions.setTransition([])
   466             self.transitions.setTransition([])
   446         transition = PLCOpenClasses["transitions_transition"]()
   467         transition = PLCOpenClasses["transitions_transition"]()
   538 
   559 
   539     def updateElementName(self, old_name, new_name):
   560     def updateElementName(self, old_name, new_name):
   540         self.body.updateElementName(old_name, new_name)
   561         self.body.updateElementName(old_name, new_name)
   541     setattr(cls, "updateElementName", updateElementName)
   562     setattr(cls, "updateElementName", updateElementName)
   542 
   563 
       
   564     def hasBlock(self, name):
       
   565         if self.getBodyType() in ["FBD", "LD", "SFC"]:
       
   566             for instance in self.getInstances():
       
   567                 if isinstance(instance, PLCOpenClasses["block"]) and instance.getInstanceName() == name:
       
   568                     return True
       
   569         return False
       
   570     setattr(cls, "hasBlock", hasBlock)
       
   571 
   543 cls = PLCOpenClasses.get("actions_action", None)
   572 cls = PLCOpenClasses.get("actions_action", None)
   544 if cls:
   573 if cls:
   545     setattr(cls, "setBodyType", setBodyType)
   574     setattr(cls, "setBodyType", setBodyType)
   546     setattr(cls, "getBodyType", getBodyType)
   575     setattr(cls, "getBodyType", getBodyType)
   547     setattr(cls, "addInstance", addInstance)
   576     setattr(cls, "addInstance", addInstance)
   554     setattr(cls, "getText", getText)
   583     setattr(cls, "getText", getText)
   555 
   584 
   556     def updateElementName(self, old_name, new_name):
   585     def updateElementName(self, old_name, new_name):
   557         self.body.updateElementName(old_name, new_name)
   586         self.body.updateElementName(old_name, new_name)
   558     setattr(cls, "updateElementName", updateElementName)
   587     setattr(cls, "updateElementName", updateElementName)
       
   588 
       
   589     def hasBlock(self, name):
       
   590         if self.getBodyType() in ["FBD", "LD", "SFC"]:
       
   591             for instance in self.getInstances():
       
   592                 if isinstance(instance, PLCOpenClasses["block"]) and instance.getInstanceName() == name:
       
   593                     return True
       
   594         return False
       
   595     setattr(cls, "hasBlock", hasBlock)
   559 
   596 
   560 cls = PLCOpenClasses.get("body", None)
   597 cls = PLCOpenClasses.get("body", None)
   561 if cls:
   598 if cls:
   562     def appendContentInstance(self, name, instance):
   599     def appendContentInstance(self, name, instance):
   563         if self.content["name"] in ["LD","FBD","SFC"]:
   600         if self.content["name"] in ["LD","FBD","SFC"]: