stringtranslate.com

Модбус

Modbus или MODBUS — это протокол передачи данных клиент/сервер на прикладном уровне . [1] Первоначально он был опубликован компанией Modicon (ныне Schneider Electric ) в 1979 году для использования с ее программируемыми логическими контроллерами (ПЛК). [2] Modbus стал де-факто стандартным протоколом связи для связи между промышленными электронными устройствами в широком диапазоне шин и сетей. [3] [1]

Modbus популярен в промышленных средах, поскольку он публикуется открыто и не требует лицензионных отчислений . Он был разработан для промышленных приложений, относительно прост в развертывании и обслуживании по сравнению с другими стандартами и накладывает мало ограничений на формат передаваемых данных.

Протокол Modbus использует последовательные линии связи , Ethernet или набор интернет-протоколов в качестве транспортного уровня. [1] Modbus поддерживает связь между несколькими устройствами, подключенными к одному кабелю или сети Ethernet. Например, может быть устройство, которое измеряет температуру, и другое устройство для измерения влажности, подключенное к одному и тому же кабелю, и оба передают результаты измерений на один и тот же компьютер через Modbus.

Modbus часто используется для соединения компьютера управления предприятием/системой с удаленным терминальным устройством (RTU) в системах диспетчерского управления и сбора данных ( SCADA ). Многие типы данных названы в честь промышленного управления заводскими устройствами, например, релейная логика, из-за ее использования в управляющих реле: однобитовый физический выход называется катушкой , а однобитовый физический вход называется дискретным входом или дискретным входом . контакт . _

Разработкой и обновлением протоколов Modbus занимается организация Modbus [4] с апреля 2004 года, когда Schneider Electric передала права этой организации. [5] Организация Modbus — это ассоциация пользователей и поставщиков устройств, совместимых с Modbus, которая выступает за дальнейшее использование этой технологии. [6] Modbus Organization, Inc. — торговая ассоциация , занимающаяся продвижением и развитием протокола Modbus. [4]

Описание протокола

Стек связи MODBUS
Стек связи MODBUS

Стандарты связи или шины, используемые для связи Modbus: [1]

Архитектура сети для связи Modbus

Для поддержки связи Modbus в сети многие модемы и шлюзы разработаны собственной разработкой (Ссылка на рисунок: Архитектура сети для связи Modbus ). В различных реализациях используется проводная или беспроводная связь, например, в радиодиапазоне ISM и даже служба коротких сообщений (SMS) или служба пакетной радиосвязи общего пользования (GPRS).

ПДУ и АДУ

Modbus определяет клиента , который является объектом, который инициирует транзакцию для запроса какой-либо конкретной задачи у своего «получателя запроса». [7] «Получатель запроса» клиента, с которым клиент инициировал транзакцию, затем называется сервером . [7] Например, когда MCU подключается к датчику для считывания его данных по Modbus в проводной сети, например, по шине RS485, MCU в этом контексте является клиентом, а датчик — сервером.

Modbus определяет блок данных протокола ( PDU ) независимо от протоколов нижнего уровня в своем стеке протоколов. Для сопоставления протокола MODBUS с конкретными шинами или сетью требуются некоторые дополнительные поля, которые определяются как блок данных приложения ( ADU ). ADU формируется клиентом внутри сети Modbus, когда клиент инициирует транзакцию. Содержание: [8]

Организация Modbus официально называет ADU кадром Modbus [8] , хотя кадр используется в качестве единицы данных на канальном уровне в моделях OSI и TCP/IP (в то время как Modbus является протоколом прикладного уровня).

Максимальный размер PDU — 253 байта. Максимальный размер ADU в сети RS232/RS485 составляет 256 байт, а в TCP — 260 байт. [9]

Для кодирования данных Modbus использует представление адресов и полей данных с обратным порядком байтов. Таким образом, для 16-битного значения первым отправляется старший байт. Например, если 16-битный регистр имеет значение 0x1234, байт 0x12 отправляется перед байтом 0x34. [9]

Код функции составляет 1 байт, который дает код функции для выполнения. Коды функций представляют собой целочисленные значения в диапазоне от 1 до 255, а диапазон от 128 до 255 предназначен для ответов об исключениях.

Поле данных PDU имеет адрес от 0 до 65535 (не путать с адресом поля Дополнительный адрес ADU). [10] Поле данных PDU может быть пустым и тогда иметь размер 0. В этом случае сервер не будет запрашивать какую-либо информацию, а код функции определяет функцию, которая должна быть выполнена. Если в процессе выполнения не возникло ошибок, поле данных ответа ADU от сервера клиенту будет включать запрошенные данные, т.е. данные, которые клиент ранее получил. В случае возникновения какой-либо ошибки сервер ответит кодом исключения. [7]

Транзакция Modbus и PDU

Транзакция Modbus между клиентом и сервером включает в себя: [7] [11]

Исходя из этого, Modbus определяет 3 типа PDU: [9]

mb_req_pdu = код функции (1 байт) + данные запроса (n байт)

Размер поля данных запроса зависит от кода функции и обычно включает в себя такие значения, как значение переменной, смещение данных, коды подфункций...

mb_rsp_pdu = код функции (1 байт) + данные ответа (n байт)

Как и в mb_req_pdu, размер поля данных ответа зависит от кода функции и обычно включает в себя такие значения, как значение переменной, смещение данных, коды подфункций...

mb_excep_rsp_pdu = Код функции исключения (1 байт) + код исключения (1 байт)

Исключение Код функции = Код функции (1 байт) + 0x80

В этом случае старший бит кода функции будет равен 1, а его левый бит равен коду функции.

Код исключения (1 байт) mb_excep_rsp_pdu определен в таблице «Коды исключений MODBUS».

Модель данных Modbus

Modbus определяет свою модель данных на основе серии таблиц с четырьмя основными таблицами: [12]

Код функции

Modbus определяет три типа функциональных кодов: общедоступные, определяемые пользователем и зарезервированные. [14]

Коды общедоступных функций

Примечание . В некоторых источниках используется терминология, отличная от стандартной; например , Force Single Coil вместо Write Single Coil . [15]

Функциональный код 01 (считывание катушек) как пример общедоступного функционального кода.

Код функции 01 (чтение катушек) позволяет считывать состояние катушек от 1 до 2000 удаленного устройства. Тогда mb_req_pdu (PDU запроса) будет иметь 2 байта для указания адреса первой катушки для чтения (от 0x0000 до 0xFFFF) и 2 байта для указания количества катушек для чтения. mb_req_pdu определяет адрес катушки по индексу 0, т.е. 1-я катушка (самая первая катушка) имеет адрес 0x0. mb_rsp_pdu (ответный PDU) - в случае успешного чтения - имеет 1 байт для указания количества байтов, которое представляет собой количество катушек, требуемых mb_req_pdu , а левые байты хранят состояние (значение включения/выключения) этих запрошенных катушек. [16] В частности, mb_rsp_pdu и mb_rsp_pdu функционального кода 01: [16]

mb_req_pdu :

mb_rsp_pdu

Например, mb_req_pdu и mb_rsp_pdu для чтения статуса катушек от 20 до 38 будут такими: [17]

mb_req_pdu :

Начальный адрес (2 байта) — 0x0013 (или 19 в десятичном формате), что соответствует 20-й катушке.

Количество выходов (2 байта) равно 0x0013 (или 19 в десятичном формате), что соответствует 19 значениям состояния катушек с 20-й по 38-ю.

mb_rsp_pdu :

Поскольку требуется 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. Очевидно, что коды функций, определяемые пользователем, не уникальны. [14]

Зарезервированные функциональные коды

Зарезервированные функциональные коды — это функциональные коды, используемые некоторыми компаниями для устаревших продуктов и недоступные для публичного использования. [14]

Ответы на исключения

Когда клиент отправляет запрос на сервер, для этого запроса может быть четыре возможных события: [18]

Ответное сообщение об исключении включает в себя два других поля по сравнению с обычным ответным сообщением: [18]

Все коды исключений Modbus: [19]

Протокол Modbus через последовательную линию

Стандарт Modbus также определяет Modbus over Serial Line , протокол уровня канала передачи данных модели OSI для протокола прикладного уровня Modbus, который должен передаваться по последовательной шине . [20] Протокол последовательной линии Modbus — это протокол «ведущий-подчиненный» , который поддерживает одного ведущего и несколько ведомых устройств на последовательной шине. [21] При использовании протокола Modbus на прикладном уровне для устройств на канале связи используется модель клиент/сервер. При использовании Modbus через последовательную линию роль клиента реализуется ведущим устройством , а роль сервера ведомым устройством . [21] [22]

Соглашение об именах организации меняет общепринятое использование нескольких клиентов и только одного сервера. Чтобы избежать этой путаницы, на транспортном уровне RS-485 используются термины «узел» или «устройство» вместо «сервер», а «клиент» не является «узлом». [22]

(Организация Modbus) использует термин «клиент-сервер» для описания связи Modbus, характеризующейся связью между [клиентскими устройствами, которые инициируют связь и отправляют запросы серверному устройству(ам), которые обрабатывают запросы и возвращают соответствующий ответ ( или сообщение об ошибке).

Последовательная шина для Modbus over Serial Line может иметь максимум 247 ведомых устройств , обменивающихся данными с 1 ведущим устройством . Эти ведомые устройства имеют уникальный адрес в диапазоне от 1 до 247 (десятичное значение). [23] Мастеру не обязательно иметь адрес. [23] Процесс связи инициируется ведущим устройством, поскольку только оно может инициировать транзакцию Modbus. Подчиненное устройство никогда не будет передавать какие-либо данные или выполнять какое-либо действие без запроса от ведущего, и подчиненные не могут взаимодействовать друг с другом. [24]

В Modbus по последовательной линии ведущий инициирует запросы к ведомым устройствам в одноадресном или широковещательном режиме. В одноадресном режиме ведущий инициирует запрос к одному ведомому устройству с определенным адресом. После получения и завершения запроса ведомое устройство ответит сообщением ведущему. [23] В этом режиме транзакция Modbus включает два сообщения: один запрос от ведущего устройства и один ответ от ведомого устройства. Каждое ведомое устройство должно иметь уникальный адрес (от 1 до 247), к которому можно обращаться независимо для связи. [23] В режиме широковещания ведущий может отправить запрос всем ведомым устройствам, используя широковещательный адрес 0 , [23] который является адресом, зарезервированным для широковещательного обмена (а не адресом ведущего). Подчиненные устройства должны принимать широковещательные обмены, но не должны отвечать. [24] Сопоставление PDU Modbus с последовательной шиной Modbus по протоколу последовательной линии приводит к созданию PDU последовательной линии Modbus. [23]

PDU последовательной линии Modbus = адрес + PDU + CRC (или LRC)

С PDU = код функции + данные

На физическом уровне MODBUS по последовательной линии осуществляет побитовую связь по RS485 или RS232 , наиболее популярным способом является двухпроводной интерфейс TIA/EIA-485. Также используется четырехпроводный интерфейс RS485. TIA/EIA-232-E (RS232) также может использоваться, но ограничено двухточечной связью малого радиуса действия. [21] MODBUS по последовательной линии имеет два режима передачи : RTU и ASCII , которые соответствуют двум версиям протокола, известным как Modbus RTU и Modbus ASCII . [25]

Модбус РТУ

Modbus RTU ( удаленный терминальный модуль ), который является наиболее распространенной реализацией, доступной для Modbus, использует компактное двоичное представление данных для протокольной связи. Формат RTU следует за командами/данными с помощью контрольной суммы циклического избыточного кода в качестве механизма проверки ошибок, обеспечивающего надежность данных. Сообщение Modbus RTU должно передаваться непрерывно, без задержек между символами. Сообщения Modbus формируются (разделяются) периодами простоя (молчания). Каждый 1 байт (8 бит) данных/сообщения Modbus RTU должен иметь еще 3 бита, чтобы сформировать общие 11 бит: [3] [25]

Тогда кадр Modbus RTU будет: [26]

Расчет CRC широко известен как CRC-16-MODBUS, полином которого равен x 16 + x 15 + x 2 + 1 (обычный шестнадцатеричный алгебраический многочлен 8005и перевернутый A001). [27]

Пример кадра Modbus RTU в шестнадцатеричном формате : 01 04 02 FF FF B8 80(вычисление CRC-16-MODBUS для 5 байт от 01до FFдает 80B8, который передается первым младший байт).

Для обеспечения целостности кадра Modbus при передаче интервал времени между двумя кадрами должен быть не менее времени передачи 3,5 символов, а интервал времени между двумя последовательными символами должен быть не более времени передачи 1,5 символа. [26]

Например, при скорости передачи по умолчанию 19200 бит/с время передачи 3,5 (t3.5) и 1,5 (t1.5) символов составляет (обратите внимание, что для передачи каждого 8-битного символа требуется 3 дополнительных бита кадрирования):

Для более высоких скоростей передачи данных Modbus RTU рекомендует использовать фиксированные значения 750 мкс для t1.5 и 1,750 мс для t3.5. [26]

Модбус ASCII

Modbus ASCII использует символы ASCII для связи по протоколу. Формат ASCII использует контрольную сумму продольного избыточного кода . Сообщения Modbus ASCII выделяются двоеточием (":") и завершающим символом новой строки (CR/LF).

Кадр Modbus ASCII включает в себя: [28]

Адрес, функция, данные и 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). для").

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 . [29] Он не требует расчета контрольной суммы, поскольку нижние уровни уже обеспечивают защиту контрольной суммы.

Номенклатура Modbus TCP такая же, как и для протокола Modbus over Serial, поскольку любое устройство, отправляющее команду Modbus, является «клиентом», а ответ приходит от «сервера». [30]

ADU для Modbus TCP официально называется MODBUS TCP/IP ADU (или Modbus TCP/IP ADU) организацией Modbus [31] , а другие стороны также называют его кадром Modbus TCP . [3]

MODBUS TCP/IP ADU = заголовок MBAP + код функции + данные

Где MBAP , который обозначает заголовок протокола приложения MODBUS , представляет собой специальный заголовок, используемый в TCP/IP для идентификации блока данных приложения MODBUS.

Заголовок MBAP содержит следующие поля: [32]

Идентификатор устройства используется с устройствами Modbus TCP, которые являются составными частями нескольких устройств Modbus, например, шлюзами Modbus TCP и Modbus RTU. В таком случае идентификатором устройства является адрес сервера устройства за шлюзом.

Тогда формат кадра MODBUS TCP/IP ADU/Modbus TCP будет следующим: [32] [31]

Пример кадра Modbus TCP/IP ADU/Modbus TCP в шестнадцатеричном формате :

12 34 00 00 00 06 01 03 00 01 00 01

Другие версии протокола Modbus через TCP/IP

Другие версии протокола Modbus

Помимо широко используемых Modbus RTU, Modbus ASCII и Modbus TCP, существует множество вариантов протоколов Modbus:

Модели данных и вызовы функций идентичны для первых четырех вариантов, перечисленных выше; только инкапсуляция другая. Однако эти варианты и форматы кадров несовместимы.

Сопоставление 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 и, следовательно, все объекты, описанные выше, хотя нумерация другая:

Ограничения

Смотрите также

Рекомендации

  1. ^ abcd Протокол приложений MODBUS 2012, стр. 2.
  2. ^ MODICON, Inc. 1996, «Предисловие»
  3. ^ abc Друри, Билл (2009). Справочник по технологиям управления, приводам и средствам управления (PDF) (2-е изд.). Институт техники и технологий . стр. 508–.
  4. ^ ab «Домашняя страница Modbus». Модбус . Организация Modbus, Inc. Проверено 2 августа 2013 г.
  5. ^ «Часто задаваемые вопросы по Modbus» . Модбус . Организация Modbus, Inc. Проверено 1 ноября 2012 г.
  6. ^ «Об организации Modbus». Модбус . Организация Modbus, Inc. Проверено 8 ноября 2012 г.
  7. ^ abcd Протокол приложений MODBUS 2012, стр. 4, «4.1 Описание протокола»
  8. ^ ab Протокол приложений MODBUS 2012, стр. 3, «4.1 Описание протокола»
  9. ^ abc Протокол приложений MODBUS 2012, стр. 5, «4.1 Описание протокола»
  10. ^ Протокол приложений MODBUS 2012, стр. 7, «4.4 Модель адресации MODBUS»
  11. ^ Протокол приложений MODBUS 2012, стр. 9, «Рисунок 9. Диаграмма состояний транзакции MODBUS».
  12. ^ Протокол приложений MODBUS 2012, стр. 6, «4.3 Модель данных MODBUS»
  13. ^ "Modpoll Modbus Master Simulator" . modbusdriver.com . Получено 13 октября 2023 г. «-t 0» означает «Тип данных дискретного выхода (катушки)».{{cite web}}: CS1 maint: постскриптум ( ссылка )
  14. ^ abc Протокол приложений MODBUS 2012, стр. 10, «5 категорий функциональных кодов»
  15. ^ Кларк, Гордон; Рейндерс, Деон (2004). Практические современные протоколы Scada: Dnp3, 60870.5 и родственные системы. Ньюнес. стр. 47–51. ISBN 0-7506-5799-5.
  16. ^ ab Протокол приложений MODBUS 2012, стр. 11
  17. ^ Протокол приложений MODBUS 2012, стр. 12, «6.1 01 (0x01) Чтение катушек»
  18. ^ ab Протокол приложений MODBUS 2012, стр. 47, «7 ответов на исключительные ситуации MODBUS»
  19. ^ Протокол приложений MODBUS 2012, стр. 48, «7 ответов на исключительные ситуации MODBUS»
  20. ^ Протокол MODBUS через последовательную линию 2006, стр. 4
  21. ^ abc MODBUS по протоколу последовательной линии 2006, стр. 5
  22. ^ abc «Организация Modbus заменяет главный-подчиненный на клиент-сервер (пресс-релиз)» (PDF) . modbus.org . 9 июля 2020 г. Проверено 11 июля 2023 г.
  23. ^ abcdef MODBUS по протоколу последовательной линии 2006, стр. 8
  24. ^ ab MODBUS по протоколу последовательной линии 2006, стр. 7
  25. ^ ab MODBUS по протоколу последовательной линии 2006, стр. 12
  26. ^ abc MODBUS по протоколу последовательной линии 2006, стр. 13, «2.5.1.1 Формирование сообщения MODBUS RTU»
  27. ^ Протокол MODBUS через последовательную линию 2006, стр. 39
  28. ^ Протокол MODBUS через последовательную линию 2006, стр. 17, «2.5.2.1 Формирование ASCII-сообщения MODBUS»
  29. ^ Обмен сообщениями MODBUS по TCP/IP 2006, стр. 2006. 6
  30. Прат, Жером (13 февраля 2017 г.). «Ускоренный курс: Клиент/Сервер/Главный/Подчиненный». Технология ПроСофт . Проверено 17 октября 2022 г.
  31. ^ ab Обмен сообщениями MODBUS по TCP/IP 2006, с. 4, «3.1.2 MODBUS в прикладном блоке данных TCP/IP»
  32. ^ ab Обмен сообщениями MODBUS по TCP/IP 2006, с. 5, «3.1.3 Описание заголовка MBAP»
  33. ^ "Библиотека Java Modbus - О программе" . 2010 . Проверено 7 февраля 2017 г.
  34. ^ «В чем разница между Modbus и Modbus Plus?». Schneider Electric. 21 августа 2004 года . Проверено 7 февраля 2017 г.
  35. ^ «Modbus Plus — Сеть Modbus Plus — Обзор продуктов — Schneider Electric, США» . Schneider-electric.com . Проверено 3 января 2014 г.
  36. ^ «Просто Modbus - О Enron Modbus» . Просто Модбус . Проверено 7 февраля 2017 г.
  37. ^ Палмер; Шеной, Суджит, ред. (23–25 марта 2009 г.). Защита критической инфраструктуры III . Третья международная конференция IFIP WG 11.10. Ганновер, Нью-Гэмпшир: Спрингер. п. 87. ИСБН 978-3-642-04797-8.

Цитируемые работы

Внешние ссылки

Технические характеристики

Другой