Оборудование и ПО:
• ПЛК: ОВЕН СПК110
• Версия ядра ПЛК (CODESYS): 3.5.17.30
• Среда разработки: CODESYS V3.5 SP17 Patch 3
Описание проблемы:
После штатной загрузки проекта и создания загрузочного приложения (Create Boot Application) контроллер работает стабильно.
Однако при аппаратном сбросе (потеря и последующее возобновление питания) загрузочное приложение не стартует автоматически.
Симптомы:
1. При загрузке контроллер уходит в аварию (наблюдается сообщение "Rised exception... / Rising fault 1010").
2. В Web-конфигураторе статус пользовательского приложения меняется на «Исключение».
3. В логе Web-конфигуратора фиксируется: Unknown exception, Код: 4112 (что соответствует 0x1010 – Access Violation).
Ограничения системы и попытки решения:
Настройка реакции на исключения через Web-интерфейс проблему не решает. Перевод параметра в режим «Отлавливать CoDeSys» не является рабочим вариантом для объекта, так как:
• Это требует постоянно запущенной среды CODESYS и подключения ПК.
• Система автоматизации состоит из двух ПЛК и должна восстанавливать работу абсолютно автономно после сбоев по питанию.
Дополнительная информация (подозрения):
Ошибка возникает на самом первом цикле работы ПЛК. Есть подозрение, что в момент физического отключения питания происходит повреждение области RETAIN-памяти (запись некорректных значений / "мусора").
При последующей загрузке чтение этих поврежденных данных приводит к нарушению доступа к памяти (Access Violation) до выполнения основной логики программы. \
Добавление в код проверок на валидность RETAIN-переменных при старте проблему не решает – контроллер падает раньше.
Вопрос:
• Как гарантированно избежать падения ПЛК в исключение 0x1010 при возобновлении питания в автономном режиме работы?
• Существуют ли системные патчи для корректного сохранения/восстановления RETAIN на данной версии ядра?




