на 0 не ругается?
Вид для печати
на 0 не ругается?
Неа, на ноль не ругается :) правда что при этом делает - не проверял
for vFor := 1 to 10 do
v := 11 - vFor;
end_for
Это то понятно, но как-то костыльно... тем более что по стандарту языка ST BY может быть отрицательным. Просто как всегда не доделано
у Лоджика нет понятия отрицательного числа для целочесленных, может по этому?
А, логично, да. Ведь в BY можно и переменную подставить, не только константу. Ну значит считаем, что такая особенность в лоджике
Можно ещё дуркануть через WHILE, но он опасен: его можно легко загнать в бесконечный цикл.
Код:udiI := 10;
WHILE (udiI > 0) DO
***
***
udiI := udiI -1;
END_WHILE
По строкам не считал, но количество операций, вроде, меньше
Код:function_block TOnP // Таймер TON с паузой
var_input
In,P : bool;
PT : udint; // Задача времени таймера udint, мс
end_var
var_output
Q : bool; //
ET: udint; // Выход времени таймера udint, мс
end_var
var
clk : bool;
tmStart, tmNow :udint;
end_var
tmNow := time_to_udint(get_time());
if P then tmStart := tmNow - ET; end_if
if In and not clk then tmStart := tmNow; end_if
clk := In;
ET := (tmNow - tmStart) * bool_to_udint(In);
if ET >= PT then ET := PT; end_if
Q := In and (ET = PT);
end_function_block
Пытаясь сделать ввод в массив на 40 начальных значений, столкнулся с проблемой, вывод на экран 40 дисплеев для ввода, Вложение 89166
происходит переполнение визуализации на 136 %.
Соответственно, надо придумать автоматизацию для ввода.
Пробовал на циклах и обычную запись. Оказалось лучше и проще, обычная последовательная запись.
Получилось так.
После первого ввода, сохранения и пока идёт запись, горит синий индикатор. После ввода РТ, выбрать Запись и нажать Ок,
после записи, автоматически поменяется номер строки массива, для последующего ввода и сохранения.
Двумя ФБ, можно записать параллельно и 2 массива, используя всего 6 дисплеев и 1 экран. Вложение 88965
Проверил, всё работает, но пример загромождать не стал. Версия Owen Logic3.0.372,
онлайн отладка массивов в версии Owen Logic3.0.373