Beckhoff TwinCat-3, а также Codesys 3, на которых он основан, добавляет ссылки в качестве расширения к языкам IEC-61131-3. Мне интересно, какова точная грамматика и семантика этого нестандартного дополнения (вот с ними проблема: никто не потрудится документировать их так же, как это сделает стандарт).
Если следующая функция F_IsNonEmpty
действительнаи делать то, что и следовало ожидать, когда вызывается из тестовой функции F_Test
ниже?
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=
(vseg 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
для подтверждения.