首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不能将输出变量作为参数传递给IEC61131-3结构化文本(TwinCAT3)中的函数块构造函数?

为什么不能将输出变量作为参数传递给IEC61131-3结构化文本(TwinCAT3)中的函数块构造函数?
EN

Stack Overflow用户
提问于 2021-02-12 22:57:17
回答 2查看 556关注 0票数 0

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

代码语言:javascript
复制
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;

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

代码语言:javascript
复制
a : A(output => outputLocal);

  • I得到语法错误:Identifier 'output' not defined。但是我确实在构造函数方法中定义了这个参数。当我试图编译这个项目时,我得到了另一个错误:No matching FB_init method found for instantiation of A
  • Does,有人知道问题出在哪里吗?以及如何将变量作为输出参数传递给函数块?
  • ,基本上是将localoutput链接到FB
  • 中的变量output ( FB A)。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-24 19:15:53

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

您需要在FunctionBlock中声明一个FunctionBlock,在构造函数中声明一个VAR_INPUT,并将输入变量从构造函数分配给REF=FunctionBlock-probably的输出变量,否则只会得到值。

票数 1
EN

Stack Overflow用户

发布于 2021-02-13 07:03:16

尽管技术上可以在FB_Init-method中获得输出参数,但是您无法从FB_Init调用中获取它们。我的猜测是,它与对象是如何在时间上被构造有关的,因此它是没有意义的。

更重要的问题是:你在努力实现什么?在上面的示例中,您似乎试图从FB_Init调用访问参数输出,我假设它是整个函数块的输出。您似乎是从方法调用的输出写入函数块的输出,这没有任何意义。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66180096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档