Мастер Modbus RTU работает через Web Serial — стандарт WHATWG, который даёт странице доступ к последовательному порту с разрешения пользователя. Страница видит только порт, выбранный вами в окне браузера, и только пока она открыта. Запросы формируются и ответы разбираются в браузере: на сервер ничего не отправляется.
На шине Modbus один ведущий (master) и до 247 ведомых: обмен всегда начинает ведущий, ведомый с указанным адресом отвечает. Этот инструмент и есть ведущий. Как устроены кадр, функции и паузы — в статье «Протокол Modbus RTU»; собрать отдельный кадр или разобрать байты из сниффера можно в калькуляторе кадров Modbus RTU.
Коротко
- Функции: чтение 01–04 и запись 05, 06, 15, 16; запись — только после явной отметки.
- Режимы: один запрос или циклический опрос с заданным периодом.
- Значения: uint16, int16, HEX и BIN, пары регистров как float32, uint32 и int32 в обоих порядках слов.
- Счётчики: запросы, ответы, таймауты, ошибки CRC, исключения с расшифровкой кодов.
- Паузы: между кадрами не меньше t3,5, в линии всегда не больше одного запроса.
Как пользоваться
- Подключите адаптер USB-RS485 к линии: D1 к D1, D0 к D0 и общий провод. Почему буквы A и B на клеммах разных приборов не всегда совпадают — в статье RS-485.
- Выставьте параметры порта как в приборе. По руководству Modbus по умолчанию — 19 200 бит/с, 8 бит данных, чётность even и один стоп-бит (8E1); на практике часто встречаются 9600 бит/с и 8N1. Под полями видно, сколько бит в символе и чему равны паузы t1,5 и t3,5.
- Нажмите «Подключиться» и выберите порт адаптера. Если порт не открывается, чаще всего его держит другая программа: терминал, OPC-сервер, SCADA.
- Задайте запрос: адрес устройства (1–247), функцию, начальный адрес и количество. Адрес вводится так, как он идёт в кадре, — с нуля, десятичным числом или в виде 0x006B; под полем показаны номера тех же элементов в нотации Modicon: 40001, 30001 и так далее.
- Отправьте запрос или запустите циклический опрос. Значения появятся в таблице, каждый кадр — в журнале со временем, итоги — в счётчиках. Журнал сохраняется в текстовый файл.
Состояние формы хранится в адресе страницы: ссылкой на настроенный опрос можно поделиться. Отметка «Разрешить запись в устройство» в ссылку не попадает и действует только для того кадра, для которого её поставили.
| Браузер | Web Serial |
|---|---|
| Chrome, Edge | с версии 89 |
| Opera | с версии 75 |
| Firefox | с версии 151 |
| Chrome для Android | с версии 148 |
| Safari | нет |
Как считается
Длина ответа. Мастер заранее знает, сколько байт должно прийти. Ответ на чтение — адрес, код функции, счётчик байт, данные и два байта CRC; для q регистров (функции 03 и 04) и q битов (функции 01 и 02):
Ответ на запись всегда занимает 8 байт: функции 05 и 06 повторяют запрос, 15 и 16 возвращают начальный адрес и количество. Ответ с исключением — 5 байт: адрес, код функции плюс 0x80, код исключения и CRC. Самые длинные ответы — на чтение 125 регистров или 2000 битов: 255 байт, в пределах 256 байт кадра RTU.
Паузы. Символ на линии — старт-бит, 8 бит данных, бит чётности, если он есть, и стоп-биты. При скорости v бит/с и n битах в символе
до 19 200 бит/с включительно; выше руководство рекомендует постоянные t1,5 = 750 мкс и t3,5 = 1,750 мс. В форматах 8E1, 8O1 и 8N2 символ — 11 бит, как требует руководство; в 8N1 — 10 бит, и мастер считает паузы по фактическому символу.
Таймаут. Стандарт Web Serial разрешает операционной системе сообщить о завершении записи, когда байты только поставлены в очередь на передачу. Поэтому мастер отсчитывает таймаут не от вызова записи, а от расчётного конца запроса на линии:
С первым байтом ответа нужного прибора таймаут ответа по руководству останавливается. Остаток кадра идёт со скоростью линии, поэтому после каждой порции мастер ждёт время передачи недостающих байтов плюс тот же таймаут:
Так длинный ответ на медленной линии не обрывается: 255 байт при 1200 бит/с и 11 битах в символе идут по линии 2,34 с — дольше таймаута по умолчанию в 1 с.
Очередь запросов. Следующий запрос уходит не раньше, чем пройдут обе границы: t3,5 тишины после последнего байта на линии и период опроса от начала предыдущего запроса. Пока запрос не получил ответа и таймаут не истёк, новый не отправляется: на шине Modbus в каждый момент идёт одна транзакция.
Разбор ответа. Кадр собирается из порций, которые отдаёт браузер, и оценивается по мере поступления байтов:
| Итог | Признак | Что делать |
|---|---|---|
| Ответ | адрес и функция совпали, длина и CRC верны, поля сходятся с запросом | значения — в таблице |
| Исключение | код функции плюс 0x80, 5 байт, CRC верна | связь исправна; причина — в коде исключения |
| Ошибка CRC | кадр нужной длины с неверной CRC | помехи, терминаторы, формат; запрос можно повторить |
| Чужой адрес | до конца таймаута пришли только кадры других устройств или байты без нужного адреса | второй ведущий на линии, ответ другого прибора или помеха |
| Чужая функция | код функции не тот, что в запросе | опоздавший ответ на другой запрос |
| Не совпало | CRC верна, но счётчик байт, адрес или значение другие | прибор понял запрос иначе |
| Оборван | ответ начался, но остаток кадра не пришёл за время его передачи плюс таймаут | обрыв линии, помеха, прибор прервал передачу |
| Ошибка линии | пока ждали ответа, порт сообщил об ошибке чётности, стоп-бита, переполнении буфера или BREAK | формат порта не совпадает с прибором или помехи; байты, на которых случилась ошибка, порт не отдаёт |
| Таймаут | за время ожидания не пришло ни байта | скорость, чётность, адрес, провода |
Байты, пришедшие вне транзакции, считаются отдельно: обычно это ответ, опоздавший после таймаута, или помеха. Кадр другого устройства с верной CRC и одиночные байты помехи перед ответом мастер пропускает и ждёт дальше: по руководству ответ чужого устройства не останавливает таймаут. Если нужный прибор ответил, пропущенные перед его ответом байты попадают в счётчик байт вне транзакций; если не ответил до конца таймаута, обмен завершается итогом «Чужой адрес».
Пример: регистры 108–110
Спецификация Modbus разбирает чтение регистров хранения 108–110. Пусть прибор имеет адрес 17, линия — 9600 бит/с, 8E1:
- Запрос. Адрес в кадре на единицу меньше номера регистра: 108 − 1 = 107 = 0x006B, количество — 3. Мастер отправит
11 03 00 6B 00 03 76 87— 8 байт, 9,17 мс на линии; в нотации Modicon это регистры 40108–40110. - Ожидание. Ответ должен занять 5 + 2 · 3 = 11 байт, исключение — 5 байт.
- Ответ
11 03 06 02 2B 00 00 00 64 C8 BA: адрес 0x11 и функция 0x03 совпали, счётчик байт 0x06, CRC верна. Значения — 0x022B = 555, 0x0000 = 0 и 0x0064 = 100, как в спецификации. - Исключение. Если регистров 108–110 в приборе нет, он ответит
11 83 02 C1 34— исключение 02, недопустимый адрес данных.
Без учёта времени обработки прибором один такой обмен занимает не меньше 9,17 + 4,01 + 12,6 + 4,01 = 29,8 мс: запрос, пауза t3,5, ответ из 11 символов и ещё одна пауза перед следующим запросом.
Типичные значения
Паузы и длительность обмена при чтении 10 регистров (запрос — 8 байт, ответ — 25 байт), без времени обработки в приборе:
| Скорость, бит/с | t3,5, 8E1 | t3,5, 8N1 | Запрос, 8E1 | Ответ, 8E1 | Обмен, 8E1 |
|---|---|---|---|---|---|
| 9600 | 4,01 мс | 3,65 мс | 9,17 мс | 28,6 мс | 45,8 мс |
| 19 200 | 2,005 мс | 1,82 мс | 4,58 мс | 14,3 мс | 22,9 мс |
| 38 400 | 1,75 мс | 1,75 мс | 2,29 мс | 7,16 мс | 13,0 мс |
| 57 600 | 1,75 мс | 1,75 мс | 1,53 мс | 4,77 мс | 9,80 мс |
| 115 200 | 1,75 мс | 1,75 мс | 0,76 мс | 2,39 мс | 6,65 мс |
Через USB-адаптер реальный цикл длиннее: адаптер передаёт принятые байты компьютеру пачками, с задержкой, которая зависит от микросхемы адаптера и драйвера, а прибору ещё нужно время на обработку запроса.
Ограничения и типичные ошибки
- Паузы внутри кадра не видны. Браузер получает байты порциями от драйвера адаптера, время порции — это момент, когда она дошла до страницы. Паузу t1,5 (750 мкс на высоких скоростях) так не измерить, поэтому мастер выделяет кадр по его длине, а не по тишине.
- Номер или адрес. Регистр 40001 — это адрес 0. Если прибор отвечает исключением 02 или значения сдвинуты на один регистр, проверьте, не введён ли номер вместо адреса.
- Слишком короткий таймаут. Опоздавший ответ приходит, когда мастер уже отправил следующий запрос: он попадает в счётчик «вне транзакций» или ломает следующий обмен.
- Второй ведущий на линии. Если по той же шине уже опрашивает контроллер или панель, запросы браузера будут сталкиваться с его запросами: на линии Modbus один ведущий.
- Формат кадра. Без чётности руководство требует два стоп-бита (8N2), но многие приборы настроены на 8N1. Формат должен совпадать у всех устройств линии; 7 бит данных режим RTU не допускает, поэтому их здесь нет.
- Эхо адаптера. Некоторые адаптеры RS-485 возвращают в порт собственную передачу — для них есть настройка «Эхо адаптера». Для адаптера без эха её не включайте: ответ на 05 и 06 совпадает с запросом, мастер примет его за эхо и покажет таймаут, хотя запись выполнена.
- Фоновая вкладка. Браузер может замедлять таймеры неактивных вкладок, и опрос в фоне пойдёт реже заданного периода.
Связанные инструменты: терминал COM-порта — посмотреть сырые байты без разбора, калькулятор кадра UART — бит за битом и допуск по скорости, калькулятор CRC — CRC-16/MODBUS для любых данных.
Частые вопросы
Как опросить прибор Modbus RTU через браузер?
Нужны адаптер USB-RS485 и браузер с Web Serial: Chrome и Edge с версии 89, Opera с 75, Firefox с 151 или Chrome для Android с 148. Соедините линии D1, D0 и общий провод адаптера и прибора, выставьте скорость и чётность как в приборе (по руководству Modbus по умолчанию 19 200 бит/с и 8E1), укажите адрес устройства, функцию 03 и диапазон регистров. Нажмите «Подключиться», выберите порт адаптера и отправьте запрос: значения появятся в таблице, а кадры — в журнале.
Что означают таймаут, ошибка CRC и исключение в журнале мастера?
Таймаут — за заданное время не пришло ни байта: прибор не получил запрос или отбросил его из-за ошибки CRC или чётности, а на такие кадры ответа нет. Ошибка CRC — ответ пришёл, но искажён: помехи, нет терминаторов, несовпадение формата. Исключение — связь исправна, прибор ответил кадром из 5 байт с кодом функции плюс 0x80: 01 — функция не поддерживается, 02 — нет такого адреса, 03 — недопустимое значение или количество.
Какой таймаут ответа и период опроса выбрать?
Руководство Modbus называет типичный таймаут от 1 с до нескольких секунд при 9600 бит/с и паузу после широковещательного запроса 100–200 мс. Таймаут должен покрывать самую долгую обработку запроса прибором. Период опроса не может быть короче самого обмена: чтение трёх регистров при 9600 бит/с в формате 8E1 занимает не меньше 29,8 мс вместе с двумя паузами t3,5, а через USB-адаптер — ещё дольше.
Можно ли случайно записать что-то в прибор?
Функции записи 05, 06, 15 и 16 уходят только после отметки «Разрешить запись в устройство»; отметка не сохраняется в ссылке и снимается при любом изменении формы и при переподключении порта — даже если запрос потом вернули к тем же байтам. Циклический опрос доступен только для чтения: каждая запись — отдельное нажатие кнопки. Запись меняет уставки и состояния выходов прибора, а широковещательную запись на адрес 0 выполнят все устройства на линии без подтверждения.
Что делать, если адаптер RS-485 возвращает эхо запроса?
Включите «Эхо адаптера»: мастер пропустит копию запроса и будет разбирать то, что придёт после неё. Без этой настройки ответ на чтение начинается с копии запроса, и мастер сообщит об ошибке CRC с подсказкой про эхо. Для функций 05 и 06 нормальный ответ совпадает с запросом байт в байт, поэтому эхо без настройки выглядело бы как успешная запись даже без прибора на линии. Обратная ошибка тоже возможна: если настройка включена, а адаптер эха не даёт, ответ на 05 или 06 мастер примет за эхо и покажет таймаут, хотя запись выполнена, — тогда выключите настройку и проверьте значение чтением.
Источники
- Modbus Organization. MODBUS Application Protocol Specification V1.1b3, 2012 — разд. 6.1–6.6, 6.11 и 6.12 — запросы и ответы функций 01–06, 15 и 16, пределы количества (до 2000 битов и 125 регистров на чтение, 1968 выходов и 123 регистра на запись) и примеры: регистры 108–110 (ответ 02 2B 00 00 00 64 — это 555, 0 и 100), выходы 20–38, входы 197–218, входной регистр 9, запись выхода 173 и регистров 2–3; разд. 7 — ответ с исключением: код функции плюс 0x80 и код исключения, пример 81 02, таблица кодов исключений
- Modbus Organization. MODBUS over Serial Line Specification and Implementation Guide V1.02, 2006 — разд. 2.1 — одна транзакция за раз, широковещательные запросы только на запись и без ответа; 2.2 — адреса 1–247, 0 — широковещательный; 2.4.1 — диаграмма состояний ведущего: таймаут ответа (обычно от 1 с при 9600 бит/с) останавливается с приёмом ответа нужного устройства и продолжает идти при ответе чужого, пауза после широковещательного запроса (обычно 100–200 мс), ошибка кадра — ошибка чётности символа или CRC кадра, повтор после неё; 2.5.1 — символ из 11 бит, без чётности — два стоп-бита, чётность по умолчанию even, кадр не длиннее 256 байт; 2.5.1.1 — паузы t1,5 и t3,5, выше 19 200 бит/с — 750 мкс и 1,750 мс; 2.5.1.2 — CRC младшим байтом вперёд; 3.2 — обязательны 9600 и 19 200 бит/с, по умолчанию 19 200; 3.3.2 — цепи D1, D0 и Common двухпроводной линии
- WHATWG. WebSerial Standard, Living Standard (обновлён 8 октября 2026) — разд. 4.4 — SerialOptions: dataBits 7 или 8, stopBits 1 или 2, parity none, even или odd; разд. 4.6 — ошибки чтения ParityError, FramingError, BreakError, BufferOverrunError, отключение — NetworkError; байты чтения с ошибкой странице не передаются, после нефатальной ошибки readable отдаёт новый поток; разд. 4.7 — операционная система может сообщить о завершении записи, когда байты только поставлены в очередь на передачу; разд. 6.1 — функция политики разрешений serial
- MDN. browser-compat-data: api/Serial.json (коммит 1d670c0, 8 октября 2026) — Serial — Chrome с версии 89, Edge и Opera — по Chrome: по browsers/edge.json и browsers/opera.json того же коммита движок Blink 89 у Edge 89 и Opera 75; Firefox с версии 151, Chrome для Android с версии 148; Safari и Android WebView — нет
Встроить калькулятор на свой сайт
Скопируйте код и вставьте его в HTML страницы, статьи или вики. Виджет бесплатный, без рекламы, счётчиков и cookie. Условие одно — ссылка на GAW под рамкой остаётся на месте. Подробнее о виджетах
<iframe src="https://gaw.ru/embed/modbus-master/" title="Modbus RTU мастер в браузере" width="100%" height="640" style="border:1px solid #e3e5e9;border-radius:8px" loading="lazy" allow="clipboard-write; serial"></iframe>
<p style="margin:6px 0 0;font-size:14px">Калькулятор: <a href="https://gaw.ru/tools/modbus-master/">Modbus RTU мастер в браузере</a> — GAW.ru</p>Автоподстройка высоты рамки
Если сайт разрешает скрипты, добавьте этот код один раз в любом месте страницы: рамка будет менять высоту вместе с результатом расчёта.
<script>window.addEventListener("message",function(e){if(e.origin!=="https://gaw.ru"||!e.data||e.data.type!=="gaw:embed-height")return;var f=document.querySelectorAll('iframe[src^="https://gaw.ru/embed/"]');for(var i=0;i<f.length;i++)if(f[i].contentWindow===e.source)f[i].style.height=e.data.height+"px"})</script>Обновлено .
Нашли ошибку в расчёте?