--- a/PLCGenerator.py Mon Aug 13 18:04:19 2007 +0200
+++ b/PLCGenerator.py Mon Aug 13 18:06:50 2007 +0200
@@ -62,6 +62,7 @@
self.Interface = []
self.InitialSteps = []
self.BlockComputed = {}
+ self.ComputedBlocks = ""
self.SFCNetworks = {"Steps":{}, "Transitions":{}, "Actions":{}}
self.ActionNumber = 0
self.Program = ""
@@ -130,11 +131,11 @@
self.GenerateSFCTransition(instance, pou)
elif isinstance(instance, plcopen.jumpStep):
self.GenerateSFCJump(instance, pou)
- if len(self.InitialSteps) > 0:
+ if len(self.InitialSteps) > 0 and self.ComputedBlocks != "":
action_name = "COMPUTE_FUNCTION_BLOCKS"
action_infos = {"qualifier" : "S", "content" : action_name}
self.SFCNetworks["Steps"][self.InitialSteps[0]]["actions"].append(action_infos)
- self.SFCNetworks["Actions"][action_name] = ReIndentText(self.Program, 4)
+ self.SFCNetworks["Actions"][action_name] = ReIndentText(self.ComputedBlocks, 4)
self.Program = ""
else:
raise Exception
@@ -205,7 +206,7 @@
if isinstance(next, plcopen.leftPowerRail) or isinstance(next, plcopen.contact):
return "LD"
elif isinstance(next, plcopen.block):
- for variable in instance.inputVariables.getVariable():
+ for variable in next.inputVariables.getVariable():
result = self.GetNetworkType(variable.connectionPointIn.getConnections(), body)
if result != "FBD":
return result
@@ -326,16 +327,18 @@
connections = instance.connectionPointIn.getConnections()
if connections and len(connections) == 1:
expression = self.ComputeFBDExpression(actionBody, connections[0])
- self.SFCNetworks["Actions"][action_name] = self.Program + " %s := %s;\n"%(var, expression)
+ action_content = self.Program + " %s := %s;\n"%(var, expression)
self.Program = ""
+ self.SFCNetworks["Actions"][action_name] = ReIndentText(action_content, 4)
elif actionType == "LD":
for instance in actionbody.getContentInstances():
if isinstance(instance, plcopen.coil):
paths = self.GenerateLDPaths(instance.connectionPointIn.getConnections(), actionBody)
variable = self.ExtractModifier(instance, instance.getVariable())
expression = self.ComputeLDExpression(paths, True)
- self.SFCNetworks["Actions"][action_name] = self.Program + " %s := %s;\n"%(variable, expression)
+ action_content = self.Program + " %s := %s;\n"%(variable, expression)
self.Program = ""
+ self.SFCNetworks["Actions"][action_name] = ReIndentText(action_content, 4)
def GenerateSFCTransition(self, transition, pou):
if transition not in self.SFCNetworks["Transitions"].keys():
@@ -374,12 +377,16 @@
if connections and len(connections) == 1:
expression = self.ComputeFBDExpression(transitionBody, connections[0])
transition_infos["content"] = "\n := %s;\n"%expression
+ self.ComputedBlocks += self.Program
+ self.Program = ""
elif transitionType == "LD":
for instance in transitionBody.getContentInstances():
if isinstance(instance, plcopen.coil):
paths = self.GenerateLDPaths(instance.connectionPointIn.getConnections(), transitionBody)
expression = self.ComputeLDExpression(paths, True)
transition_infos["content"] = "\n := %s;\n"%expression
+ self.ComputedBlocks += self.Program
+ self.Program = ""
elif transitionValues["type"] == "connection":
body = pou.getBody()
connections = transition.getConnections()
@@ -390,9 +397,13 @@
paths = self.GenerateLDPaths(connections, body)
expression = self.ComputeLDExpression(paths, True)
transition_infos["content"] = "\n := %s;\n"%expression
+ self.ComputedBlocks += self.Program
+ self.Program = ""
else:
expression = self.ComputeFBDExpression(body, connections[0])
transition_infos["content"] = "\n := %s;\n"%expression
+ self.ComputedBlocks += self.Program
+ self.Program = ""
for step in steps:
self.GenerateSFCStep(step, pou)
step_name = step.getName()