PLCGenerator.py
changeset 883 235a9ec83b95
parent 864 bf4f7f0801b9
child 889 ac18acb6917f
equal deleted inserted replaced
882:3c6ce0a5ab2c 883:235a9ec83b95
   266         tagname = self.Controler.ComputeConfigurationName(configuration.getname())
   266         tagname = self.Controler.ComputeConfigurationName(configuration.getname())
   267         config = [("\nCONFIGURATION ", ()),
   267         config = [("\nCONFIGURATION ", ()),
   268                   (configuration.getname(), (tagname, "name")),
   268                   (configuration.getname(), (tagname, "name")),
   269                   ("\n", ())]
   269                   ("\n", ())]
   270         var_number = 0
   270         var_number = 0
       
   271         
       
   272         varlists = [(varlist, varlist.getvariable()[:]) for varlist in configuration.getglobalVars()]
       
   273         
       
   274         extra_variables = self.Controler.GetConfigurationExtraVariables()
       
   275         if len(extra_variables) > 0:
       
   276             if len(varlists) == 0:
       
   277                 varlists = [(plcopen.interface_globalVars(), [])]
       
   278             varlists[-1][1].extend(extra_variables)
       
   279             
   271         # Generate any global variable in configuration
   280         # Generate any global variable in configuration
   272         for varlist in configuration.getglobalVars():
   281         for varlist, varlist_variables in varlists:
   273             variable_type = errorVarTypes.get("VAR_GLOBAL", "var_local")
   282             variable_type = errorVarTypes.get("VAR_GLOBAL", "var_local")
   274             # Generate variable block with modifier
   283             # Generate variable block with modifier
   275             config += [("  VAR_GLOBAL", ())]
   284             config += [("  VAR_GLOBAL", ())]
   276             if varlist.getconstant():
   285             if varlist.getconstant():
   277                 config += [(" CONSTANT", (tagname, variable_type, (var_number, var_number + len(varlist.getvariable())), "constant"))]
   286                 config += [(" CONSTANT", (tagname, variable_type, (var_number, var_number + len(varlist.getvariable())), "constant"))]
   279                 config += [(" RETAIN", (tagname, variable_type, (var_number, var_number + len(varlist.getvariable())), "retain"))]
   288                 config += [(" RETAIN", (tagname, variable_type, (var_number, var_number + len(varlist.getvariable())), "retain"))]
   280             elif varlist.getnonretain():
   289             elif varlist.getnonretain():
   281                 config += [(" NON_RETAIN", (tagname, variable_type, (var_number, var_number + len(varlist.getvariable())), "non_retain"))]
   290                 config += [(" NON_RETAIN", (tagname, variable_type, (var_number, var_number + len(varlist.getvariable())), "non_retain"))]
   282             config += [("\n", ())]
   291             config += [("\n", ())]
   283             # Generate any variable of this block
   292             # Generate any variable of this block
   284             for var in varlist.getvariable():
   293             for var in varlist_variables:
   285                 vartype_content = var.gettype().getcontent()
   294                 vartype_content = var.gettype().getcontent()
   286                 if vartype_content["name"] == "derived":
   295                 if vartype_content["name"] == "derived":
   287                     var_type = vartype_content["value"].getname()
   296                     var_type = vartype_content["value"].getname()
   288                     self.GenerateDataType(var_type)
   297                     self.GenerateDataType(var_type)
   289                 else:
   298                 else:
   510                 for var_type, var_name, var_address, var_initial in vars:
   519                 for var_type, var_name, var_address, var_initial in vars:
   511                     if name == var_name:
   520                     if name == var_name:
   512                         current_type = var_type
   521                         current_type = var_type
   513                         break
   522                         break
   514             while current_type is not None and len(parts) > 0:
   523             while current_type is not None and len(parts) > 0:
   515                 tagname = self.ParentGenerator.Controler.ComputeDataTypeName(current_type)
   524                 blocktype = self.ParentGenerator.Controler.GetBlockType(current_type)
   516                 infos = self.ParentGenerator.Controler.GetDataTypeInfos(tagname)
   525                 if blocktype is not None:
   517                 name = parts.pop(0)
   526                     name = parts.pop(0)
   518                 current_type = None
   527                     current_type = None
   519                 if infos is not None and infos["type"] == "Structure":
   528                     for var_name, var_type, var_modifier in blocktype["inputs"] + blocktype["outputs"]:
   520                     for element in infos["elements"]:
   529                         if var_name == name:
   521                         if element["Name"] == name:
   530                             current_type = var_type
   522                             current_type = element["Type"]
       
   523                             break
   531                             break
       
   532                 else:
       
   533                     tagname = self.ParentGenerator.Controler.ComputeDataTypeName(current_type)
       
   534                     infos = self.ParentGenerator.Controler.GetDataTypeInfos(tagname)
       
   535                     if infos is not None and infos["type"] == "Structure":
       
   536                         name = parts.pop(0)
       
   537                         current_type = None
       
   538                         for element in infos["elements"]:
       
   539                             if element["Name"] == name:
       
   540                                 current_type = element["Type"]
       
   541                                 break
   524         return current_type
   542         return current_type
   525     
   543     
   526     # Return connectors linked by a connection to the given connector
   544     # Return connectors linked by a connection to the given connector
   527     def GetConnectedConnector(self, connector, body):
   545     def GetConnectedConnector(self, connector, body):
   528         links = connector.getconnections()
   546         links = connector.getconnections()