PDA

Просмотр полной версии : ПЛК200-3. Как обеспечить бесперебойную работу ПЛК?



anvar_kh
29.06.2023, 06:24
Здравствуйте!
Недавно ввели в эксплуатацию конвейерный комплекс, которым управляет 14 ПЛК200-3. Время от времени в разных ПЛК начинаются проблемы с загрузочным приложением. Бывает, что загрузочное приложение просто исчезает. Бывает так, возникает исключение Access Vioation. В этом случае, для того, чтобы вернуть ПЛК в строй, нужно удалять проект через Web-interface (Раздел ПЛК -> Настройки -> Разное) и заново загружать проект через CodeSys
Чаще всего это происходит, если обесточить ПЛК и заново включить его. Но происходит и при обычной работе (ИБП имеется)

68515

Есть ли какие-нибудь рекомендации чтобы решить эти проблемы?

Cs-Cs
29.06.2023, 07:31
Надо искать ошибки в программе и отлаживать её. Если там Access Violation - то это указывает на кривую работу в программе с:
* Массивами
* Разными буферами приёма или отправки данных
* Штатными библиотеками, которые требуют указателей (например, CodeSys StringUtils)

anvar_kh
29.06.2023, 12:17
Cs-Cs, я имею небольшой опыт работы с CodeSyS, пожалуйста, поправьте меня, если я буду не прав

Насчёт массивов. Да, массивы у нас широко используются. Но выход за пределы массива контролируется. В добавок, используем функцию CheckBounds и я поставил в ней точки останова, если выход за пределы произойдёт.
68523
Указатели не используются. А в том ПЛК, где используются, проблем нет.

Можете уточнить, что такое буферы приёма и отправки данных?

Cs-Cs
29.06.2023, 12:26
anvar_kh У Евгения Кислова была крутая статья про отладку проектов, вот: https://ftp.owen.ru/CoDeSys3/98_Books/CodesysDebug.pdf. Советую её прочитать, так как там ещё и сказано про то, как дамп памяти посмотреть.
В CheckBounds было бы здорово сделать ещё и запись в лог ПЛК (про это у Евгения Кислова тоже есть пример в той же статье).
Буферы - это те же массивы. Их используют, когда надо принять какие-то данные в нестандартном виде (типа "Посылка длиной в 5 байт, третий из которой - значит то-то и то-то"), и обычно обрабатывают через указатели.
Ещё есть редкие случаи сбоя программы тогда, когда какие-то ресурсы (дескрипторы, Handle - например, файлов) не освобождаются. Если программа крутится долго - то в какой-то момент дескрипторов не хватает, и программа выдаёт ошибку.
Но судя по Access Violation - я бы искал работу с памятью.
Ах, да! Ещё Access Violation даёт вызов FB с переменными типа IN_OUT, если они не ему не назначены.