Модбус
Протокол связи | |
Разработчик(и) |
|
---|---|
Введение | 1979 |
Modbus или MODBUS — это протокол передачи данных клиент/сервер на прикладном уровне . [1] Первоначально он был разработан для использования с программируемыми логическими контроллерами (ПЛК). [2] но стал де-факто стандартным протоколом связи для связи между промышленными электронными устройствами в широком диапазоне шин и сетей. [3] [1]
Modbus популярен в промышленных средах, поскольку он публикуется открыто и не требует лицензионных отчислений . Он был разработан для промышленных приложений, относительно прост в развертывании и обслуживании по сравнению с другими стандартами и накладывает мало ограничений на формат передаваемых данных.
Протокол Modbus использует последовательные линии связи , Ethernet или набор интернет-протоколов в качестве транспортного уровня. [1] Modbus поддерживает связь между несколькими устройствами, подключенными к одному кабелю или сети Ethernet. Например, может быть устройство, измеряющее температуру, и другое устройство, измеряющее влажность, подключенное к одному и тому же кабелю, и оба устройства передают результаты измерений на один и тот же компьютер через Modbus.
Modbus часто используется для соединения компьютера управления предприятием/системой с удаленным терминальным устройством диспетчерского управления и сбора данных ( SCADA (RTU) в системах ). Многие типы данных названы в честь промышленного управления заводскими устройствами, например, релейная логика , из-за ее использования в управляющих реле: однобитовый физический выход называется катушкой , а однобитовый физический вход называется дискретным входом или дискретным входом. контакт .
Первоначально он был опубликован Modicon в 1979 году. Компания была приобретена Schneider Electric в 1997 году. В 2004 году они передали права Modbus Organization. [4] которая является торговой ассоциацией пользователей и поставщиков устройств, совместимых с Modbus, которая выступает за дальнейшее использование этой технологии. [5]
Описание протокола
[ редактировать ]
Стандарты или шины Modbus включают: [1]
- TCP/IP через Ethernet
- Асинхронная последовательная связь в широком диапазоне стандартов и технологий: EIA/TIA-232-E, EIA-422, EIA/TIA-485-A, оптоволокно, радиочастота,...
- MODBUS PLUS, высокоскоростная сеть передачи токенов.

Для поддержки связи Modbus в сети многие модемы и шлюзы имеют собственные конструкции (см. схему: Архитектура сети для связи Modbus ). Реализации могут использовать как проводную, так и беспроводную связь, например, в радиодиапазоне ISM , и даже службу коротких сообщений (SMS) или службу пакетной радиосвязи общего пользования (GPRS).
ПДУ и АДУ
[ редактировать ]Modbus определяет клиента , который является объектом, который инициирует транзакцию для запроса какой-либо конкретной задачи у своего «получателя запроса». [6] «Получатель запроса» клиента, с которым клиент инициировал транзакцию, тогда называется сервером . [6] Например, когда микроконтроллер (MCU) подключается к датчику для считывания его данных по Modbus в проводной сети, например, по шине RS485, MCU в этом контексте является клиентом, а датчик — сервером. В прежней терминологии клиент назывался главным, а сервер — подчиненным.
Modbus определяет блок данных протокола ( PDU ) независимо от протоколов нижнего уровня в своем стеке протоколов. Для сопоставления протокола MODBUS с конкретными шинами или сетью требуются некоторые дополнительные поля, которые определяются как блок данных приложения ( ADU ). ADU формируется клиентом внутри сети Modbus, когда клиент инициирует транзакцию. Содержание: [7]
- PDU = код функции + данные
- ADU = дополнительный адрес + PDU + проверка ошибок
официально называет ADU кадром Modbus . Организация Modbus [7] хотя кадр используется в качестве единицы данных на канальном уровне в моделях OSI и TCP/IP (в то время как Modbus является протоколом прикладного уровня).
Максимальный размер PDU — 253 байта. Максимальный размер ADU в сети RS232/RS485 составляет 256 байт, а в TCP — 260 байт. [8]
Для кодирования данных Modbus использует представление адресов и полей данных с обратным порядком байтов. Таким образом, для 16-битного значения первым отправляется старший байт. Например, если 16-битный регистр имеет значение 0x1234, байт 0x12 отправляется перед байтом 0x34. [8]
Код функции составляет 1 байт, который дает код функции для выполнения. Коды функций представляют собой целочисленные значения в диапазоне от 1 до 255, а диапазон от 128 до 255 предназначен для ответов об исключениях.
Поле данных PDU имеет адрес от 0 до 65535 (не путать с адресом поля Дополнительный адрес ADU). [9] Поле данных PDU может быть пустым и тогда иметь размер 0. В этом случае сервер не будет запрашивать какую-либо информацию, а код функции определяет функцию, которую необходимо выполнить. Если в процессе выполнения не возникло ошибок, поле данных ответа ADU от сервера клиенту будет включать запрошенные данные, т.е. данные, которые клиент ранее получил. В случае возникновения какой-либо ошибки сервер ответит кодом исключения. [6]
Транзакция Modbus и PDU
[ редактировать ]Транзакция Modbus между клиентом и сервером включает в себя: [6] [10]
- Шаг 1 : Клиент инициирует запрос с PDU = код функции + запрос данных.
- Шаг 2 : Сервер получает запрос от клиента. Затем сервер прочитает/анализирует код функции, получит адрес поля данных PDU, затем получит значение этого поля данных и, наконец, выполнит действие на основе кода функции. Если на этих шагах не возникло ошибок, сервер ответит PDU = код функции + ответ данных. Если на этих шагах не возникнет ошибок, ответный код функции сервера также будет кодом функции, отправленным от клиента. Если на этих этапах произойдет какая-либо ошибка, сервер ответит PDU = Код функции исключения + Код исключения (ссылка на PDU mb_excep_rsp_pdu, определенный ниже).
- Шаг 3 : Клиент получает ответ и завершает транзакцию.
Исходя из этого, Modbus определяет 3 типа PDU: [8]
- PDU запроса MODBUS, mb_req_pdu
- PDU ответа MODBUS, mb_rsp_pdu
- PDU ответа на исключение MODBUS, mb_excep_rsp_pdu
mb_req_pdu = код функции (1 байт) + данные запроса (n байт)
Размер поля данных запроса зависит от кода функции и обычно включает в себя такие значения, как значения переменных, смещение данных и коды подфункций. [8]
mb_rsp_pdu = код функции (1 байт) + данные ответа (n байт)
Как и в mb_req_pdu, размер поля данных ответа зависит от кода функции и обычно включает такие значения, как значения переменных, смещение данных и коды подфункций. [8]
mb_excep_rsp_pdu = Код функции исключения (1 байт) + код исключения (1 байт)
Исключение Код функции = Код функции (1 байт) + 0x80
Код функции исключения равен коду функции, за исключением того, что его старший бит установлен в 1.
Код исключения (1 байт) mb_excep_rsp_pdu определен в таблице « Коды исключений MODBUS ».
Модель данных Modbus
[ редактировать ]Modbus определяет свою модель данных на основе серии таблиц с четырьмя основными таблицами: [11]
Первичные таблицы | Доступ | Размер | Функции |
---|---|---|---|
Катушка (дискретный выход) [12] | Чтение-запись | 1 бит | Чтение/запись значения включения/выключения |
Дискретный вход | Только чтение | 1 бит | Чтение значения включения/выключения |
Входной регистр | Только чтение | 16 бит (0–65 535) | Чтение измерений и состояний |
Реестр хранения | Чтение-запись | 16 бит (0–65 535) | Чтение/запись значений конфигурации |
Код функции
[ редактировать ]Modbus определяет три типа функциональных кодов: общедоступные, определяемые пользователем и зарезервированные. [13]
Коды общедоступных функций
[ редактировать ]Тип функции | Имя функции | Код функции | Комментарий | ||
---|---|---|---|---|---|
Доступ к данным | Битовый доступ | Физические дискретные входы | Чтение дискретных входов | 2 | |
Внутренние биты или физические катушки | Читать катушки | 1 | |||
Запись сингла | 5 | ||||
Запись нескольких катушек | 15 | ||||
16-битный доступ | Физические входные регистры | Чтение входных регистров | 4 | ||
Внутренние регистры или физические выходные регистры | Чтение нескольких регистров временного хранения | 3 | |||
Запись единого регистра хранения | 6 | ||||
Запись нескольких регистров временного хранения | 16 | ||||
Чтение/запись нескольких регистров | 23 | ||||
Регистр записи маски | 22 | ||||
Чтение очереди FIFO | 24 | ||||
Доступ к записи файла | Чтение файловой записи | 20 | |||
Запись файловой записи | 21 | ||||
Диагностика | Чтение статуса исключения | 7 | только сериал | ||
Диагностика | 8 | только сериал | |||
Получить счетчик событий Com | 11 | только сериал | |||
Получить журнал событий Com | 12 | только сериал | |||
Идентификатор сервера отчетов | 17 | только сериал | |||
Чтение идентификации устройства | 43 | ||||
Другой | Транспорт инкапсулированного интерфейса | 43 |
Примечание . В некоторых источниках используется терминология, отличная от стандартной; например, Force Single Coil вместо Write Single Coil . [14]
Функциональный код 01 (считывание катушек) как пример общедоступного функционального кода.
[ редактировать ]Код функции 01 (чтение катушек) позволяет считывать состояние катушек от 1 до 2000 удаленного устройства. Тогда mb_req_pdu (PDU запроса) будет иметь 2 байта для указания адреса первой катушки для чтения (от 0x0000 до 0xFFFF) и 2 байта для указания количества катушек для чтения. mb_req_pdu определяет адрес катушки по индексу 0, т.е. первая катушка имеет адрес 0x0. mb_rsp_pdu (response PDU) – в случае успешного выполнения – имеет 1 байт для указания количества байтов, которое представляет собой количество катушек, требуемых mb_req_pdu , а левые байты хранят состояние (значение включения/выключения) этих запрошенных катушек. [15] В частности, mb_rsp_pdu и mb_rsp_pdu функционального кода 01: [15]
mb_req_pdu :
- Код функции: 0x01 (1 байт)
- Начальный адрес (адрес первой катушки для чтения): от 0x0000 до 0xFFFF (2 байта).
- Количество катушек для чтения: Диапазон от 1 до 2000 (0x7D0) (2 байта).
mb_rsp_pdu
- Код функции: 0x01 (1 байт)
- Количество байтов: 1 байт
- Статус катушки: n байт
Например, mb_req_pdu и mb_rsp_pdu для чтения статуса катушек от 20 до 38 будут: [16]
mb_req_pdu :
- Код функции: 0x01
- Старший байт начального адреса: 0x00
- Младший байт начального адреса: 0x13.
- Количество выходов Старший байт: 0x00
- Количество выходов Младший байт: 0x13
Начальный адрес (2 байта) — 0x0013 (или 19 в десятичном формате), что соответствует 20-й катушке.
Количество выходов (2 байта) равно 0x0013 (или 19 в десятичном формате), что соответствует 19 значениям состояния катушек с 20-й по 38-ю.
mb_rsp_pdu :
- Код функции: 0x01
- Количество байт: 0x03
- Статус выходов 27-20: 0xCD
- Статус выходов 35-28: 0x6B
- Статус выходов 38-36: 0x05
Поскольку требуется 19 катушек (20-38), для индикации состояния катушки используется 3 байта. Итак, количество байт равно 0x03. Состояния катушки с 20 по 27 — это 0xCD, что соответствует 1100 1101 в двоичном формате. Таким образом, катушка 27 — это старший бит, а катушка 20 — младший бит. То же самое для катушек с 28 по 35. Для катушек с 36 по 38 состояние будет 0x05, что равно 0000 0101. Состояние катушки 38 — это 3-й бит (отсчет справа), т.е. 1, катушка 37 — 0, а катушка 36. состояние — это младший бит, т.е. 1. Все 5 левых битов равны 0.
Коды функций, определяемые пользователем
[ редактировать ]Коды функций, определяемые пользователем, — это коды функций, определяемые пользователями. Modbus предоставляет два диапазона значений для кодов функций, определяемых пользователем: от 65 до 72 и от 100 до 110. Очевидно, что коды функций, определяемые пользователем, не уникальны. [13]
Зарезервированные функциональные коды
[ редактировать ]Зарезервированные функциональные коды — это функциональные коды, используемые некоторыми компаниями для устаревших продуктов и недоступные для публичного использования. [13]
Ответы на исключения
[ редактировать ]Когда клиент отправляет запрос на сервер, для этого запроса может быть четыре возможных события: [17]
- Если сервер получит запрос и выполнит его успешно, сервер вернет нормальный ответ.
- Если сервер не может получить запрос из-за ошибки канала связи, сервер ничего не ответит клиенту. Клиент тогда получит ошибку запроса тайм-аута.
- Если сервер получает запрос и обнаруживает ошибку в канале связи (например, четность, LRC, CRC), сервер ничего не ответит клиенту. В этом случае у клиента возникнет ошибка запроса тайм-аута.
- Если сервер получает запрос и не может его выполнить (например, клиент запрашивает чтение несуществующего регистра), сервер вернет клиенту ответ об исключении, чтобы указать характер ошибки.
Ответное сообщение об исключении включает в себя два других поля по сравнению с обычным ответным сообщением: [17]
- Код функции: Старший бит исключения кода функции равен 1. Это сделает этот код функции 0x80 выше, чем код функции запроса сообщения.
- Данные: Сервер возвращает код исключения в поле «Данные». Это поле определяет характер ошибки.
Все коды исключений Modbus: [18]
Код | Текст | Подробности |
---|---|---|
1 | Недопустимая функция | Код функции, полученный в запросе, не распознается или не разрешен сервером |
2 | Недопустимый адрес данных | Адреса данных некоторых или всех необходимых объектов не разрешены или не существуют на сервере. |
3 | Недопустимое значение данных | Значение не принимается сервером |
4 | Сбой серверного устройства | Произошла неисправимая ошибка, когда сервер пытался выполнить запрошенное действие. |
5 | Сознавать | Сервер принял запрос и обрабатывает его, но требуется длительное время. Этот ответ возвращается, чтобы предотвратить возникновение ошибки тайм-аута на клиенте. клиент может затем выдать сообщение « Программа опроса завершена», чтобы определить, завершена ли обработка. |
6 | Серверное устройство занято | Сервер занят обработкой команды большой продолжительности; клиент должен повторить попытку позже |
7 | Отрицательное подтверждение | Сервер не может выполнять функции программирования; клиент должен запросить диагностическую информацию или информацию об ошибках с сервера |
8 | Ошибка четности памяти | Сервер обнаружил ошибку четности в памяти; клиент может повторить запрос |
10 | Путь к шлюзу недоступен | Специально для шлюзов Modbus: указывает на неправильно настроенный шлюз. |
11 | Целевое устройство шлюза не ответило | Специально для шлюзов Modbus: отправляется, когда сервер не отвечает. |
Протокол Modbus через последовательную линию
[ редактировать ]Стандарт Modbus также определяет Modbus over Serial Line , протокол уровня канала передачи данных модели OSI для протокола прикладного уровня Modbus, который должен передаваться по последовательной шине . [19] Протокол последовательной линии Modbus — это протокол «ведущий-подчиненный» , который поддерживает одного ведущего и несколько ведомых устройств на последовательной шине. [20] При использовании протокола Modbus на уровне приложений для устройств на канале связи используется модель клиент/сервер. При использовании Modbus через последовательную линию реализуется роль клиента ведущим устройством , а — роль сервера ведомым устройством . [20] [21]
Соглашение об именах организации меняет общепринятое использование нескольких клиентов и только одного сервера. Чтобы избежать этой путаницы, на транспортном уровне RS-485 используются термины «узел» или «устройство» вместо «сервер», а «клиент» не является «узлом». [21]
(Организация Modbus) использует термин «клиент-сервер» для описания связи Modbus, характеризующейся связью между [клиентским устройством(ами), которое инициирует связь и отправляет запросы серверному устройству(ам), которые обрабатывают запросы и возвращают соответствующий ответ ( или сообщение об ошибке).
Последовательная шина для Modbus over Serial Line может иметь максимум 247 ведомых устройств, обменивающихся данными с 1 ведущим устройством . Эти ведомые устройства имеют уникальный адрес в диапазоне от 1 до 247 (десятичное значение). [22] Мастеру не обязательно иметь адрес. [22] Процесс связи инициируется ведущим устройством, поскольку только оно может инициировать транзакцию Modbus. Подчиненное устройство никогда не будет передавать какие-либо данные или выполнять какое-либо действие без запроса от ведущего, и подчиненные не могут взаимодействовать друг с другом. [23]
В Modbus по последовательной линии ведущий инициирует запросы к ведомым устройствам в одноадресном или широковещательном режиме. В одноадресном режиме ведущий инициирует запрос к одному ведомому устройству с определенным адресом. После получения и завершения запроса ведомое устройство ответит сообщением ведущему. [22] В этом режиме транзакция Modbus включает два сообщения: один запрос от ведущего устройства и один ответ от ведомого устройства. Каждое подчиненное устройство должно иметь уникальный адрес (от 1 до 247), к которому можно обращаться независимо для связи. [22] В режиме широковещания ведущий может отправить запрос всем ведомым устройствам, используя широковещательный адрес 0 . [22] это адрес, зарезервированный для широковещательного обмена (а не главный адрес). Подчиненные устройства должны принимать широковещательные обмены, но не должны отвечать. [23] Сопоставление PDU Modbus с последовательной шиной Modbus по протоколу последовательной линии приводит к созданию PDU последовательной линии Modbus. [22]
PDU последовательной линии Modbus = адрес + PDU + CRC (или LRC)
С PDU = код функции + данные
- Адрес является подчиненным адресом
- PDU определяется идентично PDU прикладного протокола Modbus.
- Поле проверки ошибок с CRC/LRC: методы проверки ошибок зависят от версии протокола MODBUS через последовательную линию, будь то Modbus RTU или Modbus ASCII .
На физическом уровне осуществляет MODBUS через последовательную линию побитовую связь по RS485 или RS232 , причем наиболее популярным способом является двухпроводной интерфейс TIA/EIA-485. Также используется четырехпроводный интерфейс RS485. TIA/EIA-232-E (RS232) также может использоваться, но ограничено двухточечной связью малого радиуса действия. [20] MODBUS по последовательной линии имеет два режима передачи: RTU и ASCII , которые соответствуют двум версиям протокола, известным как Modbus RTU и Modbus ASCII . [24]
Модбус РТУ
[ редактировать ]Modbus RTU ( удаленный терминальный блок ), который является наиболее распространенной реализацией, доступной для Modbus, использует компактное двоичное представление данных для протокольной связи. Формат RTU следует за командами/данными с помощью контрольной суммы циклического избыточного кода в качестве механизма проверки ошибок, обеспечивающего надежность данных. Сообщение Modbus RTU должно передаваться непрерывно, без задержек между символами. Сообщения Modbus формируются (разделяются) периодами простоя (молчания). Каждый байт (8 бит) данных отправляется как 11 бит: [3] [24]
- 1 стартовый бит
- 8-битные данные/сообщение, первым отправляется младший бит
- 1 бит четности
- 1 стоповый бит
Тогда кадр Modbus RTU будет: [25]
подчиненный адрес | Код функции | Данные | КПР |
---|---|---|---|
1 байт | 1 байт | 0 – 252 байта | 2 байта: 1 младший байт CRC и 1 старший байт CRC. |
Расчет CRC широко известен как CRC-16-MODBUS, полином которого равен x. 16 + х 15 + х 2 + 1 (нормальный шестнадцатеричный алгебраический многочлен 8005
и перевернутый A001
). [26]
Пример кадра Modbus RTU в шестнадцатеричном формате: 01 04 02 FF FF B8 80
(Расчет CRC-16-MODBUS для 5 байт из 01
к FF
дает 80B8
, которому первым передается младший байт).
Для обеспечения целостности кадра при передаче интервал времени между двумя кадрами должен быть не менее времени передачи 3,5 символов, а интервал времени между двумя последовательными символами должен быть не более времени передачи 1,5 символа. [25] Например, при скорости передачи данных по умолчанию 19200 бит/с время передачи 3,5 (t3,5) и 1,5 (t1,5) 11-битных символов составляет:
Для более высоких скоростей передачи данных Modbus RTU рекомендует использовать фиксированные значения 750 мкс для t1.5 и 1,750 мс для t3.5. [25]
Модбус ASCII
[ редактировать ]Modbus ASCII использует символы ASCII для связи по протоколу. Формат ASCII использует контрольную сумму продольного избыточного кода . Сообщения Modbus ASCII выделяются двоеточием (":") и завершающим символом новой строки (CR/LF).
Кадр Modbus ASCII включает в себя: [27]
Имя | Длина (байты) | Функция |
---|---|---|
Начинать | 1 | Двоеточие : ( ASCII значение 3A 16 ) |
Адрес | 2 | Адрес станции |
Функция | 2 | Указывает код функции, например, «считывание катушек». |
Данные | п × 2 | Данные + длина будут заполнены в зависимости от типа сообщения. |
ЦУР | 2 | Контрольная сумма ( проверка продольного избыточности ) |
Конец | 2 | Пара возврата каретки + перевода строки (CR/LF) (значения ASCII 0D 16 и 0A 16 ) |
Адрес, функция, данные и LRC представляют собой значения в шестнадцатеричной кодировке ASCII, при этом 8-битные значения (0–255) кодируются как два удобочитаемых символа ASCII из диапазонов 0–9 и A–F. Например, значение 122 (7A 16 ) кодируется как два символа ASCII, «7» и «A», и передается как два байта. 55
(37 16 , значение ASCII для «7») и 65
(41 16 , значение ASCII для «A»).
LRC рассчитывается как сумма 8-битных значений (исключая начальный и конечный символы), инвертируется ( дополнение до двух ) и кодируется как 8-битное значение. Например, если адрес, функция и данные равны 247, 3, 19, 137, 0 и 10, дополнение до двух их суммы (416) равно -416; это сокращение до 8 бит равно 96 (256 × 2 − 416 = 60 16 ), что дает следующий кадр из 17 символов ASCII: :F7031389000A60␍␊
. LRC указан для использования только в качестве контрольной суммы: поскольку она рассчитывается на основе закодированных данных, а не переданных символов, ее «продольная» характеристика недоступна для использования с битами четности для обнаружения однобитовых ошибок.
Обмен сообщениями Modbus по TCP/IP
[ редактировать ]Модбус TCP
[ редактировать ]Modbus TCP или Modbus TCP/IP — это вариант Modbus, используемый для связи по сетям TCP/IP , подключающийся через порт 502 . [28] Он не требует расчета контрольной суммы, поскольку нижние уровни уже обеспечивают защиту контрольной суммы.
Номенклатура Modbus TCP такая же, как и для протокола Modbus over Serial, поскольку любое устройство, отправляющее команду Modbus, является «клиентом», а ответ приходит от «сервера». [29]
ADU для Modbus TCP официально называется MODBUS TCP/IP ADU (или Modbus TCP/IP ADU) организацией Modbus. [30] также называют кадром Modbus TCP . и другие стороны [3]
MODBUS TCP/IP ADU = заголовок MBAP + код функции + данные
Где MBAP , что означает заголовок протокола приложения MODBUS , представляет собой специальный заголовок, используемый в TCP/IP для идентификации блока данных приложения MODBUS.
Заголовок MBAP содержит следующие поля: [31]
Имя | Длина (байты) | Функция |
---|---|---|
Идентификатор транзакции | 2 | Для синхронизации сообщений сервера и клиента |
Идентификатор протокола | 2 | 0 для Modbus/TCP |
Поле длины | 2 | Количество оставшихся байтов в этом кадре |
Идентификатор объекта | 1 | Адрес сервера (255, если не используется), рассматривается как адрес ведомого устройства в Modbus по последовательной линии. |
Идентификатор устройства используется с устройствами Modbus TCP, которые являются составными частями нескольких устройств Modbus, например, шлюзами Modbus TCP и Modbus RTU. В таком случае идентификатором устройства является адрес сервера устройства за шлюзом.
Тогда формат кадра MODBUS TCP/IP ADU/Modbus TCP будет следующим: [31] [30]
Идентификатор транзакции | Идентификатор протокола | Длина | Идентификатор объекта | Код функции | Данные |
---|---|---|---|---|---|
2 байта | 2 байта | 2 байта | 1 байт | 1 байт | n байт |
Пример кадра Modbus TCP/IP ADU/Modbus TCP в шестнадцатеричном формате :
12 34 00 00 00 06 01 03 00 01 00 01
0x12
и0x34
: При идентификаторе транзакции = 0x1234 (2 байта) в качестве «уникального номера», который должен идентифицироваться между клиентом/сервером Modbus TCP, старший байт идентификатора транзакции равен 0x12, а младший байт идентификатора транзакции — 0x34.0x00
и0x00
: Старший и младший байт идентификатора протокола.0x00
и0x06
: Длина старшего и младшего байта. Длина составляет 6 байт, включая: идентификатор устройства (адрес ведомого устройства) (1 байт), код функции (1 байт), старший байт адреса регистра для чтения (1 байт), младший байт адреса регистра для чтения (1 байт). ) и данные (2 байта = старший байт и младший байт количества регистров для чтения)0x01
: Идентификатор устройства (адрес подчиненного устройства)0x03
: Код функции (чтение нескольких регистров временного хранения)0x00
и0x01
: старший и младший байт адреса регистра для чтения. Адрес регистра для чтения в этом случае:0x0001
.0x00
и0x01
: старший и младший байт количества регистров для чтения. Число регистров для чтения в этом случае равно0x0001
. (т.е. 1 регистр)
Другие версии протокола Modbus через TCP/IP
[ редактировать ]- Modbus over TCP/IP , Modbus over TCP или Modbus RTU/IP — вариант, который отличается от Modbus TCP тем, что в полезную нагрузку включена контрольная сумма, как и в случае с Modbus RTU.
- Modbus через UDP — некоторые экспериментировали с использованием Modbus через UDP в IP-сетях, что устраняет накладные расходы TCP. [32]
Другие версии протокола Modbus
[ редактировать ]Помимо широко используемых Modbus RTU, Modbus ASCII и Modbus TCP, существует множество вариантов протоколов Modbus:
- Modbus Plus ( Modbus+ , MB+ или MBP ) — Modbus Plus является собственностью Schneider Electric , хотя он скорее не опубликован, чем запатентован, и в отличие от других вариантов поддерживает одноранговую связь между несколькими клиентами. [33] Несмотря на название, Modbus Plus [34] не является вариантом Modbus. Это другой протокол , включающий передачу токенов . , требуется выделенный сопроцессор HDLC Для обработки быстрой ротации токенов, подобной . Он использует витую пару со скоростью 1 Мбит/с и включает трансформаторную изоляцию на каждом узле, что делает его активируемым по переходу/переходу, а не по напряжению/уровню. Для подключения Modbus Plus к компьютеру требуется специальное оборудование, обычно это карта, предназначенная для шины ISA , PCI или PCMCIA . Modbus Plus обычно реализуется с использованием специального набора микросхем, доступного только партнерам Schneider.
- Pemex Modbus – расширение стандарта Modbus с поддержкой исторических данных и данных о расходах. Он был разработан для Pemex для использования в управлении технологическими процессами и так и не получил широкого распространения. нефтегазовой компании
- Enron Modbus - еще одно расширение стандарта Modbus, разработанное Enron, с поддержкой 32-битных целых чисел и переменных с плавающей запятой, а также исторических и потоковых данных. Типы данных сопоставляются с использованием стандартных адресов. [35] Исторические данные соответствуют отраслевому стандарту Американского института нефти (API) относительно того, как следует хранить данные. [ нужна ссылка ]
Модели данных и вызовы функций идентичны для первых четырех вариантов, перечисленных выше; только инкапсуляция другая. Однако эти варианты и форматы кадров несовместимы.
Сопоставление JBUS
[ редактировать ]Другой фактический протокол, тесно связанный с Modbus, появился позже и был определен производителем ПЛК April Automate в результате совместных усилий французских компаний Renault Automation и Merlin Gerin et Cie в 1985 году: JBUS . Различия между Modbus и JBUS того времени (количество объектов, серверных станций) теперь не имеют значения, поскольку этот протокол почти исчез с появлением апрельской серии ПЛК, которую AEG Schneider Automation купила в 1994 году, а затем сделала устаревшей. Однако название JBUS в некоторой степени сохранилось.
JBUS поддерживает функциональные коды 1, 2, 3, 4, 5, 6, 15 и 16 и, следовательно, все объекты, описанные выше, хотя нумерация другая:
- Номер и адрес совпадают: объект № x имеет адрес x в кадре данных.
- Следовательно, номер объекта не включает тип объекта. Например, регистр хранения № 40010 в Modbus будет регистром хранения № 9 по адресу 9 в JBUS.
- Номер 0 (и, следовательно, адрес 0) не поддерживается. Сервер не должен реализовывать какие-либо реальные данные по этому номеру и адресу и может возвращать нулевое значение или выдавать ошибку при запросе.
Ограничения
[ редактировать ]- Поскольку Modbus был разработан в конце 1970-х годов для связи с программируемыми логическими контроллерами, количество типов данных ограничено теми, которые понимались ПЛК того времени. Большие двоичные объекты не поддерживаются.
- Не существует стандартного способа для узла найти описание объекта данных, например, узнать, что значение регистра представляет температуру от 30 до 175 градусов.
- Поскольку Modbus представляет собой протокол клиент/сервер (ранее главный/подчиненный), [21] у полевого устройства нет возможности получить данные с помощью механизма обработчика событий (кроме Ethernet TCP/IP, называемого open-mbus), поскольку клиентский узел должен регулярно опрашивать каждое полевое устройство и искать изменения в данных. Это потребляет полосу пропускания и сетевое время в приложениях, где полоса пропускания может быть дорогой, например, по радиоканалу с низкой скоростью передачи данных.
- Modbus ограничен адресацией 247 устройств по одному каналу передачи данных, что ограничивает количество полевых устройств, которые могут быть подключены к родительской станции (опять же, Ethernet TCP/IP является исключением).
- Протокол Modbus сам по себе не обеспечивает защиты от несанкционированных команд или перехвата данных. [36]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б с д Протокол приложений MODBUS 2012 , стр. 2.
- ^ MODICON, Inc. 1996 , "Предисловие"
- ^ Перейти обратно: а б с Друри, Билл (2009). Справочник по технологиям управления, приводам и средствам управления (PDF) (2-е изд.). Институт техники и технологий . стр. 508–.
- ^ «Часто задаваемые вопросы по Modbus» . Модбус . Организация Modbus, Inc. Проверено 1 ноября 2012 г.
- ^ «Об организации Modbus» . Модбус . Организация Modbus, Inc. Проверено 8 ноября 2012 г.
- ^ Перейти обратно: а б с д Протокол приложений MODBUS 2012 , стр. 4, «4.1 Описание протокола»
- ^ Перейти обратно: а б Протокол приложений MODBUS 2012 , стр. 3, «4.1 Описание протокола»
- ^ Перейти обратно: а б с д и Протокол приложений MODBUS 2012 , стр. 5, «4.1 Описание протокола»
- ^ Протокол приложений MODBUS 2012 , с. 7, «4.4 Модель адресации MODBUS»
- ^ Протокол приложений MODBUS 2012 , с. 9, «Рисунок 9. Диаграмма состояний транзакции MODBUS».
- ^ Протокол приложений MODBUS 2012 , с. 6, «4.3 Модель данных MODBUS»
- ^ «Modpoll Modbus Master Simulator» . modbusdriver.com . Получено 13 октября 2023 г. «-t 0» означает «Тип данных дискретного выхода (катушки)».
{{cite web}}
: CS1 maint: постскриптум ( ссылка ) - ^ Перейти обратно: а б с Протокол приложений MODBUS 2012 , стр. 10, «5 категорий функциональных кодов»
- ^ Кларк, Гордон; Рейндерс, Деон (2004). Практические современные протоколы Scada: Dnp3, 60870.5 и родственные системы . Ньюнес. стр. 47–51. ISBN 0-7506-5799-5 .
- ^ Перейти обратно: а б Протокол приложений MODBUS 2012 , стр. 11
- ^ Протокол приложений MODBUS 2012 , с. 12, «6.1 01 (0x01) Чтение катушек»
- ^ Перейти обратно: а б Протокол приложений MODBUS 2012 , стр. 47, «7 ответов на исключительные ситуации MODBUS»
- ^ Протокол приложений MODBUS 2012 , с. 48, «7 ответов на исключительные ситуации MODBUS»
- ^ Протокол MODBUS через последовательную линию, 2006 г. , стр. 4
- ^ Перейти обратно: а б с Протокол MODBUS через последовательную линию 2006 , стр. 5
- ^ Перейти обратно: а б с «Организация Modbus заменяет главный-подчиненный на клиент-сервер (пресс-релиз)» (PDF) . modbus.org . 9 июля 2020 г. Проверено 11 июля 2023 г.
- ^ Перейти обратно: а б с д и ж Протокол MODBUS через последовательную линию 2006 , стр. 8
- ^ Перейти обратно: а б Протокол MODBUS через последовательную линию 2006 , стр. 7
- ^ Перейти обратно: а б Протокол MODBUS через последовательную линию 2006 , стр. 12
- ^ Перейти обратно: а б с Протокол MODBUS через последовательную линию 2006 , стр. 13, «2.5.1.1 Формирование сообщения MODBUS RTU»
- ^ Протокол MODBUS через последовательную линию, 2006 г. , стр. 39
- ^ Протокол MODBUS через последовательную линию, 2006 г. , стр. 17, «2.5.2.1 Формирование ASCII-сообщения MODBUS»
- ^ Обмен сообщениями MODBUS по TCP/IP 2006 , стр. 6
- ^ Прат, Жером (13 февраля 2017 г.). «Ускоренный курс: Клиент/Сервер/Главный/Подчиненный» . Технология ПроСофт . Проверено 17 октября 2022 г.
- ^ Перейти обратно: а б Обмен сообщениями MODBUS по TCP/IP 2006 , стр. 4, «3.1.2 MODBUS в прикладном блоке данных TCP/IP»
- ^ Перейти обратно: а б Обмен сообщениями MODBUS по TCP/IP 2006 , стр. 5, «3.1.3 Описание заголовка MBAP»
- ^ «Библиотека Java Modbus — О программе» . 2010 . Проверено 7 февраля 2017 г.
- ^ «В чем разница между Modbus и Modbus Plus?» . Шнайдер Электрик. 21 августа 2004 года . Проверено 7 февраля 2017 г.
- ^ «Modbus Plus — Сеть Modbus Plus — Обзор продукции — Schneider Electric United States» . Schneider-electric.com . Проверено 3 января 2014 г.
- ^ «Просто Modbus — О Enron Modbus» . Просто Модбус . Проверено 7 февраля 2017 г.
- ^ Палмер; Шеной, Суджит, ред. (23–25 марта 2009 г.). Защита критической инфраструктуры III . Третья международная конференция IFIP WG 11.10. Ганновер, Нью-Гэмпшир: Спрингер. п. 87. ИСБН 978-3-642-04797-8 .
Цитируемые работы
[ редактировать ]- Протокол применения MODBUS (2012 г.). Спецификация прикладного протокола Modbus V1.1b3 (PDF) . Организация Modbus . Проверено 10 октября 2023 г.
- Протокол MODBUS через последовательную линию (2006 г.). Спецификация и руководство по внедрению MODBUS через последовательную линию V1.02 (PDF) .
- Обмен сообщениями MODBUS по TCP/IP (2006 г.). Руководство по внедрению обмена сообщениями MODBUS в TCP/IP, версия 1.0b (PDF) . Организация Modbus.
- МОДИКОН, Инк. (1996). Справочное руководство по протоколу Modicon Modbus/Modbus Over Serial Line (только для устаревших приложений) (PDF) .
Внешние ссылки
[ редактировать ]Технические характеристики
- Организация Modbus – ссылки на спецификации протоколов.
- Modbus по последовательной линии V1.02 – Организация Modbus (2006 г.)
- Справочное руководство по протоколу Modicon Modbus – Организация Modbus (1996). Это устаревшая спецификация Modbus, которую следует использовать только для решения устаревших проблем.
Другой
- Modbus для полевых техников на modbusbacnet.com
- Учебное пособие по Modbus в RF Wireless World