-
Вложений: 2
Здравствуйте.
Две ошибки, связанные с работой трендов.
В проекте 2 исторических тренда по 7 переменной в каждом. Запись 1 раз/сек, максимальный объём 128 Мб.
Вложение 46916
Первую вылечил загрузкой проекта через USB Flash (FAT32).
Вложение 46915
Вторая возникает в процессе работы спонтанно. Перезаливка помогает не надолго.
-
Вложений: 4
Добрый день.
Посмотрите, что в логе контроллера отображается (Device - Журнал).
Дам чуть больше комментариев по теме. Определенные проблемы с трендами в CODESYS были/есть.
В SP14 были исправлены две критические ошибки, связанные с ними:
Вложение 46922 Вложение 46923
Релиз прошивки с поддержкой SP14 для СПК запланирован на февраль.
Также в ней включено автоматическое бэкапирование .sqlite файлов, что тоже должно редуцировать проблемы.
Тем не менее, есть проблемы, которые разработчики CODESYS не исправили до сих пор:
Вложение 46924 Вложение 46925
Как видно из скриншотов - их исправление запланировано в SP16, который выйдет в конце мая.
В более отдаленном будущем мы планируем перейти и на эту версию.
-
Вложений: 1
Журнал экспортировал. Для чистоты эксперимента необходимо не перезагружать СПК, иначе плюсом падает БД тренда.
Ошибку с паданием БД решил по совету из подобной темы: сделал кнопку перезагрузки из раздела watchdog.
Однако, когда возникает красный экран смерти, до неё не добраться и приходится дёргать питание на ходу.
Повторно запустил проект с нуля. Как упадёт - напишу.
Due to the exception the visualization goes into a safe mode until restart
Exception happened while evaluating main visu 'Trend2', exception code: 0
*SOURCEPOSITION* App=[<app>Application</app>] area=<area>0</area>, offset=<off>4131956</off>
*EXCEPTION* App=[<app>Application</app>], Exception=[<excpt>FPU DivisionByZero
TrendStorageAccess: Database Error in function/method 140: Error code = 30441, Action = 3007
-
DivisionByZero - где-то произошло деление на 0.
Могу посоветовать следующее:
1. Если у вас привязаны к тренду переменные ФБ (например, его выходы) - то сначала копируйте их в локальные переменные программы, и уже их привязывайте.
2. Перед копированием пропускайте значения через оператор Limit - например, если вы отображаете на тренде температуру, то вряд ли она когда-то должна превысить 1000.
(но может превысить, если в значении кодируется код ошибки - как, например, в наших модулях аналогового ввода)
Я несколько раз наблюдал, как резкие изменения отображаемых значений (типа - от несколько десятков до нескольких миллионов) приводили к такой ошибке.