【发布时间】:2019-10-02 17:13:17
【问题描述】:
Beckhoff 的 TwinCat-3 以及它所基于的 Codesys 3 添加了引用作为对 IEC-61131-3 语言的扩展。我想知道这个非标准添加的确切语法和语义是什么(这就是它们的问题:没有人像标准那样费心记录它们)。
当从下面的F_Test 测试函数调用时,下面的F_IsNonEmpty 函数是否有效并执行预期的操作?
FUNCTION F_IsNonEmpty : BOOL
VAR_INPUT
text : REFERENCE TO STRING;
END_VAR
F_IsNonEmpty := LEN(text) > 0;
END_FUNCTION
FUNCTION F_Test1
VAR
testMessage : STRING := '123';
END_VAR
IF F_IsNonEmpty(text := testMessage) THEN
{...}
END_IF
END_FUNCTION
鉴于必须使用 REF= 运算符初始化引用的目标(例如 C++ 中的引用目标是不可变的),我原以为下面的调用代码会是正确的——但它甚至不编译:
FUNCTION F_Test2
VAR
testMessage : STRING := '123';
END_VAR
IF F_IsNonEmpty(text REF= testMessage) THEN
{...}
END_IF
END_FUNCTION
F_Test1 似乎工作正常,但我希望有人真正使用 Codesys 3 或 TwinCat-3 REFERENCE TO 功能来确认。
【问题讨论】: