на производстве 12 машин работают на ПЛК110М2, на всех них одна и та же программа. Проблема такая, есть подпрограммы которые по коду операции пришедшему по Modbus запускают некий агрегат по таймеру, код выглядит примерно так:
Код:
PROGRAM dododo
VAR
TON_KnL: TON;
KnlElasp:BOOL;
END_VAR
TON_KnL(IN := TRUE, PT := DINT_TO_TIME(TRUNC(UST_Time * 1000)), Q=>KnlElasp);
IF(KnlElasp) THEN
TON_KnL(IN := FALSE);
UST_Time := 0;
END_IF;
работает какое то время, но периодически появляется то на одной машине, то на другой машине пропуск операции. Входит в подпрограмму, запускает таймер и он сразу отрабатывает. Сделал принудительный сброс первой итерации с принудительным перезапуском таймера, так:
Код:
PROGRAM dododo
VAR
TON_KnL: TON;
KnlElasp:BOOL;
inInd:BOOL := TRUE;
END_VAR
IF(inInd) THEN
TON_KnL(IN := FALSE);
inInd :=FALSE;
ELSE
TON_KnL(IN := TRUE, PT := DINT_TO_TIME(TRUNC(UST_Time * 1000)), Q=>KnlElasp);
IF(KnlElasp) THEN
TON_KnL(IN := FALSE);
inInd :=TRUE;
UST_Time := 0;
END_IF;
END_IF;
стало лучше, но пропуски хоть и реже, но продолжают появляться. Может кто то сталкивался с данной проблемой, либо знает как полечить.