diff -r 8fbff50141f8 -r 0e48629c1e6d PLCGenerator.py --- 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()