plcopen/structures.py
changeset 270 351d134babd7
parent 250 e6b58eafef1a
child 279 2ad276084038
equal deleted inserted replaced
269:34eff05909b0 270:351d134babd7
    42     name = block.getinstanceName()
    42     name = block.getinstanceName()
    43     type = block.gettypeName()
    43     type = block.gettypeName()
    44     executionOrderId = block.getexecutionOrderId()
    44     executionOrderId = block.getexecutionOrderId()
    45     block_infos = generator.GetBlockType(type)
    45     block_infos = generator.GetBlockType(type)
    46     if block_infos["type"] == "function":
    46     if block_infos["type"] == "function":
    47         output_variable = block.outputVariables.getvariable()[0]
    47         output_variables = block.outputVariables.getvariable()
    48         output_name = "%s%d_OUT"%(type, block.getlocalId())
       
    49         output_info = (generator.TagName, "block", block.getlocalId(), "output", 0)
       
    50         if not generator.ComputedBlocks.get(block, False) and not order:
    48         if not generator.ComputedBlocks.get(block, False) and not order:
    51             generator.ComputedBlocks[block] = True
    49             generator.ComputedBlocks[block] = True
    52             if generator.Interface[-1][0] != "VAR" or generator.Interface[-1][1] or generator.Interface[-1][2] or generator.Interface[-1][3]:
       
    53                 generator.Interface.append(("VAR", False, False, False, []))
       
    54             if output_variable.connectionPointOut in generator.ConnectionTypes:
       
    55                 generator.Interface[-1][4].append((generator.ConnectionTypes[output_variable.connectionPointOut], output_name, None, None))
       
    56             else:
       
    57                 generator.Interface[-1][4].append(("ANY", output_name, None, None))
       
    58             vars = []
    50             vars = []
    59             for i, variable in enumerate(block.inputVariables.getvariable()):
    51             for i, variable in enumerate(block.inputVariables.getvariable()):
    60                 input_info = (generator.TagName, "block", block.getlocalId(), "input", i)
    52                 input_info = (generator.TagName, "block", block.getlocalId(), "input", i)
    61                 connections = variable.connectionPointIn.getconnections()
    53                 connections = variable.connectionPointIn.getconnections()
    62                 if connections is not None:
    54                 if connections is not None:
    63                     value = generator.ComputeExpression(body, connections, executionOrderId > 0)
    55                     value = generator.ComputeExpression(body, connections, executionOrderId > 0)
    64                     vars.append(generator.ExtractModifier(variable, value, input_info))
    56                     if len(output_variables) > 1:
       
    57                         parameter = variable.getformalParameter()
       
    58                         vars.append([(parameter, input_info),
       
    59                                      (" := ", ())] + generator.ExtractModifier(variable, value, input_info))
       
    60                     else:
       
    61                         vars.append(generator.ExtractModifier(variable, value, input_info))
       
    62             for i, variable in enumerate(output_variables):
       
    63                 parameter = variable.getformalParameter()
       
    64                 if variable.getformalParameter() == "":
       
    65                     variable_name = "%s%d_OUT"%(type, block.getlocalId())
       
    66                 else:
       
    67                     variable_name = "%s%d_%s"%(type, block.getlocalId(), parameter)
       
    68                 if generator.Interface[-1][0] != "VAR" or generator.Interface[-1][1] or generator.Interface[-1][2] or generator.Interface[-1][3]:
       
    69                     generator.Interface.append(("VAR", False, False, False, []))
       
    70                 if variable.connectionPointOut in generator.ConnectionTypes:
       
    71                     generator.Interface[-1][4].append((generator.ConnectionTypes[variable.connectionPointOut], variable_name, None, None))
       
    72                 else:
       
    73                     generator.Interface[-1][4].append(("ANY", variable_name, None, None))
       
    74                 if len(output_variables) > 1 and parameter not in ["", "OUT"]:
       
    75                     vars.append([(parameter, (generator.TagName, "block", block.getlocalId(), "output", i)), 
       
    76                                  (" => %s"%variable_name, ())])
       
    77                 else:
       
    78                     output_info = (generator.TagName, "block", block.getlocalId(), "output", i)
       
    79                     output_name = variable_name
    65             generator.Program += [(generator.CurrentIndent, ()),
    80             generator.Program += [(generator.CurrentIndent, ()),
    66                                   (output_name, output_info),
    81                                   (output_name, output_info),
    67                                   (" := ", ()),
    82                                   (" := ", ()),
    68                                   (type, (generator.TagName, "block", block.getlocalId(), "type")),
    83                                   (type, (generator.TagName, "block", block.getlocalId(), "type")),
    69                                   ("(", ())]
    84                                   ("(", ())]
    70             generator.Program += JoinList([(", ", ())], vars)
    85             generator.Program += JoinList([(", ", ())], vars)
    71             generator.Program += [(");\n", ())]
    86             generator.Program += [(");\n", ())]
    72         return generator.ExtractModifier(output_variable, [(output_name, output_info)], output_info)
    87         if link:
       
    88             connectionPoint = link.getposition()[-1]
       
    89         else:
       
    90             connectionPoint = None
       
    91         for i, variable in enumerate(output_variables):
       
    92             blockPointx, blockPointy = variable.connectionPointOut.getrelPositionXY()
       
    93             if not connectionPoint or block.getx() + blockPointx == connectionPoint.getx() and block.gety() + blockPointy == connectionPoint.gety():
       
    94                 output_info = (generator.TagName, "block", block.getlocalId(), "output", i)
       
    95                 output_name = variable.getformalParameter()
       
    96                 if variable.getformalParameter() == "":
       
    97                     output_name = "%s%d_OUT"%(type, block.getlocalId())
       
    98                 else:
       
    99                     output_name = "%s%d_%s"%(type, block.getlocalId(), variable.getformalParameter())
       
   100                 return generator.ExtractModifier(variable, [(output_name, output_info)], output_info)
    73     elif block_infos["type"] == "functionBlock":
   101     elif block_infos["type"] == "functionBlock":
    74         if not generator.ComputedBlocks.get(block, False) and not order:
   102         if not generator.ComputedBlocks.get(block, False) and not order:
    75             generator.ComputedBlocks[block] = True
   103             generator.ComputedBlocks[block] = True
    76             vars = []
   104             vars = []
    77             for i, variable in enumerate(block.inputVariables.getvariable()):
   105             for i, variable in enumerate(block.inputVariables.getvariable()):
    91             connectionPoint = link.getposition()[-1]
   119             connectionPoint = link.getposition()[-1]
    92         else:
   120         else:
    93             connectionPoint = None
   121             connectionPoint = None
    94         for i, variable in enumerate(block.outputVariables.getvariable()):
   122         for i, variable in enumerate(block.outputVariables.getvariable()):
    95             blockPointx, blockPointy = variable.connectionPointOut.getrelPositionXY()
   123             blockPointx, blockPointy = variable.connectionPointOut.getrelPositionXY()
    96             output_info = (generator.TagName, "block", block.getlocalId(), "output", i)
       
    97             if not connectionPoint or block.getx() + blockPointx == connectionPoint.getx() and block.gety() + blockPointy == connectionPoint.gety():
   124             if not connectionPoint or block.getx() + blockPointx == connectionPoint.getx() and block.gety() + blockPointy == connectionPoint.gety():
       
   125                 output_info = (generator.TagName, "block", block.getlocalId(), "output", i)
    98                 return generator.ExtractModifier(variable, [("%s.%s"%(name, variable.getformalParameter()), output_info)], output_info)
   126                 return generator.ExtractModifier(variable, [("%s.%s"%(name, variable.getformalParameter()), output_info)], output_info)
    99         raise ValueError, "No output variable found"
   127     raise ValueError, "No output variable found"
   100 
   128 
   101 def initialise_block(type, name, block = None):
   129 def initialise_block(type, name, block = None):
   102     return [(type, name, None, None)]
   130     return [(type, name, None, None)]
   103 
   131 
   104 #-------------------------------------------------------------------------------
   132 #-------------------------------------------------------------------------------