64 self.SFCNetworks = {"Steps":{}, "Transitions":{}, "Actions":{}} |
64 self.SFCNetworks = {"Steps":{}, "Transitions":{}, "Actions":{}} |
65 self.Program = "" |
65 self.Program = "" |
66 |
66 |
67 def IsAlreadyDefined(self, name): |
67 def IsAlreadyDefined(self, name): |
68 for list_type, retain, constant, vars in self.Interface: |
68 for list_type, retain, constant, vars in self.Interface: |
69 for var_type, var_name, var_initial in vars: |
69 for var_type, var_name, var_address, var_initial in vars: |
70 if name == var_name: |
70 if name == var_name: |
71 return True |
71 return True |
72 return False |
72 return False |
73 |
73 |
74 def GenerateInterface(self, interface): |
74 def GenerateInterface(self, interface): |
81 initial = var.getInitialValue() |
81 initial = var.getInitialValue() |
82 if initial: |
82 if initial: |
83 initial_value = initial.getValue() |
83 initial_value = initial.getValue() |
84 else: |
84 else: |
85 initial_value = None |
85 initial_value = None |
86 variables.append((type, var.getName(), initial_value)) |
86 address = var.getAddress() |
|
87 if address == "": |
|
88 address = None |
|
89 variables.append((type, var.getName(), address, initial_value)) |
87 self.Interface.append((varTypeNames[varlist["name"]], varlist["value"].getRetain(), |
90 self.Interface.append((varTypeNames[varlist["name"]], varlist["value"].getRetain(), |
88 varlist["value"].getConstant(), variables)) |
91 varlist["value"].getConstant(), variables)) |
89 |
92 |
90 def GenerateProgram(self, pou): |
93 def GenerateProgram(self, pou): |
91 body = pou.getBody() |
94 body = pou.getBody() |
141 return self.ExtractModifier(variable, "%s(%s)"%(type, ", ".join(vars))) |
144 return self.ExtractModifier(variable, "%s(%s)"%(type, ", ".join(vars))) |
142 elif block_infos["type"] == "functionBlock": |
145 elif block_infos["type"] == "functionBlock": |
143 if self.Interface[-1][0] != "VAR" or self.Interface[-1][1] or self.Interface[-1][2]: |
146 if self.Interface[-1][0] != "VAR" or self.Interface[-1][1] or self.Interface[-1][2]: |
144 self.Interface.append(("VAR", False, False, [])) |
147 self.Interface.append(("VAR", False, False, [])) |
145 if not self.IsAlreadyDefined(name): |
148 if not self.IsAlreadyDefined(name): |
146 self.Interface[-1][3].append((type, name, None)) |
149 self.Interface[-1][3].append((type, name, None, None)) |
147 vars = [] |
150 vars = [] |
148 for variable in instance.inputVariables.getVariable(): |
151 for variable in instance.inputVariables.getVariable(): |
149 connections = variable.connectionPointIn.getConnections() |
152 connections = variable.connectionPointIn.getConnections() |
150 if connections and len(connections) == 1: |
153 if connections and len(connections) == 1: |
151 parameter = variable.getFormalParameter() |
154 parameter = variable.getFormalParameter() |
431 i = 1 |
434 i = 1 |
432 name = "%s%d"%(edge, i) |
435 name = "%s%d"%(edge, i) |
433 while self.IsAlreadyDefined(name): |
436 while self.IsAlreadyDefined(name): |
434 i += 1 |
437 i += 1 |
435 name = "%s%d"%(edge, i) |
438 name = "%s%d"%(edge, i) |
436 self.Interface[-1][3].append((edge, name, None)) |
439 self.Interface[-1][3].append((edge, name, None, None)) |
437 self.Program += " %s(CLK := %s);\n"%(name, text) |
440 self.Program += " %s(CLK := %s);\n"%(name, text) |
438 return "%s.Q"%name |
441 return "%s.Q"%name |
439 |
442 |
440 def GenerateSTProgram(self): |
443 def GenerateSTProgram(self): |
441 if self.ReturnType: |
444 if self.ReturnType: |
447 if retain: |
450 if retain: |
448 program += " RETAIN" |
451 program += " RETAIN" |
449 if constant: |
452 if constant: |
450 program += " CONSTANT" |
453 program += " CONSTANT" |
451 program += "\n" |
454 program += "\n" |
452 for var_type, var_name, var_initial in variables: |
455 for var_type, var_name, var_address, var_initial in variables: |
|
456 program += " %s "%var_name |
|
457 if var_address != None: |
|
458 program += "AT %s "%address |
|
459 program += ": %s"%var_type |
453 if var_initial != None: |
460 if var_initial != None: |
454 program += " %s : %s := %s;\n"%(var_name, var_type, {"TRUE":"0","FALSE":"1"}.get(str(var_initial).upper(),str(var_initial))) |
461 program += " := %s"%{"TRUE":"0","FALSE":"1"}.get(str(var_initial).upper(), str(var_initial)) |
455 else: |
462 program += ";\n" |
456 program += " %s : %s;\n"%(var_name, var_type) |
|
457 program += " END_VAR\n" |
463 program += " END_VAR\n" |
458 program += "\n" |
464 program += "\n" |
459 program += self.Program |
465 program += self.Program |
460 program += "END_%s\n\n"%self.Type |
466 program += "END_%s\n\n"%self.Type |
461 return program |
467 return program |
468 config += " RETAIN" |
474 config += " RETAIN" |
469 if varlist.getConstant(): |
475 if varlist.getConstant(): |
470 config += " CONSTANT" |
476 config += " CONSTANT" |
471 config += "\n" |
477 config += "\n" |
472 for var in varlist.getVariable(): |
478 for var in varlist.getVariable(): |
473 var_type = var.getType().getValue() |
479 config += " %s "%var.getName() |
474 var_name = var.getName() |
480 address = var.getAddress() |
|
481 if address: |
|
482 config += "AT %s "%address |
|
483 config += ": %s"%var.getType().getValue() |
475 initial = var.getInitialValue() |
484 initial = var.getInitialValue() |
476 if initial: |
485 if initial: |
477 var_initial = initial.getValue() |
486 value = str(initial.getValue()) |
478 else: |
487 config += " := %s"%{"TRUE":"0","FALSE":"1"}.get(value.upper(), value) |
479 var_initial = None |
488 config += ";\n" |
480 if var_initial != None: |
|
481 config += " %s : %s := %s;\n"%(var_name, var_type, {"TRUE":"0","FALSE":"1"}.get(str(var_initial).upper(),str(var_initial))) |
|
482 else: |
|
483 config += " %s : %s;\n"%(var_name, var_type) |
|
484 config += " END_VAR\n" |
489 config += " END_VAR\n" |
485 for resource in configuration.getResource(): |
490 for resource in configuration.getResource(): |
486 config += self.GenerateResource(resource) |
491 config += self.GenerateResource(resource) |
487 config += "END_CONFIGURATION\n" |
492 config += "END_CONFIGURATION\n" |
488 return config |
493 return config |
495 resrce += " RETAIN" |
500 resrce += " RETAIN" |
496 if varlist.getConstant(): |
501 if varlist.getConstant(): |
497 resrce += " CONSTANT" |
502 resrce += " CONSTANT" |
498 resrce += "\n" |
503 resrce += "\n" |
499 for var in varlist.getVariable(): |
504 for var in varlist.getVariable(): |
500 var_type = var.getType().getValue() |
505 resrce += " %s "%var.getName() |
501 var_name = var.getName() |
506 address = var.getAddress() |
|
507 if address: |
|
508 resrce += "AT %s "%address |
|
509 resrce += ": %s"%var.getType().getValue() |
502 initial = var.getInitialValue() |
510 initial = var.getInitialValue() |
503 if initial: |
511 if initial: |
504 var_initial = initial.getValue() |
512 value = str(initial.getValue()) |
505 else: |
513 resrce += " := %s"%{"TRUE":"0","FALSE":"1"}.get(value.upper(), value) |
506 var_initial = None |
514 resrce += ";\n" |
507 if var_initial != None: |
|
508 resrce += " %s : %s := %s;\n"%(var_name, var_type, {"TRUE":"0","FALSE":"1"}.get(str(var_initial).upper(),str(var_initial))) |
|
509 else: |
|
510 resrce += " %s : %s;\n"%(var_name, var_type) |
|
511 resrce += " END_VAR\n" |
515 resrce += " END_VAR\n" |
512 tasks = resource.getTask() |
516 tasks = resource.getTask() |
513 for task in tasks: |
517 for task in tasks: |
514 resrce += " TASK %s("%task.getName() |
518 resrce += " TASK %s("%task.getName() |
515 args = [] |
519 args = [] |
516 single = task.getSingle() |
520 single = task.getSingle() |
517 if single: |
521 if single: |
518 args.append("SINGLE := %s"%single) |
522 args.append("SINGLE := %s"%single) |
519 interval = task.getInterval() |
523 interval = task.getInterval() |
520 if interval: |
524 if interval: |
521 text = "t#" |
525 text = "t#" |
522 if interval.hour != 0: |
526 if interval.hour != 0: |
523 text += "%dh"%interval.hour |
527 text += "%dh"%interval.hour |
524 if interval.minute != 0: |
528 if interval.minute != 0: |
525 text += "%dm"%interval.minute |
529 text += "%dm"%interval.minute |
526 if interval.second != 0: |
530 if interval.second != 0: |
527 text += "%ds"%interval.second |
531 text += "%ds"%interval.second |
528 if interval.microsecond != 0: |
532 if interval.microsecond != 0: |
529 text += "%dms"%(interval.microsecond / 1000) |
533 text += "%dms"%(interval.microsecond / 1000) |
530 args.append("INTERVAL := %s"%text) |
534 args.append("INTERVAL := %s"%text) |
531 args.append("PRIORITY := %s"%str(task.priority.getValue())) |
535 args.append("PRIORITY := %s"%str(task.priority.getValue())) |
532 resrce += ",".join(args) + ");\n" |
536 resrce += ",".join(args) + ");\n" |
533 for task in tasks: |
537 for task in tasks: |
534 for instance in task.getPouInstance(): |
538 for instance in task.getPouInstance(): |
535 resrce += " PROGRAM %s WITH %s : %s;\n"%(instance.getName(), task.getName(), instance.getType()) |
539 resrce += " PROGRAM %s WITH %s : %s;\n"%(instance.getName(), task.getName(), instance.getType()) |
536 for instance in resource.getPouInstance(): |
540 for instance in resource.getPouInstance(): |
537 resrce += " PROGRAM %s : %s;\n"%(instance.getName(), instance.getType()) |
541 resrce += " PROGRAM %s : %s;\n"%(instance.getName(), instance.getType()) |
538 resrce += " END_RESOURCE\n" |
542 resrce += " END_RESOURCE\n" |
539 return resrce |
543 return resrce |
540 |
544 |
541 |
545 |
542 def GenerateCurrentProgram(project): |
546 def GenerateCurrentProgram(project): |
543 program = "" |
547 program = "" |