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 in vars: |
69 for var_type, var_name, 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): |
76 self.ReturnType = interface.getReturnType().getValue() |
76 self.ReturnType = interface.getReturnType().getValue() |
77 for varlist in interface.getContent(): |
77 for varlist in interface.getContent(): |
78 variables = [] |
78 variables = [] |
79 for var in varlist["value"].getVariable(): |
79 for var in varlist["value"].getVariable(): |
80 type = var.getType().getValue() |
80 type = var.getType().getValue() |
81 variables.append((type, var.getName())) |
81 initial = var.getInitialValue() |
|
82 if initial: |
|
83 initial_value = initial.getValue() |
|
84 else: |
|
85 initial_value = None |
|
86 variables.append((type, var.getName(), initial_value)) |
82 self.Interface.append((varTypeNames[varlist["name"]], varlist["value"].getRetain(), |
87 self.Interface.append((varTypeNames[varlist["name"]], varlist["value"].getRetain(), |
83 varlist["value"].getConstant(), variables)) |
88 varlist["value"].getConstant(), variables)) |
84 |
89 |
85 def GenerateProgram(self, pou): |
90 def GenerateProgram(self, pou): |
86 body = pou.getBody() |
91 body = pou.getBody() |
136 return self.ExtractModifier(variable, "%s(%s)"%(type, ", ".join(vars))) |
141 return self.ExtractModifier(variable, "%s(%s)"%(type, ", ".join(vars))) |
137 elif block_infos["type"] == "functionBlock": |
142 elif block_infos["type"] == "functionBlock": |
138 if self.Interface[-1][0] != "VAR" or self.Interface[-1][1] or self.Interface[-1][2]: |
143 if self.Interface[-1][0] != "VAR" or self.Interface[-1][1] or self.Interface[-1][2]: |
139 self.Interface.append(("VAR", False, False, [])) |
144 self.Interface.append(("VAR", False, False, [])) |
140 if not self.IsAlreadyDefined(name): |
145 if not self.IsAlreadyDefined(name): |
141 self.Interface[-1][3].append((type, name)) |
146 self.Interface[-1][3].append((type, name, None)) |
142 vars = [] |
147 vars = [] |
143 for variable in instance.inputVariables.getVariable(): |
148 for variable in instance.inputVariables.getVariable(): |
144 connections = variable.connectionPointIn.getConnections() |
149 connections = variable.connectionPointIn.getConnections() |
145 if connections and len(connections) == 1: |
150 if connections and len(connections) == 1: |
146 parameter = variable.getFormalParameter() |
151 parameter = variable.getFormalParameter() |
426 i = 1 |
431 i = 1 |
427 name = "%s%d"%(edge, i) |
432 name = "%s%d"%(edge, i) |
428 while self.IsAlreadyDefined(name): |
433 while self.IsAlreadyDefined(name): |
429 i += 1 |
434 i += 1 |
430 name = "%s%d"%(edge, i) |
435 name = "%s%d"%(edge, i) |
431 self.Interface[-1][3].append((edge, name)) |
436 self.Interface[-1][3].append((edge, name, None)) |
432 self.Program += " %s(CLK := %s);\n"%(name, text) |
437 self.Program += " %s(CLK := %s);\n"%(name, text) |
433 return "%s.Q"%name |
438 return "%s.Q"%name |
434 |
439 |
435 def GenerateSTProgram(self): |
440 def GenerateSTProgram(self): |
436 program = "" |
441 program = "" |
443 if retain: |
448 if retain: |
444 program += " RETAIN" |
449 program += " RETAIN" |
445 if constant: |
450 if constant: |
446 program += " CONSTANT" |
451 program += " CONSTANT" |
447 program += "\n" |
452 program += "\n" |
448 for var_type, var_name in variables: |
453 for var_type, var_name, var_initial in variables: |
449 program += " %s : %s;\n"%(var_name, var_type) |
454 if var_initial != None: |
|
455 program += " %s : %s := %s;\n"%(var_name, var_type, {"TRUE":"0","FALSE":"1"}.get(str(var_initial).upper(),str(var_initial))) |
|
456 else: |
|
457 program += " %s : %s;\n"%(var_name, var_type) |
450 program += " END_VAR\n" |
458 program += " END_VAR\n" |
451 program += "\n" |
459 program += "\n" |
452 program += self.Program |
460 program += self.Program |
453 program += "END_%s\n\n"%self.Type |
461 program += "END_%s\n\n"%self.Type |
454 return program |
462 return program |