plcopen/plcopen.py
changeset 286 67da12c94d2d
parent 282 a18ddbbc5c58
child 295 c6ef6d92ce16
equal deleted inserted replaced
285:ed45a7118af1 286:67da12c94d2d
   308     setattr(cls, "RefreshCustomBlockTypes", RefreshCustomBlockTypes)
   308     setattr(cls, "RefreshCustomBlockTypes", RefreshCustomBlockTypes)
   309 
   309 
   310     def AddCustomBlockType(self, pou): 
   310     def AddCustomBlockType(self, pou): 
   311         pou_name = pou.getname()
   311         pou_name = pou.getname()
   312         pou_type = pou.getpouType()
   312         pou_type = pou.getpouType()
   313         if pou_type != "program":
   313         block_infos = {"name" : pou_name, "type" : pou_type, "extensible" : False,
   314             block_infos = {"name" : pou_name, "type" : pou_type, "extensible" : False,
   314                        "inputs" : [], "outputs" : [], "comment" : "",
   315                            "inputs" : [], "outputs" : [], "comment" : "",
   315                        "generate" : generate_block, "initialise" : initialise_block}
   316                            "generate" : generate_block, "initialise" : initialise_block}
   316         if pou.getinterface():
   317             if pou.getinterface():
   317             return_type = pou.interface.getreturnType()
   318                 return_type = pou.interface.getreturnType()
   318             if return_type:
   319                 if return_type:
   319                 var_type = return_type.getcontent()
   320                     var_type = return_type.getcontent()
   320                 if var_type["name"] == "derived":
   321                     if var_type["name"] == "derived":
   321                     block_infos["outputs"].append(("", var_type["value"].getname(), "none"))
   322                         block_infos["outputs"].append(("", var_type["value"].getname(), "none"))
   322                 elif var_type["name"] in ["string", "wstring"]:
   323                     elif var_type["name"] in ["string", "wstring"]:
   323                     block_infos["outputs"].append(("", var_type["name"].upper(), "none"))
   324                         block_infos["outputs"].append(("", var_type["name"].upper(), "none"))
   324                 else:
   325                     else:
   325                     block_infos["outputs"].append(("", var_type["name"], "none"))
   326                         block_infos["outputs"].append(("", var_type["name"], "none"))
   326             for type, varlist in pou.getvars():
   327                 for type, varlist in pou.getvars():
   327                 if type == "InOut":
   328                     if type == "InOut":
   328                     for var in varlist.getvariable():
   329                         for var in varlist.getvariable():
   329                         var_type = var.type.getcontent()
   330                             var_type = var.type.getcontent()
   330                         if var_type["name"] == "derived":
   331                             if var_type["name"] == "derived":
   331                             block_infos["inputs"].append((var.getname(), var_type["value"].getname(), "none"))
   332                                 block_infos["inputs"].append((var.getname(), var_type["value"].getname(), "none"))
   332                             block_infos["outputs"].append((var.getname(), var_type["value"].getname(), "none"))
   333                                 block_infos["outputs"].append((var.getname(), var_type["value"].getname(), "none"))
   333                         elif var_type["name"] in ["string", "wstring"]:
   334                             elif var_type["name"] in ["string", "wstring"]:
   334                             block_infos["inputs"].append((var.getname(), var_type["name"].upper(), "none"))
   335                                 block_infos["inputs"].append((var.getname(), var_type["name"].upper(), "none"))
   335                             block_infos["outputs"].append((var.getname(), var_type["name"].upper(), "none"))
   336                                 block_infos["outputs"].append((var.getname(), var_type["name"].upper(), "none"))
   336                         else:
   337                             else:
   337                             block_infos["inputs"].append((var.getname(), var_type["name"], "none"))
   338                                 block_infos["inputs"].append((var.getname(), var_type["name"], "none"))
   338                             block_infos["outputs"].append((var.getname(), var_type["name"], "none"))
   339                                 block_infos["outputs"].append((var.getname(), var_type["name"], "none"))
   339                 elif type == "Input":
   340                     elif type == "Input":
   340                     for var in varlist.getvariable():
   341                         for var in varlist.getvariable():
   341                         var_type = var.type.getcontent()
   342                             var_type = var.type.getcontent()
   342                         if var_type["name"] == "derived":
   343                             if var_type["name"] == "derived":
   343                             block_infos["inputs"].append((var.getname(), var_type["value"].getname(), "none"))
   344                                 block_infos["inputs"].append((var.getname(), var_type["value"].getname(), "none"))
   344                         elif var_type["name"] in ["string", "wstring"]:
   345                             elif var_type["name"] in ["string", "wstring"]:
   345                             block_infos["inputs"].append((var.getname(), var_type["name"].upper(), "none"))
   346                                 block_infos["inputs"].append((var.getname(), var_type["name"].upper(), "none"))
   346                         else:
   347                             else:
   347                             block_infos["inputs"].append((var.getname(), var_type["name"], "none"))
   348                                 block_infos["inputs"].append((var.getname(), var_type["name"], "none"))
   348                 elif type == "Output":
   349                     elif type == "Output":
   349                     for var in varlist.getvariable():
   350                         for var in varlist.getvariable():
   350                         var_type = var.type.getcontent()
   351                             var_type = var.type.getcontent()
   351                         if var_type["name"] == "derived":
   352                             if var_type["name"] == "derived":
   352                             block_infos["outputs"].append((var.getname(), var_type["value"].getname(), "none"))
   353                                 block_infos["outputs"].append((var.getname(), var_type["value"].getname(), "none"))
   353                         elif var_type["name"] in ["string", "wstring"]:
   354                             elif var_type["name"] in ["string", "wstring"]:
   354                             block_infos["outputs"].append((var.getname(), var_type["name"].upper(), "none"))
   355                                 block_infos["outputs"].append((var.getname(), var_type["name"].upper(), "none"))
   355                         else:
   356                             else:
   356                             block_infos["outputs"].append((var.getname(), var_type["name"], "none"))    
   357                                 block_infos["outputs"].append((var.getname(), var_type["name"], "none"))    
   357         if pou.getbodyType() in ["FBD","LD","SFC"]:
   358             if pou.getbodyType() in ["FBD","LD","SFC"]:
   358             for instance in pou.getinstances():
   359                 for instance in pou.getinstances():
   359                 if isinstance(instance, PLCOpenClasses.get("commonObjects_comment", None)):
   360                     if isinstance(instance, PLCOpenClasses.get("commonObjects_comment", None)):
   360                     block_infos["comment"] = instance.getcontentText()
   361                         block_infos["comment"] = instance.getcontentText()
   361         self.CustomBlockTypes.append(block_infos)
   362             self.CustomBlockTypes.append(block_infos)
       
   363     setattr(cls, "AddCustomBlockType", AddCustomBlockType)
   362     setattr(cls, "AddCustomBlockType", AddCustomBlockType)
   364 
   363 
   365     def RefreshElementUsingTree(self):
   364     def RefreshElementUsingTree(self):
   366         # Reset the tree of user-defined element cross-use
   365         # Reset the tree of user-defined element cross-use
   367         self.ElementUsingTree = {}
   366         self.ElementUsingTree = {}
   499             pou = self.getpou(exclude)
   498             pou = self.getpou(exclude)
   500             if pou is not None:
   499             if pou is not None:
   501                 type = pou.getpouType()
   500                 type = pou.getpouType()
   502         customblocktypes = []
   501         customblocktypes = []
   503         for customblocktype in self.CustomBlockTypes:
   502         for customblocktype in self.CustomBlockTypes:
   504             if customblocktype["name"] != exclude and not self.ElementIsUsedBy(exclude, customblocktype["name"]) and not (onlyfunctions and customblocktype["type"] != "function"):
   503             if customblocktype["type"] != "program" and customblocktype["name"] != exclude and not self.ElementIsUsedBy(exclude, customblocktype["name"]) and not (onlyfunctions and customblocktype["type"] != "function"):
   505                 customblocktypes.append(customblocktype)
   504                 customblocktypes.append(customblocktype)
   506         return customblocktypes
   505         return customblocktypes
   507     setattr(cls, "GetCustomBlockTypes", GetCustomBlockTypes)
   506     setattr(cls, "GetCustomBlockTypes", GetCustomBlockTypes)
   508 
   507 
   509     # Return Function Block types checking for recursion
   508     # Return Function Block types checking for recursion
   510     def GetCustomFunctionBlockTypes(self, exclude = ""):
   509     def GetCustomFunctionBlockTypes(self, exclude = ""):
   511         customblocktypes = []
   510         customblocktypes = []
   512         for customblocktype in self.CustomBlockTypes:
   511         for customblocktype in self.CustomBlockTypes:
   513             if customblocktype["name"] != exclude and not self.ElementIsUsedBy(exclude, customblocktype["name"]):
   512             if customblocktype["type"] == "functionBlock" and customblocktype["name"] != exclude and not self.ElementIsUsedBy(exclude, customblocktype["name"]):
   514                 customblocktypes.append(customblocktype["name"])
   513                 customblocktypes.append(customblocktype["name"])
   515         return customblocktypes
   514         return customblocktypes
   516     setattr(cls, "GetCustomFunctionBlockTypes", GetCustomFunctionBlockTypes)
   515     setattr(cls, "GetCustomFunctionBlockTypes", GetCustomFunctionBlockTypes)
   517 
   516 
   518     # Return Block types checking for recursion
   517     # Return Block types checking for recursion