всем спасибо, проблема разрешилась
Поскольку от документации толку ноль, пришлось прочесать сей форум.
Что сделано - для модулей ввода/вывода установлен метод опроса "both" (polling+value change) и время опроса 100 мс. Для модулей вывода установлен метод опроса "by value change" и время опроса 200 мс.
Теперь все работает стабильно
замечания к программированию
насчет выставления переменных на передачу данных в конце цикла - истину глаголешь. У меня в проге так сделано. Более того - я параноидально завел две переменные - сurr_value и new_value. В проге все вычисления делаются для new_value, а вот в самом конце сравниваются new_value и curr_value и если они различаются, то
var
DO_1 AT %QX..... : BOOL;
DO_2 AT %QX..... : BOOL;
...
DO_N AT %QX..... : BOOL;
curr_value1 : BOOL := false;
curr_value2 : BOOL := false;
...
curr_valueN : BOOL := false;
end_var
new_value1:=................;
new_value2:=................;
...
new_valueN:=................;
if new_value1 <> curr_value1 then
curr_value1 := new_value1;
DO_1:= curr_value1;
end_if
if new_value2 <> curr_value2 then
curr_value2 := new_value2;
DO_2:= curr_value2;
end_if
...
if new_valueN <> curr_valueN then
curr_valueN := new_valueN;
DO_N:= curr_valueN;
end_if