用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。到目前为止,我发现的唯一方法是在功能块(VAR
、VAR_OUTPUT
)内的每个 VAR
类型上手动编写 RETAIN
关键字,但随后我会必须有此对象的 2 个单独版本(未保留和保留,例如 POU1
和 POU1_RETAINED
),更不用说,这不适用于 PERSISTENT
.
来自 Guiorgy 的代码在 Twincat 3 和 Codesys 3.5 上都按预期运行。
运行使用 Machine Expert 的示例时出现的错误,必须是特定的 Schneider 问题。
如果我有一个带有显式定义的 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。到目前为止,我发现的唯一方法是在功能块(VAR
、VAR_OUTPUT
)内的每个 VAR
类型上手动编写 RETAIN
关键字,但随后我会必须有此对象的 2 个单独版本(未保留和保留,例如 POU1
和 POU1_RETAINED
),更不用说,这不适用于 PERSISTENT
.
来自 Guiorgy 的代码在 Twincat 3 和 Codesys 3.5 上都按预期运行。
运行使用 Machine Expert 的示例时出现的错误,必须是特定的 Schneider 问题。