По просьбе наших посетителей, данный материал перенесен с сайта plc4good.org.ua, в связи с полной его потерей. Всё возражения принимаются через форму обратной связи.
plc4good.org.ua/view_post.php?id=249
Иногда встречается необходимость работать с функциями, в которых много однотипных входных/выходных параметров.
Данный материал показывает возможность обращаться к этим параметрам через вычисляемую переменную (индекс).
Возьмем тестовую функцию, в которой имеются 11 дискретных входов/выходов.
Проблема заключается в том, что использовать оператор AT можно только в пределах адресуемой переменной.
Введем переменную in_00_b
представляющюю массив из одного bool элемента.
Пример работы с параметрами.
Полный код:
FUNCTION_BLOCK FB1
VAR_INPUT
in_00 : BOOL ,
in_00_b AT in_00 : ARRAY[0..0] OF BOOL,
in_01 : BOOL ,
in_02 : BOOL ,
in_03 : BOOL ,
in_04 : BOOL ,
in_05 : BOOL ,
in_06 : BOOL ,
in_07 : BOOL ,
in_08 : BOOL ,
in_09 : BOOL ,
in_10 : BOOL ,
END_VAR
VAR_OUTPUT
out_00 : BOOL ,
out_00_b AT out_00 : ARRAY[0..0] OF BOOL,
out_01 : BOOL ,
out_02 : BOOL ,
out_03 : BOOL ,
out_04 : BOOL ,
out_05 : BOOL ,
out_06 : BOOL ,
out_07 : BOOL ,
out_08 : BOOL ,
out_09 : BOOL ,
out_10 : BOOL ,
END_VAR
VAR_TEMP
i : INT,
END_VAR
FOR i:=0 TO 10 BY 1 DO
out_00_b[i]:=in_00_b[i],
END_FOR,
END_FUNCTION_BLOCK
Замечания:
Данный способ работает только с функциональными блоками FB.
Обрабатывать можно параметры любых типов – INT, REAL, DWORD и т.д.
Даже с установленной опцией Monitor array limits в компиляторе, компиляция проходит без проблем при любых значениях лимитов цикла, поэтому надо быть осторожным при использовании, чтобы не выйти за границы.
Комментарии к материалу
Добавлен: VO Дата: 2015-01-17
вот это номер. впрочем, ничего удивительного.
Оцените статью!