EnglishУкраїнськаmRussian
Login/New
Topic with no new replies

Ошибки CRC в Modbus при запросах более N байт


Author Message
Written on: 07. 01. 2018 [01:13]
walhi
Sergey Karpesh
Topic creator
registered since: 26.01.2016
Posts: 28
Доброго времени суток!

Версия 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: 3742
"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: 28
Я и не говорил, что виноват модуль 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: 3742
"walhi" wrote:

Может ввести для устройств /dev/ttyUSB* коэффициент при автоматическом расчете таймингов? Тогда подобных вопросов возникать будет меньше.

Скорее для всего, что нелокальное (/dev/ttyS{N}), что и добавил с коэффициентом 3.
Походу добавил и механизм измерения максимального времени символа в исходящем транспорте.

Learn, learn and learn better than work, work and work.



4560