743 for connection in self.ExtractRelatedConnections(instance.connectionPointOut): |
743 for connection in self.ExtractRelatedConnections(instance.connectionPointOut): |
744 self.ConnectionTypes[connection] = var_type |
744 self.ConnectionTypes[connection] = var_type |
745 if isinstance(instance, (OutVariableClass, InOutVariableClass)): |
745 if isinstance(instance, (OutVariableClass, InOutVariableClass)): |
746 self.ConnectionTypes[instance.connectionPointIn] = var_type |
746 self.ConnectionTypes[instance.connectionPointIn] = var_type |
747 connected = self.GetConnectedConnector(instance.connectionPointIn, body) |
747 connected = self.GetConnectedConnector(instance.connectionPointIn, body) |
748 if connected is not None and not connected in self.ConnectionTypes: |
748 if connected is not None and connected not in self.ConnectionTypes: |
749 for related in self.ExtractRelatedConnections(connected): |
749 for related in self.ExtractRelatedConnections(connected): |
750 self.ConnectionTypes[related] = var_type |
750 self.ConnectionTypes[related] = var_type |
751 elif isinstance(instance, (ContactClass, CoilClass)): |
751 elif isinstance(instance, (ContactClass, CoilClass)): |
752 for connection in self.ExtractRelatedConnections(instance.connectionPointOut): |
752 for connection in self.ExtractRelatedConnections(instance.connectionPointOut): |
753 self.ConnectionTypes[connection] = "BOOL" |
753 self.ConnectionTypes[connection] = "BOOL" |
754 self.ConnectionTypes[instance.connectionPointIn] = "BOOL" |
754 self.ConnectionTypes[instance.connectionPointIn] = "BOOL" |
755 for link in instance.connectionPointIn.getconnections(): |
755 for link in instance.connectionPointIn.getconnections(): |
756 connected = self.GetLinkedConnector(link, body) |
756 connected = self.GetLinkedConnector(link, body) |
757 if connected is not None and not connected in self.ConnectionTypes: |
757 if connected is not None and connected not in self.ConnectionTypes: |
758 for related in self.ExtractRelatedConnections(connected): |
758 for related in self.ExtractRelatedConnections(connected): |
759 self.ConnectionTypes[related] = "BOOL" |
759 self.ConnectionTypes[related] = "BOOL" |
760 elif isinstance(instance, LeftPowerRailClass): |
760 elif isinstance(instance, LeftPowerRailClass): |
761 for connection in instance.getconnectionPointOut(): |
761 for connection in instance.getconnectionPointOut(): |
762 for related in self.ExtractRelatedConnections(connection): |
762 for related in self.ExtractRelatedConnections(connection): |
764 elif isinstance(instance, RightPowerRailClass): |
764 elif isinstance(instance, RightPowerRailClass): |
765 for connection in instance.getconnectionPointIn(): |
765 for connection in instance.getconnectionPointIn(): |
766 self.ConnectionTypes[connection] = "BOOL" |
766 self.ConnectionTypes[connection] = "BOOL" |
767 for link in connection.getconnections(): |
767 for link in connection.getconnections(): |
768 connected = self.GetLinkedConnector(link, body) |
768 connected = self.GetLinkedConnector(link, body) |
769 if connected is not None and not connected in self.ConnectionTypes: |
769 if connected is not None and connected not in self.ConnectionTypes: |
770 for related in self.ExtractRelatedConnections(connected): |
770 for related in self.ExtractRelatedConnections(connected): |
771 self.ConnectionTypes[related] = "BOOL" |
771 self.ConnectionTypes[related] = "BOOL" |
772 elif isinstance(instance, TransitionClass): |
772 elif isinstance(instance, TransitionClass): |
773 content = instance.getconditionContent() |
773 content = instance.getconditionContent() |
774 if content["type"] == "connection": |
774 if content["type"] == "connection": |
778 raise PLCGenException( |
778 raise PLCGenException( |
779 _("SFC transition in POU \"%s\" must be connected.") % self.Name) |
779 _("SFC transition in POU \"%s\" must be connected.") % self.Name) |
780 |
780 |
781 for link in connections: |
781 for link in connections: |
782 connected = self.GetLinkedConnector(link, body) |
782 connected = self.GetLinkedConnector(link, body) |
783 if connected is not None and not connected in self.ConnectionTypes: |
783 if connected is not None and connected not in self.ConnectionTypes: |
784 for related in self.ExtractRelatedConnections(connected): |
784 for related in self.ExtractRelatedConnections(connected): |
785 self.ConnectionTypes[related] = "BOOL" |
785 self.ConnectionTypes[related] = "BOOL" |
786 elif isinstance(instance, ContinuationClass): |
786 elif isinstance(instance, ContinuationClass): |
787 name = instance.getname() |
787 name = instance.getname() |
788 connector = None |
788 connector = None |
857 self.ConnectionTypes[connection] = "BOOL" |
857 self.ConnectionTypes[connection] = "BOOL" |
858 else: |
858 else: |
859 for oname, otype, oqualifier in block_infos["outputs"]: |
859 for oname, otype, oqualifier in block_infos["outputs"]: |
860 if output_name == oname: |
860 if output_name == oname: |
861 if otype.startswith("ANY"): |
861 if otype.startswith("ANY"): |
862 if not otype in undefined: |
862 if otype not in undefined: |
863 undefined[otype] = [] |
863 undefined[otype] = [] |
864 undefined[otype].append(variable.connectionPointOut) |
864 undefined[otype].append(variable.connectionPointOut) |
865 elif not variable.connectionPointOut in self.ConnectionTypes: |
865 elif variable.connectionPointOut not in self.ConnectionTypes: |
866 for connection in self.ExtractRelatedConnections(variable.connectionPointOut): |
866 for connection in self.ExtractRelatedConnections(variable.connectionPointOut): |
867 self.ConnectionTypes[connection] = otype |
867 self.ConnectionTypes[connection] = otype |
868 for variable in instance.inputVariables.getvariable(): |
868 for variable in instance.inputVariables.getvariable(): |
869 input_name = variable.getformalParameter() |
869 input_name = variable.getformalParameter() |
870 if input_name == "EN": |
870 if input_name == "EN": |
873 else: |
873 else: |
874 for iname, itype, iqualifier in block_infos["inputs"]: |
874 for iname, itype, iqualifier in block_infos["inputs"]: |
875 if input_name == iname: |
875 if input_name == iname: |
876 connected = self.GetConnectedConnector(variable.connectionPointIn, body) |
876 connected = self.GetConnectedConnector(variable.connectionPointIn, body) |
877 if itype.startswith("ANY"): |
877 if itype.startswith("ANY"): |
878 if not itype in undefined: |
878 if itype not in undefined: |
879 undefined[itype] = [] |
879 undefined[itype] = [] |
880 undefined[itype].append(variable.connectionPointIn) |
880 undefined[itype].append(variable.connectionPointIn) |
881 if connected is not None: |
881 if connected is not None: |
882 undefined[itype].append(connected) |
882 undefined[itype].append(connected) |
883 else: |
883 else: |
884 self.ConnectionTypes[variable.connectionPointIn] = itype |
884 self.ConnectionTypes[variable.connectionPointIn] = itype |
885 if connected is not None and not connected in self.ConnectionTypes: |
885 if connected is not None and connected not in self.ConnectionTypes: |
886 for connection in self.ExtractRelatedConnections(connected): |
886 for connection in self.ExtractRelatedConnections(connected): |
887 self.ConnectionTypes[connection] = itype |
887 self.ConnectionTypes[connection] = itype |
888 for var_type, connections in undefined.items(): |
888 for var_type, connections in undefined.items(): |
889 related = [] |
889 related = [] |
890 for connection in connections: |
890 for connection in connections: |
1084 else: |
1084 else: |
1085 vars = [value for name, value in connected_vars] |
1085 vars = [value for name, value in connected_vars] |
1086 if one_input_connected: |
1086 if one_input_connected: |
1087 for i, variable in enumerate(output_variables): |
1087 for i, variable in enumerate(output_variables): |
1088 parameter = variable.getformalParameter() |
1088 parameter = variable.getformalParameter() |
1089 if not parameter in inout_variables and parameter in output_names + ["", "ENO"]: |
1089 if parameter not in inout_variables and parameter in output_names + ["", "ENO"]: |
1090 if variable.getformalParameter() == "": |
1090 if variable.getformalParameter() == "": |
1091 variable_name = "%s%d" % (type, block.getlocalId()) |
1091 variable_name = "%s%d" % (type, block.getlocalId()) |
1092 else: |
1092 else: |
1093 variable_name = "%s%d_%s" % (type, block.getlocalId(), parameter) |
1093 variable_name = "%s%d_%s" % (type, block.getlocalId(), parameter) |
1094 if self.Interface[-1][0] != "VAR" or self.Interface[-1][1] is not None or self.Interface[-1][2]: |
1094 if self.Interface[-1][0] != "VAR" or self.Interface[-1][1] is not None or self.Interface[-1][2]: |
1533 expression = self.ComputeExpression(transitionBody, connections) |
1533 expression = self.ComputeExpression(transitionBody, connections) |
1534 if expression is not None: |
1534 if expression is not None: |
1535 transition_infos["content"] = [("\n%s:= " % self.CurrentIndent, ())] + expression + [(";\n", ())] |
1535 transition_infos["content"] = [("\n%s:= " % self.CurrentIndent, ())] + expression + [(";\n", ())] |
1536 self.SFCComputedBlocks += self.Program |
1536 self.SFCComputedBlocks += self.Program |
1537 self.Program = [] |
1537 self.Program = [] |
1538 if not "content" in transition_infos: |
1538 if "content" not in transition_infos: |
1539 raise PLCGenException( |
1539 raise PLCGenException( |
1540 _("Transition \"%s\" body must contain an output variable or coil referring to its name") |
1540 _("Transition \"%s\" body must contain an output variable or coil referring to its name") |
1541 % transitionValues["value"]) |
1541 % transitionValues["value"]) |
1542 self.TagName = previous_tagname |
1542 self.TagName = previous_tagname |
1543 elif transitionValues["type"] == "connection": |
1543 elif transitionValues["type"] == "connection": |