Modbus -коммуникационный протокол, основан на архитектуре ведущий-ведомый (master-slave). Использует для передачи данных интерфейсы RS-485, RS-422, RS-232, а также Ethernet сети TCP/IP (протокол Modbus TCP).
Сообщение Modbus RTU состоит из адреса устройства SlaveID, кода функции, специальных данных в зависимости от кода функции и CRC контрольной суммы.
Если отбросить SlaveID адрес и CRC контрольную сумму, то получится PDU, Protocol Data Unit.
SlaveID – это адрес устройства, может принимать значение от 0 до 247, адреса с 248 до 255 зарезервированы.
Данные в модуле хранятся в 4 таблицах.
Две таблицы доступны только для чтения и две для чтения-записи.
В каждой таблице помещается 9999 значений.
Номер регистра | Адрес регистра HEX | Тип | Название | Тип |
---|---|---|---|---|
1-9999 | 0000 до 270E | Чтение-запись | Discrete Output Coils | DO |
10001-19999 | 0000 до 270E | Чтение | Discrete Input Contacts | DI |
30001-39999 | 0000 до 270E | Чтение | Analog Input Registers | AI |
40001-49999 | 0000 до 270E | Чтение-запись | Analog Output Holding Registers | AO |
В сообщении Modbus используется адрес регистра.
Например, первый регистр AO Holding Register, имеет номер 40001, но его адрес равен 0000.
Разница между этими двумя величинами есть смещение offset.
Каждая таблица имеет свое смещение, соответственно: 1, 10001, 30001 и 40001.
Ниже приведен пример запроса Modbus RTU для получения значения AO аналогового выхода (holding registers) из регистров от #40108 до 40110 с адресом устройства 17.
11 03 006B 0003 7687
В ответе от Modbus RTU Slave устройства мы получим:
11 03 06 AE41 5652 4340 49AD
11 | Адрес устройства (17 = 11 hex) | SlaveID |
03 | Функциональный код | Function Code |
06 | Количество байт далее (6 байтов идут следом) | Byte Count |
AE | (AE hex) | Register value Hi (AO0) |
41 | (41 hex) | Register value Lo (AO0) |
56 | Значение старшего разряда регистра (56 hex) | Register value Hi (AO1) |
52 | Значение младшего разряда регистра (52 hex) | Register value Lo (AO1) |
43 | Значение старшего разряда регистра (43 hex) | Register value Hi (AO2) |
40 | Значение младшего разряда регистра (40 hex) | Register value Lo (AO2) |
49 | Контрольная сумма | CRC value Lo |
AD | Контрольная сумма | CRC value Hi |
Регистр аналогового выхода AO0 имеет значение AE 41 HEX или 44609 в десятичной системе.
Регистр аналогового выхода AO1 имеет значение 56 52 HEX или 22098 в десятичной системе.
Регистр аналогового выхода AO2 имеет значение 43 40 HEX или 17216 в десятичной системе.
Значение AE 41 HEX - это 16 бит 1010 1110 0100 0001, может принимать различное значение, в зависимости от типа представления.
Значение регистра 40108 при комбинации с регистром 40109 дает 32 бит значение.
Пример представления.
Тип представления | Диапазон значений | Пример в HEX | Будет в десятичной форме |
---|---|---|---|
16-bit unsigned integer | 0 до 65535 | AE41 | 44,609 |
16-bit signed integer | -32768 до 32767 | AE41 | -20,927 |
two character ASCII string | 2 знака | AE41 | ® A |
discrete on/off value | 0 и 1 | 0001 | 0001 |
32-bit unsigned integer | 0 до 4,294,967,295 | AE41 5652 | 2,923,517,522 |
32-bit signed integer | -2,147,483,648 до 2,147,483,647 | AE41 5652 | -1,371,449,774 |
32-bit single precision IEEE floating point number | 1,2·10−38 до 3,4×10+38 | AE41 5652 | -4.395978 E-11 |
four character ASCII string | 4 знака | AE41 5652 | ® A V R |
Приведем таблицу с кодами функций чтения и записи регистров Modbus RTU.
Код функции | Что делает функция | Тип значения | Тип доступа | |
---|---|---|---|---|
01 (0x01) | Чтение DO | Read Coil Status | Дискретное | Чтение |
02 (0x02) | Чтение DI | Read Input Status | Дискретное | Чтение |
03 (0x03) | Чтение AO | Read Holding Registers | 16 битное | Чтение |
04 (0x04) | Чтение AI | Read Input Registers | 16 битное | Чтение |
05 (0x05) | Запись одного DO | Force Single Coil | Дискретное | Запись |
06 (0x06) | Запись одного AO | Preset Single Register | 16 битное | Запись |
15 (0x0F) | Запись нескольких DO | Force Multiple Coils | Дискретное | Запись |
16 (0x10) | Запись нескольких AO | Preset Multiple Registers | 16 битное | Запись |
Эта команда используется для чтения значений дискретных выходов DO.
В запросе PDU задается начальный адрес первого регистра DO и последующее количество необходимых значений DO. В PDU значения DO адресуются, начиная с нуля.
Значения DO в ответе находятся в одном байте и соответствуют значению битов.
Значения битов определяются как 1 = ON и 0 = OFF.
Младший бит первого байта данных содержит значение DO адрес которого указывался в запросе. Остальные значения DO следуют по нарастающей к старшему значению байта. Т.е. справа на лево.
Если запрашивалось меньше восьми значений DO, то оставшиеся биты в ответе будут заполнены нулями (в направлении от младшего к старшему байту). Поле Byte Count Количество байт далее указывает количество полных байтов данных в ответе.
Пример запроса DO с 20 по 56 для SlaveID адреса устройства 17. Адрес первого регистра будет 0013 hex = 19, т.к. счет ведется с 0 адреса (0014 hex = 20, -1 смещение нуля = получаем 0013 hex = 19).
Байт | Запрос | Байт | Ответ |
---|---|---|---|
(Hex) | Название поля | (Hex) | Название поля |
11 | Адрес устройства | 11 | Адрес устройства |
01 | Функциональный код | 01 | Функциональный код |
00 | 05 | Количество байт далее | |
13 | CD | Значение регистра DO 27-20 (1100 1101) | |
00 | Количество регистров Hi байт | 6B | Значение регистра DO 35-28 (0110 1011) |
25 | Количество регистров Lo байт | B2 | Значение регистра DO 43-36 (1011 0010) |
0E | Контрольная сумма CRC | 0E | Значение регистра DO 51-44 (0000 1110) |
84 | Контрольная сумма CRC | 1B | Значение регистра DO 56-52 (0001 1011) |
45 | Контрольная сумма CRC | ||
E6 | Контрольная сумма CRC |
Состояния выходов DO 27-20 показаны как значения байта CD hex, или в двоичной системе 1100 1101.
В регистре DO 56-52 5 битов справа были запрошены, а остальные биты заполнены нулями до полного байта (000 1 1011).
Эта команда используется для чтения значений дискретных входов DI.
Пример запроса DI с регистров от #10197 до 10218 для SlaveID адреса устройства 17. Адрес первого регистра будет 00C4 hex = 196, т.к. счет ведется с 0 адреса.
Байт | Запрос | Байт | Ответ |
---|---|---|---|
(Hex) | Название поля | (Hex) | Название поля |
11 | Адрес устройства | 11 | Адрес устройства |
02 | Функциональный код | 02 | Функциональный код |
00 | Адрес первого регистра Hi байт | 03 | Количество байт далее |
C4 | Адрес первого регистра Lo байт | AC | Значение регистра DI 10204-10197 (1010 1100) |
00 | Количество регистров Hi байт | DB | Значение регистра DI 10212-10205 (1101 1011) |
16 | Количество регистров Lo байт | 35 | Значение регистра DI 10218-10213 (0011 0101) |
BA | Контрольная сумма CRC | 20 | Контрольная сумма CRC |
A9 | Контрольная сумма CRC | 18 | Контрольная сумма CRC |
Эта команда используется для чтения значений аналоговых выходов AO.
Пример запроса AO с регистров от #40108 до 40110 для SlaveID адреса устройства 17. Адрес первого регистра будет 006B hex = 107, т.к. счет ведется с 0 адреса.
Байт | Запрос | Байт | Ответ |
---|---|---|---|
(Hex) | Название поля | (Hex) | Название поля |
11 | Адрес устройства | 11 | Адрес устройства |
03 | Функциональный код | 03 | Функциональный код |
00 | Адрес первого регистра Hi байт | 06 | Количество байт далее |
6B | Адрес первого регистра Lo байт | AE | Значение регистра Hi #40108 |
00 | Количество регистров Hi байт | 41 | Значение регистра Lo #40108 |
03 | Количество регистров Lo байт | 56 | Значение регистра Hi #40109 |
76 | Контрольная сумма CRC | 52 | Значение регистра Lo #40109 |
87 | Контрольная сумма CRC | 43 | Значение регистра Hi #40110 |
40 | Значение регистра Lo #40110 | ||
49 | Контрольная сумма CRC | ||
AD | Контрольная сумма CRC |
Эта команда используется для чтения значений аналоговых входов AI.
Пример запроса AI с регистра #30009 для SlaveID адреса устройства 17. Адрес первого регистра будет 0008 hex = 8, т.к. счет ведется с 0 адреса.
Байт | Запрос | Байт | Ответ |
---|---|---|---|
(Hex) | Название поля | (Hex) | Название поля |
11 | Адрес устройства | 11 | Адрес устройства |
04 | Функциональный код | 04 | Функциональный код |
00 | Адрес первого регистра Hi байт | 02 | Количество байт далее |
08 | Адрес первого регистра Lo байт | 00 | Значение регистра Hi #30009 |
00 | Количество регистров Hi байт | 0A | Значение регистра Lo #30009 |
01 | Количество регистров Lo байт | F8 | Контрольная сумма CRC |
B2 | Контрольная сумма CRC | F4 | Контрольная сумма CRC |
98 | Контрольная сумма CRC |
Эта команда используется для записи одного значения дискретного выхода DO.
Значение FF 00 hex устанавливает выход в значение включен ON.
Значение 00 00 hex устанавливает выход в значение выключен OFF.
Все остальные значения недопустимы и не будут влиять значение на выходе.
Нормальный ответ на такой запрос - это эхо (повтор запроса в ответе), возвращается после того, как состояние DO было изменено.
Пример записи в DO с регистром #173 для SlaveID адреса устройства 17. Адрес регистра будет 00AC hex = 172, т.к. счет ведется с 0 адреса.
Байт | Запрос | Байт | Ответ |
---|---|---|---|
(Hex) | Название поля | (Hex) | Название поля |
11 | Адрес устройства | 11 | Адрес устройства |
05 | Функциональный код | 05 | Функциональный код |
00 | Адрес первого регистра Hi байт | 00 | Адрес первого регистра Hi байт |
AC | Адрес первого регистра Lo байт | AC | Адрес первого регистра Lo байт |
FF | Значение Hi байт | FF | Значение Hi байт |
00 | Значение Lo байт | 00 | Значение Lo байт |
4E | Контрольная сумма CRC | 4E | Контрольная сумма CRC |
8B | Контрольная сумма CRC | 8B | Контрольная сумма CRC |
Состояние выхода DO173 поменялось с выключен OFF на включен ON.
Эта команда используется для записи одного значения аналогового выхода AO.
Пример записи в AO с регистром #40002 для SlaveID адреса устройства 17. Адрес первого регистра будет 0001 hex = 1, т.к. счет ведется с 0 адреса.
Байт | Запрос | Байт | Ответ |
---|---|---|---|
(Hex) | Название поля | (Hex) | Название поля |
11 | Адрес устройства | 11 | Адрес устройства |
06 | Функциональный код | 06 | Функциональный код |
00 | Адрес первого регистра Hi байт | 00 | Адрес первого регистра Hi байт |
01 | Адрес первого регистра Lo байт | 01 | Адрес первого регистра Lo байт |
00 | Значение Hi байт | 00 | Значение Hi байт |
03 | Значение Lo байт | 03 | Значение Lo байт |
9A | Контрольная сумма CRC | 9A | Контрольная сумма CRC |
9B | Контрольная сумма CRC | 9B | Контрольная сумма CRC |
Эта команда используется для записи нескольких значений дискретного выхода DO.
Пример записи в несколько DO с регистрами от #20 до #29 для SlaveID адреса устройства 17. Адрес регистра будет 0013 hex = 19, т.к. счет ведется с 0 адреса.
Байт | Запрос | Байт | Ответ |
---|---|---|---|
(Hex) | Название поля | (Hex) | Название поля |
11 | Адрес устройства | 11 | Адрес устройства |
0F | Функциональный код | 0F | Функциональный код |
00 | Адрес первого регистра Hi байт | 00 | Адрес первого регистра Hi байт |
13 | Адрес первого регистра Lo байт | 13 | Адрес первого регистра Lo байт |
00 | Количество регистров Hi байт | 00 | |
0A | Количество регистров Lo байт | 0A | |
02 | Количество байт далее | 26 | Контрольная сумма CRC |
CD | Значение байт DO 27-20 (1100 1101) | 99 | Контрольная сумма CRC |
01 | Значение байт DO 29-28 (0000 0001) | ||
BF | Контрольная сумма CRC | ||
0B | Контрольная сумма CRC |
В ответе возвращается количество записанных регистров.
Эта команда используется для записи нескольких значений аналогового выхода AO.
Пример записи в несколько AO с регистрами #40002 и #40003 для SlaveID адреса устройства 17. Адрес первого регистра будет 0001 hex = 1, т.к. счет ведется с 0 адреса.
Байт | Запрос | Байт | Ответ |
---|---|---|---|
(Hex) | Название поля | (Hex) | Название поля |
11 | Адрес устройства | 11 | Адрес устройства |
10 | Функциональный код | 10 | Функциональный код |
00 | Адрес первого регистра Hi байт | 00 | Адрес первого регистра Hi байт |
01 | Адрес первого регистра Lo байт | 01 | Адрес первого регистра Lo байт |
00 | Количество регистров Hi байт | 00 | Кол-во записанных рег. Hi байт |
02 | Количество регистров Lo байт | 02 | Кол-во записанных рег. Lo байт |
04 | Количество байт далее | 12 | Контрольная сумма CRC |
00 | Значение Hi 40002 | 98 | Контрольная сумма CRC |
0A | Значение Lo 40002 | ||
01 | Значение Hi 40003 | ||
02 | Значение Lo 40003 | ||
C6 | Контрольная сумма CRC | ||
F0 | Контрольная сумма CRC |
Modbus - открытый протокол последовательной связи. Был разработан в 1979 году для использования с устройствами программируемого логического контроллера (PLC), в настоящее время широко используется для подключения многих типов промышленных электронных устройств, подключенных к различным типам сетей.
Наиболее широко используемый протокол в промышленной автоматизации (исключение - локальные предприятия). Modbus очень популярен. Это достаточно простое и понятное в использовании устройство со стандартной последовательной связью. В сети Modbus каждое устройство смотрит в сеть как набор катушек (бит) и регистров. Мастер считывает и записывает эти катушки и регистры, используя очень простой и сжатый набор команд. Коммуникация движется только в одном направлении за раз.
Реализация протокола Modbus, установленная на практике, является очень краткой. Хотя есть двадцать основных команд, только некоторые из них действительно реализованы. Наиболее распространенными командами считаются считываемые катушки, записываемые катушки, считывание регистра, установка регистров. Небольшой набор команд - еще одна причина популярности протокола.
Преобразователь протоколов широко используется по ряду причин:
Modbus не является частью физического уровня в сети. Связь передается над физическими уровнями, что позволяет использовать ее во многих различных типах сетей. Это свойство нефизического уровня делает Modbus протоколом прикладного характера.
Протокол передачи данных Modbus — это общий способ сбора данных из разных источников для просмотра операций, архивирования и устранения неполадок с центрального удаленного места. Он широко используется и является довольно простой технологией. В зависимости от приложения, более новый протокол может иметь больше преимуществ.
Как правило, ПК настроен на запуск таких программ, как Wonderware, Intellution или LabVIEW в одном месте для сбора данных из разных процессов по всему предприятию. Другое приложение предназначено для настройки удаленных контроллеров производственных процессов (ПЛК, Allen-Bradley, Siemens, PLCDirect и другие). Для реагирования на различные уровни или режимы, которые передаются с устройства.
Существует два варианта протокола, которые проходят через последовательные соединения. Одним из них является протокол Modbus RTU. Описание этого варианта: оно более компактное, использует двоичную связь. В данном формате передача данных всегда сопровождается циклической контрольной суммой избыточности, которая используется для обнаружения проблем передачи.
Второй вариант — Modbus ASCII. Эта версия более подробная, использует шестнадцатеричное кодирование ASCII-данных, которое может быть прочитано операторами. Modbus ASCII является менее защищенным протоколом. Поскольку он менее эффективен, чем Modbus RTU, операторы должны использовать ASCII только для передачи данных на устройства, которые не поддерживают формат RTU. ASCII также может быть полезным, если сообщение RTU не может быть правильно применено.
Modbus - это протокол последовательной связи, используемый для передачи информации по последовательным линиям между электронными устройствами. То, которое запрашивает информацию, называется ведущим (Master), а информация о поставке устройств — подчиненные устройства (Slaves). В стандартной сети Modbus есть один Master и до 247 Slaves, каждый из которых имеет уникальный подчиненный адрес от 1 до 247. Master может также записывать информацию в Slaves.
Modbus является открытым протоколом. Это означает, что производители бесплатно могут встраивать его в свое оборудование. Он стал стандартным протоколом связи в промышленности, а в настоящее время является наиболее распространенным средством подключения промышленных электронных устройств. Он широко используется многими производителями во многих отраслях.
Modbus обычно используется для передачи сигналов от приборов и устройств управления обратно в главный контроллер или систему сбора данных, например, систему, которая измеряет температуру и влажность, передает результаты на компьютер. Modbus часто используется для подключения контрольного компьютера с удаленным терминальным блоком (RTU) в системах диспетчерского управления и сбора данных (SCADA). Версии протокола Modbus существуют для последовательных линий (RTU и ASCII) и для Ethernet (TCP).
Modbus передается по последовательным линиям между устройствами. Самой простой установкой был бы один последовательный кабель, соединяющий последовательные порты на двух устройствах: Master и Slave.
Данные отправляются как серия единиц и нулей, называемых битами. Каждый бит передается как напряжение, нули - положительные, а единицы - отрицательные напряжения. Биты отправляются очень быстро. Типичная скорость передачи составляет 9600 бод (бит в секунду).
При описании протокола Modbus RTU связь осуществляется между централизованным ведущим оборудованием, 247 подключенными электронными устройствами в одной сети. Конструкцию обычно называют протоколом «ведущий/ведомый», поскольку система Master запрашивает информацию у подключенных устройств, которые называются «подчиненными». Ведомые устройства отправляют информацию только мастеру в ответ на эти запросы, они не работают автономно. Ведущий может также записывать информацию на подчиненные устройства, но подчиненные устройства не могут записывать информацию ведущему устройству.
Когда ведомое устройство передает сообщение Modbus, оно начинает формировать сообщение с уникальным идентификатором адреса. Это число от 1 до 247, что позволяет мастеру определять, какое конкретное устройство отвечает запрошенной информации.
Каждому устройству, предназначенному для связи с использованием Modbus, присваивается уникальный адрес. В последовательных сетях только узел, назначенный мастером, может инициировать команду. В Ethernet любое устройство может отправлять команду Modbus, хотя обычно это делает только одно ведущее. Команда содержит адрес устройства, для которого он предназначен (от 1 до 247). Все команды включают информацию контрольной суммы, чтобы позволить получателю обнаруживать ошибки передачи. Базовые команды Modbus указывают RTU на изменение значения в одном из своих регистров, управление или чтение порта ввода-вывода, команду устройству отправить обратно одно или несколько значений, содержащихся в его регистрах.
Существует много модемов и шлюзов, поддерживающих Modbus, поскольку это очень простой протокол и часто копируется. Некоторые из них были специально разработаны для него. Различные реализации используют проводную, беспроводную связь, например, в диапазоне ISM, и даже службу коротких сообщений (SMS), а также услугу общей пакетной радиосвязи (GPRS). Типичные проблемы, с которыми приходится сталкиваться дизайнерам, включают проблемы с высокой задержкой и временем.
Типы регистров, на которые ссылаются устройства, включают:
Катушку (дискретный выход); . дискретный вход; . входной регистр; . регистрацию холдинга.
Некоторые преимущества использования протокола Modbus:
Стоят преобразователи протоколов Modbus дорого. Цена промышленных шлюзов составляет 1000 долларов.
Поскольку Modbus был разработан в конце 1970-х годов для связи с численность типов данных ограничена теми, которые были поняты ПЛК в то время. Большие двоичные объекты не поддерживаются.
Нет стандартного способа для узла, чтобы найти описание объекта данных, например, чтобы определить, представляет ли значение регистра - значение температуры между 30 и 175 градусами.
Поскольку Modbus является протоколом типа «ведущий/ведомый», для устройства нет возможности «сообщать об исключении» (кроме Ethernet TCP/IP, называемого open-mbus). Главный узел должен регулярно получать данные с дочерних устройств, а также искать изменения в данных. Это нагружает полосу пропускания, увеличивает время подключения к сети в приложениях, где пропускная способность может быть дорогой, например, в каналах с низкой скоростью передачи данных.
Modbus ограничивается адресацией 254 устройств на одной линии передачи данных, что ограничивает число устройств, которые могут быть подключены к мастер-станции (Ethernet TCP/IP является исключением). Передачи должны быть непрерывными, что ограничивает типы удаленных коммуникационных устройств теми, которые могут буферизовать данные, чтобы избежать пробелов в передаче. Сам протокол Modbus не обеспечивает защиту от несанкционированных команд или перехвата данных. Важно понимать, что в процессе передачи информации возникают логические ошибки, а также связанные с искажениями при обмене.
6.3. MODBUS Serial
Первые сети MODBUS базировались на асинхронных последовательных линиях связи и получили название MODBUS RTU и MODBUS ASCII . На физическом уровне они используют стандартные последовательные интерфейсы с символьным режимом передачи (см. рис.6.1).
В настоящее время в MODBUS-IDA эти сети получили название MODBUS over Serial Line и описаны в соответствующем стандарте. В нем указываются правила и рекомендации использования на канальном и физическом уровне.
Поскольку сеть MODBUS RTU/ASCII может иметь шинную топологию, определен метод доступа к шине - это модель Ведущий/Ведомый. В сетях MODBUS RTU и MODBUS ASCII Процесс Ведущего всегда является Клиентом, а Процессы Ведомых - Серверами. Это значит, что Ведущий отсылает запросы, а Ведомые их обрабатывают. Этот запрос может быть адресован как индивидуальному узлу так и всем Ведомым на шине (broadcast).
На канальном уровне MODBUS RTU/ASCII используется адресация, ориентированная на идентификаторы узлов. Каждый Ведомый должен иметь свой уникальный адрес (1-247), Ведущий не адресуется. При индивидуальных запросах, Ведущий (с клиентским Процессом) формирует кадр с сообщением-запросом и отправляет его по указанному адресу. Ведомый (с серверным Процессом) получает этот кадр и обрабатывает сообщение. После его обработки, Ведомый формирует кадр с сообщением-ответом, и отправляет его обратно Ведущему. Кадр с сообщением-ответом носит также функции кадра подтверждения, которого Ведущий будет ждать от Ведомого течение времени, определенного тайм-аутом.
При широковещательных запросах (broadcast) используется 0-вой адрес. Широковещательные запросы не требуют подтверждения, поэтому после отправки широковещательного кадра, Ведущий не ожидает ответного кадра.
6.3.1. Канальный уровень
На рис.6.11 показан общий вид кадра MODBUS Serial. Обратите внимание, что разграничение между кадрами и тип контрольной суммы здесь не указаны, поскольку это зависит от режима передачи ASCII или RTU. В поле адреса устройства Ведущий (при запросе) указывает адрес получателя, а Ведомый (при ответе) - свой адрес. Поля MODBUS PDU описаны выше.
На временной диаграмме рис.6.12 показаны три типичные ситуации работы модели Ведущий-Ведомый на MODBUS Serial. Первая ситуация - типичный обмен в одноадресном режиме, вторая - в широковещательном, третья - реакция Ведомого на коммуникационную ошибку.
6.3.2.
MODBUS RTUДанный режим предусматривает использование 8 бит данных в 11-битном символе, который позволяет передавать по байту на символ. Формат символа в RTU режиме: 1 стартовый бит, 8 бит данных (младший бит передается первым), 1 бит паритета + 1 стоповый бит или без паритета + 2 стоповых бита.
Формат кадра MODBUS RTU приведен на рисунке 6.13. Разграничение между кадрами производится с помощью пауз между символами. Новый кадр не должен появляться на шине раньше, чем 3.5 * Тс от предыдущего, где Тс - время передачи одного символа. Если отсутствие сигнала на линии (интервал тишины) будет больше чем 1.5 * Тс приемник идентифицирует окончание кадра. С другой стороны, появление нового кадра ранее 3.5 * Тс, тоже приведет к ошибке.
Поле адреса и кода функции в RTU режиме занимают по одному байту, поскольку каждый байт передается одним символом. В качестве контрольной суммы используется два байта, посчитанные по алгоритму CRC16.
6.3.3. MODBUS ASCII
В данном режиме каждый байт сообщения передается как два ASCII символа их шестнадцатеричного представления, т.е. значение байта 03 16 будет передаваться как ASCII-код символов "0" и "3" (0110000 0110011) Таким образом, байты данных, код функции и байт поля проверки будет передаваться кодами
символов 0-9, A-F. Формат символа в ASCII-режиме: 1 стартовый бит, 7 битов данных (младший бит передается первым); 1 бит паритета + 1 стоповый бит или без паритета + 2 стоповых бита.Формат кадра приведен на рис.6.14. Как видим, для разграничения между кадрами используются стартовый символ ":" и стоповая последовательность "CR LF". Приемники на шине непрерывно отслеживают символ ":" который однозначно указывает на начало кадра. Когда он принят, приемники отлавливают поле адреса и т.д. Это очень простой способ синхронизации, который позволяет некритически относиться к паузам между символами (до 1 сек.). Адрес Ведомого и код функции занимают по два символа, согласно значению одного байта. Далее идут n * 2 символов данных, где n количество байт данных. В ASCII режиме для подсчета контрольной суммы используется алгоритм LRC. Причем контрольная сумма проводится над всеми байтами кадра, кроме стартовой и стоповой последовательности символов.
Режим ASCII накладывает меньшие требования на оборудование, за счет использования стартовой и столбовой последовательности в разграничении кадров, и нечувствительности к значительным паузам между символами. Но эти преимущества отражаются на его недостатках. RTU-режим более требователен к интервалам между кадрами, но значительно продуктивнее чем
ASCII .Пример 6.4. MODBUS. Расчет времени опроса ведомых на MODBUS-RTU.
Задача . Построить кадры форматов сообщений запросов и ответов для MODBUS RTU и рассчитать общее время опроса 10-ти аналоговых 16-битных переменных для 4-х ведомых (рис.6.15). Битовая скорость передачи данных - 19200 бит/с. Клиентский Процесс Ведущего (TSX Premium) и серверные Процессы ведомых (ПЛК TSX Micro) принимают сообщения в начале цикла, а отправляют - в конце цикла. Время цикла Ведущего = 10 мс, Ведомого - 5с .
Выполнения задания.
Доступ к внутренним аналоговым переменным TSX Micro проводится через 03 или 04 функцию, поэтому формат кадров будет выглядеть как на рис.6.16.Учитывая, что структура других кадров - аналогичная, приводить их формат нет смысла.
Со стороны клиентского приложения сообщение-запрос формируется с помощью коммуникационной функции, отправка данных которой через коммуникационный порт производится в конце цикла задачи, а получение из порта - в начале цикла. Такое поведение клиентской стороны вполне соответствует многим реализациям для различных ПЛК.
В TSX Micro MODBUS-сервер реализован на уровне операционной системы. Специфика реализации заключается в том, что прием MODBUS-запросов из коммуникационного порта системой проводится в начале цикла, а отправка сообщений-ответов – в конце.
Следует отметить, что реализация MODBUS-сервера может быть поддержана на уровне коммуникационного модуля, а обмен данными с памятью самого устройства производится через коммуникационные буферы. В этом случае реакция MODBUS-сервера будет значительно быстрее и не зависеть от цикла программы. Для расчета времени транзакции для других типов систем необходимо ознакомиться с деталями их реализации.
На рис.6.17 показано, что поступления кадра приходит где-то внутри цикла. Это значит, что их обработка и генерация ответа пройдет примерно через 1,5 цикла. Следует понимать, что это усредненное значение, для наихудшей оценки лучше резервировать 2 времени цикла (т.е. когда кадр пришел сразу после опроса коммуникационного порта). Таким образом время транзакции для одного ПЛК, например PLC1 (ТТ1), будет равна:
ТТ1=С5+T1.req+2*C1+T1.res+C5*2 (6.1)
ТТ1 рассчитан с учетом 2-х циклов затраченных Ведомым на генерацию ответа на сообщение-запрос. Если бы транзакция проводилась не периодически, как по условию задачи, а по возникновению события, то во время транзакции необходимо было бы включить также еще один цикл Ведущего. Несложно вывести время опроса всех ведомых:
ТТall=C5*9+C1*2+C2*2+C3*2+C4*2+T1.req+T1.res+ T2.req+T2.res+ T3.req+T3.res+ T4.req+T4.res (6.2)
Учитывая, что циклы Ведомых одинаковы, а кадры запросов и кадры ответов для всех ведомых имеют одинаковую структуру, общая формула будет иметь следующий вид:
ТТall= C5*9 + C1*8 + (T1.req+T2.req)*4(6.3)
Рассчитаем время T1.req и T2.req.
Время передачи кадра (Тframe) можно ориентировочно рассчитать по количеству символов (Nsymb) в кадре и времени передачи одного символа (Tsymb):Tframe=Nsymb*Tsymb (6.4)
Время передачи одного символа рассчитывается:
время передачи одного символа = количество бит в символе/битовая скорость;
T1.req=8*(11/19200)=4,58 мс
T1.res=25*(11/19200)=14,33 мс
TTall=90+40+ (4,58+14,33)*4= 206 мс.
Таким образом, для опроса 10-ти переменных из 4-х Ведомых со скоростью 19200 бит/с необходимо затратить примерно 206 мс. Если необходим периодический опрос, желательно зарезервировать определенное время, например еще дополнительно 100 мс.
В ряде случаев, реализация функций MODBUS-Клиента ложится на операционную систему, а доступ к ним в программе ПЛК происходит через интерфейсные коммуникационные функции. В частности, это характерно для большинства ПЛК от Scneider Electric (Momentum, Quantum, TSX Micro, TSX Premium, M340). В ряде других систем - клиентскую сторону на прикладном уровне необходимо полностью прописывать в программе ПЛК, а интерфейс предоставляется только для обмена с коммуникационным портом. В этом случае система предоставляет сервисы отправки и получения сообщений (которые формирует и анализирует сама программа пользователя), и генерации и проверки контрольной суммы.
Рассмотрим пример .Пример 6.5.
MODBUS. Реализация MODBUS-клиента на TSX Twido.Задача
. Записать фрагмент программы в ПЛК Twido для считывания 3-х регистров с Ведомого с адресом 1 (рис.6.18).Решение . В Twido клиентскую сторону MODBUS необходимо реализовывать через универсальную функцию EXCHx, которая отправляет и/или получает данные через коммуникационный порт с номером x. Параметрами функции являются таблица слов (%MW), в которых размещаются данные управления функцией, данные для отправки и буфер для приема. Если обмен будет проходить через коммуникационный порт 2, то вызов функции будет иметь следующий формат :
EXCH2 %MWy:n,
где y - номер первой переменной выделенной таблицы, n - количество слов в таблице.
Формат таблицы, то есть данных, которые необходимо заполнить, и область данных для приема одинаков для всех типов коммуникаций. Для функций 03/04 (чтение N слов) по MODBUS-RTU эта таблица будет иметь вид, приведенный в табл.6.2).
Таблица параметров состоит из 3-х частей-подтаблиц. В таблице управления функцией задаются параметры самой функции. Так в старшем байте 0-го слова указывается, что эта функция работает в обе стороны, т.е. после отправки данных, необходимо ждать ответа. Младший байт этого же слова указывает на длину таблицы передачи (в данном случае 6 байт), для того чтобы система знала о байтах которые необходимо передать (со 2-го слова по 4-е) и откуда начинается буфер приема (с 5-го слова)
. Смещение в передаче и приеме необходимо для выравнивания данных в буферах по словам.Таблица передачи содержит непосредственно сам запрос, т.е. кадр без кода CRC. Таблица приема - это буфер, который система заполнит кадром ответа, при положительном результате. Таким образом, перед использованием этой функции необходимо построить кадр запроса и ответа за исключением поля CRC (рис.6.19)
Таблица 6.2
Таблица параметров
Индекс в таблице |
Старший байт |
Младший байт |
|
Таблица управления комм. функцией |
01 (тип ф-ции отправка+приём) |
06 (длина таблицы передачи) |
|
03 (смещение в приёме) |
00 (смещение в передаче) |
||
Таблица передачи |
адрес Ведомого |
03 (номер функции) |
|
адрес начального регистра |
|||
количество регистров |
|||
Таблица приёма (сообщение-ответ) |
адреса Ведомого |
03 (номер функции) |
|
00 (байт для смещения) |
счнтчик байт |
||
первый регистр |
|||
второй регистр |
|||
… |
... |
||
N+6 |
N-ный регистр |
Как видим, в запросе 6 байт. Это количество необходимо вписать в младший байт 0-го слова таблицы. В ответе ожидается 9-байт. Если байты кадра ответа разместить в последовательности слов (в ПЛК Schneider Electric память адресуется словами), то старший байт первого принятого регистра (согласно условию это %MW100) будет находиться на младшем байте 2-го слова буфера, а младший байт принятого регистра придется на
старший байт 3-го слова в буфере. Таким образом, все принятые слова будут смещены, и прочитать их будет проблематично. Для устранения этой проблемы в таблице параметров функции есть поле смещения приема, в котором указывается номер байта в буфере приема, который будет сдвигать всю последовательность.Фрагмент программы будет выглядеть как на рис.6.20.
Во второй цепочке производится непосредственно вызов функции. Переменная %MSG2.D возвращает логическую "1", когда функция EXCH2 обработана и результат получен. Ее использование не дает "затопить" сеть чрезмерным количеством кадров, ведь пока нет ответа на предыдущий запрос или не прошло время тайм-аута, новый запрос отправлять нельзя.
Последний цепочка предназначена для записи результата чтения в переменные %MW0:3 (таблица с 3-х слов начиная с %MW0). Переменная %MSG2.E будет равной 1-це тогда, когда есть место ошибки в вызове функции.
6.3.4.
Реализация физического уровня для MODBUS SerialВ отличие от начальной спецификации, которая ограничивалась описанием кадра, в стандарте MODBUS-IDA описываются также правила для реализации сети на физическом уровне. MODBUS over Serial Line базируется на использовании последовательных интерфейсов RS-485, RS-422 и RS-232.
Для RS-485 определена топология - это шина, в которой предусмотрено три способа подключения устройств (рис.6.21):
-
Непосредственно к магистральному (trunk) кабелю, без ответвлений;-
Через пассивную коробку подключения и кабель ответвления (Derivation);-
Через активную коробку и специфический кабель ответвления.
Интерфейсы между кабелями и элементами сети имеют следующие обозначения (см. рис.6.21): ITr - интерфейс к магистральному кабелю; IDv - интерфейс между устройством и пассивной коробкой; AUI - интерфейс между устройством и активной коробкой; LT - терминаторы линии.
При использовании RS-485 стандарт определяет правила подключения устройств по 2-х проводной и 4-х проводной схеме, а также правила совместимости 2-х проводных и 4-х проводных интерфейсов на единственной линии. Ниже рассмотрено только 2-х проводное подключение, поддержка которого является обязательным.
По сути, 2-х проводное подключение на самом деле является 3-х проводным, так как кроме линий A-(D0 ) и B+(D1 ) используется также общая линия C(Common ), которая является обязательной (рис.6.22) .Общее количество устройств ограничено: 32 устройства на одном сегменте RS-485 без репитеров (использование репитеров разрешается). Максимальная длина кабеля зависит от скорости, типа кабеля, количества нагрузок и конфигурации сети (2-х проводная или 4-х проводная). Для битовой скорости 9600 и кабеля AWG26 максимальная длина ограничена 1000м. Кабель ответвления должен быть короче 20 м. Если используются мультипортовые коробки с n портами, то каждый кабель ответвления ограничен длиной 40/n м.
Общий сигнальный провод (Common) обязательно соединяется с экраном в одной точке шины, как правило возле узла Ведущего, либо его коробки ответвления.
Для погашения отражения волн на концах линии между D1 и D0 выставляется терминаторы линии (LT). Терминаторы разрешается выставлять только на магистральном кабеле.
В качестве терминаторов можно использовать:-
Резистор номиналом 150 Ом и мощностью 0.5 Вт;-
Последовательно соединенные конденсатор (1 нФ, 10 В минимум) и резистор номиналом 120 Ом (0.25 Вт) при использовании поляризации линииВ стандарте MODBUS Serial определены правила реализации защитного смещения (поляризации), которые предусматривают подключение питания номиналом 5 В между D1 и D0 через PullUp и PullDown резисторы для поддержания логической "1" на линии при отсутствии передачи.
Номинал резисторов выбирается от 450 Ом до 650 Ом в зависимости от количества устройств (650 Ом при большом количестве). Защитное смещение проводится только в одной точке линии, как правило на стороне Ведущего. Максимальное количество устройств с реализованной поляризацией уменьшается на 4 по сравнению с системой без поляризации. Поляризация является необязательной. Однако коммуникации на устройствах могут давать сбой при отсутствии логического сигнала. Если это так, то поляризацию необходимо реализовывать самостоятельно, или использовать существующие схемы, если таковые предусмотрены устройствами. Стандарт определяет также механический интерфейс, т.е. типы разъемов, вилок и соответствие сигналов на контактах. В качестве механического терминала можно использовать клемную колодку, экранированный RJ-45 (рис.6.23) или экранированный SUB-D9 разъем (рис.6.24).В таблице 6.3 указано назначение контактов для коннекторов при 2-х проводном подключением по RS-485, а в таблице 6.4 по RS-232
Таблица 6.3
Предназначение контактов конекторов при подключении по RS-485
номера контактов |
требования к наличию |
цепь IDv |
цепь ITr |
название RS-485 |
комментарий (см. раздел 3) |
|
RJ45 |
SUB-D9 |
|||||
опционально |
PMC |
управление режимом ком. порта |
||||
обязательно |
D1 |
B/B" |
напряж V1, V1>V0 для лог. "1" |
|||
обязательно |
D0 |
A/A" |
напряж V0, V0>V1 для лог. "0" |
|||
желательно |
Питание 5…24 VDC |
|||||
обязательно |
Common |
Common |
C/C" |
Питание и сигнальная земля |
Таблица 6.4
Предназначение контактов конекторов при подключении по RS-232
DCE (модем) |
контур |
DTE |
||||||
номера контактов |
требования к наличию |
название |
комментарий (см. раздел 3) |
источник RS-232 |
требования к наличию |
номера контактов |
||
RJ45 |
SUB-D9 |
RJ45 |
SUB-D9 |
|||||
обязательно |
TxD |
Transmitted Data |
<< DTE |
обязательно |
||||
обязательно |
RxD |
Received Data |
DCE >> |
обязательно |
||||
опционально |
CTS |
Clear to Send |
DCE >> |
опционально |
||||
опционально |
RTS |
Request to Send |
<< DTE |
опционально |
||||
обязательно |
Common |
Signal Common |
обязательно |
В качестве кабелей для 2-х проводного типа соединения стандарт определяет двойную экранированную витую пару категорий 4 (до 600м) или 5 (до 1000м), где в одной паре идут сбалансированные сигналы D0 и D1, а во второй - сигнальная земля Common. Рекомендуемые цвета кабелей: D1 желтый; D0 коричновий; Common серый.
Пример 6.6.
MODBUS. Схема сетевых соединений MODBUS RTU.Задача
. Нарисовать схему сетевых соединений для 2-х проводной реализации шины MODBUS RTU со следующими узлами:-
PLC1: VIPA CPU 115SER 6BL32 (Ведущий) через встроенный последовательный порт процессорного модуля;-
PLC2: TSX Twido TWDLMDA40DTK (Ведомый) через коммуникационный модуль TWD NOZ 485T-
PLC3: TSX Twido TWDLMDA40DTK (Ведомый) через коммуникационный модуль TWD NOZ 485TРешение
. На рис.6.25 показана схема сетевых соединений для поставленной задачи. Спецификация сетевых средств дана в таб.6.5.Как видно из рис.6.25, PLC1 подключается к шине через пассивную коробку, а вернее через клеммную колодку, что в принципе равнозначно. Это вызвано тем, что на ПЛК подключения идет с использованием 9-штекерного SUB-D разъема, что требует разработку собственного кабеля, схема подключения (спая) которого к коннектору и к клеммной колодке показан ниже основной схемы.
Таким образом к вилке КК1 провода кабеля КМ2 необходимо припаять.
Назначение пинов розетки SER не совпадает со стандартной. Пины 8 и 3 (соответственно А (D0) и В (D1)) идут в одну пару, затем подключаются к ХТ1:1 и ХТ1:2; 5 и 6 (соответственно M5V (-5В) и P5V (+5 В)) идут в другую витую пару кабеля КМ2. Питания 5В необходимо для того, чтобы реализовать защитное смещение (асимметрию) в соответствии со стандартом. Кроме того M5V является сигнальной землей (Common).Кабель КМ2 подключается к ХТ1 согласно схеме, показанной на рис.6.25. Экран кабеля соединяется с сигнальной землей в соответствии с требованиями стандарта. Следует напомнить, что ПЛК VIPA в этой системе является Ведущим, следовательно и защитное смещение и соединения экрана с землей необходимо реализовывать именно в этом месте. Защитное смещение производится с помощью питания 5В, которое берется из порта SER и двух резисторов.
Таблица 6.5.
Спецификация сетевых средств
№ |
Обозначение |
Наименование |
Референс |
Колич |
Примечание |
PLC1 |
ПЛК VIPA 100 |
VIPA CPU 115SER 6BL32 |
1 шт. |
VIPA |
|
PLC2, PLC3 |
ПЛК Twido |
TWDLMDA40DTK |
2 шт. |
Schneider Electric |
|
MK1, MK2 |
коммуникационный модуль для реализации интерфейса RS-485, подключение под винт |
TWD NOZ 485T |
2 шт. |
Schneider Electric |
|
KK1 |
9-пиновий SUB-D коннектор типа вилка |
1 шт. |
|||
XT1 |
клеммная колодка на 4 клеммы |
1 шт. |
|||
TL1,TL2 |
терминаторы линии |
2 шт |
изготовляются с поз. 7 и 8 |
||
Резистор 120 Ом (0.25 Вт) |
2 шт. |
в составе поз.6 |
|||
Конденсатор 1 нФ (>10 В) |
2 шт. |
в составе поз поз.6 |
|||
Ru,Rd |
Резистор 500 Ом (0.25 Вт) |
2 шт |
|||
КМ1 |
AWG26 |
300 м |
|||
КМ2 |
кабель двойная экранированная витая пара 5-й категории AWG26 |
2 м |
|||
КМ3 |
кабель двойная экранированная витая пара 5-й категории AWG26 |
300 м |
PLC2 и PLC3 соединяются с шиной с помощью коммуникационного модуля с клеммной колодкой. Это позволяет реализовать подключение без ответвлений. Однако на колодке не предусмотрено место подключения экрана, поэтому кабель экранируется отдельно.
Терминаторы линий реализованы последовательным соединением резисторов и конденсаторов, поскольку на шине задействовано защитное смещение.
В настоящее время MODBUS Serial используется как на уровне контроллеров так и на уровне датчиков (для распределенной периферии). Его использование проблематично при наличии на шине нескольких устройств
SCADA / HMI , которые в клиент-серверной архитектуре должны быть Клиентами, ведь на MODBUS RTU/ASCII только Ведущий может быть Клиентом. Но даже в такой ситуации есть возможность организовать доставку данных всем нуждающимся узлам, если они поддерживают такой режим.Исходя из указанного, на шине MODBUS Serial можно остановить свой выбор в случае, если:
-
все устройства-Серверы поддерживают MODBUS RTU / ASCII в режиме Ведомого;-
необходимо только одно устройство-Клиент, которому необходимо инициировать обмены на шине, поддерживающий MODBUS RTU/ASCII как Ведущий;-
скорость восстановления данных - удовлетворяет условию задачи;