Written on: 07. 01. 2018 [01:13]
|
walhi
Sergey Karpesh
Topic creator
registered since: 26.01.2016
Posts: 29
|
Доброго времени суток!
Версия OpenSCADA: 0.9+r2526.
ОС: Ubuntu MATE 17.10.
Контроллер: самопальный.
Интерфейс: RS-485 (USB RS-485 конвертеры на CH340, FT232).
Столкнулся с необычной проблемой при работе модуля Modbus. У меня в проекте с контроллера запрашивается 8 параметров с количеством регистром от 8 до 180 штук различных типов. При значении параметра "Максимальный размер блока запроса (байты)" более 42 начинаются ошибки CRC. Параметры соединения: 9600, 8N1. При увеличении скорости до 38400 стабильно работать начинает на 36 байтах. Точно такое-же поведение и с эмулятором diagslave. При этом утилита modpoll отлично работает с большими запросами, что отметает проблемы с конверторами и, скорее всего, с контроллером.
Проблема в том, что таких контроллеров в проекте аж 11 штук. Плюс контроллеры сторонних производителей. Мелкие запросы сильно замедлят сеть.
Я пробовал играть с параметром "Время ожидания соединения" и временными интервалами для транспорта. Это не помогло. Куда ещё посмотреть?
UPD: Данное поведение при режиме RTU. При режиме ASCII на скорости 9600 нормальная работа при запросах до 18 байт. При этом modpoll стабильно спрашивает по 100 регистров.
[This article was edited 1 times, at last 07.01.2018 at 01:42.]
|
Written on: 07. 01. 2018 [09:55]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"walhi" wrote:
Столкнулся с необычной проблемой при работе модуля Modbus. У меня в проекте с контроллера запрашивается 8 параметров с количеством регистром от 8 до 180 штук различных типов. При значении параметра "Максимальный размер блока запроса (байты)" более 42 начинаются ошибки CRC.
Это непонимание назначения этого параметра и соответственно физических ограничений Вашего ПЛК.
Вообще там уже столько диагностики, как минимум три, что можно открыть любую и увидеть, что это Ваш ПЛК не шлёт PDU более 40 или шлёт его частями с разрывом по времени более трёх времени символа.
"walhi" wrote:
Параметры соединения: 9600, 8N1. При увеличении скорости до 38400 стабильно работать начинает на 36 байтах. Точно такое-же поведение и с эмулятором diagslave. При этом утилита modpoll отлично работает с большими запросами, что отметает проблемы с конверторами и, скорее всего, с контроллером.
И эта проблема конечно в модуле, который используется уже наверно с сотнями ПЛК!? :)
Про настройку таймаутов.
Похожее.
Learn, learn and learn better than work, work and work.
|
Written on: 07. 01. 2018 [12:49]
|
walhi
Sergey Karpesh
Topic creator
registered since: 26.01.2016
Posts: 29
|
Я и не говорил, что виноват модуль OpenSCADA.
"roman" wrote:
Ваш ПЛК не шлёт PDU более 40 или шлёт его частями с разрывом по времени более трёх времени символа.
В том то и дело, что я полностью понимаю как работает контроллер, так как являюсь его разработчиком.
Проверил на логическом анализаторе отсутствие задержек более 3 символов. Однако при опросе через OpenSCADA у меня получались различные сигналы на линиях A и B, что весьма забавно. Выходит, что накладывались ответ и новый запрос.
Решилось все довольно просто. Я пропустил слово "символ" в документации и изменял только время всего пакета. Спасибо за подсказку.
Может ввести для устройств /dev/ttyUSB* коэффициент при автоматическом расчете таймингов? Тогда подобных вопросов возникать будет меньше.
|
Written on: 14. 01. 2018 [08:45]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"walhi" wrote:
Может ввести для устройств /dev/ttyUSB* коэффициент при автоматическом расчете таймингов? Тогда подобных вопросов возникать будет меньше.
Скорее для всего, что нелокальное (/dev/ttyS{N}), что и добавил с коэффициентом 3.
Походу добавил и механизм измерения максимального времени символа в исходящем транспорте.
Learn, learn and learn better than work, work and work.
|