PLCGenerator.py
changeset 2727 6330e6bb345d
parent 2633 fecdb71e7514
child 3704 c17fac18c663
equal deleted inserted replaced
2726:c465414017a2 2727:6330e6bb345d
   456             instance_number += 1
   456             instance_number += 1
   457         resrce += [("  END_RESOURCE\n", ())]
   457         resrce += [("  END_RESOURCE\n", ())]
   458         return resrce
   458         return resrce
   459 
   459 
   460     # Generate the entire program for current project
   460     # Generate the entire program for current project
   461     def GenerateProgram(self):
   461     def GenerateProgram(self, log):
       
   462         log("Collecting data types")
   462         # Find all data types defined
   463         # Find all data types defined
   463         for datatype in self.Project.getdataTypes():
   464         for datatype in self.Project.getdataTypes():
   464             self.DatatypeComputed[datatype.getname()] = False
   465             self.DatatypeComputed[datatype.getname()] = False
       
   466         log("Collecting POUs")
   465         # Find all data types defined
   467         # Find all data types defined
   466         for pou in self.Project.getpous():
   468         for pou in self.Project.getpous():
   467             self.PouComputed[pou.getname()] = False
   469             self.PouComputed[pou.getname()] = False
   468         # Generate data type declaration structure if there is at least one data
   470         # Generate data type declaration structure if there is at least one data
   469         # type defined
   471         # type defined
   470         if len(self.DatatypeComputed) > 0:
   472         if len(self.DatatypeComputed) > 0:
   471             self.Program += [("TYPE\n", ())]
   473             self.Program += [("TYPE\n", ())]
   472             # Generate every data types defined
   474             # Generate every data types defined
   473             for datatype_name in self.DatatypeComputed.keys():
   475             for datatype_name in self.DatatypeComputed.keys():
       
   476                 log("Generate Data Type %s"%datatype_name)
   474                 self.GenerateDataType(datatype_name)
   477                 self.GenerateDataType(datatype_name)
   475             self.Program += [("END_TYPE\n\n", ())]
   478             self.Program += [("END_TYPE\n\n", ())]
   476         # Generate every POUs defined
   479         # Generate every POUs defined
   477         for pou_name in self.PouComputed.keys():
   480         for pou_name in self.PouComputed.keys():
       
   481             log("Generate POU %s"%pou_name)
   478             self.GeneratePouProgram(pou_name)
   482             self.GeneratePouProgram(pou_name)
   479         # Generate every configurations defined
   483         # Generate every configurations defined
       
   484         log("Generate Config(s)")
   480         for config in self.Project.getconfigurations():
   485         for config in self.Project.getconfigurations():
   481             self.Program += self.GenerateConfiguration(config)
   486             self.Program += self.GenerateConfiguration(config)
   482 
   487 
   483     # Return generated program
   488     # Return generated program
   484     def GetGeneratedProgram(self):
   489     def GetGeneratedProgram(self):
  1760         return program
  1765         return program
  1761 
  1766 
  1762 
  1767 
  1763 def GenerateCurrentProgram(controler, project, errors, warnings):
  1768 def GenerateCurrentProgram(controler, project, errors, warnings):
  1764     generator = ProgramGenerator(controler, project, errors, warnings)
  1769     generator = ProgramGenerator(controler, project, errors, warnings)
  1765     generator.GenerateProgram()
  1770     if hasattr(controler, "logger"):
       
  1771         def log(txt):
       
  1772             controler.logger.write("    "+txt+"\n")
       
  1773     else:
       
  1774         def log(txt):
       
  1775             pass
       
  1776 
       
  1777     generator.GenerateProgram(log)
  1766     return generator.GetGeneratedProgram()
  1778     return generator.GetGeneratedProgram()