Modbus - это открытый протокол, который поддерживается различными SCADA и УСО, а также различными автономными средствами коммерческого учета энергии и энергоносителей, средствами измерения текущих технологических параметров, автономными средствами логического управления и регулирования.
11.1.1. Физический уровень Modbus реализуется последовательной передачей сигналов в линиях связи интерфейсов типа «токовая петля», RS 232, RS485 в формате байта: с указанием количества бит данных, наличия бита проверки на четность и числа стоповых бит. Например: 8Р1 – 8 бит данных, бит паритета, один стоповый бит.
Скорость обмена устанавливается в зависимости от выбранного типа интерфейса и длины линии связи.
Наиболее активно в Modbus на физическом уровне используется интерфейс RS485.
Интерфейс RS-485 предназначен для создания линий связи с многоточечными соединениями. В стандарте RS-485 максимальная нагрузка передатчика определяется 32-мя единичными нагрузками, где под единичной нагрузкой понимается входной импеданс стандартного приемника RS-485 (12кОм). При этом максимальная длина линии связи составляет до 1200 м. Использование повторителей сигналов позволяет увеличить длину линии связи еще на 1200 м и позволяет добавить еще 32 узла (рис.12.2). И таких цепей-добавлений через повторитель может быть несколько.
Рис.11.2. Структура сети с RS485 c повторителями сигналов
Электрические характеристики RS485 представлены в табл. 11.1.
: Таблица 11.1.
Характеристики | Интерфейс RS-485 |
Режим работы | Дифференциальный |
Максимальная скорость передачи данных | 10 Мбит/с |
Диапазон выходного сигнала | От ± 1.5 В до ± 5 В |
Максимальный ток короткого замыкания | 250 мА |
Сопротивление нагрузки Tx | 54 Ом |
Чувствительность по входу Rx | ± 200 мВ |
Максимальное входное сопротивление Rx | 12 кОм |
Диапазон напряжений входного сигнала Rx | от -7 В до +12 В |
Уровень логической единицы Rx | > 200 мВ |
Уровень логического нуля Rx | < 200 мВ |
Дифференциальная передача сигнала в RS-485 обеспечивает надежную передачу данных в присутствии шумов, т.к. дифференциальные входы могут подавлять значительные синфазные напряжения. Однако для защиты от помех больших уровней напряжений, которые обычно ассоциируются с электростатическим разрядом, электромагнитным разрядом от электроустановок или от молнии, необходимо принимать дополнительные меры.
11.1.2.Канальный уровень Modbus поддерживает работу сети с двумя форматами передачи сообщений: ASCII (American Standard Code for Information Interchange) или RTU (Remote Terminal Unit). Смешивание ре-жимов передачи сообщений в составе одной промышленной сети не до-пускается!
1) Характеристики форматов передачи сообщений представлены в табл. 11.2:
Таблица 11.2
Характеристика | Формат ASCII (7-бит) | Формат RTU(8-бит) |
Система кодирования | Используются ASCII символы 0-9,A-F | 8-битовая двоичная система |
Стартовые биты | 1 | 1 |
Биты данных | 7 (млад. значащий бит –вперед) | 8 (млад. значащий бит –вперед) |
Четность | Есть/Нет | Есть/Нет |
Стоповые биты | 1 или 2 | 1 или 2 |
Контрольная сумма | LRC(Longitudinal Redundancy Check). | CRC16 (Cyclical Redundancy Check) |
В режиме RTU данные передаются непрерывным потоком в виде 8-ми разрядных двоичных кодов. В режиме ASCII каждый RTU код сначала делится на две 4-х разрядных части (старший и младший), каждая переводится в свой шестнадцатеричный эквивалент (hex), а затем используется в сообщении.
В режиме ASCII допустима задержка до 1 секунды между двумя соседними символами.
Бит четности может включаться в формат символа и в режиме RTU, и ASCII. В режиме RTU это девятый бит в поле данных (8 бит данных + бит четности). В режиме ASCII это восьмой бит данных (7 бит данных + бит четности). Если контроль четности не используется, бит четности не передается. Внимание: все устройства в системе должны быть сконфигурированы одинаково.
2) Организация передачи сообщений в Modbus реализуется по принципу «ведущий (MS)- ведомый (SL)», т.е. все циклы обмена инициируются только ведущим устройством –мастером MS. В Modbus только один MS, а количество SL-узлов определяется в пределах адресной способности сети.
MS, инициируя взаимодействие с SL, формирует адресуемые сообщения двух типов:
– Тип 1: кадр запроса с адресом i-того ведомого устройства SL i - кадр ответа. При этом MS посылает SL запрос и ждет на него ответ в течение временного интервала tс. Длительность интервала задается пользователем. Если в течение этого временного интервала MS получит ответ, то сразу же может формировать следующее обращение к этому же или другому SL. Если на заданном временном интервале tс ответное сообщение не будет получено, то MS цикл обмена данными считает не завершенным. Дальнейшее поведение MS определяется пользовательской программой.
– Тип 2: один кадр широковещательного запроса всех SL без ответа. В этом случае широковещательные сообщения выполняются с адресом SL=0. При этом одновременно запрашиваются все SL и по этой причине ответного сообщения от SL не требуется.
3) Структура кадра сообщения в Modbus не зависит от направления передачи:
Адрес ведомого устройства SL (в том числе адрес общего запроса - 0) |
Код команды ( функции -считать, запись и т.д.) |
Размер поля данных |
Данные или Буфер под данные |
Контрольный CRC-код |
Кадровая синхронизация при передаче сообщения осуществляется:
– в режиме ASCII – передачей символа двоеточия ‘:’, указывающего на начало кадра, символов возврата каретки (CR) и перевода строки (LF), указывающих на конец кадра и готовность к приему ответного сообщения.
Формат кадра сообщения в режиме ASCII | ||||||
Начало кадра | Адрес | Функция | Данные | Контрольная сумма |
|
|
: | 2 символа 16-бит | 2 символа 16 бит | N * 4 символа N * 16 бит | 2 символа 16 бит | CR | LF |
Формат кадра сообщения в режиме RTU | |||||
Т1 Т2 Т3 | Адрес | Функция | Данные | Контрольная сумма | Т1 Т2 Т3 |
8 бит | 8 бит | N * 8 бит | 16 бит |
5) Поле функции содержит код функции, который указывает адресуемому SLi какое действие должно быть выполнено, а также диагностический бит S –старший бит поля функции, который определяет ответное сообщение следующим образом: S=0, если ответное сообщение SLi повторяет запрос или в случае нормального сообщения; S=1, если ответное сообщение не нормальное (ошибочное, недостоверное):
Поле кода команды | |||||||
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
S | Код функции Modbus | ||||||
S=0 - все нормально; S=1 признак недостоверности, ошибки |
LRC (Longitudinal Redundancy Check) - контрольная сумма представляется 8-ми разрядным числом, передаваемым двумя ASCII символа (hex). Контрольная сумма образуется путем конвертирования всех символов в двоичные числа, сложением этих чисел без учета переноса, и вычислением дополнительного кода полученного числа. В приемнике LRC заново рассчитывается и сравнивается с полученным LRC. При вычислении LRC двоеточие, CR, LF и любой другой не ASCII символ отбрасывается.
11.1.3. Пользовательский уровень Modbus определяет то, каким об-разом с помощью данного интерфейса могут решаться производственные задачи.
1) Система команд, предназначенных для взаимодействия в сети Modbus, представлена в табл. 11.3.
В процессе взаимодействия MS с SL в дополнении к тем ситуациям, когда на канальном уровне индицируется ошибка по контрольной сумме, SL в коде функции может устанавливать значение S=1 при выявлении следующих исключительных пользовательских ситуаций:
– функция в принятом сообщении не поддерживается на данном SL;
– значения в поле данных не допустимы для данного SL;
– адрес в поле данных не допустим для данного SL;
– значения в поле данных не допустимы для данного SL;
– SL не может ответить на запрос или произошла авария;
– SL принял запрос и начал выполнять долговременную операцию программирования;
– сообщение принято без ошибок, но SL в данный момент выполняет долговременную операцию программирования. Запрос необходимо ретранслировать позднее;
– функция программирования не может быть выполнена.
Т а б л и ц а 11.3.
Код | Название | Действие |
---|---|---|
01 | READ COIL STATUS | СЧИТАТЬ текущее состояние (ON/OFF) группы логических ячеек. |
02 | READ INPUT STATUS | СЧИТАТЬ текущее состояния (ON/OFF) группы дискретных входов. |
03 | READ HOLDING .REGISTERS | СЧИТАТЬ текущие значения одного/нескольких регистров хранения. |
04 | READ INPUT REGISTERS | СЧИТАТЬ текущие значения одного/нескольких входных регистров. |
05 | FORCE SINGLE COIL | ЗАПИСАТЬ состояние ON или OFF логической ячейки. |
06 | FORCE SINGLE REGISTER | ЗАПИСАТЬ новые значения в регистр хранения. |
15 | FORCE MULTIPLE COILS | ЗАПИСАТЬ состояние (ON/OFF) нескольких логических ячеек. |
16 | FORCE MULTIPLE REGISTERS | ЗАПИСАТЬ новые значения нескольких последовательных регистров. |
17 | REPORT SLAVE I.D. | СЧИТАТЬ тип адресуемого SL и его рабочее состояние. |
19 | RESET COMMUNI-CATIONS LINK | СБРОС SL в известное состояние после неустранимой ошибки. Сбрасывает счетчик принятых байт. |
11 | FETCH EVENT COUNTER COMMUNICATIONS | Позволяет MS путем последовательной посылки одного сообщения определить выполнение операции. |
12 | FETCH COMMUNI-CATIONS EVENT LOG | Позволяет MS получить из журнала связи ин-формацию о каждой передаче. Если передача не выполнена, в журнале фиксируется ошибка. |
13 | PROGRAM | Позволяет MS программировать SL. |
Остальные коды функций зарезервированы для развития . |
Рассмотрим примеры исполнения функций протокола ( числа пред-ставлены в hex-формате).
2) Чтение данных (функция -03) осуществляется сообщениями в форматах RTU и ASCII в соответствии с табл.11.4.
Т а б л и ц а 11.4.
< Чтение данных из SL с адресом 06, из 3-х регистров, начиная с адреса 6B. | ||||||
---|---|---|---|---|---|---|
ЗАПРОС | RTU | ASCII | ||||
Заголовок |
|
|
| : | ||
Адрес | 0000 | 0110 | 0 | 6 | ||
Функция | 0000 | 0011 | 0 | 3 | ||
Начальный адрес | H.O. | 0000 | 0000 | 0 | 0 | |
L.O. | 0110 | 1011 | 6 | В | ||
Количество требуемых регистров | H.O. | 0000 | 0000 | 0 | 0 | |
L.O. | 0000 | 0011 | 0 | 3 | ||
Поле контрольной суммы |
| 0111 | 0101 | 8 | 9 | |
| 1010 | 0000 |
|
| ||
Завершение |
|
| CR | LF | ||
ОТВЕТ | RTU | ASCII | ||||
Заголовок |
|
|
| : | ||
Адрес | 0000 | 0110 | 0 | 6 | ||
Функция | 0000 | 0011 | 0 | 3 | ||
Количество байт данных | 0000 | 0110 | 0 | 6 | ||
Данные | Регистр 1 | H.O | 0000 | 0010 | 0 | 2 |
L.O. | 0010 | 1011 | 2 | B | ||
Регистр 2 | H.O. | 0000 | 0000 | 0 | 0 | |
L.O. | 0000 | 0000 | 0 | 0 | ||
Реги-стр 3 | H.O. | 0000 | 0000 | 0 | 0 | |
L.O. | 0110 | 0011 | 6 | 3 | ||
Контрольная сумма | CRC | 6 | 1 | |||
Завершение |
| CR | LF |
Адресуемый SL посылает: свой адрес, код выполненной функции с указанием S=0/1 и информационное поле, которое содержит: 2 байта, определяющих количество байт данных. Длина каждого регистра данных – 2 байта. Первый байт данных в посылке является старшим, второй – младшим. Некоторые SL ограничивают количество регистров, передаваемых за один запрос. В этом случае для получения, большего числа регистров, необходимо выполнить несколько последовательных запросов.
3) Чтение дискретных входов (функция 02) позволяет пользователю получить состояние (ВКЛ/ОТКЛ) дискретных входов 197-218 из SL с десятичным адресом 17.
Ответное сообщение включает адрес SL, код функции, количество байт данных, байты данных и поле контрольной суммы. Данные упакованы по биту на каждый вход (1 = ON, 0 = OFF). Младший бит первого байта содержит значение первого адресуемого входа, за которым следуют остальные. Если количество запрошенных входов не кратно 8, то остальные биты заполняются нулями. Количество байт данных всегда определяется как количество RTU данных.
Запрос | ||||||
Адрес | Команда
да | Размер поля данных | Контр. сумма | |||
Номер первой ячейки | Количество ячеек | |||||
Ст. байт
| Мл. байт | Ст. байт | Мл. байт | |||
11 | 02 | 00 | С4 | 00 | 16 | 13 |
Данные или буфер под данные - отсутствуют |
Ответ | ||||||
Адрес | Команда
да | Размер поля данных | Поле данных | Контр. сумма | ||
Дискр. входы 197-204 | Дискр. входы 205-212 | Дискр. входы 213-218 | ||||
Кол. байт | Байт 1 | Байт 2 | Байт 3 | |||
11 | 02 | 03 | AC | DB | 35 | 2E |
Статус входов 197…204 =ACh = 1010 1100. Читая слева направо, видим, что входы 204, 202, 200 и 199 в состоянии ON. Все остальные байты данных распаковываются аналогично. Так как было запрошено 22 линии, последний байт данных (35h =0011 0101) содержит только 6 входов (213…218) вместо 8-ми. Два последних бита заполняются нулями.
4) Запись одной ячейки (функция 05) позволяет модифицировать содержание одной логической ячейки. Ячейки нумеруются с нуля (ячейка 1= 0, ячейка 2 = 1 и т.д.). Число FF00h устанавливает ячейку в 1, а число 00 00– в 0. Другие числа не влияют на содержимое ячейки. Функция может использоваться в широковещательном режиме.
Запись «1» в ячейку с адресом 0173:
Адрес | Команда | Размер поля данных | Контр. сумма | |||
Номер первой ячейки | Индикатор/ управление | |||||
Ст. байт | Мл. байт | Ст. байт | Мл. байт
| |||
11 | 05 | 00 | AC | FF | 00 | 3F |
Данные или буфер под данные - отсутствуют |
Ответ: ответное сообщение полностью совпадает с запросом.
AS-i. Промышленная сеть AS-i |
HART. Промышленная сеть HART |
Промышленные сети АСУТП |