Variable
RCV_TIMEOUT
Connected
Table 12- 53 MB_CLIENT protocol errors
STATUS
Response code to
(W#16#)
Modbus client
(B#16#)
8381
01
8382
03
8383
02
8384
03
8385
03
Table 12- 54 MB_CLIENT execution condition codes
STATUS
MB_CLIENT parameter errors
(W#16#)
7001
MB_CLIENT is waiting for a Modbus server response to a connect or disconnect request, on the assigned
TCP port. This is only reported for the first execution of a connect or disconnect operation.
7002
MB_CLIENT is waiting for a Modbus server response to a connect or disconnect request, for the assigned
TCP port. This will be reported for any subsequent executions, while waiting for completion of a connect
or disconnect operation.
7003
A disconnect operation has successfully completed (Only valid for one PLC scan).
80C8
The server did not respond in the assigned time. MB_CLIENT must receive a response using the
transaction ID that was originally transmitted within the assigned time or this error is returned. Check the
connection to the Modbus server device.
This error is only reported after any configured retries (if applicable) have been attempted.
8188
Invalid mode value
8189
Invalid data address value
818A
Invalid data length value
818B
Invalid pointer to the DATA_PTR area. This can be the combination of MB_DATA_ADDRESS +
MB_DATA_LEN.
818C
Pointer to a optimized DATA_PTR area (must be a standard DB area or M memory area)
8200
The port is busy processing an existing Modbus request.
8380
Received Modbus frame is malformed or too few bytes have been received.
S7-1200 Programmable controller
System Manual, 03/2014, A5E02486680-AG
Data type Default
description
Real
2.0
Time in seconds that the MB_CLIENT waits for a server to respond to a
request.
Bool
0
Indicates whether the connection to the assigned server is connected
or disconnected: 1=connected, 0=disconnected
Modbus protocol errors
Function code not supported
Data length error
Data address error or access outside the bounds of the MB_HOLD_REG address area
Data value error
Data diagnostic code value not supported (function code 08)
Communication processor and Modbus TCP
1
12.5 Modbus communication
735
Содержание этого раздела:
1. S7-1200Как мастер-станция Modbus RTU
Два, S7-1200В качестве ведомого устройства Modbus RTU
Три, S7-1200Как мастер-станция Modbus RTU
S7-1200 Как мастер-станция Modbus RTU
Модули S7-1200, поддерживающие режим связи Modbus RTU, могут использоваться как ведущие станции Modbus RTU. Ниже в качестве примеров используются модули CPU1215C DC / DC / DC и CM1241 RS485 для ознакомления с этапами настройки связи и программирования главной станции S7-1200 Modbus RTU.
Аппаратные и программные требования и выполненные коммуникационные задачи:
аппаратное обеспечение:
① CPU1215C DC / DC / DC (номер для заказа: 6ES7 215-1AG31-0XB0)
② CM1241 RS485 (номер для заказа: 6ES7 241-1CH30-0XB0)
③ Блок питания PS 307 (номер для заказа: 6ES7307-1KA02-0AA0)
④ ПК (с картой Ethernet)
⑤ Кабель TP Ethernet
программного обеспечения:
① STEP 7 Professional V11 SP2 UPD4+HSP
② ModSim (это программное обеспечение стороннего производителя, которое можно загрузить из Интернета)
Коммуникационные задачи выполнены:
Считайте данные в 5 словах адреса Modbus, начиная с 40001 в подчиненной станции Modbus RTU ModSim, в 5 слов адреса, начиная с DB1.DBW0 в главной станции Modbus RTU CPU1215C.
1. Настройте коммуникационный модуль Modbus RTU.
Найдите «Коммуникационный модуль» → «Точка-точка» → «CM1241 (RS485)» в каталоге оборудования, дважды щелкните или перетащите этот модуль в левую часть ЦП, как показано на рисунке 1 ниже:
Рисунок 1 Настройка коммуникационного модуля
Затем с помощью мыши выберите модуль CM1241 (RS485) в «Обзоре устройств» и настройте параметры аппаратного интерфейса этого модуля в «Свойства» → «Конфигурация порта». Как показано на Рисунке 2 ниже:
Следующее принимает скорость передачи = 9,6 Кбит / с, проверка четности = без проверки четности, бит данных = 8 символов, стоповый бит = 1, и другие сохраняют настройки по умолчанию в качестве примера.
Рисунок 2 Настройки порта RS485
Наконец, убедитесь, что идентификатор оборудования равен 271 в «идентификаторе оборудования», как показано на рисунке 3 ниже:
Рисунок 3 Идентификатор оборудования
2. Добавить OB запуска
В дереве проекта выберите «CPU1215C DC / DC / DC» → «Программный блок» → «Добавить новый блок», во всплывающем окне выберите «Организационный блок OB» → «Запуск», добавьте запускаемый OB 100, как показано на рисунке 4 ниже. Показать:
Рисунок 4 Добавление OB запуска
3. Вызвать инструкцию MB_COMM_LOAD.
Чтобы установить порт в режим связи Modbus RTU сразу после его запуска, в OB 100 можно вызвать команду «MB_COMM_LOAD». При вызове инструкции «MB_COMM_LOAD» интерфейс для создания соответствующего блока данных экземпляра появится автоматически, как показано на рисунке 5 ниже:
Рисунок 5 Вызов инструкции MB_COMM_LOAD
Нажмите «ОК», чтобы создать экземплярный блок данных для этой инструкции и назначить адреса каждому контакту ввода / вывода. Особое внимание следует обратить на входной вывод MB_DB, чтобы он указывал на блок данных экземпляра инструкции «MB_MASTER», как показано на рисунке 6 ниже:

Рисунок 6 Инструкция MB_COMM_LOAD
Значение параметров инструкции MB_COMM_LOAD показано в Таблице 1 ниже:
|
Штырь |
Описание |
|---|---|
|
EN |
Давать возможность |
|
REQ |
Выполните инструкцию по нарастающему фронту |
|
PORT |
Аппаратный идентификатор коммуникационного порта |
|
BAUD |
Выбор скорости передачи: 3600, 6000, 12000, 2400, 4800, 9600, 19200, 38400, 57600, 76800, 115200 (Примечание: все остальные значения недействительны) |
|
PARITY |
Выбор проверки четности: 0-нет; 1-нечетная проверка; 2-четная проверка |
|
FLOW_CTRL |
Выбор управления потоком: 0- (значение по умолчанию) без управления потоком |
|
RTS_ON_DLY |
Выбор задержки RTS: 0- (значение по умолчанию) |
|
RTS_OFF_DLY |
Выбор задержки выключения RTS: 0- (значение по умолчанию) |
|
RESP_TO |
Тайм-аут ответа: значение по умолчанию = 1000 мс. MB_MASTER определяет время (в миллисекундах) для ответа ведомого устройства. |
|
MB_DB |
Блок данных экземпляра, используемый инструкцией MB_MASTER или MB_SLAVE. |
|
DONE |
Бит завершения: устанавливается в 1, когда инструкция выполняется без ошибок. |
|
ERROR |
Бит ошибки: 0 — ошибка не обнаружена; 1 — ошибка обнаружена. Код ошибки выводится в параметре СОСТОЯНИЕ. |
|
STATUS |
Код ошибки конфигурации порта |
Таблица 1 Значение параметра инструкции MB_COMM_LOAD
4. Создайте буферы отправки и получения данных DATA_PTR.
Создайте блок БД через «Программный блок» → «Добавить новый блок», выберите «Блок данных (БД)», выберите «Стандартный, совместимый с S7-300 / 400» и нажмите кнопку «ОК». Создайте в БД массив из 5 слов, как показано на рисунке 7 ниже:

Рисунок 7 Создание буфера отправки и получения данных DATA_PTR
5. Вызвать инструкцию MB_MASTER.
Вызовите инструкцию «MB_MASTER» в OB1, и интерфейс для создания соответствующего экземпляра блока данных автоматически появится при вызове этой инструкции, как показано на рисунке 8 ниже:
Рисунок 8 Вызов инструкции MB_MASTER
Нажмите «ОК», чтобы создать блок фоновых данных для этой инструкции, и назначьте адреса каждому контакту ввода / вывода, как показано на рисунке 9 ниже:

Возьмите S7-1200 в качестве ведущей станции Modbus RTU, используйте код функции F03 для чтения ведомой станции 2 Modbus RTU, пять слов, начиная с адреса Modbus 40001, и полученные данные сохраняются в начальной области буфера DB3.DBW0 как пример. Настройки следующие: MB_ADDR = 2, MODE = 0, DATA_ADDR = 40001, DATA_LEN = 5.
Соответствие адресов показано в Таблице 2 ниже:
| Мастер-станция Modbus RTU Адрес буфера данных CPU1215C | Адрес Modbus ведомого устройства Modbus RTU |
| DB3.DBW0 | 40001 |
| DB3.DBW2 | 40002 |
| DB3.DBW4 | 40003 |
| DB3.DBW6 | 40004 |
| DB3.DBW8 | 40005 |
Таблица 2 Соответствие адреса Modbus
Рисунок 9 Инструкция MB_MASTER
Значение параметров инструкции MB_MASTER показано в Таблице 3 ниже:
| Штырь | Описание |
|
EN |
Давать возможность |
|
REQ |
Выполнение инструкции по нарастающему фронту, запрос на отправку или чтение данных на ведомое устройство Modbus. |
|
MB_ADDR |
Адрес ведомого устройства Modbus RTU. Диапазон адресов по умолчанию: от 0 до 247; расширенный диапазон адресов: от 0 до 65535. Значение 0 зарезервировано для рассылки сообщения всем ведомым устройствам Modbus. |
|
MODE |
Выбор режима: укажите тип запроса |
|
DATA_ADDR |
Начальный адрес на подчиненной станции: укажите начальный адрес данных, к которым будет осуществляться доступ на подчиненной станции Modbus. |
|
DATA_LEN |
Длина данных: укажите количество цифр или слов, к которым будет осуществляться доступ в этом запросе. |
|
DATA_PTR |
Указатель данных: укажите адрес M или DB данных для записи или чтения (тип доступа к базе данных должен быть стандартным, совместимым с S7-300 / 400). |
|
DONE |
Бит Done: после того, как последний запрос был завершен без ошибок, бит DONE останется ИСТИННЫМ в течение одного времени цикла сканирования. |
|
BUSY |
0-операция MB_MASTER не выполняется; 1-операция MB_MASTER выполняется |
|
EEROR |
Бит ошибки: после того, как предыдущий запрос был прерван из-за ошибки, бит ERROR останется ИСТИННЫМ для одного сканирования. |
|
STATUS |
код ошибки |
Таблица 3 Значение параметра инструкции MB_MASTER
О MODE, DATA_ADDR, DATA_LEN можно посмотреть в Таблице 4 ниже:
| MB_MASTER функция Modbus | ||||
|
Параметры адреса Modbus |
Тип адреса |
Параметр длины данных Modbus |
Функция Modbus |
|
| Режим 0 | ||||
|
Читать |
От 00001 до 09999 |
Выходной бит |
1 к 2000 |
01 |
|
С 10001 по 19999 |
Входной бит |
1 к 2000 |
02 |
|
|
С 30001 по 39999 |
Регистр ввода |
От 1 до 125 |
04 |
|
|
С 40001 по 49999 С 400001 по 465535 (расширенный) |
Регистр холдинга |
От 1 до 125 |
03 |
|
| Режим 1 | ||||
| Написать |
От 00001 до 09999 |
Выходной бит |
1 (один бит) |
05 |
|
С 40001 по 49999 С 400001 по 465535 (расширенный) |
Регистр холдинга |
1 (одно слово) |
06 |
|
|
От 00001 до 09999 |
Выходной бит |
2 к 1968 г. |
15 |
|
|
С 40001 по 49999 С 400001 по 465535 (расширенный) |
Регистр холдинга |
2 к 123 |
16 |
|
| Режим 2 | ||||
| Некоторые ведомые устройства Modbus не поддерживают использование функции Modbus 05H или 06H для записи одного бита или слова. В этом случае функция Modbus может быть вынуждена использовать 15H или 16H для записи одного бита или слова в режиме 2. | ||||
|
Написать |
От 00001 до 09999 |
Выходной бит |
2 к 1968 г. |
15 |
|
С 40001 по 49999 С 400001 по 465535 (расширенный) |
Регистр холдинга |
1 к 123 |
16 |
|
| Узор 11 | ||||
|
Считайте слово состояния связи и счетчик событий ведомого устройства: слово состояния указывает состояние выполнения инструкции (0: не выполняется; 0xFFFF: выполняется). Каждый раз, когда сообщение успешно доставлено, значение счетчика событий будет увеличиваться. При использовании этой функции игнорируйте параметры DATA_ADDR и DATA_LEN инструкции «MB_MASTER». |
||||
| Режим 80 | ||||
|
Проверьте состояние ведомого устройства, прочитав код ошибки (0x0000): 1 слово на запрос |
||||
| Узор 81. | ||||
|
Сброс счетчика событий ведомого через диагностический код 0x000A: 1 слово на запрос |
Таблица 4 Таблица функций MB_MASTER Modbus
6. Настройки программного обеспечения Modbus Slave

Установите соединение в открытом программном обеспечении ModSim и установите параметры режима RTU: скорость передачи данных Baud = 9600, бит данных Data = 8, стоповый бит Stop = 1, четность = NONE, как показано на рисунке 10 ниже:
Рисунок 10 Установка соединения ModSim
Выберите «Файл» → «Новый», чтобы открыть интерфейс связи ModSim, установите адрес ведомого устройства Modbus RTU Id устройства = 2, начальный адрес Address = 0001, длину данных = 5, код функции типа данных Modbus 03. Дважды щелкните область данных за каждым адресом Modbus, и появится диалоговое окно «Регистр записи», где вы можете записать значения данных, как показано на рисунке 11 ниже:

Рисунок 11 Настройка ModSim
7. Результаты тестирования Modbus RTU.
Откройте «Таблицу мониторинга» проекта CPU1215C DC / DC / DC в программном обеспечении STEP 7 Professional V11 UPD4 и активируйте входной бит M10.0 инструкции «MB_MASER». Ведущее устройство Modbus RTU считывает значение 11 в адресе 40001 подчиненного устройства ModSim, значение 12 в 40002, значение 13 в 40003, значение 14 в 40004 и значение 15 в 40005, соответственно, по адресам DB3.DBW0 и DB3. . DBW2, DB3.DBW4, DB3.DBW6, DB3.DBW8, как показано на рисунке 12 ниже:
Рисунок 12 Результаты тестирования Modbus RTU
Многоадресный или многосайтовый опрос в режиме связи S7-1200 Modbus RTU
Несколько коммуникационных модулей CM 1241 RS485 могут быть подключены друг к другу с помощью кабелей PROFIBUS. Одна ведущая станция и до 31 ведомой станции MODBUS могут быть подключены к сети с помощью кабелей PROFIBUS.
При опросе S7-1200 Modbus RTU необходимо запустить следующую команду «MB_MASTER» через выходной бит предыдущей команды «MB_MASTER» «Готово» = 1. Для получения конкретных инструкций и идей по программированию перейдите по следующей ссылке:
Как использовать STEP 7 (TIA Portal) V11 для установления связи Modbus RTU для SIMATIC S7-1200?
http://support.automation.siemens.com/CN/view/zh/47756141
Инструкции MB_COMM_LOAD и MB_MASTER Код ошибки STATUS
| STATUS(W#16#) | Описание |
| 0000 | Ошибок на порте нет |
| 8180 | Неверное значение идентификатора порта |
| 8181 | Неверное значение скорости передачи |
| 8182 | Недействительное значение четности |
| 8183 | Неверное значение управления потоком |
| 8184 | Неверное значение тайм-аута ответа |
| 8185 | Параметр MB_DB не является блоком данных экземпляра MB_MASTER или MB_SLAVE |
Таблица 5 Код ошибки STATUS инструкции MB_COMM_LOAD
| STATUS(W#16#) |
Описание |
| 0000 |
Нет ошибки |
| 80C8 |
Время ожидания ведомого истекло. Проверьте скорость передачи, проверку четности и подключение ведомого устройства. |
| 80D1 |
Получатель отправил запрос управления потоком для приостановки активной передачи и не активировал передачу в течение указанного времени ожидания. Если приемник не обнаруживает CTS в течение времени ожидания, эта ошибка также будет сгенерирована во время аппаратного управления потоком. |
| 80D2 |
Поскольку от DCE не поступил сигнал DSR, запрос на передачу был прекращен. |
| 80E0 |
Буфер приема заполнен, и сообщение завершено. |
| 80E1 |
Ошибка четности, сообщение прервано |
| 80E2 |
Ошибка кадрирования, сообщение прервано |
| 80E3 |
Ошибка тайм-аута, сообщение было прервано |
| 80E4 |
Указанная длина превышает общий размер буфера, и сообщение прекращается. |
| 8180 |
Неверное значение идентификатора порта |
| 8186 |
Недействительный адрес станции Modbus |
| 8188 |
Для широковещательных вызовов значение параметра MODE недопустимо. |
| 8189 |
Значение адреса данных недействительно |
| 818A |
Неверное значение длины данных |
| 818B |
Неверный указатель на локальный источник / цель данных |
| 818C |
Указатель на DATA_PTR недействителен: используйте указатель на битовую область хранения или блок данных, тип доступа которого «стандартно совместим с S7-300 / 400». |
| 8200 |
Порт занят обработкой запроса на передачу |
Таблица 6 Код ошибки STATUS инструкции MB_MASTER (сообщение об ошибке связи и конфигурации инструкции)
| STATUS(W#16#) | Код ответа от ведомого |
Описание |
| 8380 | — |
CRC ошибка |
| 8381 | 01 |
Этот код функции не поддерживается |
| 8382 | 03 |
Ошибка длины данных |
| 8383 | 02 |
Адрес данных неверен или адрес превышает допустимый диапазон DATA_PTR |
| 8384 | >03 |
Ошибка значения данных |
| 8385 | 03 |
Этот диагностический код данных не поддерживается |
| 8386 | — |
Код функции в ответе не соответствует коду функции в передаче. |
| 8387 | — |
Ответная ошибка ведомого |
| 8388 | — |
Ответ ведомого устройства на запрос записи неверен |
Таблица 7 Код ошибки STATUS инструкции MB_MASTER (сообщение об ошибке протокола Modbus)
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ:

Вы можете проверить состояние выходных битов «DONE», «ERROR» и «STATUS» инструкции «MB_COMM_LOAD» в программе или таблице мониторинга, чтобы определить, был ли коммуникационный модуль S7-1200 CM1241 успешно настроен на связь Modbus RTU. режим.
- Если модуль успешно установлен в режим связи Modbus RTU: «MB_COMM_LOAD», выходной бит команды «DONE» = 1, «ERROR» = 0, слово состояния выхода «STATUS» = 0;
- Если модуль не был успешно установлен в режим связи Modbus RTU: «MB_COMM_LOAD», выходной бит команды «DONE» = 0, «ERROR» = 1, слово состояния выхода «STATUS», код ошибки выхода. Пожалуйста, обратитесь к таблице «Код ошибки STATUS инструкции MB_COMM_LOAD», чтобы узнать о конкретных причинах ошибки.

Поскольку порт занят обработкой запроса на передачу. Когда возникает эта ошибка, проверьте, запускается ли входной бит инструкции «MB_MASTER» «REQ» по нарастающему фронту или выполняются ли другие несколько инструкций «MB_MASTER».

После того, как последний запрос инструкции «MB_MASTER» завершен из-за ошибки, бит ERROR останется ИСТИННЫМ в течение одного времени цикла сканирования, а значение кода ошибки в параметре STATUS действительно только для одного цикла сканирования, когда ERROR = TRUE, поэтому он не может передавать программу или контролировать табличное представление. Параметры ERROR и STATUS могут быть считаны с использованием метода программирования, показанного ниже.

Обычно «EXTENDED_ADDRESSING» в блоке данных экземпляра «MB_MASTER_DB» инструкции «MB_MASTER» по умолчанию равен 0, и можно получить доступ к адресу ведомого устройства Modbus RTU 0–247.
Установите «EXTENDED_ADDRESSING» в блоке данных экземпляра «MB_MASTER_DB» инструкции «MB_MASTER» на 1, чтобы включить расширенную адресацию 0-65535 к ведомому устройству Modbus RTU. Чтобы установить EXTENDED_ADDRESSING, выполните следующие действия:
Сначала найдите «системный блок» → «программный ресурс», дважды щелкните «MB_MASTER_DB» и проверьте «EXTENDED_ADDRESSING» в блоке данных экземпляра «MB_MASTER_DB» инструкции «MB_MASTER».
Введите «MB_MASTER_DB.EXTENDED_ADDRESSING» в «Таблицу мониторинга» и установите бит в 1.
S7-1200 В качестве ведомого устройства Modbus RTU
Модули S7-1200, поддерживающие режим связи Modbus RTU, могут использоваться в качестве ведомых устройств Modbus RTU. Ниже в качестве примеров используются CPU1215C DC / DC / DC и CM1241 RS485 для ознакомления с этапами настройки и программирования связи ведомого устройства S7-1200 Modbus RTU.
Аппаратные и программные требования и выполненные коммуникационные задачи:
аппаратное обеспечение:
① CPU1215C DC / DC / DC (номер для заказа: 6ES7 215-1AG31-0XB0)
② CM1241 RS485 (номер для заказа: 6ES7 241-1CH30-0XB0)
③ Блок питания PS 307 (номер для заказа: 6ES7307-1KA02-0AA0)
④ ПК (с картой Ethernet)
⑤ Кабель TP Ethernet
программного обеспечения:
① STEP 7 V11 Professional SP2 UPD4 +HSP
② ModScan (это программное обеспечение стороннего производителя, которое можно загрузить из Интернета)
Коммуникационные задачи выполнены:
Считайте данные в 5 словах, начиная с DB1.DBW0 в Modbus RTU Slave CPU1215C, в 5 слов, начиная с 40001 в ModScan ведущего Modbus RTU.
1. Настройте коммуникационный модуль Modbus RTU.
Найдите «Коммуникационный модуль» → «Точка-точка» в каталоге оборудования.→«CM1241 (RS485)», дважды щелкните или перетащите этот модуль в левую часть ЦП, как показано на Рисунке 1 ниже:
Рисунок 1 Настройка коммуникационного модуля
Затем с помощью мыши выберите модуль CM1241 (RS485) в «Обзоре устройств» и настройте параметры аппаратного интерфейса этого модуля в «Свойства» → «Конфигурация порта». Как показано на Рисунке 2 ниже:
Следующее принимает скорость передачи = 9,6 Кбит / с, проверка четности = без проверки четности, бит данных = 8 символов, стоповый бит = 1, и другие сохраняют настройки по умолчанию в качестве примера.
Рисунок 2 Настройки порта RS485
Наконец, убедитесь, что идентификатор оборудования равен 271 в «идентификаторе оборудования», как показано на рисунке 3 ниже:
Рисунок 3 Идентификатор оборудования
2. Добавить OB запуска
В дереве проекта выберите «CPU1215C DC / DC / DC» → «Программный блок» → «Добавить новый блок», во всплывающем окне выберите «Организационный блок OB» → «Запуск», добавьте OB запуска 100, как показано на рисунке 4 ниже Показать:
Рисунок 4 Добавление OB запуска
3. Вызвать инструкцию MB_COMM_LOAD.
Чтобы установить порт в режим связи Modbus RTU сразу после его запуска, в OB 100 можно вызвать команду «MB_COMM_LOAD». При вызове инструкции «MB_COMM_LOAD» интерфейс для создания соответствующего блока данных экземпляра появится автоматически, как показано на рисунке 5 ниже:
Рисунок 5 Вызов инструкции MB_COMM_LOAD
Нажмите «ОК», чтобы создать экземплярный блок данных для этой инструкции и назначить адреса каждому контакту ввода / вывода. Обратите особое внимание на входной вывод MB_DB, чтобы он указывал на блок фоновых данных инструкции «MB_SLAVE», как показано на рисунке 6 ниже:

Рисунок 6 Инструкция MB_COMM_LOAD
Значение параметров инструкции MB_COMM_LOAD показано в Таблице 1 ниже:
|
Штырь |
Описание |
|---|---|
|
EN |
Давать возможность |
|
REQ |
Выполните инструкцию по нарастающему фронту |
|
PORT |
Аппаратный идентификатор коммуникационного порта |
|
BAUD |
Выбор скорости передачи: 3600, 6000, 12000, 2400, 4800, 9600, 19200, 38400, 57600, 76800, 115200 (Примечание: все остальные значения недействительны) |
|
PARITY |
Выбор проверки четности: 0-нет; 1-нечетная проверка; 2-четная проверка |
|
FLOW_CTRL |
Выбор управления потоком: 0- (значение по умолчанию) без управления потоком |
|
RTS_ON_DLY |
Выбор задержки RTS: 0- (значение по умолчанию) |
|
RTS_OFF_DLY |
Выбор задержки выключения RTS: 0- (значение по умолчанию) |
|
RESP_TO |
Тайм-аут ответа: значение по умолчанию = 1000 мс. MB_MASTER определяет время (в миллисекундах) для ответа ведомого устройства. |
|
MB_DB |
Блок данных экземпляра, используемый инструкцией MB_MASTER или MB_SLAVE. |
|
DONE |
Бит завершения: устанавливается в 1, когда инструкция выполняется без ошибок. |
|
ERROR |
Бит ошибки: 0 — ошибка не обнаружена; 1 — ошибка обнаружена. Код ошибки выводится в параметре СОСТОЯНИЕ. |
|
STATUS |
Код ошибки конфигурации порта |
Таблица 1 Значение параметра инструкции MB_COMM_LOAD
4. Создайте блок данных MB_HOLD_REG.
Создайте блок БД через «Программный блок» → «Добавить новый блок», выберите «Блок данных (БД)», выберите «Стандартный, совместимый с S7-300 / 400», нажмите «ОК», чтобы определить область данных как массив из 5 слов. , как показано на рисунке 7 ниже:
Примечание. Тип доступа к БД, используемый MB_HOLD_REG, должен быть стандартным и совместимым с S7-300 / 400.
Рисунок 7 Создание блока данных MB_HOLD_REG
5. Вызвать инструкцию MB_SLAVE.
Вызовите инструкцию MB_SLAVE в OB1, и интерфейс для создания соответствующего блока фоновых данных автоматически появится при вызове этой инструкции, как показано на рисунке 8 ниже:
Рисунок 8 Вызов инструкции MB_SLAVE
Нажмите «ОК», чтобы создать блок фоновых данных для этой инструкции, и назначьте адреса каждому контакту ввода / вывода, как показано на рисунке 9 ниже:
S7-1200 служит в качестве ведомого устройства Modbus RTU, MB_HOLD_REG указывает на указатель блока данных регистра временного хранения Modbus. Настройки следующие: MB_HOLD_REG = P # DB3.DBX0.0 WORD 5.
Соответствующее соотношение показано в Таблице 2 ниже:
| Главная станция Modbus RTU Адрес Modbus | Адрес буфера данных подчиненного устройства Modbus RTU CPU1215C |
| 40001 | DB3.DBW0 |
| 40002 | DB3.DBW2 |
| 40003 | DB3.DBW4 |
| 40004 | DB3.DBW6 |
| 40005 | DB3.DBW8 |
Таблица 2 Соответствие адреса Modbus
Рисунок 9 Инструкция MB_SLAVE
| Штырь | Описание |
|
EN |
Давать возможность |
|
MB_ADDR |
Адрес станции ведомого устройства Modbus. Диапазон адресов по умолчанию: от 0 до 247; расширенный диапазон адресов: от 0 до 65535 |
|
MB_HOLD_REG |
Указатель на блок данных регистра временного хранения Modbus. Блок данных должен быть создан с типом доступа «стандартно совместим с S7-300 / 400». |
|
NDR |
Готовы новые данные: 0 — нет новых данных; 1 — указывает, что главная станция Modbus записала новые данные |
|
DR |
Считывание данных: 0 — данные не считываются; 1 — указывает, что главная станция Modbus прочитала новые данные |
|
ERROR |
Бит ошибки |
|
STATUS |
код ошибки |
Таблица 3 Значение параметра инструкции MB_SLAVE
| MB_SLAVE Функция Modbus | S7-1200 | ||||
| Код | Функции | Область данных | Диапазон адресов | Область данных | Адрес процессора |
| 01 | Прочитать бит | Выход | 1 к 8192 | Область изображения процесса вывода | Q0.0 — Q1023.7 |
| 02 | Прочитать бит | войти | С 10001 по 18192 | Область входного изображения | От I0.0 до I1023.7 |
| 04 | Чтение | войти | С 30001 по 30512 | Область входного изображения | IW0 — IW1022 |
| 05 | Бит записи | Выход | 1 к 8192 | Область изображения процесса вывода | Q0.0 — Q1023.7 |
| 15 | Бит записи | Выход | 1 к 8192 | Область изображения процесса вывода | Q0.0 — Q1023.7 |
Таблица 4 Отображение адреса Modbus в область образа процесса
| MB_SLAVE Функция Modbus | S7-1200 | ||||
| Код | Функции | Область данных | Диапазон адресов | Область данных БД ЦП | Адрес процессора |
| 03 | Чтение | Регистр холдинга | С 40001 по 49999 | MB_HOLD_REG | Слово 1 в слово 9999 |
| С 400001 по 465535 | Слово 1 в слово 65535 | ||||
| 06 | Письмо | Регистр холдинга | С 40001 по 49999 | MB_HOLD_REG | Слово 1 в слово 9999 |
| С 400001 по 465535 | Слово 1 в слово 65535 | ||||
| 16 | Письмо | Регистр холдинга | С 40001 по 49999 | MB_HOLD_REG | Слово 1 в слово 9999 |
| С 400001 по 465535 | Слово 1 в слово 65535 |
Таблица 5 Сопоставление адреса Modbus с областью хранения ЦП
6. Настройки главного программного обеспечения Modbus.

Сначала установите соединение в открытом программном обеспечении ModScan и установите параметры режима RTU: скорость передачи данных Baud = 9600, бит данных Data = 8, стоповый бит Stop = 1, четность = NONE, как показано на рисунке 10 ниже:
Рисунок 10 Установка соединения ModScan
Выбрать файл»→«Новый» Откройте интерфейс связи ModScan, установите адрес подчиненного устройства Modbus RTU Device Id = 1, начальный адрес данных Address = 0001, длину данных = 5, код функции типа данных Modbus 03, как показано на рисунке 11 ниже:

Рисунок 11 Настройка ModScan
7. Результаты тестирования Modbus RTU.
Откройте «таблицу мониторинга» проекта CPU1215 DC / DC / DC в программном обеспечении STEP 7 V11 Professional SP2 UPD4, запишите значение 21 в DB3.DBW0, запишите значение 22 в DB3.DBW2, запишите значение 23 в DB3. DBW4 и DB3. DBW6 записывает значение 24, а DB3.DBW8 записывает значение 25. Главная станция ModScan считывает значение 21 адреса подчиненной станции S7-1200 Modbus RTU DB3.DBW0, значение 22 DB3.DBW2, значение 23 DB3.DBW4, значение 24 DB3.DBW6 и значение 25 DB3.DBW8 соответственно.Прибыл по адресам 40001, 40002, 40003, 40004, 40005. Как показано на Рисунке 12 ниже:
Рисунок 12 Результаты тестирования Modbus RTU
Инструкции MB_COMM_LOAD и MB_SLAVE Код ошибки STATUS
| STATUS(W#16#) | Описание |
| 0000 | Ошибок на порте нет |
| 8180 | Неверное значение идентификатора порта |
| 8181 | Неверное значение скорости передачи |
| 8182 | Недействительное значение четности |
| 8183 | Неверное значение управления потоком |
| 8184 | Неверное значение тайм-аута ответа |
| 8185 | Параметр MB_DB не является блоком данных экземпляра MB_MASTER или MB_SLAVE |
Таблица 6 Код ошибки STATUS инструкции MB_COMM_LOAD
| STATUS(W#16#) | Описание |
| 0000 | Нет ошибки |
| 80D1 | Получатель выдал запрос управления потоком для приостановки активной передачи и не активировал передачу в течение указанного времени ожидания. |
| 80D2 | Запрос на передачу прекращен |
| 80E0 | Сообщение было прервано, потому что буфер приема был заполнен |
| 80E1 | Сообщение было прервано из-за ошибки четности |
| 80E2 | Сообщение было прервано из-за ошибки кадрирования |
| 80E3 | Сообщение было прервано из-за ошибки переполнения |
| 80E4 | Сообщение было прервано, поскольку указанная длина превышает общий размер буфера. |
| 8180 | Неверное значение идентификатора порта или ошибка команды MB_COMM_LOAD |
| 8186 | Недействительный адрес станции Modbus |
| 8187 | Неверный указатель на MB_HOLD_REG |
| 818C | Указатель MB_HOLD_REG на память M или DB (адрес символа и прямой адрес, разрешенный в области DB) недействителен. |
Таблица 7 Значение параметра STATUS инструкции MB_SLAVE (ошибка связи и конфигурации)
| STATUS(W#16#) |
Код ответа от ведомого |
Описание |
| 8380 | Не отвечает | CRC ошибка |
| 8381 | 01 |
Код функции не поддерживается или код функции не поддерживается в трансляции |
| 8382 | 03 | Ошибка длины данных |
| 8383 | 02 | Адрес данных неверен или адрес превышает допустимый диапазон, взятый DATA_PTR |
| 8384 | 03 | Ошибка значения данных |
| 8385 | 03 | Это значение диагностического кода данных не поддерживается |
Таблица 8 Значение параметра STATUS инструкции MB_SLAVE (ошибка протокола Modbus)
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ:

Слово состояния вывода «STATUS» = 16 # 8187 указывает, что указатель на MB_HOLD_REG недействителен. Следующие две ситуации вызовут указанную выше ошибку:
- В программе нет блока DB, соответствующего входному выводу «MB_HOLD_REG» инструкции «MB_SLAVE».
- При создании блока DB, соответствующего входному выводу «MB_HOLD_REG» инструкции «MB_SLAVE», была выбрана «Только адресация символа».
Решения следующие:
- Создайте новый блок DB, соответствующий входному выводу «MB_HOLD_REG» инструкции «MB_SLAVE».
- При создании блока DB, соответствующего входному выводу «MB_HOLD_REG» инструкции «MB_SLAVE», можно выбрать только «стандарт, совместимый с S7-300 / 400».
Параметр тайм-аута подключения
Когда сеть связи S7-1200 Mobus RTU содержит несколько подчиненных станций, из-за характеристик сети опроса, данные только одной станции могут быть прочитаны или записаны одновременно. Таким образом, следующие факторы будут влиять на окончательное общее время опроса:
1. Время установки скорости передачи данных (бод).
2. Объем коммуникационных данных на сайт.
3. Количество станций
4. Расстояние связи
5. Время подключения каждого сайта.
Будь то помехи сигнала, качество оборудования или временное отключение станции из-за инженерных нужд, время опроса системы связи будет значительно увеличено из-за увеличения «времени соединения каждой станции». В связи Modbus RTU S7-1200 есть в основном три параметра, относящиеся к настройке «времени соединения каждой станции».
1. Время отклика ведомого RESP_TO
Как показано на рисунке 1, блок инициализации MB_COMM_LOAD версии V2.x может установить параметр RESP_TO времени отклика ведомого устройства:
Установите время ответа ведомой станции с одним подключением в диапазоне от 5 мс до 65535 мс (по умолчанию 1000 мс); то есть, если ведомая станция не отвечает в течение этого периода времени, MB_MASTER завершит запрос после отправки указанного количества запросов на повтор. И это вызывает сообщение об ошибке 80C8.
Рисунок 1. Настройки параметра RESP_TO

Рисунок 2. Время отклика ведомого.
2. Количество повторных попыток RETRIES
В блоке данных экземпляра функционального блока инициализации MB_COMM_LOAD вы можете установить параметр RETRIES для количества попыток:
Количество попыток до того, как главная станция вернет код ошибки отсутствия ответа 0x80C8. (Значение по умолчанию — 2 раза)
Рисунок 3 Настройки параметра RETRIES

3. Параметр синхронизации ведущей станции Blocked_Proc_Timeout
Когда Done и Error не установлены в 1 по каким-либо причинам (например, запрос главной станции, но вызов функционального блока главной станции останавливается до того, как запрос будет полностью завершен), необходимо указать время синхронизации, который устанавливается после наступления времени Бит для выполнения следующего функционального блока или опроса следующей станции.
Блок фоновых данных MB_Master предоставляет параметр синхронизации главной станции Blocked_Proc_Timeout (диапазон от 0 до 5,5 с, по умолчанию 3 с)
Предыдущий RESP_TO соответствует времени ответа подчиненной станции, а Blocked_Proc_Timeout — времени синхронизации главной станции.Этот функциональный параметр используется для предотвращения монополизации или блокировки доступа к порту отдельной инструкцией MB_Master.
Рисунок 4. Настройки параметра Blocked_Proc_Timeout
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ:

Как правило, S7-1200 может одновременно настраивать два параметра: время отклика подчиненной станции RESP_TO и количество повторных попыток RETRIES, которые используются для уменьшения увеличенного времени цикла опроса, когда подчиненная станция Modbus отключается или временно выключается. .
Пример: по умолчанию система пытается подключиться 3 раза, каждый раз по 1 с, всего 3 с;
Время отклика RESP_TO подчиненной станции может быть соответствующим образом уменьшено в соответствии с фактическими рабочими условиями проекта. Это время невозможно оценить.Рекомендуется протестировать несколько раз, чтобы убедиться, что каждая подчиненная станция может быть подключена нормально и стабильно, и установить это время как можно меньшим.
Возьмем для примера настройку 500 мс. Затем установите RETRIES на 0. То есть для каждой подчиненной станции главная станция пытается подключиться только один раз, что в сумме занимает 500 мс.

Эта ситуация вызвана тем, что ни DONE, ни ERROR для MB_MASTER не установлены, что конфликтует с последующим MB_MASTER. Убедитесь, что время для подключения к следующему MB_MASTER больше, чем установленное время Blocked_Proc_Timeout (по умолчанию 3S).
This section:
First, S7-1200As a Modbus RTU master station
Second, S7-1200As a Modbus RTU slave
Third, S7-1200As a Modbus RTU master station
S7-1200 As a Modbus RTU master station
The S7-1200 module supporting Modbus RTU communication mode can be used as a Modbus RTU master. The following takes the CPU1215C DC/DC/DC and CM1241 RS485 modules as an example to introduce the communication configuration and programming steps of the S7-1200 Modbus RTU master station.
Hardware and software requirements and completed communication tasks:
hardware:
1 CPU1215C DC/DC/DC (Order No.: 6ES7 215-1AG31-0XB0)
2 CM1241 RS485 (Order No.: 6ES7 241-1CH30-0XB0)
3 PS 307 power supply (order number: 6ES7307-1KA02-0AA0)
4 PC (with Ethernet card)
5 TP Ethernet cable
software:
① STEP 7 Professional V11 SP2 UPD4+HSP
2 ModSim (this software is a third-party software that can be downloaded from the Internet)
Completed communication tasks:
The data from the 5 words of Modbus RTU slave ModSim from 40001 is read into the 5 words of the Modbus RTU master CPU1215C starting from DB1.DBW0.
1. Configure the Modbus RTU communication module
In the hardware catalog, find «Communication Module» → «Point to Point» → «CM1241 (RS485)», double click or drag this module to the left side of the CPU, as shown in Figure 1 below:
Figure 1 Configuration Communication Module
Next, select the CM1241 (RS485) module with the mouse in the «Device View» and configure the hardware interface parameters of this module in «Properties» → «Port Configuration». As shown in Figure 2 below:
The following is the transmission rate = 9.6Kbps, parity = no parity, data bits = 8 characters, stop bit = 1, other keep the default settings as an example.
Figure 2 RS485 port settings
Finally, in the «Hardware Identifier», confirm that the hardware identifier is 271, as shown in Figure 3 below:
Figure 3 hardware identifier
2. Add a startup OB
Select «CPU1215C DC/DC/DC» → «Program Block» → «Add New Block» in the project tree. In the pop-up window, select «OB Organization Block» → «Startup» and add the startup OB 100, as shown in Figure 4 below. Show:
Figure 4 Adding a startup OB
3. Call the MB_COMM_LOAD instruction
The «MB_COMM_LOAD» instruction can be called in OB 100 in order to enable the port to be set to Modbus RTU communication mode upon startup. When the «MB_COMM_LOAD» instruction is called, the interface for creating the corresponding instance data block will pop up automatically, as shown in Figure 5 below:
Figure 5 calls the MB_COMM_LOAD instruction
After clicking «Confirm» to create an instance DB for this instruction, assign an address to each I/O pin. In particular, note that the MB_DB input pin needs to point to the instance data block of the «MB_MASTER» instruction, as shown in Figure 6 below:

Figure 6 MB_COMM_LOAD instruction
The meaning of the MB_COMM_LOAD instruction parameter is shown in Table 1 below:
|
Pin |
Description |
|---|---|
|
EN |
Enable end |
|
REQ |
Execute the instruction on the rising edge |
|
PORT |
Hardware identifier of the communication port |
|
BAUD |
Baud rate selection: 3600, 6000, 12000, 2400, 4800, 9600, 19200, 38400, 57600, 76800, 115200 (Note: all other values are invalid) |
|
PARITY |
Parity selection: 0-none; 1-odd check; 2-even check |
|
FLOW_CTRL |
Flow control selection: 0- (default) no flow control |
|
RTS_ON_DLY |
RTS delay selection: 0- (default) |
|
RTS_OFF_DLY |
RTS turn-off delay selection: 0- (default) |
|
RESP_TO |
Response timeout: Default = 1000 ms. MB_MASTER The time (in milliseconds) allowed for the slave to respond. |
|
MB_DB |
The instance DB used for the MB_MASTER or MB_SLAVE instruction. |
|
DONE |
Completion bit: The instruction execution is completed and no error is set. |
|
ERROR |
Error bit: 0 — no error detected; 1 — an error was detected. The error code is output in the parameter STATUS. |
|
STATUS |
Port configuration error code |
Table 1 MB_COMM_LOAD instruction parameter meaning
4. Create DATA_PTR data send and receive buffers
Create a DB block with «Program block» → «Add new block», select «Data block (DB)», select «Standard compatible with S7-300/400» and click the «Confirm» button. Create an array of 5 words in the DB, as shown in Figure 7 below:

Figure 7 Create DATA_PTR data transmission and receive buffer
5. Call the MB_MASTER command
The «MB_MASTER» instruction is called in OB1. When the instruction is called, the interface for creating the corresponding instance data block is automatically popped up, as shown in Figure 8 below:
Figure 8 calls the MB_MASTER instruction
Click «Confirm» to create an instance DB for this instruction and assign an address to each I/O pin, as shown in Figure 9 below:

The following uses S7-1200 as the Modbus RTU master station, reads the Modbus RTU slave station 2 with the F03 function code, and five words starting from the Modbus address 40001. The received data is stored in the buffer DB3.DBW0 start area as an example. The settings are as follows: MB_ADDR=2, MODE=0, DATA_ADDR=40001, DATA_LEN=5.
The address correspondence is shown in Table 2 below:
| Modbus RTU master CPU1215C data buffer address | Modbus RTU slave Modbus address |
| DB3.DBW0 | 40001 |
| DB3.DBW2 | 40002 |
| DB3.DBW4 | 40003 |
| DB3.DBW6 | 40004 |
| DB3.DBW8 | 40005 |
Table 2 Modbus address correspondence
Figure 9 MB_MASTER instruction
The meaning of the MB_MASTER instruction parameter is shown in Table 3 below:
| Pin | Description |
|
EN |
Enable end |
|
REQ |
Execute this instruction on the rising edge, requesting to send or read data to the Modbus slave |
|
MB_ADDR |
Modbus RTU slave address. Default address range: 0 to 247; extended address range: 0 to 65535. A value of 0 is reserved for broadcasting messages to all Modbus slaves. |
|
MODE |
Mode selection: Specify request type |
|
DATA_ADDR |
Start address in the slave: Specify the starting address of the data to be accessed in the Modbus slave. |
|
DATA_LEN |
Data Length: Specify the number of digits or words to access in the request. |
|
DATA_PTR |
Data pointer: Point to the M or DB address of the data to be written or read (DB access type must be standard compatible with S7-300/400). |
|
DONE |
Completion bit: The DONE bit will remain TRUE for one scan cycle time after the last request has been completed and there are no errors. |
|
BUSY |
0 – no MB_MASTER operation in progress; 1 – MB_MASTER operation in progress |
|
EEROR |
Error bit: After the last request was terminated due to an error, the ERROR bit will remain TRUE for a sweep. |
|
STATUS |
error code |
Table 3 MB_MASTER instruction parameter meaning
For MODE, DATA_ADDR, DATA_LEN can be viewed in Table 4 below:
| MB_MASTER Modbus function | ||||
|
Modbus address parameter |
Address type |
Modbus data length parameter |
Modbus function |
|
| Mode 0 | ||||
|
Read |
00001 to 09999 |
Output bit |
1 to 2000 |
01 |
|
10001 to 19999 |
Input bit |
1 to 2000 |
02 |
|
|
30001 to 39999 |
Input register |
1 to 125 |
04 |
|
|
40001 to 49999 400001 to 465535 (extended) |
Holding register |
1 to 125 |
03 |
|
| Mode 1 | ||||
| Write |
00001 to 09999 |
Output bit |
1 (single bit) |
05 |
|
40001 to 49999 400001 to 465535 (extended) |
Holding register |
1 (single word) |
06 |
|
|
00001 to 09999 |
Output bit |
2 to 1968 |
15 |
|
|
40001 to 49999 400001 to 465535 (extended) |
Holding register |
2 to 123 |
16 |
|
| Mode 2 | ||||
| Some Modbus slaves do not support writing a single bit or word using the Modbus function 05H or 06H. In this case, a single bit or word can be written by mode 2 using the Modbus function 15H or 16H. | ||||
|
Write |
00001 to 09999 |
Output bit |
2 to 1968 |
15 |
|
40001 to 49999 400001 to 465535 (extended) |
Holding register |
1 to 123 |
16 |
|
| Mode 11 | ||||
|
The communication status word and event counter of the slave are read: the status word indicates the execution status of the instruction (0: not executing; 0xFFFF: executing). The event counter value is incremented each time a message is successfully transmitted. When using this function, the DATA_ADDR and DATA_LEN parameters of the «MB_MASTER» instruction are ignored. |
||||
| Mode 80 | ||||
|
Check the slave status by reading the error code (0x0000): 1 word per request |
||||
| Mode 81 | ||||
|
Reset the event counter of the slave with diagnostic code 0x000A: 1 word per request |
Table 4 MB_MASTER Modbus function table
6. Modbus slave software settings

Establish a connection in the open ModSim software and set the parameters of the RTU mode: baud rate Baud=9600, data bit Data=8, stop bit Stop=1, check Parity=NONE, as shown in Figure 10 below:
Figure 10 Establishing a ModSim connection
Select “File” → “New” to open the ModSim communication interface, set the Modbus RTU slave address Device Id=2, start address Address=0001, data length Length=5, Modbus data type function code 03. Double-click the data area after each Modbus address, and the “Write Register” dialog box appears. Write the data value here, as shown in Figure 11 below:

Figure 11 Setting up ModSim
7. Modbus RTU test results
Open the «Monitoring Table» of the CPU1215C DC/DC/DC in the STEP 7 Professional V11 UPD4 software and trigger the input bit M10.0 of the «MB_MASER» instruction. The Modbus RTU master reads the value in the ModSim slave address 40001, the value 12 in the 40002, the value in the 40003, the value 14 in the 40004, and the value 15 in the 40005, respectively, to the address DB3.DBW0, DB3. DBW2, DB3.DBW4, DB3.DBW6, DB3.DBW8, as shown in Figure 12 below:
Figure 12 Modbus RTU test results
Multi-address or multi-site polling for S7-1200 Modbus RTU communication mode
Multiple CM 1241 RS485 communication modules can be connected to each other using PROFIBUS cables. You can connect 1 master and up to 31 MODBUS slaves using a PROFIBUS cable.
The S7-1200 Modbus RTU polling needs to trigger the next «MB_MASTER» command via the previous «MB_MASTER» command output bit «Done»=1. Please refer to the following link for specific instructions and programming ideas:
How do you set up Modbus RTU communication for the SIMATIC S7-1200 with STEP 7 (TIA Portal) V11?
http://support.automation.siemens.com/CN/view/zh/47756141
MB_COMM_LOAD and MB_MASTER instructions STATUS error code
| STATUS(W#16#) | Description |
| 0000 | No error on the port |
| 8180 | Invalid port ID value |
| 8181 | Baud rate value is invalid |
| 8182 | Invalid parity value |
| 8183 | Flow control value is invalid |
| 8184 | Response timeout value is invalid |
| 8185 | The MB_DB parameter is not the instance DB of MB_MASTER or MB_SLAVE |
Table 5 MB_COMM_LOAD instruction STATUS error code
| STATUS(W#16#) |
Description |
| 0000 |
No error |
| 80C8 |
The slave timed out. Check baud rate, parity and slave wiring |
| 80D1 |
The receiver sends a flow control request to suspend the active transmission and does not reactivate the transmission within the specified waiting time. This error is also generated during hardware flow control if the receiver does not detect the CTS within the waiting time. |
| 80D2 |
The transfer request is terminated because the DSR signal was not received from the DCE |
| 80E0 |
Receive buffer is full, message is terminated |
| 80E1 |
Parity error, message is terminated |
| 80E2 |
Framing error, message is terminated |
| 80E3 |
Timeout error, message is terminated |
| 80E4 |
The specified length exceeds the total buffer size and the message is terminated |
| 8180 |
Invalid port ID value |
| 8186 |
Modbus station address is invalid |
| 8188 |
For broadcast calls, the value of the parameter MODE is invalid. |
| 8189 |
Invalid data address value |
| 818A |
Invalid data length value |
| 818B |
Invalid pointer to local data source/target |
| 818C |
Invalid pointer to DATA_PTR: Pointer to a data block that points to a bit memory or access type «Standard — compatible with S7-300/400». |
| 8200 |
The port is busy processing the transfer request |
Table 6 MB_MASTER instruction STATUS error code (communication and configuration error message of the instruction)
| STATUS(W#16#) | Slave response code |
Description |
| 8380 | — |
CRC error |
| 8381 | 01 |
This feature code is not supported |
| 8382 | 03 |
Wrong data length |
| 8383 | 02 |
Data address error or address is outside the valid range of DATA_PTR |
| 8384 | >03 |
Wrong data value |
| 8385 | 03 |
This data diagnostic code is not supported |
| 8386 | — |
The function code in the response does not match the function code in the transfer. |
| 8387 | — |
Responding slave error |
| 8388 | — |
Slave response to write request is incorrect |
Table 7 MB_MASTER instruction STATUS error code (Modbus protocol error message)
FAQ:

The output bits «DONE», «ERROR» and «STATUS» of the «MB_COMM_LOAD» instruction can be viewed in the program or monitoring table to determine if the S7-1200 communication module CM1241 has been successfully set to the Modbus RTU communication mode.
- If the module is successfully set to Modbus RTU communication mode: «MB_COMM_LOAD» instruction output bit «DONE» = 1, «ERROR» = 0, output status word «STATUS» = 0;
- If the module is not successfully set to Modbus RTU communication mode: «MB_COMM_LOAD» instruction output bit «DONE» = 0, «ERROR» = 1, the output status word «STATUS» outputs an error code. For the specific cause of the error, see the «MB_COMM_LOAD Instruction STATUS Error Code» table.

Because the port is busy processing the transfer request. When this error occurs, check if the «MB_MASTER» command input bit «REQ» is a rising edge trigger or if there are other «MB_MASTER» commands being executed.

After the last request of the «MB_MASTER» instruction is terminated due to an error, the ERROR bit will remain TRUE for one scan cycle time, and the error code value in the STATUS parameter is valid only for one scan cycle of ERROR = TRUE, so it cannot be programmed or monitored. The table is viewed. The ERROR and STATUS parameters can be read out using the programming method shown below.

Normally, «EXTENDED_ADDRESSING» in the instance DB «MB_MASTER_DB» of the «MB_MASTER» instruction defaults to 0 and can be accessed from the Modbus RTU slave address 0-247.
The «EXTENDED_ADDRESSING» in the instance DB «MB_MASTER_DB» of the «MB_MASTER» instruction is set to 1 to enable 0-65535 extended addressing for Modbus RTU slaves. You can set «EXTENDED_ADDRESSING» as follows:
First find «system block» → «program resources», double-click «MB_MASTER_DB», and view «EXTENDED_ADDRESSING» in the instance data block «MB_MASTER_DB» of the «MB_MASTER» instruction.
Enter «MB_MASTER_DB.EXTENDED_ADDRESSING» in the «Monitoring Table» to set this bit to 1.
S7-1200 As a Modbus RTU slave
The S7-1200 module that supports Modbus RTU communication mode can be used as a Modbus RTU slave. The CPU1215C DC/DC/DC and CM1241 RS485 are taken as examples to describe the communication configuration and programming steps of the S7-1200 Modbus RTU slave.
Hardware and software requirements and completed communication tasks:
hardware:
1 CPU1215C DC/DC/DC (Order No.: 6ES7 215-1AG31-0XB0)
2 CM1241 RS485 (Order No.: 6ES7 241-1CH30-0XB0)
3 PS 307 power supply (order number: 6ES7307-1KA02-0AA0)
4 PC (with Ethernet card)
5 TP Ethernet cable
software:
① STEP 7 V11 Professional SP2 UPD4 +HSP
2 ModScan (this software is a third-party software that can be downloaded from the Internet)
Completed communication tasks:
The data in the 5 words starting from DB1.DBW0 in the Modbus RTU slave CPU1215C is read into the 5 words starting from 40001 in the Modbus RTU master ModScan.
1. Configure the Modbus RTU communication module
Find «Communication Module» → «Point to Point» in the hardware catalog→“CM1241 (RS485)”, double-click or drag the module to the left side of the CPU, as shown in Figure 1 below:
Figure 1 Configuration Communication Module
Next, select the CM1241 (RS485) module with the mouse in the «Device View» and configure the hardware interface parameters of this module in «Properties» → «Port Configuration». As shown in Figure 2 below:
The following is the transmission rate = 9.6Kbps, parity = no parity, data bits = 8 characters, stop bit = 1, other keep the default settings as an example.
Figure 2 RS485 port settings
Finally, in the «Hardware Identifier», confirm that the hardware identifier is 271, as shown in Figure 3 below:
Figure 3 hardware identifier
2. Add a startup OB
Select «CPU1215C DC/DC/DC» → «Program Block» → «Add New Block» in the project tree. In the pop-up window, select «OB Organization Block» → «Startup» and add the startup OB 100, as shown in Figure 4 below. Show:
Figure 4 Adding a startup OB
3. Call the MB_COMM_LOAD instruction
The «MB_COMM_LOAD» instruction can be called in OB 100 in order to enable the port to be set to Modbus RTU communication mode upon startup. When the «MB_COMM_LOAD» instruction is called, the interface for creating the corresponding instance data block will pop up automatically, as shown in Figure 5 below:
Figure 5 calls the MB_COMM_LOAD instruction
After clicking «Confirm» to create an instance DB for this instruction, assign an address to each I/O pin. In particular, note that the MB_DB input pin needs to point to the instance data block of the «MB_SLAVE» instruction, as shown in Figure 6 below:

Figure 6 MB_COMM_LOAD instruction
The meaning of the MB_COMM_LOAD instruction parameter is shown in Table 1 below:
|
Pin |
Description |
|---|---|
|
EN |
Enable end |
|
REQ |
Execute the instruction on the rising edge |
|
PORT |
Hardware identifier of the communication port |
|
BAUD |
Baud rate selection: 3600, 6000, 12000, 2400, 4800, 9600, 19200, 38400, 57600, 76800, 115200 (Note: all other values are invalid) |
|
PARITY |
Parity selection: 0-none; 1-odd check; 2-even check |
|
FLOW_CTRL |
Flow control selection: 0- (default) no flow control |
|
RTS_ON_DLY |
RTS delay selection: 0- (default) |
|
RTS_OFF_DLY |
RTS turn-off delay selection: 0- (default) |
|
RESP_TO |
Response timeout: Default = 1000 ms. MB_MASTER The time (in milliseconds) allowed for the slave to respond. |
|
MB_DB |
The instance DB used for the MB_MASTER or MB_SLAVE instruction. |
|
DONE |
Completion bit: The instruction execution is completed and no error is set. |
|
ERROR |
Error bit: 0 — no error detected; 1 — an error was detected. The error code is output in the parameter STATUS. |
|
STATUS |
Port configuration error code |
Table 1 MB_COMM_LOAD instruction parameter meaning
4. Create MB_HOLD_REG data block
Select «block» → «Add new block», select «Data block (DB)» to create DB block, select «Standard compatible with S7-300/400», click «Confirm» button, define the data area as 5 words The array is shown in Figure 7 below:
Note: The DB access type used by MB_HOLD_REG must be standard and S7-300/400 compliant.
Figure 7 Creating an MB_HOLD_REG data block
5. Call the MB_SLAVE instruction
The MB_SLAVE instruction is called in OB1, and the interface for creating the corresponding instance data block is automatically popped up when the instruction is called, as shown in Figure 8 below:
Figure 8 calls the MB_SLAVE instruction
Click «Confirm» to create an instance DB for this instruction and assign an address to each I/O pin, as shown in Figure 9 below:
The S7-1200 acts as a Modbus RTU slave and MB_HOLD_REG points to a pointer to the Modbus holding register data block. The settings are as follows: MB_HOLD_REG=P#DB3.DBX0.0 WORD 5.
The correspondence is shown in Table 2 below:
| Modbus RTU master Modbus address | Modbus RTU slave CPU1215C data buffer address |
| 40001 | DB3.DBW0 |
| 40002 | DB3.DBW2 |
| 40003 | DB3.DBW4 |
| 40004 | DB3.DBW6 |
| 40005 | DB3.DBW8 |
Table 2 Modbus address correspondence
Figure 9 MB_SLAVE instruction
| Pin | Description |
|
EN |
Enable end |
|
MB_ADDR |
The station address of the Modbus slave. Default address range: 0 to 247; extended address range: 0 to 65535 |
|
MB_HOLD_REG |
Pointer to the Modbus holding register data block. This data block must be created using the «Standard — S7-300/400 compatible» access type. |
|
NDR |
New data ready: 0 — no new data; 1 — indicates that the Modbus master has written new data |
|
DR |
Data read: 0 — no data read; 1 — indicates that the Modbus master has read new data |
|
ERROR |
Error bit |
|
STATUS |
error code |
Table 3 MB_SLAVE instruction parameter meaning
| MB_SLAVE Modbus function | S7-1200 | ||||
| Code | Features | Data area | Address range | Data area | CPU address |
| 01 | Reading position | Output | 1 to 8192 | Output process image area | Q0.0 to Q1023.7 |
| 02 | Reading position | Input | 10001 to 18192 | Input image area | I0.0 to I1023.7 |
| 04 | Reading word | Input | 30001 to 30512 | Input image area | IW0 to IW1022 |
| 05 | Write bit | Output | 1 to 8192 | Output process image area | Q0.0 to Q1023.7 |
| 15 | Write bit | Output | 1 to 8192 | Output process image area | Q0.0 to Q1023.7 |
Table 4 Mapping of Modbus Address to Process Image Area
| MB_SLAVE Modbus function | S7-1200 | ||||
| Code | Features | Data area | Address range | CPU DB data area | CPU address |
| 03 | Reading word | Holding register | 40001 to 49999 | MB_HOLD_REG | Word 1 to word 9999 |
| 400001 to 465535 | Word 1 to word 65535 | ||||
| 06 | Write | Holding register | 40001 to 49999 | MB_HOLD_REG | Word 1 to word 9999 |
| 400001 to 465535 | Word 1 to word 65535 | ||||
| 16 | Write | Holding register | 40001 to 49999 | MB_HOLD_REG | Word 1 to word 9999 |
| 400001 to 465535 | Word 1 to word 65535 |
Table 5 Mapping of Modbus Address to CPU Memory Area
6. Modbus master software settings

First establish a connection in the opened ModScan software, and set the parameters of the RTU mode: baud rate Baud = 9600, data bit Data = 8, stop bit Stop = 1, check Parity = NONE, as shown in Figure 10 below:
Figure 10 Establishing a ModScan Connection
Select «File»→“New” Opens the ModScan communication interface, sets the Modbus RTU slave address Device Id=1, data start address Address=0001, data length Length=5, Modbus data type function code 03, as shown in Figure 11 below:

Figure 11 Setting up ModScan
7.Modbus RTU test results
Open the «Monitoring Table» of the CPU1215 DC/DC/DC in the STEP 7 V11 Professional SP2 UPD4 software, write the value 21 to DB3.DBW0, the value 22 to DB3.DBW2, and the value 23 to DB3.DBW4, DB3 .DBW6 writes a value of 24, and DB3.DBW8 writes a value of 25. The ModScan master station reads the value 21 of the S7-1200 Modbus RTU slave address DB3.DBW0, the value 22 of DB3.DBW2, the value 23 of DB3.DBW4, the value 24 of DB3.DBW6, and the value 25 of DB3.DBW8, respectively. It is in the addresses 40001, 40002, 40003, 40004, 40005. As shown in Figure 12 below:
Figure 12 Modbus RTU test results
MB_COMM_LOAD and MB_SLAVE instructions STATUS error code
| STATUS(W#16#) | Description |
| 0000 | No error on the port |
| 8180 | Invalid port ID value |
| 8181 | Baud rate value is invalid |
| 8182 | Invalid parity value |
| 8183 | Flow control value is invalid |
| 8184 | Response timeout value is invalid |
| 8185 | The MB_DB parameter is not the instance DB of MB_MASTER or MB_SLAVE |
Table 6 MB_COMM_LOAD instruction STATUS error code
| STATUS(W#16#) | Description |
| 0000 | No error |
| 80D1 | The receiver sends a flow control request to suspend the active transmission and does not reactivate the transmission within the specified waiting time |
| 80D2 | Transfer request termination |
| 80E0 | The message is terminated because the receive buffer is full |
| 80E1 | The message was terminated due to a parity error |
| 80E2 | The message was terminated due to a framing error |
| 80E3 | The message was terminated due to an overrun error |
| 80E4 | The message is terminated because the specified length exceeds the total buffer size |
| 8180 | Invalid port ID value or MB_COMM_LOAD instruction error |
| 8186 | Modbus station address is invalid |
| 8187 | Invalid pointing to MB_HOLD_REG pointer |
| 818C | Invalid MB_HOLD_REG pointer to M memory or DB (DB area allows symbolic address and direct address) |
Table 7 MB_SLAVE instruction STATUS parameter meaning (communication and configuration error)
| STATUS(W#16#) |
Slave response code |
Description |
| 8380 | No response | CRC error |
| 8381 | 01 |
Feature code is not supported or function code is not supported in the broadcast |
| 8382 | 03 | Wrong data length |
| 8383 | 02 | Data address error or address exceeds the valid range of DATA_PTR |
| 8384 | 03 | Wrong data value |
| 8385 | 03 | This data diagnostic code value is not supported |
Table 8 MB_SLAVE instruction STATUS parameter meaning (Modbus protocol error)
FAQ:

The output status word «STATUS» = 16 #8187 indicates that the pointer to the MB_HOLD_REG is invalid. The following two conditions will cause the above error:
- The DB block corresponding to the input pin «MB_HOLD_REG» of the «MB_SLAVE» instruction does not exist in the program.
- «Signal only addressing» was selected when creating the DB block corresponding to the input pin «MB_HOLD_REG» of the «MB_SLAVE» instruction.
The solutions are as follows:
- Create a DB block corresponding to the input pin «MB_HOLD_REG» of the «MB_SLAVE» instruction.
- When creating a DB block corresponding to the input pin «MB_HOLD_REG» of the «MB_SLAVE» instruction, only «Standard and S7-300/400 compatible» can be selected.
Connection timeout parameter
When the S7-1200 Mobus RTU communication network contains multiple slave stations, only one station data can be read or written at the same time due to the polling network characteristics. Therefore, there are the following factors that will affect the final overall polling time:
1. Communication rate (baud rate) setting time
2. The amount of communication data per site
3. Number of sites
Communication distance
5. Connection time of each site
Whether it is due to signal interference, the slave station of the hardware quality is dropped, or the project needs to temporarily shut down the station, the polling time of the communication system is greatly prolonged due to the increase of the «connection time of each station». In the Modbus RTU communication of the S7-1200, there are mainly three parameters related to the setting of «connection time of each station».
1. Slave response time RESP_TO
As shown in Figure 1, the V2.x version of the MB_COMM_LOAD initialization block sets the slave response time RESP_TO parameter:
Set the response time of a single-connected slave, ranging from 5ms to 65535ms (the default is 1000ms); that is, if the slave does not respond within this time period, MB_MASTER will terminate the request after sending the specified number of retry requests. And the error message 80C8 is prompted.
Figure 1. RESP_TO parameter settings

Figure 2. Slave response time
2. Number of retries RETRIES
In the instance data block of the initialization function block MB_COMM_LOAD, the number of retries RETRIES parameters can be set:
The number of retries before the primary station returns no response error code 0x80C8. (default is 2 times)
Figure 3 RETRIES parameter settings

3. Master station timing parameters Blocked_Proc_Timeout
When for some reason (such as when the master request has been issued, but the master block is stopped before the request is completely completed), and neither Done nor Error is set, a timing time is required, after the time arrives. Bit to execute the next function block or poll the next station.
The master station timing parameter Blocked_Proc_Timeout is provided in the MB_Master’s instance data block (range 0S to 5.5S, default 3S)
The previous RESP_TO is for the slave response time, and Blocked_Proc_Timeout is the timing time for the master. This function parameter is used to prevent a single MB_Master instruction from exclusive or locking access to the port.
Figure 4. Blocked_Proc_Timeout parameter settings
FAQ:

In general, the S7-1200 can adjust two parameters simultaneously: slave response time RESP_TO and number of retries RETRIES, which is used to reduce the polling cycle time that the Modbus slave is dropped or temporarily turned off.
Example: The default number of attempts to connect to the system is 3 times, 1S each time, for a total of 3S;
The slave response time RESP_TO can be appropriately reduced according to the actual working conditions of the project. This time cannot be estimated. It is recommended to test it multiple times to confirm that each slave can be connected normally and set this time as small as possible.
Take 500ms as an example. Then set RETRIES to 0. That is, for each slave, the master only tries to connect once, which takes a total of 500ms.

This situation is caused by the fact that neither DONE nor ERROR of MB_MASTER is set to conflict with subsequent MB_MASTER. Make sure that the next MB_MASTER time is greater than the set time of Blocked_Proc_Timeout (default 3S).
Содержание:
- Компоненты СИМП Лайт
- Редактор каналов
- Источники данных
- Modbus driver
- Коды ошибок Modbus
Расшифровка кодов ошибок Modbus:
|
01
|
Принятый код функции не может быть обработан. |
|
02 |
Адрес данных, указанный в запросе, недоступен. |
|
03 |
Значение, содержащееся в поле данных запроса, является недопустимой величиной. |
|
04 |
Невосстанавливаемая ошибка имела место, пока ведомое устройство пыталось выполнить затребованное действие. |
|
05 |
Ведомое устройство приняло запрос и обрабатывает его, но это требует много времени. Этот ответ предохраняет ведущее устройство от генерации ошибки тайм-аута. |
|
06 |
Ведомое устройство занято обработкой команды. Ведущее устройство должно повторить сообщение позже, когда ведомое освободится. |
|
07 |
Ведомое устройство не может выполнить программную функцию, заданную в запросе. Этот код возвращается для неуспешного программного запроса, использующего функции с номерами 13 или 14. Ведущее устройство должно запросить диагностическую информацию или информацию об ошибках от ведомого. |
|
08 |
Ведомое устройство при чтении расширенной памяти обнаружило ошибку паритета. Ведущее устройство может повторить запрос, но обычно в таких случаях требуется ремонт. |
|
10 (0A hex)
|
Шлюз неправильно настроен или перегружен запросами |
|
11 (0B hex)
|
Slave устройства нет в сети или от него нет ответа |

Из данной статьи вы узнаете о протоколе Modbus RTU, который широко применяется в АСУ ТП. Англоязычная версия статьи доступна на сайте ipc2u.com. Описание протокола Modbus TCP можно найти в статье.
Оглавление:
- Описание протокола Modbus RTU
- Какие бывают команды Modbus RTU?
- Как послать команду Modbus RTU на чтение дискретного вывода? Команда 0x01
- Как послать команду Modbus RTU на чтение дискретного ввода? Команда 0x02
- Как послать команду Modbus RTU на чтение аналогового вывода? Команда 0x03
- Как послать команду Modbus RTU на чтение аналогового ввода? Команда 0x04
- Как послать команду Modbus RTU на запись дискретного вывода? Команда 0x05
- Как послать команду Modbus RTU на запись аналогового вывода? Команда 0x06
- Как послать команду Modbus RTU на запись нескольких дискретных выводов? Команда 0x0F
- Как послать команду Modbus RTU на запись нескольких аналоговых выводов? Команда 0x10
- Какие бывают ошибки запроса Modbus?
- Программы для работы с протоколом Modbus RTU
Описание протокола Modbus RTU
Modbus — коммуникационный протокол, основан на архитектуре ведущий-ведомый (master-slave). Использует для передачи данных интерфейсы RS-485, RS-422, RS-232, а также Ethernet сети TCP/IP (протокол Modbus TCP).
Сообщение Modbus RTU состоит из адреса устройства SlaveID, кода функции, специальных данных в зависимости от кода функции и CRC контрольной суммы.
| 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
| 11 | Адрес устройства SlaveID (17 = 11 hex) |
| 03 | Функциональный код Function Code (читаем Analog Output Holding Registers) |
| 006B | Адрес первого регистра (40108-40001 = 107 =6B hex) |
| 0003 | Количество требуемых регистров (чтение 3-х регистров с 40108 по 40110) |
| 7687 | Контрольная сумма CRC |
В ответе от 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?
Приведем таблицу с кодами функций чтения и записи регистров 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 битное | Запись |
Наверх к оглавлению
Как послать команду Modbus RTU на чтение дискретного вывода? Команда 0x01
Эта команда используется для чтения значений дискретных выходов 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 | Адрес первого регистра Hi байт | 05 | Количество байт далее |
| 13 | Адрес первого регистра Lo байт | 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 битов справа были запрошены, а остальные биты заполнены нулями до полного байта (0001 1011).
| Каналы | — | — | — | DO 56 | DO 55 | DO 54 | DO 53 | DO 52 |
|---|---|---|---|---|---|---|---|---|
| Биты | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 |
| Hex | 1B |
Модули с дискретным выводом: M-7065, ioLogik R1214, ADAM-4056S
Наверх к оглавлению
Как послать команду Modbus RTU на чтение дискретного ввода? Команда 0x02
Эта команда используется для чтения значений дискретных входов 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 |
Модули с дискретным вводом: M-7053, ioLogik R1210, ADAM-4051
Наверх к оглавлению
Как послать команду Modbus RTU на чтение аналогового вывода? Команда 0x03
Эта команда используется для чтения значений аналоговых выходов 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 |
Модули с аналоговым выводом: M-7024, ioLogik R1241, ADAM-4024
Наверх к оглавлению
Как послать команду Modbus RTU на чтение аналогового ввода? Команда 0x04
Эта команда используется для чтения значений аналоговых входов 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 |
Модули с аналоговым вводом: M-7017, ioLogik R1240, ADAM-4017+
Наверх к оглавлению
Как послать команду Modbus RTU на запись дискретного вывода? Команда 0x05
Эта команда используется для записи одного значения дискретного выхода 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.
Модули с дискретным выводом: M-7053, ioLogik R1210, ADAM-4051
Наверх к оглавлению
Как послать команду Modbus RTU на запись аналогового вывода? Команда 0x06
Эта команда используется для записи одного значения аналогового выхода 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 |
Модули с аналоговым выводом: M-7024, ioLogik R1241, ADAM-4024
Наверх к оглавлению
Как послать команду Modbus RTU на запись нескольких дискретных выводов? Команда 0x0F
Эта команда используется для записи нескольких значений дискретного выхода 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 | Кол-во записанных рег. Hi байт |
| 0A | Количество регистров Lo байт | 0A | Кол-во записанных рег. Lo байт |
| 02 | Количество байт далее | 26 | Контрольная сумма CRC |
| CD | Значение байт DO 27-20 (1100 1101) | 99 | Контрольная сумма CRC |
| 01 | Значение байт DO 29-28 (0000 0001) | ||
| BF | Контрольная сумма CRC | ||
| 0B | Контрольная сумма CRC |
В ответе возвращается количество записанных регистров.
Модули с дискретным выводом: M-7053, ioLogik R1210, ADAM-4051
Наверх к оглавлению
Как послать команду Modbus RTU на запись нескольких аналоговых выводов? Команда 0x10
Эта команда используется для записи нескольких значений аналогового выхода 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 |
Модули с аналоговым выводом: M-7024, ioLogik R1241, ADAM-4024
Наверх к оглавлению
Какие бывают ошибки запроса Modbus?
Если устройство получило запрос, но запрос не может быть обработан, то устройство ответит кодом ошибки.
Ответ будет содержать измененный Функциональный код, старший бит будет равен 1.
Пример:
| Было | Стало |
|---|---|
| Функциональный код в запросе | Функциональный код ошибки в ответе |
| 01 (01 hex) 0000 0001 | 129 (81 hex) 1000 0001 |
| 02 (02 hex) 0000 0010 | 130 (82 hex) 1000 0010 |
| 03 (03 hex) 0000 0011 | 131 (83 hex) 1000 0011 |
| 04 (04 hex) 0000 0100 | 132 (84 hex) 1000 0100 |
| 05 (05 hex) 0000 0101 | 133 (85 hex) 1000 0101 |
| 06 (06 hex) 0000 0110 | 134 (86 hex) 1000 0110 |
| 15 (0F hex) 0000 1111 | 143 (8F hex) 1000 1111 |
| 16 (10 hex) 0001 0000 | 144 (90 hex) 1001 0000 |
Пример запроса и ответ с ошибкой:
| Байт | Запрос | Байт | Ответ |
|---|---|---|---|
| (Hex) | Название поля | (Hex) | Название поля |
| 0A | Адрес устройства | 0A | Адрес устройства |
| 01 | Функциональный код | 81 | Функциональный код с измененным битом |
| 04 | Адрес первого регистра Hi байт | 02 | Код ошибки |
| A1 | Адрес первого регистра Lo байт | B0 | Контрольная сумма CRC |
| 00 | Количество регистров Hi байт | 53 | Контрольная сумма CRC |
| 01 | Количество регистров Lo байт | ||
| AC | Контрольная сумма CRC | ||
| 63 | Контрольная сумма CRC |
Расшифровка кодов ошибок
| 01 | Принятый код функции не может быть обработан. |
| 02 | Адрес данных, указанный в запросе, недоступен. |
| 03 | Значение, содержащееся в поле данных запроса, является недопустимой величиной. |
| 04 | Невосстанавливаемая ошибка имела место, пока ведомое устройство пыталось выполнить затребованное действие. |
| 05 | Ведомое устройство приняло запрос и обрабатывает его, но это требует много времени. Этот ответ предохраняет ведущее устройство от генерации ошибки тайм-аута. |
| 06 | Ведомое устройство занято обработкой команды. Ведущее устройство должно повторить сообщение позже, когда ведомое освободится. |
| 07 | Ведомое устройство не может выполнить программную функцию, заданную в запросе. Этот код возвращается для неуспешного программного запроса, использующего функции с номерами 13 или 14. Ведущее устройство должно запросить диагностическую информацию или информацию об ошибках от ведомого. |
| 08 | Ведомое устройство при чтении расширенной памяти обнаружило ошибку паритета. Ведущее устройство может повторить запрос, но обычно в таких случаях требуется ремонт. |
| 10 (0A hex) |
Шлюз неправильно настроен или перегружен запросами. |
| 11 (0B hex) |
Slave устройства нет в сети или от него нет ответа. |
Наверх к оглавлению
Программы для работы с протоколом Modbus RTU
Ниже перечислены программы, которые облегчают работу с Modbus.
DCON Utility Pro с поддержкой Modbus RTU, ASCII, DCON. Скачать

Modbus Master Tool с поддержкой Modbus RTU, ASCII, TCP. Скачать

Modbus TCP client с поддержкой Modbus TCP. Скачать

Наверх к оглавлению








