818b modbus error

View and Download Siemens S7-1200 system manual online. S7-1200 controller pdf manual download. Variable Data type Default description RCV_TIMEOUT Real 2.0 Time in seconds that the MB_CLIENT waits for a server to respond to a request. Connected Bool Indicates whether the connection to...

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 ниже:

Примечание:Бит ввода команды «MB_COMM_LOAD» «REQ» должен запускаться по нарастающему фронту. Поскольку OB 100 выполняется только один раз при запуске S7-1200, в этом примере «REQ» устанавливается в «TRUE».

Рисунок 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 ниже:

Примечание. Тип доступа к БД, используемый буферами отправки и приема данных DATA_PTR, должен быть стандартно совместим с S7-300 / 400.

Рисунок 7 Создание буфера отправки и получения данных DATA_PTR

5. Вызвать инструкцию MB_MASTER.

Вызовите инструкцию «MB_MASTER» в OB1, и интерфейс для создания соответствующего экземпляра блока данных автоматически появится при вызове этой инструкции, как показано на рисунке 8 ниже:

Рисунок 8 Вызов инструкции MB_MASTER

Нажмите «ОК», чтобы создать блок фоновых данных для этой инструкции, и назначьте адреса каждому контакту ввода / вывода, как показано на рисунке 9 ниже:

Примечание:Входной бит «REQ» инструкции «MB_MASTER» должен запускаться нарастающим фронтом.

Возьмите 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 действительно только в течение одного периода сканирования, когда ERROR = TRUE.

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

Примечание:Подчиненная станция Modbus RTU тестируется программным обеспечением ModSim, которое является сторонним программным обеспечением, которое можно загрузить из Интернета.

Установите соединение в открытом программном обеспечении ModSim и установите параметры режима RTU: скорость передачи данных Baud = 9600, бит данных Data = 8, стоповый бит Stop = 1, четность = NONE, как показано на рисунке 10 ниже:

Рисунок 10 Установка соединения ModSim

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

Примечание:Настройка Device Id должна соответствовать адресу, установленному входным выводом «MB_ADDR» в инструкции «MB_MASTER».

Рисунок 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)

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ:

Как проверить, был ли модуль связи S7-1200 CM1241 успешно установлен в режим связи Modbus RTU?

Вы можете проверить состояние выходных битов «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» всегда отображается выходной бит «Занят» = 1, почему?

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

Данные адреса кластера Modbus RTU не могут быть записаны или прочитаны путем выполнения инструкции «MB_MASTER», но бит ошибки «Error» = 0 и код ошибки «STATUS» = 16 # 0 инструкции мониторинга «MB_MASTER» в программе , Почему?

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

S7-1200 используется в качестве ведущей станции Modbus RTU, как обращаться к ведомой станции Modbus RTU 0-65535?

Обычно «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 ниже:

Примечание:Бит ввода команды «MB_COMM_LOAD» «REQ» должен запускаться по нарастающему фронту. Поскольку OB 100 выполняется только один раз при запуске S7-1200, в этом примере «REQ» устанавливается в «TRUE».

Рисунок 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, которое является сторонним программным обеспечением, которое можно загрузить из Интернета.

Сначала установите соединение в открытом программном обеспечении ModScan и установите параметры режима RTU: скорость передачи данных Baud = 9600, бит данных Data = 8, стоповый бит Stop = 1, четность = NONE, как показано на рисунке 10 ниже:

Рисунок 10 Установка соединения ModScan

Выбрать файл»«Новый» Откройте интерфейс связи ModScan, установите адрес подчиненного устройства Modbus RTU Device Id = 1, начальный адрес данных Address = 0001, длину данных = 5, код функции типа данных Modbus 03, как показано на рисунке 11 ниже:

Примечание:Настройка идентификатора устройства должна соответствовать адресу, установленному входным выводом «MB_ADDR» в инструкции «MB_SLAVE».

Рисунок 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)

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ:

Почему возникает ошибка при запуске инструкции «MB_SLAVE», выходной бит «ERROR» = 1 и слово состояния выхода «STATUS» = 16 # 8187?

Слово состояния вывода «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, частота выполнения ведомого устройства Modbus должна быть по крайней мере меньше времени отклика, установленного параметром RESP_TO (необходимо учитывать время задержки отклика) для нормальной связи.

Рисунок 2. Время отклика ведомого.

2. Количество повторных попыток RETRIES

В блоке данных экземпляра функционального блока инициализации MB_COMM_LOAD вы можете установить параметр RETRIES для количества попыток:

Количество попыток до того, как главная станция вернет код ошибки отсутствия ответа 0x80C8. (Значение по умолчанию — 2 раза)
Примечание. Этот параметр представляет количество повторных подключений после того, как исходное подключение не получило ответа; то есть по умолчанию, например, 2 раза, а фактическое количество попыток подключения — 3 раза.

Рисунок 3 Настройки параметра RETRIES

Примечание. После изменения параметра RETRIES необходимо повторно включить вывод REQ функционального блока MB_COMM_LOAD, иначе измененный параметр не вступит в силу.

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 мс.

MB_MASTER сообщил об ошибке 8200 (порт занят обработкой запроса на передачу), Как с этим бороться?

Эта ситуация вызвана тем, что ни 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:

Note:The «MB_COMM_LOAD» instruction input bit «REQ» requires a rising edge trigger. Since OB 100 is only executed once when the S7-1200 starts up, «REQ» is set to «TRUE» in this example.

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:

Note: The DB access type used by the DATA_PTR data transmission and receive buffers must be standard and S7-300/400 compliant.

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:

note:The input bit «REQ» of the «MB_MASTER» instruction must be triggered with a rising edge.

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.
The cycle time is drawn. The error code value in the STATUS parameter is only valid for one scan cycle of ERROR =TRUE.

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

note:Modbus RTU slaves are tested with ModSim software, a third-party software that can be downloaded from the Internet.

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:

note:The Device Id setting must match the address set by the input pin «MB_ADDR» in the «MB_MASTER» instruction.

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:

How do I check if the S7-1200 communication module CM1241 has been successfully set to Modbus RTU communication mode?

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.

Execute the «MB_MASTER» command, always display the output bit «Busy»=1, why?

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.

The data of the Modbus RTU cluster address cannot be written or read by executing the «MB_MASTER» instruction, but the program «MB_MASTER» instruction error bit «Error»=0, error code «STATUS»=16#0, why?

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.

How does the S7-1200 function as a Modbus RTU master with 0-65535 extended addressing for Modbus RTU slaves?

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:

note:The «MB_COMM_LOAD» instruction input bit «REQ» requires a rising edge trigger. Since OB 100 is only executed once when the S7-1200 starts up, «REQ» is set to «TRUE» in this example.

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

note:The client is tested with ModScan software, which is third-party software that can be downloaded from the Internet.

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:

note:The Device Id setting must match the address set by the input pin «MB_ADDR» in the «MB_SLAVE» instruction.

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:

Why does the «MB_SLAVE» instruction error occur, the output bit «ERROR» = 1, and the output status word «STATUS» = 16#8187?

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

Note: As shown in Figure 2, the execution frequency of the Modbus slave must be at least less than the response time set by RESP_TO (requires the response delay time) before communication can be performed normally.

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)
Note: This parameter indicates the number of times the connection is reconnected after the initial connection is unresponsive; that is, the default is 2 times, and the actual number of attempts is 3 times.

Figure 3 RETRIES parameter settings

Note: After changing the RETRIES parameter, you need to re-enable the REQ pin of the MB_COMM_LOAD function block, otherwise the change parameters will not take effect.

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:

How to reduce this effect due to the extended polling cycle time caused by a slave station falling out of the station

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.

MB_MASTER reported error 8200 (port is busy processing transfer request)How to deal with it?

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).

Содержание:

  1. Компоненты СИМП Лайт
  2. Редактор каналов
  3. Источники данных
  4. Modbus driver
  5. Коды ошибок 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. Скачать

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

Оставить заявку

Понравилась статья? Поделить с друзьями:

Читайте также:

  • 8187 ошибка мерседес актрос
  • 813 ошибка pppoe
  • 81110013 war thunder как исправить
  • 8111000b war thunder как исправить
  • 8111000a war thunder как исправить

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии