PLCGenerator.py
changeset 307 fd1f6ae26d4f
parent 295 c6ef6d92ce16
child 340 5a305b7c6735
equal deleted inserted replaced
306:eecc53781498 307:fd1f6ae26d4f
    84 
    84 
    85 
    85 
    86 class ProgramGenerator:
    86 class ProgramGenerator:
    87 
    87 
    88     # Create a new PCL program generator
    88     # Create a new PCL program generator
    89     def __init__(self, controler, project):
    89     def __init__(self, controler, project, errors, warnings):
    90         # Keep reference of the controler and project
    90         # Keep reference of the controler and project
    91         self.Controler = controler
    91         self.Controler = controler
    92         self.Project = project
    92         self.Project = project
    93         # Reset the internal variables used to generate PLC programs
    93         # Reset the internal variables used to generate PLC programs
    94         self.Program = []
    94         self.Program = []
    95         self.DatatypeComputed = {}
    95         self.DatatypeComputed = {}
    96         self.PouComputed = {}
    96         self.PouComputed = {}
       
    97         self.Errors = errors
       
    98         self.Warnings = warnings
    97 
    99 
    98     # Compute value according to type given
   100     # Compute value according to type given
    99     def ComputeValue(self, value, var_type):
   101     def ComputeValue(self, value, var_type):
   100         base_type = self.Controler.GetBaseType(var_type)
   102         base_type = self.Controler.GetBaseType(var_type)
   101         if base_type == "STRING":
   103         if base_type == "STRING":
   220             pou = self.Project.getpou(pou_name)
   222             pou = self.Project.getpou(pou_name)
   221             pou_type = pou.getpouType()
   223             pou_type = pou.getpouType()
   222             # Verify that POU type exists
   224             # Verify that POU type exists
   223             if pou_type in pouTypeNames:
   225             if pou_type in pouTypeNames:
   224                 # Create a POU program generator
   226                 # Create a POU program generator
   225                 pou_program = PouProgramGenerator(self, pou.getname(), pouTypeNames[pou_type])
   227                 pou_program = PouProgramGenerator(self, pou.getname(), pouTypeNames[pou_type], self.Errors, self.Warnings)
   226                 program = pou_program.GenerateProgram(pou)
   228                 program = pou_program.GenerateProgram(pou)
   227                 self.Program += program
   229                 self.Program += program
   228             else:
   230             else:
   229                 raise PLCGenException, "Undefined pou type \"%s\""%pou_type
   231                 raise PLCGenException, "Undefined pou type \"%s\""%pou_type
   230     
   232     
   418 
   420 
   419 
   421 
   420 class PouProgramGenerator:
   422 class PouProgramGenerator:
   421     
   423     
   422     # Create a new POU program generator
   424     # Create a new POU program generator
   423     def __init__(self, parent, name, type):
   425     def __init__(self, parent, name, type, errors, warnings):
   424         # Keep Reference to the parent generator
   426         # Keep Reference to the parent generator
   425         self.ParentGenerator = parent
   427         self.ParentGenerator = parent
   426         self.Name = name
   428         self.Name = name
   427         self.Type = type
   429         self.Type = type
   428         self.TagName = self.ParentGenerator.Controler.ComputePouName(name)
   430         self.TagName = self.ParentGenerator.Controler.ComputePouName(name)
   436         self.RelatedConnections = []
   438         self.RelatedConnections = []
   437         self.SFCNetworks = {"Steps":{}, "Transitions":{}, "Actions":{}}
   439         self.SFCNetworks = {"Steps":{}, "Transitions":{}, "Actions":{}}
   438         self.SFCComputedBlocks = []
   440         self.SFCComputedBlocks = []
   439         self.ActionNumber = 0
   441         self.ActionNumber = 0
   440         self.Program = []
   442         self.Program = []
       
   443         self.Errors = errors
       
   444         self.Warnings = warnings
   441     
   445     
   442     def GetBlockType(self, type):
   446     def GetBlockType(self, type):
   443         return self.ParentGenerator.Controler.GetBlockType(type)
   447         return self.ParentGenerator.Controler.GetBlockType(type)
   444     
   448     
   445     def IndentLeft(self):
   449     def IndentLeft(self):
  1206         program += [("\n", ())]
  1210         program += [("\n", ())]
  1207         program += self.Program
  1211         program += self.Program
  1208         program += [("END_%s\n\n"%self.Type, ())]
  1212         program += [("END_%s\n\n"%self.Type, ())]
  1209         return program
  1213         return program
  1210 
  1214 
  1211 def GenerateCurrentProgram(controler, project):
  1215 def GenerateCurrentProgram(controler, project, errors, warnings):
  1212     generator = ProgramGenerator(controler, project)
  1216     generator = ProgramGenerator(controler, project, errors, warnings)
  1213     generator.GenerateProgram()
  1217     generator.GenerateProgram()
  1214     return generator.GetGeneratedProgram()
  1218     return generator.GetGeneratedProgram()
  1215 
  1219