用FB_Init方法保留一个功能块

Retain a Function Block with FB_Init method

如果我有一个带有显式定义的 FB_Init 方法的功能块,我似乎无法使用 Retain 关键字,因为我收到 C0138: No matching FB_init method found for instantiation of POU 错误,例如:

FUNCTION_BLOCK POU1
VAR
    _val: INT;
END_VAR
METHOD FB_Init : BOOL
VAR_INPUT
    bInitRetains : BOOL;
    bInCopyCode : BOOL;
    val: INT;
END_VAR
THIS^._val := val;
PROGRAM SR_Main
VAR RETAIN
    p1: POU1(val := 10); // C0138:  No matching FB_init method found for instantiation of POU1
END_VAR

该项目似乎可以正常构建,直到我尝试 运行 模拟失败并出现上述错误。我正在使用 Machine Expert 1.2.3(我相信是 CODESYS 3.5.12)

如何使用 FB_Init 方法保留功能块?

PS。到目前为止,我发现的唯一方法是在功能块(VARVAR_OUTPUT)内的每个 VAR 类型上手动编写 RETAIN 关键字,但随后我会必须有此对象的 2 个单独版本(未保留和保留,例如 POU1POU1_RETAINED),更不用说,这不适用于 PERSISTENT.

来自 Guiorgy 的代码在 Twincat 3 和 Codesys 3.5 上都按预期运行。

运行使用 Machine Expert 的示例时出现的错误,必须是特定的 Schneider 问题。