Вход

Просмотр полной версии : ПЛК 73 периодически перегружается при опросе ПР110



d_dmitry
27.03.2025, 14:54
На объекте ПЛК73 опрашивает по RS485 ТРМ136, ТРМ200 все работает без проблем более года, добавил в сеть КМС-Ф1 и ПР110-24.8Д.4Р с интерфейсным модулем ПР-МИ485. Опрос идет без проблем, но контроллер начал периодически перегружаться. После долгих попыток найти проблему получилось так, что ПР110 перестало отвечать на запросы (причину не знаю, возможно какая-то неисправность, т.к. я отключал и подключал ПР-МИ485 во время работы) Проблема перезагрузки исчезла.

Дома для тестовых целей я взял другой контроллер ПЛК73 с другим реле ПР110-24.8Д.4Р с другим интерфейсным модулем ПР-МИ485, загрузил тестовую программу опроса реле по RS485, появилась та же самая проблема периодически контроллер перезагружается, Код ошибки 3.

Помогите пожалуйста разобраться в чем может быть проблема.

melky
27.03.2025, 15:05
ПЛК73 мастером может работать только через библиотеки. Может при опросе ПР110 вы его в собаку загоняете кодом опроса ?

d_dmitry
27.03.2025, 15:19
Опрос сделан через библиотеку ModBus.lib, код опроса для всех устройств одинаковый, меняется только адрес прибора и регистр, я бы конечно копал бы код дальше, но помогает отключение ПР110, код при этом не меняется, а контроллер перестает перегружаться

kondor3000
27.03.2025, 15:24
Опрос сделан через библиотеку ModBus.lib, код опроса для всех устройств одинаковый, меняется только адрес прибора и регистр, я бы конечно копал бы код дальше, но помогает отключение ПР110, код при этом не меняется, а контроллер перестает перегружаться

Попробуйте просто тайм -аут увеличить немного (например со 100 до 150 мс) или сделать небольшую задержку между запросами (10 мс).
Возможно не совсем корректно добавили новый опрос, и временами запросы накладываются друг на друга. Распределить опросы по шагам CASE.

d_dmitry
27.03.2025, 15:41
Задержка между запросами 2 секунды у меня, а вот таймаут всего 50мс, сейчас увеличу до 150мс и буду тестировать, спасибо огромное за идею, а то уже не знал что пробовать

melky
27.03.2025, 15:45
Тут как бы нонсенс - ну не успевает ПЛК получить ответ, и что? это ведь не повод ему перегружаться. В принципе своем, любые ошибки в линии не должны приводить к рестарту. Иначе что это за ПЛК такой? Может там в самой библиотеке Modbus какой косяк?

Валенок
27.03.2025, 16:16
..., Код ошибки 3.
Помогите пожалуйста разобраться в чем может быть проблема.
Ищем описание в РП на 63/73 ) и .....
там странные слова -
82738


Может там в самой библиотеке Modbus какой косяк?
Есть. Кривой работой с открытием/закрытием порта можно завалить цикл

Можно ли кроме зацикла еще чем грохнуть? Можно. Кривой указатель/индекс и ой.

Есть ли возможность найти причину проблемы не выкладывая проекта? Да - попробуйте еще постучать по колесу и протереть фары.

d_dmitry
27.03.2025, 16:24
Ищем описание в РП на 63/73 ) и .....
там странные слова -
82738

Про вложение непонятно, оно не открывается

d_dmitry
27.03.2025, 16:28
На всякий случай код программы, дабы избежать критики, но еще раз повторю один и тот же код используется для опроса различных устройств, проблема только ПР110

d_dmitry
27.03.2025, 17:59
Увеличение таймаута до 150мс, а потом и до 200мс не помогло, увеличение максимальной длительности цикла до 3 сек (было 1сек) тоже не помогло

d_dmitry
27.03.2025, 18:22
Как у вас вообще это работает?
Вместе с ошибками, не дожидаясь окончания работы одного блока, переходите к другому чтению и записи.
Откройте любой пример и посмотрите, как это всё должно быть.

Примеры для ПЛК63/73
10) Обмен через библиотеки Modbus и OwenNet https://owen.ru/product/codesys_v2/example_program

Оно хорошо все работает, после завершения чтения по флагу reading_complete начинается отсчет паузы 2 секунды и только после этого начинается чтение следующего устройства или запись, возможно код плохо читается, но все работает.

Валенок
27.03.2025, 18:25
В PLC_PRG разбить вообще всё на 1 общий автомат
Вложить его в бесконечный цикл
Для кусков кода со 100% увереностью в норме - exit (именно exit) в конце шага
Для подозрительных кусков кода/вызовов делать:
-доп.предварительный шаг с сохранением значения шага в ретайн-ловушке и строго return
-выполнять этот кусок с exit (или return - по желанию)
-доп.последующий шаг со сбросом ловушки с строго return

//возможно что 2 и 3 можно объеденить - но нужно проверять

При запуске, если ловушка есть - как-то показывать её значение и ничего не делать до принуд сброса ловушки
Из самого последнего шага - return, само собой
//Аля МЭК поверх МЭК с фиксацией ошибки до принуд сброса

Нудно противно, но чем чаще ошибка появляется, тем быстрее и чётче локализуете ошибку.

Мин цикл 1мс ессно, а не эти левые 20мс
С таймаутом в 150мс - не занимайтесь хренью. ПР, 9600, 1 регистр - 35..40мс за глаза. Если б 115200 - 15..20



Увеличение таймаута до 150мс, а потом и до 200мс не помогло, увеличение максимальной длительности цикла до 3 сек (было 1сек) тоже не помогло
Было б странно. Это всё - протирка фар и стучание по колесу.

Cs-Cs
27.03.2025, 19:01
А нет ли там кривой обработки данных? Ну например, выхода за границы массивов или циклов?

d_dmitry
27.03.2025, 19:03
Мин цикл 1мс ессно, а не эти левые 20мс


С мин циклом 1мс не будет работать чтение, есть тема на форуме, если не ошибаюсь

Из программы удалил вообще все кроме чтения одного регистра ПР110, контроллер все равно уходит в перезагрузку, не сразу, но через какое-то время

Валенок
27.03.2025, 19:26
С мин циклом 1мс не будет работать чтение, есть тема на форуме,
Закрасьте эту тему фломастером. Авторам этой хрени предложите ещё раз перекодить свой код

kondor3000
27.03.2025, 19:54
С мин циклом 1мс не будет работать чтение, есть тема на форуме, если не ошибаюсь

Из программы удалил вообще все кроме чтения одного регистра ПР110, контроллер все равно уходит в перезагрузку, не сразу, но через какое-то время

У меня на другом ПЛК154 этот код работает нормально, с мин циклом 1 мс. 82743 На скорости 9600, тайм-аут 100мс

Поменял только Settings.byStopBits:=0; Ноль - это 1 стоп бит
Проработал почти 1,5 часа без проблем


И этот тоже работает 82748 115200, 8N1, мин цикл 1 мс

d_dmitry
28.03.2025, 08:17
Поменял только Settings.byStopBits:=0; Ноль - это 1 стоп бит


Проблема была в этом, огромное спасибо, kondor3000, что помогли разобраться, поменял на ноль и перезагрузки прекратились. Удивительно что проблемы вылезла наружу только с ПР110, но это к лучшему. Еще раз спасибо всем за помощь, сам бы я не нашел ошибку.

Валенок
28.03.2025, 12:36
Проблема была в этом,
Ну ну. Проблема не в этом. Просто нашли костыль с которым вроде бы заработало.
Но коли устроило - то и ладно.

--
Каким боком какая-то настройка связи может привести к зависанию? Не ошибкам связи а именно к зависанию? Но это глубоко копать, да.