
Сообщение от
Солнечный заяц
В переменных индексы массива. При запуске эмуляции выдает ошибку "индекс вне диапазона". Не знаю, будет ли работать на реальном железе. Я подозреваю, что подпрограмма где используются индексы запускается раньше, чем подпрограмма, которая исправляет переменные, хотя расположена ниже. Последовательность запуска ФБ установить нельзя, как я понимаю.
Немножко не так. Блоки, грубо говоря, работают одновременно, но блок инициализации записывает значение в выходную переменную, и во входную переменную это значение попадает только в следующем цикле. Это можно обмануть, подключив вход с помощью линии связи а не через переменную
1.png 2.png
Или же, обработку второго блока делать с задержкой
Код:
function_block functionblock1 //имя функционального блока.
var_input //объявление входных переменных
U : udint; //входная переменная с типом данных bool
end_var
var_output //объявление выходных переменных
Q : udint; //выходная переменная с типом данных udint
end_var
var
init : bool;
end_var
if init then
Q := 100 mod U;
end_if
init := true;
end_function_block
3.png