plcopen/structures.py
changeset 307 fd1f6ae26d4f
parent 305 0ed2b61de43e
child 354 20ccf1e5266e
equal deleted inserted replaced
306:eecc53781498 307:fd1f6ae26d4f
    49     if block_infos["type"] == "function":
    49     if block_infos["type"] == "function":
    50         output_variables = block.outputVariables.getvariable()
    50         output_variables = block.outputVariables.getvariable()
    51         if not generator.ComputedBlocks.get(block, False) and not order:
    51         if not generator.ComputedBlocks.get(block, False) and not order:
    52             generator.ComputedBlocks[block] = True
    52             generator.ComputedBlocks[block] = True
    53             vars = []
    53             vars = []
       
    54             one_input_connected = False
    54             for i, variable in enumerate(block.inputVariables.getvariable()):
    55             for i, variable in enumerate(block.inputVariables.getvariable()):
    55                 input_info = (generator.TagName, "block", block.getlocalId(), "input", i)
    56                 input_info = (generator.TagName, "block", block.getlocalId(), "input", i)
    56                 connections = variable.connectionPointIn.getconnections()
    57                 connections = variable.connectionPointIn.getconnections()
    57                 if connections is not None:
    58                 if connections is not None:
       
    59                     parameter = variable.getformalParameter()
       
    60                     if parameter != "EN":
       
    61                         one_input_connected = True
    58                     value = generator.ComputeExpression(body, connections, executionOrderId > 0)
    62                     value = generator.ComputeExpression(body, connections, executionOrderId > 0)
    59                     if len(output_variables) > 1:
    63                     if len(output_variables) > 1:
    60                         parameter = variable.getformalParameter()
       
    61                         vars.append([(parameter, input_info),
    64                         vars.append([(parameter, input_info),
    62                                      (" := ", ())] + generator.ExtractModifier(variable, value, input_info))
    65                                      (" := ", ())] + generator.ExtractModifier(variable, value, input_info))
    63                     else:
    66                     else:
    64                         vars.append(generator.ExtractModifier(variable, value, input_info))
    67                         vars.append(generator.ExtractModifier(variable, value, input_info))
    65             for i, variable in enumerate(output_variables):
    68             if one_input_connected:
    66                 parameter = variable.getformalParameter()
    69                 for i, variable in enumerate(output_variables):
    67                 if variable.getformalParameter() == "":
    70                     parameter = variable.getformalParameter()
    68                     variable_name = "%s%d"%(type, block.getlocalId())
    71                     if variable.getformalParameter() == "":
    69                 else:
    72                         variable_name = "%s%d"%(type, block.getlocalId())
    70                     variable_name = "%s%d_%s"%(type, block.getlocalId(), parameter)
    73                     else:
    71                 if generator.Interface[-1][0] != "VAR" or generator.Interface[-1][1] or generator.Interface[-1][2] or generator.Interface[-1][3]:
    74                         variable_name = "%s%d_%s"%(type, block.getlocalId(), parameter)
    72                     generator.Interface.append(("VAR", False, False, False, []))
    75                     if generator.Interface[-1][0] != "VAR" or generator.Interface[-1][1] or generator.Interface[-1][2] or generator.Interface[-1][3]:
    73                 if variable.connectionPointOut in generator.ConnectionTypes:
    76                         generator.Interface.append(("VAR", False, False, False, []))
    74                     generator.Interface[-1][4].append((generator.ConnectionTypes[variable.connectionPointOut], variable_name, None, None))
    77                     if variable.connectionPointOut in generator.ConnectionTypes:
    75                 else:
    78                         generator.Interface[-1][4].append((generator.ConnectionTypes[variable.connectionPointOut], variable_name, None, None))
    76                     generator.Interface[-1][4].append(("ANY", variable_name, None, None))
    79                     else:
    77                 if len(output_variables) > 1 and parameter not in ["", "OUT"]:
    80                         generator.Interface[-1][4].append(("ANY", variable_name, None, None))
    78                     vars.append([(parameter, (generator.TagName, "block", block.getlocalId(), "output", i)), 
    81                     if len(output_variables) > 1 and parameter not in ["", "OUT"]:
    79                                  (" => %s"%variable_name, ())])
    82                         vars.append([(parameter, (generator.TagName, "block", block.getlocalId(), "output", i)), 
    80                 else:
    83                                      (" => %s"%variable_name, ())])
    81                     output_info = (generator.TagName, "block", block.getlocalId(), "output", i)
    84                     else:
    82                     output_name = variable_name
    85                         output_info = (generator.TagName, "block", block.getlocalId(), "output", i)
    83             generator.Program += [(generator.CurrentIndent, ()),
    86                         output_name = variable_name
    84                                   (output_name, output_info),
    87                 generator.Program += [(generator.CurrentIndent, ()),
    85                                   (" := ", ()),
    88                                       (output_name, output_info),
    86                                   (type, (generator.TagName, "block", block.getlocalId(), "type")),
    89                                       (" := ", ()),
    87                                   ("(", ())]
    90                                       (type, (generator.TagName, "block", block.getlocalId(), "type")),
    88             generator.Program += JoinList([(", ", ())], vars)
    91                                       ("(", ())]
    89             generator.Program += [(");\n", ())]
    92                 generator.Program += JoinList([(", ", ())], vars)
       
    93                 generator.Program += [(");\n", ())]
       
    94             else:
       
    95                 generator.Warnings.append("\"%s\" function cancelled in \"%s\" POU: No input connected"%(type, generator.TagName.split("::")[-1]))
    90         if link:
    96         if link:
    91             connectionPoint = link.getposition()[-1]
    97             connectionPoint = link.getposition()[-1]
    92         else:
    98         else:
    93             connectionPoint = None
    99             connectionPoint = None
    94         for i, variable in enumerate(output_variables):
   100         for i, variable in enumerate(output_variables):