В продолжение этого обсуждения (до поста №294)
Кусок кода при котором наблюдались зависания каждые 2-3 дня:
Переработанный код при котором зависаний нет уже 12 суток:Код:IF (screenCurB = 99 OR screenCurB = 0) AND (globalAlarm1 > 0 OR globalAlarm2 > 0) THEN flagUpScreen := TRUE; END_IF
Переменные привязанные к входам-выходам узла "Screen":Код:timerScreen(in := (screenCurB = 99 OR screenCurB = 0) AND (globalAlarm1 > 0 OR globalAlarm2 > 0), pt := T#60S); // TON IF timerScreen.ET >= T#5S THEN flagUpScreen := TRUE; IF timerScreen.ET >= T#15S THEN flagScreenError := TRUE; IF timerScreen.Q THEN flagRestart := TRUE; END_IF END_IF END_IF
Во всём коде были только эти изменения. Добавлена задержка на переключение экрана из режима "притушен" в режим "полной" яркости в 5 секунд. Уверенности в устранении неисправности, конечно, нет. Я мог бы попытаться воспроизвести проблему со старым кодом - мне не сложно, но уезжаю в отпуск, так что предоставлю эту возможность всем заинтересованным лицам.Код:flagUpScreen: BOOL; // выход из режима погашен или притушен screenOffT: UDINT := 3600; // off задержка screenDimT: UDINT := screenOffT-10; // dim задержка screenOffB: UDINT := 0; // off яркость screenDimB: UDINT := 99; // dim яркость screenFullB: UDINT := 100; // full яркость screenCurB: UDINT; // текущая яркость
Во время тестирований со старым и новым кодом "globalAlarm1" всегда больше "0"




Ответить с цитированием