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() |