Вопрос: при использовании трендов возникает одна из следующих проблем:
1. На тренде вместо данных отображается сообщение "Error 30405 occurred" (число может быть другим)
2. На тренде вместо данных отображется сообщение "Some kind of disk I/O error occurred. Check disk space"
3. В визуализации контроллера отображается следующее сообщение:
visu_exception.jpg
4. В проекте возникает исключение с приблизительно следующим содержанием (его можно увидеть на вкладке Device - Журнал при подключении к контроллеру):
Код:
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]
Чем они вызваны и что можно сделать?
Примечание: для концептуального решения этой проблемы мы разработали библиотеку OwenVisuTools с собственной реализацией трендов.
Ответ: в большинстве случаев подобные проблемы возникают при перезагрузке контроллера по питанию в тот момент, когда происходит работа с файлом тренда - что приводит к повреждению этого файла.
С этим связаны ситуации из п. 1 и 3, а в некоторых случаях - из п. 2.
Ситуация из п. 2 также возникает, если файлы трендов были удалены из контроллера (например, через вкладку Device - Файлы).
В свежих версиях CODESYS (SP14) исправлено две критических ошибок, связанных с трендами:
trend01.png trend02.png
Исправление еще двух запланировано в версии SP16:
trend03.png trend04.png
И еще одной - в SP17:
30-03-2020 18-28-58.png
Пользователь может уменьшить вероятность описанных ситуаций, выбрав для тренда адекватный период записи данных в файл:
1. В настройках тренда на вкладке Дополнительно следует настроить параметр Измерение в каждом N-цикле. Этот параметр определяет периодичность (выраженную в числе циклов задачи, связанной с трендом) добавления точек на тренд и копирования данных в буфер тренда. Этот буфер размещается в оперативной памяти.
TrendSettingBuffer.png
2. В настройках тренда на вкладке Сохранение трендов следует настроить параметр Сохранение каждые N мс. Этот параметр определяет периодичность записи данных из буфера тренда в файл.
TrendSettingFile.png
Соответственно, чем реже происходит запись в файл - тем меньше вероятность того, что она произойдет в момент пропадания питания контроллера и тем меньше вероятность возникновения ситуаций из п. 1-3.
Ситуация, описанная в п. 4, обычно связана с обработкой отображаемых данных, которую производит компонент. Для предотвращения этой ошибки можно воспользоваться следующими рекомендациями:
1. Не привязывать к тренду выходы ФБ (предварительно следует копировать их в локальные переменные программы).
2. Обрабатывать значения, записываемые в эти переменные, через оператор LIMIT. Это связано с тем, что описанное исключение может возникнуть при резком изменении значений переменных, отображаемых на тренде (например, когда между циклами значение переменной изменяется от 10 до 100000000). Такая ситуация может возникнуть, если, например, в значении аналогового канала также кодируется его статус.