Добрый день!
Программа работает на объекте уже три года. В субботу первый раз произошла проблема, приведшая к остановке техпроцесса.
Есть две retain-переменных, которые пересчитываются раз в 15 минут по формуле. Retain-переменные могут быть равны нулю только в начале работы программы (после загрузки ее в контроллер).
Новые значения этим переменных присваиваются только в том случае, если все множители в формуле больше нуля.
Подключившись к ПЛК, оказалось, что данные retain-переменные равны нулю, другие переменные в формуле, как и положено, больше нуля, но при этом не происходит пересчет значений каждые 15 минут, потому что таймер TON почему-то не работал.
В программе есть код
ton1(IN:= NOT ton1.Q, PT:=T#15m);
Согласно этому коду таймер TON должен работать непрерывно.
Но на самом деле наблюдалась следующая картина: выход ET не менялся (был равен T#0ms), но переменная StartTime при этом менялась каждый цикл.
Проблему удалось решить только с помощью холодного сброса. Ни перезагрузка ПЛК по питанию, ни обычный сброс программы не помог (хотя все retain-переменные уже были равны нулю).
С чем может быть связана данная проблема?