PLCGenerator.py
changeset 28 fc23e1f415d8
parent 6 c8cf918ee7ea
child 29 3b7e23a323a6
equal deleted inserted replaced
27:dae55dd9ee14 28:fc23e1f415d8
    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