logo search
Всё по МСА доц

3.5.1. ПротоколModbus

Протокол Modbusбыл предложен в 1979 году компаниейModicon. Он должен был служить протоколом реализации внутренних коммуникаций «точка-точка» между ПЛКModiconи панелью программирования, предназначенной для ввода программ в этот ПЛК. ПротоколModbusпостроен по принципу открытой системы.

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

Протокол Modbusпредназначен для использования в сетевых структурах нескольких разновидностей, в том числе в разработанной компаниейModiconодноранговой сетиModbusPlus.

Modbusпредставляет собой протокол, построенный по принципуmaster-slave(ведущий-ведомый).Modbusдопускает наличие в структуре только одного ведущего устройства и от 1 до 247 ведомых. В качестве ведомого устройства обычно выступает ПЛК. Роль ведущего устройства обычно играет либо панель программирования, либо главный компьютер.

Идеология протокола такова, что ведущему устройству адрес не присваивается, а ведомые пронумерованы от 1 до 247.

Адрес «0» зарезервирован в качестве адреса широковещательной передачи сообщений, предназначенных всем ведомым устройствам. Такое сообщение получают все ведомые устройства, но ответ на него не предусмотрен.

Сообщения-команды, исходящие от ведущего устройства, именуются запросами, а ответные сообщения, присылаемые ведомым устройством, ответами. Упрощенная структура формата сообщения, как запроса, так и ответа, показана ниже:

Адрес устройства

Код функции

Данные

Контрольная сумма

Ведущее устройство не имеет адреса вообще, поэтому в поле адреса всегда указывается номер ведомого устройства. Если это запрос, то он направляется ведомому устройству с указанным адресом. Если сообщение является ответом, то оно поступает от ведомого устройства с проставленным в этом поле его адресом. Сообщение-запрос всегда содержит тот или иной код функции, например, код 03 – это функция «Чтение регистров хранения».

В последнем поле каждого сообщения помещается код ошибки, формируемый устройством-отправителем, так что устройство-получатель может проверить целостность пришедшего сообщения.

Протокол Modbusрассчитан на два режима последовательной передачи данных. Один именуется ASCII (American Standard Code for Information Interchange), а второй – режимом RTU (Remote Terminal Unit). ТерминRTUведет происхождение отSCADA-систем (SupervisorControlandDataAcquisition), в которых ведущее устройство, именуемоеCTU(CentralTerminalUnit), обменивается информацией с несколькими удаленными устройствами (RTU), находящимися от него на определенных расстояниях.

Для каждого режима определена структура кадров сообщений и их синхронизация. В процессе передачи по каналам последовательной связи оба режима предусматривают асинхронную передачу, при которой имеется заранее определенная структура кадра и символы пересылаются последовательно – по одному в каждый момент.

В табл. 3.11 и 3.12 показана отправка символа при использовании асинхронной последовательной передачи данных для обоих режимов с битом четности или без него.

Таблица 3.11. Структура кадра для 7-битового режима ASCII

Стартовый бит

1

2

3

4

5

6

7

Бит четности

Стоповый бит

Стартовый бит

1

2

3

4

5

6

7

Стоповый бит

Стоповый бит

Таблица 3.12. Структура кадра для 8-битового режима RTU

Стартовый бит

1

2

3

4

5

6

7

8

Бит четности

Стоповый бит

Стартовый бит

1

2

3

4

5

6

7

8

Стоповый бит

Стоповый бит

Каждый символ передается как последовательность битов, причем время, затрачиваемое на передачу одного бита, обратно пропорционально скорости передачи данных. Например, при скорости 9600 бод время передачи 1 бита равно 104,1 мкс. Когда информация не передается, линии связи находится в маркерном (marking) состоянии. Противоположное ему состояние именуется заполненным (spacing). Когда линия переходит в заполненное состояние для побитовой передачи данных, каждому символу предшествует стартовый бит, а в конце идет один стоповый бит или больше, после этого линия возвращается в маркерное состояние.

В промежутке между стартовым и стоповым битами осуществляется передача 7, в режиме ASCII, или 8, в режимеRTU, битов, составляющих символ, причем первым посылается младший бит (LSB). После символа идет либо бит четности, либо еще один стоповый бит. При этом пользователь имеет возможность выбирать один из трех вариантов: контроль на четность, или на нечетность, либо отсутствие контроля. В режимеASCIIпередача одного символа требует передачи 10 битов, а в режимеRTU– 11. При асинхронной связи символы могут пересылаться либо вплотную, либо с временным интервалом между ними. Последовательности символов, образующих сообщения, имеют различные структуры в зависимости от режима –ASCIIилиRTU.

Для протокола Modbusв режимеASCIIпоследовательностьCRLF(CR– возврат каретки иLF– перевод строки) сейчас просто указывает на конец кадра. Преимуществом данного режима является то, что если в качестве ведомого устройства включить ЭЛТ–терминал, то можно увидеть на экране понятный человеку отформатированный код, который послан ведущим устройством на экран ЭЛТ–терминала. В табл. 3.13 показана структура сообщенияModbusв режимеASCII.

Таблица 3.13. Структура кадра сообщения ModbusASCII

Начало

Адрес

устройства

Код функции

Данные

Контрольная

сумма (LRC)

Конец

1 символ (:)

2 символа

2 символа

n символов

2 символа

2 символа (CRLF)

Его начало обозначается символом «:», а конец – последовательностью CRLF(два символаASCII). Любой символASCIIпредставляется 7 битами. Все остальные символы во всех остальных полях фрейма должны быть либо цифрами от 0 до 9, либо буквами отAдоF, так как предполагается, что данные представляются в шестнадцатеричном формате, но отображаются в виде символовASCII. Например, код функции 03 будет отображаться двумяASCII-символами – «0» и «3». То же самое относится и к содержимому поля данных. Одним из преимуществ режимаASCIIявляется то, что он не предъявляет особо жестких требований к синхронизации. Допускается временной промежуток между символами до 1 с – только по истечении его генерируется сообщение о превышении лимита времени.

При работе в режиме RTUсинхронизация имеет более важное значение, чем в режимеASCII. В этом варианте специальный начальный символ отсутствует. Вместо этого кадр сообщения начинается с маркерного интервала, длительность которого равна времени передачи четырех символов. После истечения этого интервала передается адрес устройства, затем код функции и собственно данные. Имеются и другие отличия от кадра сообщения в режимеASCII, как это показано в табл. 3.14.

Таблица 3.14. Структура кадра сообщения ModbusRTU

Начало

Адрес

устройства

Код функции

Данные

Контрольная сумма (CRC)

Конец

Интервал, равный времени передачи 4-х символов

8 бит

8 бит

n×8 бит

16 бит

Интервал, равный времени передачи 4 символов

Вместо контрольной суммы LRC(LongitudinalRedundancyCheck– продольный контроль по избыточности) в режимеRTUиспользуется контрольная суммаCRC(CyclicRedundancyCheck– циклический контроль по избыточности). Конец кадра отмечается маркерным интервалом, равным времени передачи четырех символов.

Сообщения в формате RTUдолжны посылаться в виде непрерывного потока, и появление значительного временного «зазора» между смежными символами рассматривается как прерывание в передаче сообщения. В отличие от режимаASCIIсообщения в режимеRTUне поддаются считыванию человеком. Однако сообщения в этом режиме весьма компактны и более эффективны с точки зрения их передачи. Поэтому режимRTUявляется более популярным.

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

Таблица 3.15. Таблица распределения регистров протокола Modbus

Адреса регистров

Описание

00001 – 10000

Дискретные выходы (чтение/запись)

10001 – 20000

Дискретные входы (чтение)

30001 – 40000

16-битовые аналоговые входы (чтение)

40001 – 50000

Регистры хранения (чтение/запись)

Каждый дискретный вход и дискретный выход представлен в таблице распределения регистров 1 битом. Для ПЛК компании Modiconдискретные выходы начинаются с адреса (ячейки) 00001, а дискретные входы – с адреса 10001. Каждому из них требуется 1 бит памяти. Содержимое входных регистров (contacts) можно только читать, содержимое выходных регистров (coils) можно и читать, и записывать.

Регистры аналоговых входов и выходов являются 16-разрядными. Их адреса начинаются с 30001 – это адрес первого аналогового входа. С адреса 40001 начинается диапазон универсальных регистров (чтение и запись), которые могут служить также и аналоговыми выходами. Однако не все функциональные коды работают с адресами этих регистров.

Перечень кодов, которые обеспечивают доступ к однобитовым и 16-битовым данным приведен в табл. 3.16.

Таблица 3.16. Коды функций для доступа к данным

Код

1 или 16 бит

Описание

Диапазон адресов входов-выходов

1

1

Read coils

Чтение текущего состояния (ON/OFF) дискретных выходов

00001 – 10000

2

1

Read contacts

Чтение текущего состояния (ON/OFF) дискретных входов

10001 – 20000

5

1

Write a single coil

Изменение состояния дискретного выхода в ON или OFF

00001 – 10000

15

1

Write multiple coils

Изменение состояния (ON/OFF) нескольких дискретных выходов

00001 – 10000

3

16

Read holding registers

Чтение регистров хранения

40001 – 50000

4

16

Read input registers

Чтение входных регистров

30001 – 40000

6

16

Write single register

Запись одного регистра

40001 – 50000

16

16

Write multiple registers

Запись нескольких регистров

40001 – 50000

22

16

Mask write register

Маскированная запись регистра

40001 – 50000

23

16

Read/write multiple registers

Чтение/запись нескольких регистров

40001 – 50000

24

16

Read FIFO queue

Чтение содержимого очереди FIFO

40001 – 50000

Как видно из табл. 3.16, одноразрядные коды функций относятся к дискретным входам и выходам, а 16-разрядные – к входным регистрам и регистрам хранения. При этом имеется четкая привязка каждого кода функции к определенному диапазону адресов входов-выходов. Например, функциональный код 06 (запись одного регистра) относится только к диапазону адресов 40001 – 50000 и ни к какому другому. Следовательно, при описании сообщения можно указывать не абсолютный адрес входа или выхода, а задать величину смещения относительно базового адреса. Таким образом, в данном случае вместо адреса 40001 мы указываем просто 0000.

При разработке протокола компания Modiconприняла решение нумеровать физические координаты точек, входящих в тот или иной диапазон, начиная с 0, а не с 1. Дискретный выход 1 адресуется в сообщении как ячейка 0000, а не 00001. Дискретный вход 1 адресуется как ячейка 0000, а не 10001. То же самое относится и к регистру хранения 1, которому поставлена в соответствие ячейка 40001, – его адрес записывается в виде 0000. Код функции всегда ассоциирован с конкретным диапазоном адресов входов-выходов, и поэтому для однозначной идентификации координат точки достаточно указать величину ее смещения относительно базового адреса.

Смещение записывается в виде 16-разрядного слова и при просмотре реального Modbus-сообщения отображается соответствующим шестнадцатеричным числом, а в таблице распределения регистровModbusвсе адреса даются в виде десятичных чисел. Поэтому регистру 40016 соответствует число 0х000F, которое является шестнадцатеричным представлением разности 40016 – 40001.

В отличие от традиционной 7-уровне-вой сетевой моделиOSI, принятойISO,модель Modbus для передачи данных по последовательной линии связи (Modbus over Serial Line) «сжата» до трех уровней, как это показано в табл. 3.17.

Таблица 3.17. Трехуровневая модель Modbusпередачи данных по последовательной линии

Уровень

Функция в модели OSI

Функция в модели Modbus

7

Прикладной уровень

Прикладной протокол Modbus

3-6

Разные функции

Нет

2

Канальный уровень

Протокол Modbusдля последовательной линии связи

1

Физический уровень

RS-232C, RS-485 (EIA-232C, EIA-485)

Верхним является прикладной уровень,рассмотренный выше. Он именуется прикладным протоколомModbus, или просто протоколомModbus. Уровни 36 не используются – вместо них в данной модели выступаетприкладной уровень, на котором обеспечивается сквозная передача сообщений. Канальный уровень (уровень 2) представленModbus-протоколом передачи данных по последовательной линии связи. Наконец, физический уровень (уровень 1) представлен интерфейсом RS-232C (EIA-232C), либо RS-485 (EIA-485). Трехуровневый протокол Modbusдля передачи данных по последовательной линии связи гораздо проще в понимании по сравнению с другими промышленными протоколами передачи данных.

Канальный уровень организовывается следующим образом. Кадр сообщениявключает в себя PDU (Protocol Data Unit – модуль данных протокола) – элементарный пакет протокола Modbus для последовательной линии передачи данных. На рис. 3.27 показано, что PDU состоит из четырех элементов.

Рис. 3.27. Структура ModbusPDU

В центре находится собственно ModbusPDU, содержащий два элемента – код функции и данные. В большинствереализаций Modbus используется ограниченный набор кодов функций. При этом структура данных может варьироваться в зависимости от кода функции. В случае последовательной линиипередачи данных перед Modbus PDU находится поле адреса, а после него – поле контрольной суммы. В поле адреса содержится только адрес ведомого устройства или адрес широковещательной передачи. Адрес ведущего устройства не требуется и не указывается, посколькуречь идет о протоколе «ведущий – ведомый», в котором команды исходят отуникального ведущего устройства.

Структура Modbus-сообщения для последовательной линии передачи данных зависит от того, какой режим используется – ASCII или RTU. На рис. 3.28 показана структура кадра для болеераспространенного режима RTU.

Рис. 3.28. Структура кадра для режима RTU

Структура отличается компактностью – всегоодин байт занимает адрес ведомого устройства или адрес широковещательной передачи, один байт – код функциии два – контрольная сумма (CRC). Следует отметить, что в сообщении отсутствует последовательность, обозначающая конец кадра. В режимеRTUконецкадра отмечается паузой, равной времени передачи 3,5÷4,5 символов.

Максимальное по длине сообщение занимает всего 256 байтов. В режиме RTU для передачи каждого байта необходимо 11 битов. Сам символ – это восемь битов, плюс стартовый и стоповый биты и один бит четности. Если бит четности не используется, то вместо него посылается еще один стоповый бит. При использовании бита четности осуществляется контроль на четность либо на нечетность.

Формат сообщения в режиме ASCII, показанный на рис. 3.29, предусматриваетдва байта для адреса ведомого устройства и два байта для кода функции. В отличие отRTUв режимеASCIIиспользуется 2-х байтовая контрольная сумма LRC. Преимуществом формата ASCII является то, что сообщения в этом формате могут быть прочитаны человеком. Следует отметить, что в данном случае имеется последовательность, обозначающая конец сообщения и представленная управляющими символамиCR(возврат каретки) и LF (перевод строки).

Рис. 3.29. Структура кадра для режима ASCII

При этом паузы в процессе передачи сообщения не имеют значения. Данные представляются в шестнадцатеричном формате в кодеASCII. Каждый символASCII требует всего 7 битов, но каждый байт данных представляется двумя символами. При этом используются один стартовый и один стоповый бит. Если используется бит четности, то осуществляется контроль на четность либо на нечетность. Если бит четности не используется, то вместо него посылается ещеодин стоповый бит. Это означает, что передача каждого байта в режиме ASCII выливается в передачу 10 битов.

Изначально протокол Modbusразрабатывался с ориентацией на соединение«точка-точка» между главным компьютером и ПЛК через интерфейс RS-232C (EIA-232C). Этот вариант актуален и сегодня. Но спецификация протокола Modbus для передачи данных по последовательной линии обеспечивает возможность многоточечного соединенияпо стандарту RS-485 (EIA-485) – схему, поддерживающую до 32 устройств, подключенных к общей шине. Такая конфигурация может быть реализована с применением либо двухпроводного, либо четырехпроводного подключения. В любом из вариантов последовательной передачи данных возможен широкий диапазон скоростей – от 1,2 до 115 Кбит/с, но все реализации должны,как минимум, обеспечивать работу на скоростях 9,6 и 19,2 Кбит/с. По умолчанию принимается значение скорости передачи данных 19,2 Кбит/с.

На рис. 3.30 показана рекомендуемая схема двухпроводной сети с интерфейсомRS-485 (EIA-485) с линейной поляризацией. В такой сети, естественно, имеется один узел, являющийся ведущим устройством, и множество ведомых узлов, подключенных к общей двухпроводной шине, провода которой обозначены какD0 иD1.

Рис. 3.30. Двухпроводная схема подключения

Как минимум, такая схема обеспечивает поддержку 32 устройств. При использовании двухпроводной шины выход трансмиттера напрямую соединен с входом приемника каждого из устройств. Несмотря на то, что шина именуется двухпроводной, здесь имеется третий – общий (common) провод опорного потенциала, обозначенный на рисунке как «общий». Чтобы максимальное синфазное напряжение устройство не превышало установленного максимально допустимого значения, каждое устройство должно делить общий провод со всеми остальными устройствами, выходящими на шину. Резисторыpullupиpulldown(подтягивающие резисторы) создают предопределенный уровень на линии передачи данных, когда ни один из узлов сети не передает данные. Для того чтобы приемникRS-485 (EIA-485) мог фиксировать, что линия находится в состоянииoff(отключено), требуется отказоустойчивое смещение 200 мВ. Такое подключение создает дополнительную помехоустойчивость системы. На обоих концах шины находятся терминаторы (LTLineTerminator), необходимые для согласования с волновым сопротивлением шины. Спецификация протоколаModbusдля передачи данных по последовательной линии связи рекомендует, чтобы подтягивающие резисторы имели значения сопротивления в диапазоне от 450 до 650 Ом, и чтобы использовалась только одна такая сеть. Следует отметить, что отказоустойчивое смещение вообще необходимо, поэтому некоторые трансиверы имеют встроенные схемы смещения, и тогда потребность во внешнем смещении отпадает.

На рис. 3.31 показана рекомендуемая схема четырехпроводной сети с интерфейсом, где также применяются устройства RS-485 (EIA-485).

Рис. 3.31. Четырехпроводная схема подключения

В каждом из устройств передатчик и приемник разделены. При этом передатчик ведущего устройства соединен с приемниками всех ведомых устройств, а передатчики всех ведомых устройств соединены с приемником ведущего устройства. Пара проводов ведущего устройства обозначена – RxD0,RxD1, пара проводов ведомого устройства обозначена – TxD0,TxD1. Здесь также используются отказоустойчивое смещение и терминатор, но в четырехпроводной сети они дублируются. В четырехпроводной схеме требуется «пятый» провод, играющий роль общего.

Несмотря на то что спецификация протокола Modbusдля передачи данных по последовательной линии связи поддерживает и двухпроводную, и четырехпроводную схему, более популярной является первая. Хотя четырехпроводная схема дает возможность иметь полнодуплексную связь, сам протоколModbusявляется полудуплексным. Ведущее устройство выдает команды конкретному ведомому устройству и ждет ответа. Такой порядок вполне эффективно работает в двухпроводной схеме.

В настоящий момент в системах автоматизации больший интерес вызывает подключение к сетям Ethernet, конкретнее, к сетямIP/Ethernet. ПротоколModbusтакже адаптирован для применения в этих сетях. Вместо трехуровневой модели, которая существует вModbusдля передачи данных по последовательной линии связи, вModbusTCPиспользуется принятая вInternetпятиуровневая модель, представленная в табл. 3.18.

Таблица 3.18. Пятиуровневая модельModbusTCPдляInternet

Уровень

Функция в модели OSI

Функция в модели Modbus

5,6,7

Прикладной уровень

Прикладной протокол Modbus

4

Транспортный уровень

Протокол управления передачей

3

Сетевой уровень

Интернет-протокол

2

Канальный уровень

IEEE 802.3

1

Физический уровень

IEEE 802.3

В сетевом стандарте ModbusTCPговорится только о том, какModbusPDU(содержащий код функции и данные) встроен в протокол более высокого уровня, при этом не рассматривается, как физически подключать станции, какие провода или разъемы применять, для этого в стандартеModbusTCPдается ссылка на стандартIEEE802.3.

Еще одним значительным отличием является то, что в данном случае шина Modbusфактически является шинойIP, что иллюстрирует рис. 3.32.

Рис. 3.32. В модели ModbusTCPиспользуются клиенты и серверы

При этом физический и канальный уровни не конкретизируются. Вместо привычного ведущего устройства, к которому подключено множество ведомых устройств, используются термины «клиент» и «сервер». В качестве клиентов могут выступать устройства человеко-машинного интерфейса (ЧМИ) или программируемые логические контроллеры (ПЛК), а в качестве серверов – стойки сетевого оборудования. Аналогично ведущему устройству клиенты выдают команды серверу. Аналогично ведомому устройству серверы отвечают на команды клиента. Однако в точной терминологии взаимодействия между клиентом и сервером подразумевается, что клиенты выдают запросы, а серверы отвечают на них. В действительности процесс несколько сложнее:

Важно подчеркнуть, что согласно этой модели в IP-сети может быть несколько клиентов, которые имеют доступ к общей группе серверов. В этом заключается фундаментальное отличие в работе данного варианта протоколаModbus. Здесь нет одного-единственного ведущего устройства, управляющего определенным набором ведомых устройств. Любое число клиентов может обращаться к любому числу серверов. Возможны ли конфликты, когда клиенты посылают несовместимые запросы к одному и тому же серверу? Да, возможны, но риск – это та цена, которую приходится платить за гибкость, предлагаемую данной моделью.

На рис. 3.33 показано, как формируется прикладной пакет протокола (ApplicationDataUnitADU)ModbusTCP/IP.

Рис. 3.33. К Modbus PDU добавляется заголовокМВАР

Традиционный Modbus PDU в приложении к последовательной линии передачи данных сохраняется – поля кода функции и данных присутствуют. В дополнение к PDU появляется заголовокMBAP(ModBusApplicationProtocol) длиной 7 байтов, структура которого показана в табл. 3.19.

Таблица 3.19. Структура заголовка МВАР

Идентификатор транзакции

Идентификатор протокола

Длина

Идентификатор устройства

2 байта

2 байта

2 байта

1 байт

Идентификатор транзакции поступает от клиента и используется для отслеживания индивидуальных запросов. Сервер при ответе должен возвратить клиенту тот же самый идентификатор. Это позволяет клиенту посылать серверу множество запросов и не дожидаться получения ответа на каждый отдельный запрос. Наличие идентификатора протокола позволяет системе поддерживать несколько протоколов. ДляModbusэтот идентификатор имеетзначение «0». Поле длины содержит значение, равное длине всех остальныхполей, включая поля PDU. И, наконец, поле идентификатора устройства содержит адрес ведомого устройства Modbus, доступ к которому должен осуществляться через шлюз.

При взаимодействии клиентов и серверов Modbus TCP адресация станций реализуется с применениемIP-адресов.Но если ведомое устройство Modbus подключено к последовательной линиипередачи данных, то необходимо указать его фактический адрес. В этом случае в качестве IP-адреса будет выступать адрес шлюза. Для того чтобы переслатьADUпо протоколу TCP, необходимо пользоваться зарегистрированным номером порта TCP, для этой цели зарегистрирован порт «502».