Просмотр полной версии : Не работает модбас
rediskus
09.10.2024, 13:13
Итак ситуация. Создаем простейший проект с модбасом, заливаем, все работат.
После перезагрузки контроллера коннекта к запущенному приложению нет. Если остановить и снова запустить приложение коннект появляется.
Очень неприятная ошибка. Скорее всего связана она с тем, что на момент запуска приложения линукс на ПЛК еще не инициализировал все сетевые интерфейсы.
Тестовый проект прилагаю.
rediskus
09.10.2024, 13:18
Программку под винду для работы с ним по модбасу, если нужно можно взять здесь https://nufnuf.asf-srv.ru/d/s/10RhNNyZGaC3kzfAsZ44rniQ2CywEseT/1HEkbZt9W43HfEc6w41DF9B6DGFLgoHe-J70AS_BGuws
У вас есть сервис для запуска RT ? просто укажите ему в systemd запускаться после всего и вся, что требуется для его запуска, и все.
rediskus
09.10.2024, 14:06
У вас есть сервис для запуска RT ? просто укажите ему в systemd запускаться после всего и вся, что требуется для его запуска, и все.
Это все конечно здорово. Но я купил контроллер, в который стандартными средствами заливаю проект и он не работает.
Гарчев Евгений
09.10.2024, 14:46
Здравствуйте!
Для того, чтобы загруженная программа выполнялась после перезагрузки контроллера, необходимо добавить в модуль свойство "Автозапуск".
79270
rediskus
09.10.2024, 15:42
Здравствуйте!
Для того, чтобы загруженная программа выполнялась после перезагрузки контроллера, необходимо добавить в модуль свойство "Автозапуск".
79270
Добавляю, программа после перезагрузки работает, связи по модбас нет. Что делать дальше?
Как вы узнали, что программа работает?
и все-таки. Если там запуск через systemd, проведите эксперимент. Если будет все запускаться, то производитель что-то подправит.
Гарчев Евгений
09.10.2024, 17:30
Добавляю, программа после перезагрузки работает, связи по модбас нет. Что делать дальше?
Проверьте настройку всех сетевых интерфейсов ПЛК через WEB-конфигуратор. Разные порты должны быть настроены на разные подсети.
rediskus
10.10.2024, 08:17
Как вы узнали, что программа работает?
79287
А в самом проекте вывел на ножки DO контроллера бегущую единицу. Контроллер щелкает релюшками.
и все-таки. Если там запуск через systemd, проведите эксперимент. Если будет все запускаться, то производитель что-то подправит.
Так я и пишу здесь для того, чтобы производитель что-то подправил. Там сидит Yocto linux, скрипты запускаются через init.d, а вот кто конкретно запускает пользовательское приложение я не разбирался.
rediskus
10.10.2024, 08:20
Проверьте настройку всех сетевых интерфейсов ПЛК через WEB-конфигуратор.
Так нормально?
79288
Разные порты должны быть настроены на разные подсети.
Могут быть настроены на разные подсети. А могут и нет.
rediskus
10.10.2024, 08:23
Проект с бегущей единицей
https://nufnuf.asf-srv.ru/d/s/10SMJi482Ni2qMD1mFgneltmKJ5wpN31/-gIwQ8lpRyupmfF2_P6GeFOLMAQH-o2a-JbAA2A7Kuws
init.d есть везде вроде. Проверьте есть ли там systemd и не запускается ли RT из него?
Ну или это вопрос к производителю - как вы запускаете RT? если через второе, то заставить его запускаться позже необходимого не проблема.
Добрый день! Какая это модификация контроллера?
rediskus
10.10.2024, 09:43
Добрый день! Какая это модификация контроллера?
ПЛК210-11-PL-BASE
Номер 145765240832469575
Пришлите пожалуйста скрин содержимого папки /etc/rc.d
Это можно сделать из консоли в Веб-конфигураторе или из окна Контроллер в Полигоне. Команды в консоле:
cd /etc/rc.d
ls
rediskus
10.10.2024, 10:20
Скрин
79299
Пока не можем повторить такое же поведение.
Пришлите пожалуйста конфигурацию сетевых портов, можно скрин из Веб-конфигуратора
Пока не можем повторить такое же поведение.
а как Вы проверяли, прямо знаете каким приложением и с какими настройками оно не пошло у ТС?
Гарчев Евгений
10.10.2024, 11:20
Так нормально?
79288
Могут быть настроены на разные подсети. А могут и нет.
Порты, не объединенные в мост, не должны быть настроены на одну подсеть, иначе будут как раз проблемы с инициализацией. Вложение, к сожалению, отсутствует.
rediskus
10.10.2024, 11:46
Порты, не объединенные в мост, не должны быть настроены на одну подсеть, иначе будут как раз проблемы с инициализацией. Вложение, к сожалению, отсутствует.
Прикрепил еще раз
79300
rediskus
10.10.2024, 12:07
Пока не можем повторить такое же поведение.
Пришлите пожалуйста конфигурацию сетевых портов, можно скрин из Веб-конфигуратора
Алгоритм.
Включаем контроллер, ждем загрузки приложения.
Пытаемся подключиться по модбас. Ошибка.
Логинимся на веб-интерфейс и перезапускаем приложение.
Модбас подключается.
По ссылке можно скачать видео, как это происходит, приложение для ПЛК, скрины веб и не веб настроек сети и конфу для OwenOPC сервера.
https://nufnuf.asf-srv.ru/d/s/10STvqWKlnh7JpIQdJRnB9v5aXiqZxly/8PIL82p2EOURYeBEma_hdYU6BZJg4VYI-HLWAHVfjuws
Гарчев Евгений
10.10.2024, 12:17
Алгоритм.
Включаем контроллер, ждем загрузки приложения.
Пытаемся подключиться по модбас. Ошибка.
Логинимся на веб-интерфейс и перезапускаем приложение.
Модбас подключается.
По ссылке можно скачать видео, как это происходит, приложение для ПЛК, скрины веб и не веб настроек сети и конфу для OwenOPC сервера.
https://nufnuf.asf-srv.ru/d/s/10STvqWKlnh7JpIQdJRnB9v5aXiqZxly/8PIL82p2EOURYeBEma_hdYU6BZJg4VYI-HLWAHVfjuws
сетевые настройки корректные, попытаемся воспроизвести проблему у себя, по результату отпишемся
rediskus
10.10.2024, 12:26
сетевые настройки корректные, попытаемся воспроизвести проблему у себя, по результату отпишемся
Если нужен доступ к контроллеру по SSH и Modbus пишите в личку
Гарчев Евгений
10.10.2024, 13:12
Если нужен доступ к контроллеру по SSH и Modbus пишите в личку
Можете, пожалуйста, проверить пинг с контроллера пк через порт, на котором наблюдаются проблемы с инициализацией? Пропинговать из web-конфигуратора, раздел терминал.
запускали присланный проект из автозапуска на таком же контроллере
вот только сеть у нас немного по-другому настроена, поэтому и попросили скрин
rediskus
10.10.2024, 13:29
Можете, пожалуйста, проверить пинг с контроллера пк через порт, на котором наблюдаются проблемы с инициализацией? Пропинговать из web-конфигуратора, раздел терминал.
79301
Вот скрин. Я пробовал на разных компах. Могу засунуть контроллер в другую сеть, посмотреть что будет в этом случае.
При этом полигоновский отладчик прекрасно подключается к проекту.
rediskus
10.10.2024, 14:28
Опять сам спросил, сам ответил ;)
Как сразу предположил вчера программа на ПЛК успевает стартануть раньше, чем линукс поднимет сетевые интерфейсы. Вы сказали, что не можете повторить проблему и сеть у вас настроена по другому. Вот в этом и ответ. У вас на контроллере стоит статический IP адрес. А у меня динамика.
Прога запускается, а контроллер еще ждет когда ему дадут IP. Как это решить?
1. Запретить динамику :)
2. Вставить задержку в автостарт.
3. Разобраться и сделать правильно :))
79302
Так работает.
79303
так тоже работает.
В динамике не работает :)
rediskus у вас сейчас статика выдается роутером?
Господа полигоновцы, вы не ответили на вопрос - запуск RT через systemd или файлы напрямки в rc.local (init.d) или где они там у вас валяются ?
Могу ошибаться, давно через rc ничего не запускал. У вас там имена файлов начинаются с буквы и цифры. Найдите кто именно запускает RT и увеличьте там цифру на побольше.
Опять сам спросил, сам ответил ;)
Как сразу предположил вчера программа на ПЛК успевает стартануть раньше, чем линукс поднимет сетевые интерфейсы. Вы сказали, что не можете повторить проблему и сеть у вас настроена по другому. Вот в этом и ответ. У вас на контроллере стоит статический IP адрес. А у меня динамика.
Прога запускается, а контроллер еще ждет когда ему дадут IP. Как это решить?
1. Запретить динамику :)
2. Вставить задержку в автостарт.
3. Разобраться и сделать правильно :))
79302
Так работает.
79303
так тоже работает.
В динамике не работает :)
Спасибо, в этом и причина. Посмотрим, как это можно исправить.
rediskus у вас сейчас статика выдается роутером?
Господа полигоновцы, вы не ответили на вопрос - запуск RT через systemd или файлы напрямки в rc.local (init.d) или где они там у вас валяются ?
Могу ошибаться, давно через rc ничего не запускал. У вас там имена файлов начинаются с буквы и цифры. Найдите кто именно запускает RT и увеличьте там цифру на побольше.
Запуск рантайма в файлах rc.d, его приоритет 99 самый последний
Полигон тогда странно, что так происходит.
Кстати заметил, что в некоторых случаях при рестартах Linux срабатывает какой-то таймер на интерфейсах. Видно, когда простыня загрузки идет. Может и тут похожий случай?
Если там есть systemd, попробуйте сервис стартовать через него, там это все легко решается через параметр After, вполне возможно и для rc что-то есть, но не уверен.
пример, стартануть после такого-то сервиса и даже после логов к этому сервису.
[Unit]
After=ххххх.service var-log-ххххх.mount
Соответственно можно указать стартовать только когда поднимутся интерфейсы.
pastartup ? их там два, K10 и S99
Вроде и тут есть настройка, пример от nginx
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $local_fs $remote_fs $network $syslog $named
# Required-Stop: $local_fs $remote_fs $network $syslog $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO
Полигон тогда странно, что так происходит.
Кстати заметил, что в некоторых случаях при рестартах Linux срабатывает какой-то таймер на интерфейсах. Видно, когда простыня загрузки идет. Может и тут похожий случай?
Если там есть systemd, попробуйте сервис стартовать через него, там это все легко решается через параметр After, вполне возможно и для rc что-то есть, но не уверен.
пример, стартануть после такого-то сервиса и даже после логов к этому сервису.
[Unit]
After=ххххх.service var-log-ххххх.mount
Соответственно можно указать стартовать только когда поднимутся интерфейсы.
pastartup ? их там два, K10 и S99
Вроде и тут есть настройка, пример от nginx
K10 - это скрипт для остановки, поэтому у него низкий порядок (при нормальном завершении ОС рантайм останавливается до других сервисов)
Да, идея с порядком запуска интересная, но завязки с DHCP сложнее, зависит видимо еще и от сервера как быстро он выдает ПЛК адрес. В итоге мы скорее всего решим эту проблему в самом блоке сервера, чтобы он корректно обрабатывал эту ситуацию и гарантировано подключался, хоть и не с первой попытки.
Задержку на запуск рантайма увеличивать не хотелось бы, и так контроллер стартует не быстро.
ну если через systemd там той задержки кот наплакал. Будет незаметно.
Как бы да, запуск после чего-то поможет, но это могут оказаться те же 20 секунд, как и слип.
А если сама по себе программа стартует быстро и начинает управлять выходами, то все равно не очень вариант. Более правильным будет в самой RT поднимать опросы и ожидать запросов с задержкой.
rediskus
10.10.2024, 17:47
так Вам удалось повторить ситуацию?
А как насчет масок сети, якобы dhcp https://owen.ru/forum/attachment.php?attachmentid=79300&d=1728549933 и со слов ТС в статике https://owen.ru/forum/attachment.php?attachmentid=79303&d=1728559688 это роутер работает по стандартной маске, а раздает не верную или плк что то сам там мутит?
В данном КОНКРЕТНОМ случае маска подсети не на что не влияет. «Якобы dhcp» выдает правильную маску, а /24 я вбил потому, что мне лень было вспоминать какую цифру там поставить вместо нуля. За внимательность 5.
rediskus
10.10.2024, 17:52
Как бы да, запуск после чего-то поможет, но это могут оказаться те же 20 секунд, как и слип.
А если сама по себе программа стартует быстро и начинает управлять выходами, то все равно не очень вариант. Более правильным будет в самой RT поднимать опросы и ожидать запросов с задержкой.
Да слип решение такое себе. К тому-же на объектах бывает ситуация когда роутер или то, что его заменяет грузится еще дольше ПЛК и тупым слипом проблему не решить. Иногда ПЛК работает просто от другого питания и его включают раньше чем все остальное. Статический адрес тут поможет 100%, я еще не видел динамики на удаленных объектах, дураков нет ;) Но в принципе проблему надо бы решить, особенно в свете скорого продвижения полигона в массы.
да, мы повторили проблему, сможем исправить
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot