0

我有一个功能块A,它有一个变量output(在FUNCTION_BLOCK A方法中定义)和这个FB_init方法:

METHOD FB_init : BOOL
    VAR_INPUT
        bInitRetains : BOOL; // if TRUE, the retain variables are initialized (warm start / cold start)
        bInCopyCode : BOOL;  // if TRUE, the instance afterwards gets moved into the copy code (online change)
    END_VAR
    
    VAR_OUTPUT
        output : REAL := 0;
    END_VAR

THIS^.output := output;

当我按如下方式调用此构造函数时:

a : A(output => outputLocal);
  • 我收到语法错误:Identifier 'output' not defined. 但是我确实在构造函数方法中定义了这个参数。
  • 当我尝试编译项目时,出现另一个错误:No matching FB_init method found for instantiation of A
  • 有谁知道问题出在哪里?以及如何将变量作为输出参数传递给功能块?
  • 我想基本上将FB 构造函数中localoutput的变量output(的 FB )链接起来。A
4

2 回答 2

1

通过在方法的部分中声明输出VAR_OUTPUT,您可以使其成为方法的局部输出变量,而不是输入变量。

您需要在构造函数中声明 aVAR_OUTPUTFunctionBlockVAR_INPUT构造函数中声明 a 并将构造函数的输入变量分配给 - 可能是FunctionBlockby的输出变量REF=,否则您将只获得值。

于 2021-11-24T19:15:53.023 回答
0

即使从技术上讲,您可以在 - 方法中拥有输出参数,但FB_Init您无法从 FB_Init 调用中将它们取出。我的猜测是它与对象如何及时构建有关,因此没有任何意义。

更重要的问题是:你想达到什么目标?在上面的示例中,您似乎正在尝试从 FB_Init 调用访问参数输出,我假设它是整个功能块的输出?您似乎正在从方法调用的输出写入功能块的输出,这没有任何意义。

如果您只想将参数作为功能块的输出传递,为什么不在这种情况下将其作为输入参数提供呢?(通过副本或参考)?

于 2021-02-13T07:03:16.420 回答