plcopen/structures.py
changeset 307 fd1f6ae26d4f
parent 305 0ed2b61de43e
child 354 20ccf1e5266e
--- a/plcopen/structures.py	Mon Jan 19 17:07:03 2009 +0100
+++ b/plcopen/structures.py	Mon Jan 19 17:08:17 2009 +0100
@@ -51,42 +51,48 @@
         if not generator.ComputedBlocks.get(block, False) and not order:
             generator.ComputedBlocks[block] = True
             vars = []
+            one_input_connected = False
             for i, variable in enumerate(block.inputVariables.getvariable()):
                 input_info = (generator.TagName, "block", block.getlocalId(), "input", i)
                 connections = variable.connectionPointIn.getconnections()
                 if connections is not None:
+                    parameter = variable.getformalParameter()
+                    if parameter != "EN":
+                        one_input_connected = True
                     value = generator.ComputeExpression(body, connections, executionOrderId > 0)
                     if len(output_variables) > 1:
-                        parameter = variable.getformalParameter()
                         vars.append([(parameter, input_info),
                                      (" := ", ())] + generator.ExtractModifier(variable, value, input_info))
                     else:
                         vars.append(generator.ExtractModifier(variable, value, input_info))
-            for i, variable in enumerate(output_variables):
-                parameter = variable.getformalParameter()
-                if variable.getformalParameter() == "":
-                    variable_name = "%s%d"%(type, block.getlocalId())
-                else:
-                    variable_name = "%s%d_%s"%(type, block.getlocalId(), parameter)
-                if generator.Interface[-1][0] != "VAR" or generator.Interface[-1][1] or generator.Interface[-1][2] or generator.Interface[-1][3]:
-                    generator.Interface.append(("VAR", False, False, False, []))
-                if variable.connectionPointOut in generator.ConnectionTypes:
-                    generator.Interface[-1][4].append((generator.ConnectionTypes[variable.connectionPointOut], variable_name, None, None))
-                else:
-                    generator.Interface[-1][4].append(("ANY", variable_name, None, None))
-                if len(output_variables) > 1 and parameter not in ["", "OUT"]:
-                    vars.append([(parameter, (generator.TagName, "block", block.getlocalId(), "output", i)), 
-                                 (" => %s"%variable_name, ())])
-                else:
-                    output_info = (generator.TagName, "block", block.getlocalId(), "output", i)
-                    output_name = variable_name
-            generator.Program += [(generator.CurrentIndent, ()),
-                                  (output_name, output_info),
-                                  (" := ", ()),
-                                  (type, (generator.TagName, "block", block.getlocalId(), "type")),
-                                  ("(", ())]
-            generator.Program += JoinList([(", ", ())], vars)
-            generator.Program += [(");\n", ())]
+            if one_input_connected:
+                for i, variable in enumerate(output_variables):
+                    parameter = variable.getformalParameter()
+                    if variable.getformalParameter() == "":
+                        variable_name = "%s%d"%(type, block.getlocalId())
+                    else:
+                        variable_name = "%s%d_%s"%(type, block.getlocalId(), parameter)
+                    if generator.Interface[-1][0] != "VAR" or generator.Interface[-1][1] or generator.Interface[-1][2] or generator.Interface[-1][3]:
+                        generator.Interface.append(("VAR", False, False, False, []))
+                    if variable.connectionPointOut in generator.ConnectionTypes:
+                        generator.Interface[-1][4].append((generator.ConnectionTypes[variable.connectionPointOut], variable_name, None, None))
+                    else:
+                        generator.Interface[-1][4].append(("ANY", variable_name, None, None))
+                    if len(output_variables) > 1 and parameter not in ["", "OUT"]:
+                        vars.append([(parameter, (generator.TagName, "block", block.getlocalId(), "output", i)), 
+                                     (" => %s"%variable_name, ())])
+                    else:
+                        output_info = (generator.TagName, "block", block.getlocalId(), "output", i)
+                        output_name = variable_name
+                generator.Program += [(generator.CurrentIndent, ()),
+                                      (output_name, output_info),
+                                      (" := ", ()),
+                                      (type, (generator.TagName, "block", block.getlocalId(), "type")),
+                                      ("(", ())]
+                generator.Program += JoinList([(", ", ())], vars)
+                generator.Program += [(");\n", ())]
+            else:
+                generator.Warnings.append("\"%s\" function cancelled in \"%s\" POU: No input connected"%(type, generator.TagName.split("::")[-1]))
         if link:
             connectionPoint = link.getposition()[-1]
         else: