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
Как видно формат кадра влияет на время обновления данных, но не сильно. Значительно влияет скорость передачи данных, но в нашем примере мы передаём максимальное количество регистров, в реальных проектах этот фактор может быть не столь значителен. Сильнее всего на скорость обновления данных влияет количество ведомых устройств.
ссылка на оригинал статьи https://habr.com/ru/post/499922/
Добавить комментарий