【问题标题】:Why can't I pass output variable as a parameter to function block constructor in IEC61131-3 structured text (TwinCAT3)?为什么我不能将输出变量作为参数传递给 IEC61131-3 结构化文本 (TwinCAT3) 中的功能块构造函数?
【发布时间】:2021-05-16 16:34:57
【问题描述】:

我有一个功能块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。但我确实定义了 构造方法中的 this 参数。
  • 当我尝试编译项目时出现另一个错误:No matching FB_init method found for instantiation of A
  • 有谁知道问题出在哪里?以及如何将变量传递为 功能块的输出参数?
  • 我基本上想在 FB 构造函数中将 localoutput 链接到变量 output(FB A)。

【问题讨论】:

  • 这个很奇怪的电话给我a : A(output => outputLocal);你哪里有这样的构造? a : 是什么?它看起来像声明,但你不能在声明中调用 FB。如果是作业,而你错过了=,那么它也没有意义。
  • 这是一个声明,我正在调用FB_init 方法。我想将FB的内部变量output链接到局部变量outputlocal
  • 据我了解,方法可以访问所有 FB 局部变量。您可以在方法中outputlocal := 1

标签: plc twincat st structured-text iec61131-3


【解决方案1】:

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

您需要在FunctionBlock 中声明一个VAR_OUTPUT,在构造函数中声明一个VAR_INPUT,并将构造函数中的输入变量分配给FunctionBlock 的输出变量——可能是REF=,或者您'将获得价值。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我想基本上将localoutput链接/连接到变量output(FB A)。通常我可以用=> 符号来做,但在这种情况下它不起作用。我还编辑了问题。
    • 但是您正在做的(以及不可能的)是您试图访问方法 FB_Init 的输出变量。如果要访问变量output,可以直接调用body中的FB,比如:A(output => myVariable)
    • 啊,我明白了。所以访问function_block output 变量的唯一方法是在主代码中对吗?不能在构造函数中完成?
    • 我仍然不明白为什么要将变量从 FB_Init 输出到功能块的输出的用例。您能否在问题中更深入地描述用例?
    • 这是一个声明,我正在调用FB_init 方法。我想将FB的内部变量output链接到局部变量outputlocal
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2011-06-28
    相关资源
    最近更新 更多