Перейти к содержанию

Modbus RTU мастер в браузере

Подключите адаптер USB-RS485 и опрашивайте приборы Modbus RTU прямо со страницы: функции 01–06, 15 и 16, разовый запрос или циклический опрос, таблица значений, журнал кадров со временем, счётчики таймаутов, ошибок CRC и исключений. Программы ставить не нужно, данные не уходят дальше вашего браузера.

Порт

Параметры порта

8E1: символ 11 бит, 572,9 мкс; t1,5 = 859,4 мкс, t3,5 = 2,005 мс

Не подключён

Запрос

Параметры запроса

1–247; 0 — всем (только запись)

номера 40001–40010 (400001–400010)

1–125

мс

от конца запроса; обычно от 1 с при 9600 бод

Режим
Кадр запроса
01 03 00 00 00 0A C5 CD8 байт, 4,583 мс на линии
Ожидаемый ответ
25 байт14,32 мс на линии; исключение — 5 байт

Сначала подключитесь к порту.

Счётчики

Запросов

0

Ответов

0

Исключений

0

Таймаутов

0

Ошибок CRC

0

Прочих ошибок

0

Запросов ещё не было.

Журнал кадров

Подключите адаптер USB-RS485, нажмите «Подключиться» и выберите его порт.

Время — момент, когда браузер получил данные от адаптера: USB-адаптеры отдают байты пачками, поэтому паузы внутри кадра отсюда не видны.

Расчёт выполнен по формулам и данным из источников, приведённых на этой странице, и не заменяет проверку: параметры компонентов у разных производителей и даже партий различаются. Перед применением сверяйте результат с документацией на конкретные детали.

Мастер 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, в линии всегда не больше одного запроса.

Как пользоваться

  1. Подключите адаптер USB-RS485 к линии: D1 к D1, D0 к D0 и общий провод. Почему буквы A и B на клеммах разных приборов не всегда совпадают — в статье RS-485.
  2. Выставьте параметры порта как в приборе. По руководству Modbus по умолчанию — 19 200 бит/с, 8 бит данных, чётность even и один стоп-бит (8E1); на практике часто встречаются 9600 бит/с и 8N1. Под полями видно, сколько бит в символе и чему равны паузы t1,5 и t3,5.
  3. Нажмите «Подключиться» и выберите порт адаптера. Если порт не открывается, чаще всего его держит другая программа: терминал, OPC-сервер, SCADA.
  4. Задайте запрос: адрес устройства (1–247), функцию, начальный адрес и количество. Адрес вводится так, как он идёт в кадре, — с нуля, десятичным числом или в виде 0x006B; под полем показаны номера тех же элементов в нотации Modicon: 40001, 30001 и так далее.
  5. Отправьте запрос или запустите циклический опрос. Значения появятся в таблице, каждый кадр — в журнале со временем, итоги — в счётчиках. Журнал сохраняется в текстовый файл.

Состояние формы хранится в адресе страницы: ссылкой на настроенный опрос можно поделиться. Отметка «Разрешить запись в устройство» в ссылку не попадает и действует только для того кадра, для которого её поставили.

БраузерWeb Serial
Chrome, Edgeс версии 89
Operaс версии 75
Firefoxс версии 151
Chrome для Androidс версии 148
Safariнет

Как считается

Длина ответа. Мастер заранее знает, сколько байт должно прийти. Ответ на чтение — адрес, код функции, счётчик байт, данные и два байта CRC; для q регистров (функции 03 и 04) и q битов (функции 01 и 02):

N03, 04=5+2q,N01, 02=5+⌈q8⌉N_{03,\,04} = 5 + 2q, \qquad N_{01,\,02} = 5 + \left\lceil \frac{q}{8} \right\rceil

Ответ на запись всегда занимает 8 байт: функции 05 и 06 повторяют запрос, 15 и 16 возвращают начальный адрес и количество. Ответ с исключением — 5 байт: адрес, код функции плюс 0x80, код исключения и CRC. Самые длинные ответы — на чтение 125 регистров или 2000 битов: 255 байт, в пределах 256 байт кадра RTU.

Паузы. Символ на линии — старт-бит, 8 бит данных, бит чётности, если он есть, и стоп-биты. При скорости v бит/с и n битах в символе

tсимв=nv,t1,5=1,5⋅tсимв,t3,5=3,5⋅tсимвt_\text{симв} = \frac{n}{v}, \qquad t_{1,5} = 1{,}5 \cdot t_\text{симв}, \qquad t_{3,5} = 3{,}5 \cdot t_\text{симв}

до 19 200 бит/с включительно; выше руководство рекомендует постоянные t1,5 = 750 мкс и t3,5 = 1,750 мс. В форматах 8E1, 8O1 и 8N2 символ — 11 бит, как требует руководство; в 8N1 — 10 бит, и мастер считает паузы по фактическому символу.

Таймаут. Стандарт Web Serial разрешает операционной системе сообщить о завершении записи, когда байты только поставлены в очередь на передачу. Поэтому мастер отсчитывает таймаут не от вызова записи, а от расчётного конца запроса на линии:

Tожид=tзаписи+Nзапроса⋅nv+TтаймаутT_\text{ожид} = t_\text{записи} + \frac{N_\text{запроса} \cdot n}{v} + T_\text{таймаут}

С первым байтом ответа нужного прибора таймаут ответа по руководству останавливается. Остаток кадра идёт со скоростью линии, поэтому после каждой порции мастер ждёт время передачи недостающих байтов плюс тот же таймаут:

Tожид=tпорции+Nост⋅nv+TтаймаутT_\text{ожид} = t_\text{порции} + \frac{N_\text{ост} \cdot n}{v} + T_\text{таймаут}

Так длинный ответ на медленной линии не обрывается: 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:

  1. Запрос. Адрес в кадре на единицу меньше номера регистра: 108 − 1 = 107 = 0x006B, количество — 3. Мастер отправит 11 03 00 6B 00 03 76 87 — 8 байт, 9,17 мс на линии; в нотации Modicon это регистры 40108–40110.
  2. Ожидание. Ответ должен занять 5 + 2 · 3 = 11 байт, исключение — 5 байт.
  3. Ответ 11 03 06 02 2B 00 00 00 64 C8 BA: адрес 0x11 и функция 0x03 совпали, счётчик байт 0x06, CRC верна. Значения — 0x022B = 555, 0x0000 = 0 и 0x0064 = 100, как в спецификации.
  4. Исключение. Если регистров 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, 8E1t3,5, 8N1Запрос, 8E1Ответ, 8E1Обмен, 8E1
96004,01 мс3,65 мс9,17 мс28,6 мс45,8 мс
19 2002,005 мс1,82 мс4,58 мс14,3 мс22,9 мс
38 4001,75 мс1,75 мс2,29 мс7,16 мс13,0 мс
57 6001,75 мс1,75 мс1,53 мс4,77 мс9,80 мс
115 2001,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 мастер примет за эхо и покажет таймаут, хотя запись выполнена, — тогда выключите настройку и проверьте значение чтением.

Источники

  1. 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, таблица кодов исключений
  2. 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 двухпроводной линии
  3. 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
  4. 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>

Обновлено .

Нашли ошибку в расчёте?