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 |