PLCControler.py
changeset 299 15669fe26e56
parent 297 e837b67cb184
child 307 fd1f6ae26d4f
equal deleted inserted replaced
298:1b1a3ee785da 299:15669fe26e56
   964             blocktype = self.GetBlockType(typename, debug = debug)
   964             blocktype = self.GetBlockType(typename, debug = debug)
   965             if blocktype is not None:
   965             if blocktype is not None:
   966                 tree = []
   966                 tree = []
   967                 for var_name, var_type, var_modifier in blocktype["inputs"] + blocktype["outputs"]:
   967                 for var_name, var_type, var_modifier in blocktype["inputs"] + blocktype["outputs"]:
   968                     tree.append((var_name, var_type, self.GenerateVarTree(var_type, debug)))
   968                     tree.append((var_name, var_type, self.GenerateVarTree(var_type, debug)))
   969                 return tree
   969                 return tree, []
   970             datatype = project.getdataType(typename)
   970             datatype = project.getdataType(typename)
   971             if datatype is not None:
   971             if datatype is not None:
   972                 tree = []
   972                 tree = []
   973                 basetype_content = datatype.baseType.getcontent()
   973                 basetype_content = datatype.baseType.getcontent()
   974                 if basetype_content["name"] == "derived":
   974                 if basetype_content["name"] == "derived":
   975                     tree = self.GenerateVarTree(basetype_content["value"].getname())
   975                     return self.GenerateVarTree(basetype_content["value"].getname())
   976                 elif basetype_content["name"] == "array":
   976                 elif basetype_content["name"] == "array":
       
   977                     dimensions = []
   977                     base_type = basetype_content["value"].baseType.getcontent()
   978                     base_type = basetype_content["value"].baseType.getcontent()
   978                     if base_type["name"] == "derived":
   979                     if base_type["name"] == "derived":
   979                         tree = [self.GenerateVarTree(base_type["value"].getname())]
   980                         tree = self.GenerateVarTree(base_type["value"].getname())
       
   981                         if len(tree[1]) == 0:
       
   982                             tree = tree[0]
       
   983                         for dimension in basetype_content["value"].getdimension():
       
   984                             dimensions.append((dimension.getlower(), dimension.getupper()))
       
   985                     return tree, dimensions
   980                 elif basetype_content["name"] == "struct":
   986                 elif basetype_content["name"] == "struct":
   981                     for element in basetype_content["value"].getvariable():
   987                     for element in basetype_content["value"].getvariable():
   982                         element_type = element.type.getcontent()
   988                         element_type = element.type.getcontent()
   983                         if element_type["name"] == "derived":
   989                         if element_type["name"] == "derived":
   984                             tree.append((element.getname(), element_type["value"].getname(), self.GenerateVarTree(element_type["value"].getname())))
   990                             tree.append((element.getname(), element_type["value"].getname(), self.GenerateVarTree(element_type["value"].getname())))
   985                         else:
   991                         else:
   986                             tree.append((element.getname(), element_type["name"], []))
   992                             tree.append((element.getname(), element_type["name"], ([], [])))
   987                 return tree
   993                     return tree, []
   988         return {}
   994         return [], []
   989     
   995     
   990     # Return the interface for the given pou
   996     # Return the interface for the given pou
   991     def GetPouInterfaceVars(self, pou, debug = False):
   997     def GetPouInterfaceVars(self, pou, debug = False):
   992         vars = []
   998         vars = []
   993         # Verify that the pou has an interface
   999         # Verify that the pou has an interface
   994         if pou.interface is not None:
  1000         if pou.interface is not None:
   995             # Extract variables from every varLists
  1001             # Extract variables from every varLists
   996             for type, varlist in pou.getvars():
  1002             for type, varlist in pou.getvars():
   997                 for var in varlist.getvariable():
  1003                 for var in varlist.getvariable():
   998                     tempvar = {"Name" : var.getname(), "Class" : type, "Tree" : []}
  1004                     tempvar = {"Name" : var.getname(), "Class" : type, "Tree" : ([], [])}
   999                     vartype_content = var.gettype().getcontent()
  1005                     vartype_content = var.gettype().getcontent()
  1000                     if vartype_content["name"] == "derived":
  1006                     if vartype_content["name"] == "derived":
  1001                         tempvar["Type"] = vartype_content["value"].getname()
  1007                         tempvar["Type"] = vartype_content["value"].getname()
  1002                         tempvar["Edit"] = not pou.hasblock(tempvar["Name"])
  1008                         tempvar["Edit"] = not pou.hasblock(tempvar["Name"])
  1003                         tempvar["Tree"] = self.GenerateVarTree(tempvar["Type"], debug)
  1009                         tempvar["Tree"] = self.GenerateVarTree(tempvar["Type"], debug)