Синтаксис для получения выходной переменной в структурированном тексте - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь использовать библиотечно-определенную функцию (CCaux для продуктов Cross Control) со следующим интерфейсом:

FUNCTION Lightsensor_GetIlluminance : eErr (* return error status. 0 ERR_SUCCESS, otherwise error code.*)
VAR_OUTPUT
    value: UINT;(*Illuminace value (Lux)*)
END_VAR

Я не могу найти правильный синтаксис для получения "значения" из выходной переменной. Вот что у меня в программе:

VAR
    illumen : UINT;
END_VAR

Где я хочу, чтобы illumen было установлено в выходную переменную Lightsensor_GetIlluminace. Следующее не работает, поскольку оно устанавливает переменную на eErr:

illumen := CCAux.Lightsensor_GetIlluminance();

И

illumen := CCAux.Lightsensor_GetIlluminance.value;

Не работает, потому что я получаю ошибку 'value' is no input of 'Lightsensor_GetIlluminance'

И

illumen := CCAux.Lightsensor_GetIlluminance(value := illumen);

терпит неудачу, потому что Lightsensor_GetIlluminance take exactly '0' inputs

Я использую CoDeSys для контекста.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Если у вас есть выходная переменная, как это

FUNCTION Lightsensor_GetIlluminance : eErr 
VAR_OUTPUT
    value: UINT;
END_VAR

Тогда в коде вы можете использовать свое дополнительное varaible, как это.

eErr := Lightsensor_GetIlluminance(value => illumen);

Или, если вы создаете FUNCTION_BLOCK, в дополнение к описанному выше методу вы можете использовать что-то вроде этого.

FUNCTION_BLOCK Lightsensor_GetIlluminance 
VAR_OUTPUT
    value: UINT;
    error : eErr;
END_VAR

А в коде

Lightsensor_GetIlluminance();
IF NOT Lightsensor_GetIlluminance.error THEN
    illumen := Lightsensor_GetIlluminance.value;
END_IF;

Таким образом, вы можете получить доступ к varaible через ., но вам нужно позвонить в FB заранее.

0 голосов
/ 01 ноября 2018

Вот синтаксис для функций с дополнительными выходами:

<function> (<function output variable1> => <output variable 1>, <function output variable n> => <output variable n>)

Следующий код должен возвращать «значение освещенности»:

 CCAux.Lightsensor_GetIlluminance(value => illumen);
...