-
Пользователь
Разобрался с помощью справки по codecys
Вызов функционального блока. Привожу цитату из русской справки:
"Переменные вход-выход:
Обратите внимание, что переменные вход-выход (VAR_IN_OUT) передаются в экземпляр функционального блока через указатели. Поэтому таким переменным нельзя присваивать константы при вызове.
Вызов экземпляра fuboinst с входом iInOut1 типа VAR_IN_OUT:
VAR
fuboinst: fubo;
iVar1: int;
END_VAR
iVar1 := 2;
fuboinst (iInOut1 := iVar1);
Не допустимы попытки присваивания констант:
fuboinst (iInOut1:=2); или fuboinst .iInOut1:=2;"
т.е в моем случае будет примерно так:
------------------------------------------------------------
Program PLC_PRG
VAR
q1:bool;
SMS1: GSM_Modem_SMS;(*объявляем экземпляр ФБ*)
END_VAR
q1:=1;(*присваиваем значение q1=1*)
SMS1(bSend:=q1);(*передаем значение из q1 параметру ФБ*)
-------------------------------------------------------------
Вот так будет работать По крайней мере компилируется без ошибки 4062.
Вывод:
Параметру bSent присваиваем значение не напрямую при вызове, а через переменную q1, хотя q1 не указатель, а просто переменная. А в helpe написано "переменные вход-выход (VAR_IN_OUT) передаются в экземпляр функционального блока через указатели".
В упор не вижу тут явного объявления указателя (POINTER TO ..) Это вольности перевода helpa? Пожалуйста поясните, может я заблуждаюсь?
Всем спасибо заранее!
Последний раз редактировалось olegon; 12.07.2010 в 22:45.
Причина: уточнение
-
для входных и выходных переменных в каждом экземпляре фб им выделяется отдельная память и при вызовах идет копирование значений. для вход-выход память не выделяется, в экземпляр неявно отсылается адрес (указатель) оригинала. отсюда переменная вход-выход тянет аналогичные указателю опасности и ограничения, на что в хелпе и указано.
Ваши права
- Вы не можете создавать новые темы
- Вы не можете отвечать в темах
- Вы не можете прикреплять вложения
- Вы не можете редактировать свои сообщения
-
Правила форума