PDA

Просмотр полной версии : Самопроизвольная перезагрузка контроллера ПЛК110-24.30.Р.М(М02)



Серджиус
25.07.2016, 07:08
Здравствуйте Уважаемые форумчане. Существует контроллер ПЛК110-24.30.Р.М(М02), к нему подключены 4 модуля МВ110-8А. По второму RS485 подключена панель СП310. В контроллере крутятся 3 программы, которые работают циклически по 5 секунд, 20 мсек и 72 мсек. Контроллер периодически сам перезагружается, причем было замечено, что если переключатель на контроллере переведен в положение "Работа", то перезагружается примерно через 12 часов, а если в положении "Стоп", то где-то через сутки после начала работы (только потом разумеется не восстанавливается). В debug.txt пишет, что ПЛК был сброшен по watchdog. Пробовал поиграть MinCycleLength и MaxCycleLength, не помогло. Куда дальше копать уже не знаю.

Филоненко Владислав
25.07.2016, 10:18
К тумблеру как I/O что-нибудь в программе подключено?
Ну и без проекта мы будем гадать до бесконечности

Серджиус
25.07.2016, 11:33
На codesys это у меня первая работа, так что прошу сильно не пинать :)
Это пока набросок, поэтому с комментариями туговато. Но в принципе ничего сложного там нет.
В архиве есть краткое описание к проекту.

_Алексей_
26.07.2016, 11:03
Может прошивку обновить нужно?
Правда не встретил на сайте ОВЕНа, изменений вносимых новыми прошивками, т.е. чем одна отличается от другой:)

Гарчев Евгений
26.07.2016, 14:08
На codesys это у меня первая работа, так что прошу сильно не пинать :)
Это пока набросок, поэтому с комментариями туговато. Но в принципе ничего сложного там нет.
В архиве есть краткое описание к проекту.
Здравствуйте!
В ф.б. "GetValues" Вы присвоили указателю адрес первой 4-х байтовой переменной из конфигурации ModBus Slave. Далее в ф.б. у Вас 47 раз идет смещение указателя на 4 байта, в то время как в конфигурации ModBus Slave не выделено такого кол-ва памяти (т.е. недостаточно переменных добавлено в ModBus Slave).

Серджиус
26.07.2016, 14:38
Здравствуйте!
В ф.б. "GateValues" Вы присвоили указателю адрес первой 4-х байтовой переменной из конфигурации ModBus Slave. Далее в ф.б. у Вас 47 раз идет смещение указателя на 4 байта, в то время как в конфигурации ModBus Slave не выделено такого кол-ва памяти (т.е. недостаточно переменных добавлено в ModBus Slave).

Спасибо огромное. Это видимо я отвлекся, а потом перестарался:D. Там их не 47, а чуть меньше конечно (первая цифра там это номер модуля, начиная с нуля, а вторая - номер канала с нуля). Короче не заметил, что случайно еще один добил :D Спасибо за подсказку.

Серджиус
29.07.2016, 07:14
ф.б. "GetValues" я выкинул (не пойму для чего я ее вообще сделал), а в функции "CreateMessage" сделал так: "Addr:= ADR(out1p);". Уменьшил скорость обмена с панелью до 38400, чтобы уменьшилось число ошибок в пакетах. Остальное осталось также. Проработал сутки, а потом опять перезагрузка по watchdog. :(
Может ли контроллер зависать из-за записи на флэшку? И есть ли вообще какие-нибудь методы дианостики программы и контроллера (типа просмотр стеков или что-нибудь в этом духе)?

Филоненко Владислав
30.07.2016, 17:56
уберите вообще работу с указателями, тут не так много данных, чтобы так заморачиваться.
Или хотя бы проверки добавьте перед использованием указателей.
Где-то у Вас невыровненный адрес или чужая память используется.

Серджиус
01.08.2016, 08:04
уберите вообще работу с указателями, тут не так много данных, чтобы так заморачиваться.
Или хотя бы проверки добавьте перед использованием указателей.
Где-то у Вас невыровненный адрес или чужая память используется.

А что такое невыровненный адрес? Что Вы имели в виду? Указатели я использовал, чтобы не объявлять входа, как глобальные переменные. Ну да то ладно, переделать не долго, но в функциях работы с USB указатели постоянно используются и от них не избавиться.
В пятницу утром я вообще выкинул POU "ArchiveToUSB", вместо которой подсунул чистое PRG и контроллер замечательно проработал 3 суток.
Вы написали "Или хотя бы проверки добавьте перед использованием указателей", а что за проверки и как их сделать что-то я не пойму?

Филоненко Владислав
01.08.2016, 09:31
не выровненный указатель - указатель, у которого адрес не кратен размеру типа.
Проверки: На NULL, на невыровненность, на выход за пределы ОЗУ программы.
ArchiveToUSB - а что она делает? Используете ли Вы асинхронную библиотеку записи файлов?

Серджиус
01.08.2016, 12:12
не выровненный указатель - указатель, у которого адрес не кратен размеру типа.
Проверки: На NULL, на невыровненность, на выход за пределы ОЗУ программы.
ArchiveToUSB - а что она делает? Используете ли Вы асинхронную библиотеку записи файлов?

ArchiveToUSB это POU типа PRG. Там осуществляется запись на флэшку. Используется библиотека OwenLibFileAsync.
А как проверить на выход за пределы ОЗУ программы?
Еще интересно, почему программа не сразу падает, а только через несколько часов (через любое количество часов). Ведь во время работы программы ничего не меняется и программа работает циклично.

Jolly
29.10.2018, 12:39
Здравствуйте! Есть проблема с ПЛК110-220.30.К-М. [m02]. Контроллер часто теряет связь с codesys по ethernet и одновременно теряет связь с панелью по rs-232. Я так понимаю он перезагружается. Прошивку обновил, не помогло. Не пойму в чем может быть причина. С контроллером что то не так или я мог программно что то сделать??

Jolly
29.10.2018, 12:51
Ниже прикрепил файл проекта. Если в ПЛК загрузить элементарную программу ";" , то вроде перезагрузки не наблюдается

Jolly
29.10.2018, 14:01
Нашел строчку в коде без которой вроде пока все работает. Строчка, где идет присвоение 1000000 для длительности импульсов на ШИМ выходы (DO1-DO4)