Modbus всё ещё остаётся самым распространённым протоколом связи промышленного оборудования. Описание протокола и причины его распространённости можно найти во множестве статей, например тут. Далее подразумевается, что вы знакомы с основами работы протокола.
Мы будем рассматривать Modbus RTU, но полученные выводы будут частично применимы и к Modbus TCP.
Чтобы рассчитать скорость, начнём с рассмотрения физического протокола (1й уровень модели OSI). Modbus RTU использует физический интерфейс RS-485, RS-422 или RS-232(последний практически не используется для Modbus). Для передачи сигнала данные интерфейсы используют UART (Universal Asynchronous Receiver-Transmitter). Подробнее про UART можно прочитать тут.
Стандартная посылка UART состоит из:
- стартовый бит () 1 бит
- полезные данные () 7-8 бит
- бит чётности () 0-1 бит
- стоповый бит () 1-2 бит
То есть на каждые 7-8 бит полезных данных передается 2-4 вспомогательных бита. Скорость передачи полезных данных () будет ниже скорости работы интерфейса (). Вычислить можно по формуле:
Далее необходимо разобраться как Modbus мастер общается с подчинёнными устройствами на канальном уровне (2й уровень модели OSI). В силу особенности физического интерфейса устройства подключенные к линии передают данные последовательно, то есть только одно устройство в текущий момент времени может слать данные. Из-за этого общение мастера с подчинёнными устройствами происходит циклически, последовательно читая и записывая регистры в подчиненные устройства. Полный цикл чтения регистров из подчиненного устройства будет выглядеть следующим образом:
- задержка (минимум 3.5 символа = 28 бит, ниже пересчитаем в секунды)
- передача запроса на чтение (8 байт)
- задержка ответа ведомого устройства (минимум 28 бит, часто это десятки миллисекунд на формирование ответной посылки)
- передача ведомым устройством ответной посылки (максимум 256 байт для Modbus RTU).
Некоторые инженеры выбирают четырехпроводную версию интерфейса, надеясь на ускорение передачи (подразумевая параллельную пересылку данных на приём и передачу). Очевидно это решение не работает. Последовательность посылки данных будет одинаковой для 2х и 4х — проводных линий.
Рассчитаем время, затрачиваемое на полный цикл чтения 125ти holding registers (максимальное количество для Modbus RTU) при следующих параметрах линии:
Формат кадра: 8N1 (8 data bit, no parity bit, 1 stop bit)
Скорость uart: = 19200 bit/s
Скорость передачи полезных данных: = 15360 bit/s
Задержка мастера: = 28 bit / (это минимально допустимая задержка, обычно больше)
Задержка ответа ведомого устройства: = 0.04 s (значение зависит от ведомого устройства)
Посылка с запросом 125ти holding registers: 8 byte или 64 bit
Ответ со 125ю holding registers: 256 byte или 2048 bit
Формула для расчёта времени цикла чтения:
Последовательность на запись регистров практически идентична. Размер посылки мастера будет больше, т.к. включает в себя информацию о записываемых регистрах. Подтверждение удачной записи от ведомого устройства будет 8 байт.
По спецификации Modbus к линии RS-485/422 можно подключить 32 ведомых устройства. Опрос ведомых устройств так же ведётся последовательно, обычно по кругу. Чтобы понять с какой скорость будут обновляться данные от ведомых устройств, надо умножить на Назовем это полным временем обновления .
Несколько расчётов (читаем и записываем максимальное количество holding registers) при различных параметрах связи:
Формат кадра: 8N1, = 19200 bit/s, Количество ведомых устройств, = 16
= 5.727 s
Формат кадра: 8N1, = 9600 bit/s, Количество ведомых устройств, = 16
= 10.173 s
Формат кадра: 7E1, = 19200 bit/s, Количество ведомых устройств, = 16
= 6.355 s
Формат кадра: 8N1, = 19200 bit/s, Количество ведомых устройств, = 2
= 0.716 s
Как видно формат кадра влияет на время обновления данных, но не сильно. Значительно влияет скорость передачи данных, но в нашем примере мы передаём максимальное количество регистров, в реальных проектах этот фактор может быть не столь значителен. Сильнее всего на скорость обновления данных влияет количество ведомых устройств.
Для упрощения расчётов мы сделали web приложение для оценочного расчета времени обновления данных по Modbus
Sun-ami
Непонятно, почему до сих пор для Modbus используют скорости 9600 и 19200 бит/с, в то время как RS-485 даже на максимальной длине линии 1200 м может работать на скорости 62500 бит/с (а реально на UTP-5 работает и на 115200)? И почему нормальной для ведомого устройства считается такая большая задержка ответа, 40мс, в то время как в современных микроконтроллерах достаточно легко обеспечить задержку не более 1мс?
Siemargl
Потому что на практике — в рабочих условиях на высокой скорости, либо при больших пакетах (уже от 60 байт) не работает — частая ошибка CRC.
Mitya78
Не знаю в каких условиях вы использовали такие скорости на такой дальности, но у нас, на двух частотниках в шкафу, приходилось сбрасывать скорость до 9600. Иначе помехи при включении движков.
И что угодно можно делать — заземлять, экранировать...
fooz Автор
Потому что Modbus это дешёвый инструмент, который решает задачу. Всем понятный и всеми поддерживаемый. Проблема в том, что у каждого производителя целый зоопарк проприетарных протоколов.
С другой стороны интерфейсные лини обычно не используются в критически важных процессах. Например, обновлять температуру жидкости в цистерне с задержкой в 1мс нет никакой необходимости. Соответственно экономят там, где можно.
Но не всё так плохо, есть, например IEC 61850 с его peer-to-peer GOOSE сообщениями с гарантированной доставкой в 4мс.
indoor
GOOSE — это широковещательный протокол по модели Publusher-Subscriber, без гарантированной доставки сообщений. Надежность доставки достигается за счет многократных повторений посылки. Стандартом IEC 61850-5 определяются несколько классов производительности. Для наиболее критических сообщений — отключение электроустановки действием защиты — определен класс P1, с временем доставки сообщения <= 3 мс, без учета возможной потери пакета.
Siemargl
Поверх Эзернета — не смешите мою бабушку. Надежность. Ха
Там как бы не в стандарте прописана оптика
lingvo
Поверх Езернета, да. И еще PRP используется. В чем проблема с надежностью?
Siemargl
Порты горят
lingvo
Потому, что эти скорости передачи заданы в стандарте. Другие скорости опциональны и поэтому могут поддерживаться не всеми устройствами.
Indemsys
Всегда работаю по MODBUS на скрости 115200. С частотными преобразователями для двигателей.
С циклом управления 20 мс.
Скорость MODBUS точно рассчитать невозможно.
На каждую команду и на доступ к определенным группам данных у слэйвов отдельно специфицируются таймауты реакции.
Например, одно дело записать в рабочий регистр, а другое в NV регистр.
Поэтому если требуется жесткий риалтайм, то надо непосредственно в софте мастера реализовывать измеритель таймаутов, кторый нужен для экспериментального подбора состава пакетов и организации их отправки.
Из-за такого запоздалого квитирования MODBUS не рекомендуют для управления движущимися объектами (но я нарушаю рекомендацию).
Лучший выбор будет CAN, где квитирование сразу во время передачи пакета слэйвам, и EtherCAT где квитирование мгновенное и сразу от всех слэйвов.