Beckhoff的TwinCat-3,以及它所基于的CODESYS3,添加了引用作为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=运算符(v.s.例如C++,其中引用目标是不可变的)进行初始化,我本以为下面的调用代码应该是正确的-但它甚至不能编译:
FUNCTION F_Test2
VAR
testMessage : STRING := '123';
END_VAR
IF F_IsNonEmpty(text REF= testMessage) THEN
{...}
END_IF
END_FUNCTION看起来F_Test1工作正常,但我希望实际使用CODESYS3或TwinCat-3 REFERENCE TO功能的人来确认一下。
发布于 2019-10-02 06:51:09
在VAR_INPUT中使用引用时,就像在使用VAR_IN_OUT变量一样。否则,如果您在VAR部分中声明引用,则在将另一个变量赋值给它时需要使用REF= (否则会出现异常)。
本质上,引用(类似于VAR_IN_OUT变量)是一种更方便、更“安全”的指针,因为不需要解引用操作符^,而且在编译时会检查类型。
https://stackoverflow.com/questions/58190645
复制相似问题