PLCGenerator.py
changeset 29 3b7e23a323a6
parent 28 fc23e1f415d8
child 30 768cf2a6b0b1
equal deleted inserted replaced
28:fc23e1f415d8 29:3b7e23a323a6
   436         self.Interface[-1][3].append((edge, name, None))
   436         self.Interface[-1][3].append((edge, name, None))
   437         self.Program += "  %s(CLK := %s);\n"%(name, text)
   437         self.Program += "  %s(CLK := %s);\n"%(name, text)
   438         return "%s.Q"%name
   438         return "%s.Q"%name
   439     
   439     
   440     def GenerateSTProgram(self):
   440     def GenerateSTProgram(self):
   441         program = ""
       
   442         if self.ReturnType:
   441         if self.ReturnType:
   443             program += "%s %s : %s\n"%(self.Type, self.Name, self.ReturnType)
   442             program = "%s %s : %s\n"%(self.Type, self.Name, self.ReturnType)
   444         else:
   443         else:
   445             program += "%s %s\n"%(self.Type, self.Name)
   444             program = "%s %s\n"%(self.Type, self.Name)
   446         for list_type, retain, constant, variables in self.Interface:
   445         for list_type, retain, constant, variables in self.Interface:
   447             program += "  %s"%list_type
   446             program += "  %s"%list_type
   448             if retain:
   447             if retain:
   449                 program += " RETAIN"
   448                 program += " RETAIN"
   450             if constant:
   449             if constant:
   459         program += "\n"
   458         program += "\n"
   460         program += self.Program
   459         program += self.Program
   461         program += "END_%s\n\n"%self.Type
   460         program += "END_%s\n\n"%self.Type
   462         return program
   461         return program
   463     
   462     
       
   463     def GenerateConfiguration(self, configuration):
       
   464         config = "\nCONFIGURATION %s\n"%configuration.getName()
       
   465         for varlist in configuration.getGlobalVars():
       
   466             config += "  VAR_GLOBAL"
       
   467             if varlist.getRetain():
       
   468                 config += " RETAIN"
       
   469             if varlist.getConstant():
       
   470                 config += " CONSTANT"
       
   471             config += "\n"
       
   472             for var in varlist.getVariable():
       
   473                 var_type = var.getType().getValue()
       
   474                 var_name = var.getName()
       
   475                 initial = var.getInitialValue()
       
   476                 if initial:
       
   477                     var_initial = initial.getValue()
       
   478                 else:
       
   479                     var_initial = None
       
   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"
       
   485         for resource in configuration.getResource():
       
   486             config += self.GenerateResource(resource)
       
   487         config += "END_CONFIGURATION\n"
       
   488         return config
       
   489         
       
   490     def GenerateResource(self, resource):
       
   491         resrce = "\n  RESOURCE %s\n"%resource.getName()
       
   492         for varlist in resource.getGlobalVars():
       
   493             resrce += "    VAR_GLOBAL"
       
   494             if varlist.getRetain():
       
   495                 resrce += " RETAIN"
       
   496             if varlist.getConstant():
       
   497                 resrce += " CONSTANT"
       
   498             resrce += "\n"
       
   499             for var in varlist.getVariable():
       
   500                 var_type = var.getType().getValue()
       
   501                 var_name = var.getName()
       
   502                 initial = var.getInitialValue()
       
   503                 if initial:
       
   504                     var_initial = initial.getValue()
       
   505                 else:
       
   506                     var_initial = None
       
   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"
       
   512             tasks = resource.getTask()
       
   513             for task in tasks:
       
   514                 resrce += "    TASK %s("%task.getName()
       
   515                 args = []
       
   516                 single = task.getSingle()
       
   517                 if single:
       
   518                     args.append("SINGLE := %s"%single)
       
   519                 interval = task.getInterval()
       
   520                 if interval:
       
   521                     text = "t#"
       
   522                     if interval.hour != 0:
       
   523                         text += "%dh"%interval.hour
       
   524                     if interval.minute != 0:
       
   525                         text += "%dm"%interval.minute
       
   526                     if interval.second != 0:
       
   527                         text += "%ds"%interval.second
       
   528                     if interval.microsecond != 0:
       
   529                         text += "%dms"%(interval.microsecond / 1000)
       
   530                     args.append("INTERVAL := %s"%text)
       
   531                 args.append("PRIORITY := %s"%str(task.priority.getValue()))
       
   532                 resrce += ",".join(args) + ");\n"
       
   533             for task in tasks:
       
   534                 for instance in task.getPouInstance():
       
   535                     resrce += "    PROGRAM %s WITH %s : %s;\n"%(instance.getName(), task.getName(), instance.getType())
       
   536             for instance in resource.getPouInstance():
       
   537                 resrce += "    PROGRAM %s : %s;\n"%(instance.getName(), instance.getType())
       
   538         resrce += "  END_RESOURCE\n"    
       
   539         return resrce
       
   540         
       
   541             
   464 def GenerateCurrentProgram(project):
   542 def GenerateCurrentProgram(project):
   465     program = ""
   543     program = ""
   466     for pou in project.getPous():
   544     for pou in project.getPous():
   467         pou_type = pou.getPouType().getValue()
   545         pou_type = pou.getPouType().getValue()
   468         if pou_type in pouTypeNames:
   546         if pou_type in pouTypeNames:
   470         else:
   548         else:
   471             raise ValueError, "Undefined pou type"
   549             raise ValueError, "Undefined pou type"
   472         pou_program.GenerateInterface(pou.getInterface())
   550         pou_program.GenerateInterface(pou.getInterface())
   473         pou_program.GenerateProgram(pou)
   551         pou_program.GenerateProgram(pou)
   474         program += pou_program.GenerateSTProgram()
   552         program += pou_program.GenerateSTProgram()
       
   553     for config in project.getConfigurations():
       
   554         program += pou_program.GenerateConfiguration(config)
   475     return program
   555     return program
   476 
   556