使用已明确定义FB_init方法的__NEW初始化功能块

时间:2020-05-25 18:42:03

标签: initialization dynamic-memory-allocation codesys structured-text

假设我有一个定义了FB_init方法的功能块(A),例如:

write_text

还有另一个功能块(B),我想从中动态初始化此(A)FB:

{attribute 'enable_dynamic_creation'}
FUNCTION_BLOCK A
  METHOD FB_init : BOOL
    VAR_INPUT
      bInitRetains : BOOL;
      bInCopyCode : BOOL;
      parameter: BOOL;
    END_VAR
  END_METHOD
END_FUNCTION_BLOCK

我无法动态创建A功能块的实例。 这是否有可能,或者我做错了什么?

PS。我正在使用Schneider SoMachine V4.3

1 个答案:

答案 0 :(得分:2)

功能块B中有错误。我尝试过TwinCAT 3,它可以工作。

更改

a := POINTER TO A;

a : POINTER TO A;

此后,将执行以下操作:

A:

{attribute 'enable_dynamic_creation'}
FUNCTION_BLOCK A
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR

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)
    parameter: BOOL;
END_VAR

B:

FUNCTION_BLOCK B
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
    a : POINTER TO A;
END_VAR

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)
    parameter: BOOL;
    somethingElse: INT;
END_VAR

a := __NEW(A(parameter := TRUE));
相关问题