699 if body_type in ["FBD", "LD", "SFC"]: |
699 if body_type in ["FBD", "LD", "SFC"]: |
700 undefined_blocks = [] |
700 undefined_blocks = [] |
701 for instance in body.getcontentInstances(): |
701 for instance in body.getcontentInstances(): |
702 if isinstance(instance, (InVariableClass, OutVariableClass, |
702 if isinstance(instance, (InVariableClass, OutVariableClass, |
703 InOutVariableClass)): |
703 InOutVariableClass)): |
704 expression = instance.getexpression().text |
704 expression = instance.getexpression() |
705 var_type = self.GetVariableType(expression) |
705 var_type = self.GetVariableType(expression) |
706 if (isinstance(pou, TransitionObjClass) |
706 if (isinstance(pou, TransitionObjClass) |
707 and expression == pou.getname()): |
707 and expression == pou.getname()): |
708 var_type = "BOOL" |
708 var_type = "BOOL" |
709 elif (not isinstance(pou, (TransitionObjClass, ActionObjClass)) and |
709 elif (not isinstance(pou, (TransitionObjClass, ActionObjClass)) and |
931 connections = instance.connectionPointIn.getconnections() |
931 connections = instance.connectionPointIn.getconnections() |
932 if connections is not None: |
932 if connections is not None: |
933 expression = self.ComputeExpression(body, connections) |
933 expression = self.ComputeExpression(body, connections) |
934 if expression is not None: |
934 if expression is not None: |
935 self.Program += [(self.CurrentIndent, ()), |
935 self.Program += [(self.CurrentIndent, ()), |
936 (instance.getexpression().text, (self.TagName, "io_variable", instance.getlocalId(), "expression")), |
936 (instance.getexpression(), (self.TagName, "io_variable", instance.getlocalId(), "expression")), |
937 (" := ", ())] |
937 (" := ", ())] |
938 self.Program += expression |
938 self.Program += expression |
939 self.Program += [(";\n", ())] |
939 self.Program += [(";\n", ())] |
940 elif isinstance(instance, BlockClass): |
940 elif isinstance(instance, BlockClass): |
941 block_type = instance.gettypeName() |
941 block_type = instance.gettypeName() |
962 coil_info = (self.TagName, "coil", instance.getlocalId()) |
962 coil_info = (self.TagName, "coil", instance.getlocalId()) |
963 expression = self.ComputeExpression(body, connections) |
963 expression = self.ComputeExpression(body, connections) |
964 if expression is not None: |
964 if expression is not None: |
965 expression = self.ExtractModifier(instance, expression, coil_info) |
965 expression = self.ExtractModifier(instance, expression, coil_info) |
966 self.Program += [(self.CurrentIndent, ())] |
966 self.Program += [(self.CurrentIndent, ())] |
967 self.Program += [(instance.getvariable().text, coil_info + ("reference",))] |
967 self.Program += [(instance.getvariable(), coil_info + ("reference",))] |
968 self.Program += [(" := ", ())] + expression + [(";\n", ())] |
968 self.Program += [(" := ", ())] + expression + [(";\n", ())] |
969 |
969 |
970 def FactorizePaths(self, paths): |
970 def FactorizePaths(self, paths): |
971 same_paths = {} |
971 same_paths = {} |
972 uncomputed_index = range(len(paths)) |
972 uncomputed_index = range(len(paths)) |
1185 localId = connection.getrefLocalId() |
1185 localId = connection.getrefLocalId() |
1186 next = body.getcontentInstance(localId) |
1186 next = body.getcontentInstance(localId) |
1187 if isinstance(next, LeftPowerRailClass): |
1187 if isinstance(next, LeftPowerRailClass): |
1188 paths.append(None) |
1188 paths.append(None) |
1189 elif isinstance(next, (InVariableClass, InOutVariableClass)): |
1189 elif isinstance(next, (InVariableClass, InOutVariableClass)): |
1190 paths.append(str([(next.getexpression().text, (self.TagName, "io_variable", localId, "expression"))])) |
1190 paths.append(str([(next.getexpression(), (self.TagName, "io_variable", localId, "expression"))])) |
1191 elif isinstance(next, BlockClass): |
1191 elif isinstance(next, BlockClass): |
1192 block_type = next.gettypeName() |
1192 block_type = next.gettypeName() |
1193 self.ParentGenerator.GeneratePouProgram(block_type) |
1193 self.ParentGenerator.GeneratePouProgram(block_type) |
1194 block_infos = self.GetBlockType(block_type, tuple([self.ConnectionTypes.get(variable.connectionPointIn, "ANY") for variable in next.inputVariables.getvariable() if variable.getformalParameter() != "EN"])) |
1194 block_infos = self.GetBlockType(block_type, tuple([self.ConnectionTypes.get(variable.connectionPointIn, "ANY") for variable in next.inputVariables.getvariable() if variable.getformalParameter() != "EN"])) |
1195 if block_infos is None: |
1195 if block_infos is None: |
1221 paths.append(str(expression)) |
1221 paths.append(str(expression)) |
1222 else: |
1222 else: |
1223 raise PLCGenException, _("No connector found corresponding to \"%s\" continuation in \"%s\" POU")%(name, self.Name) |
1223 raise PLCGenException, _("No connector found corresponding to \"%s\" continuation in \"%s\" POU")%(name, self.Name) |
1224 elif isinstance(next, ContactClass): |
1224 elif isinstance(next, ContactClass): |
1225 contact_info = (self.TagName, "contact", next.getlocalId()) |
1225 contact_info = (self.TagName, "contact", next.getlocalId()) |
1226 variable = str(self.ExtractModifier(next, [(next.getvariable().text, contact_info + ("reference",))], contact_info)) |
1226 variable = str(self.ExtractModifier(next, [(next.getvariable(), contact_info + ("reference",))], contact_info)) |
1227 result = self.GeneratePaths(next.connectionPointIn.getconnections(), body, order) |
1227 result = self.GeneratePaths(next.connectionPointIn.getconnections(), body, order) |
1228 if len(result) > 1: |
1228 if len(result) > 1: |
1229 factorized_paths = self.FactorizePaths(result) |
1229 factorized_paths = self.FactorizePaths(result) |
1230 if len(factorized_paths) > 1: |
1230 if len(factorized_paths) > 1: |
1231 paths.append([variable, tuple(factorized_paths)]) |
1231 paths.append([variable, tuple(factorized_paths)]) |
1480 elif transitionType == "ST": |
1480 elif transitionType == "ST": |
1481 transition_infos["content"] = [("\n", ()), |
1481 transition_infos["content"] = [("\n", ()), |
1482 (ReIndentText(transitionBody.getanyText(), len(self.CurrentIndent)), (self.TagName, "body", len(self.CurrentIndent)))] |
1482 (ReIndentText(transitionBody.getanyText(), len(self.CurrentIndent)), (self.TagName, "body", len(self.CurrentIndent)))] |
1483 else: |
1483 else: |
1484 for instance in transitionBody.getcontentInstances(): |
1484 for instance in transitionBody.getcontentInstances(): |
1485 if isinstance(instance, OutVariableClass) and instance.getexpression().text == transitionValues["value"]\ |
1485 if isinstance(instance, OutVariableClass) and instance.getexpression() == transitionValues["value"]\ |
1486 or isinstance(instance, CoilClass) and instance.getvariable().text == transitionValues["value"]: |
1486 or isinstance(instance, CoilClass) and instance.getvariable() == transitionValues["value"]: |
1487 connections = instance.connectionPointIn.getconnections() |
1487 connections = instance.connectionPointIn.getconnections() |
1488 if connections is not None: |
1488 if connections is not None: |
1489 expression = self.ComputeExpression(transitionBody, connections) |
1489 expression = self.ComputeExpression(transitionBody, connections) |
1490 if expression is not None: |
1490 if expression is not None: |
1491 transition_infos["content"] = [("\n%s:= "%self.CurrentIndent, ())] + expression + [(";\n", ())] |
1491 transition_infos["content"] = [("\n%s:= "%self.CurrentIndent, ())] + expression + [(";\n", ())] |