Как подключить modbus rtu к компьютеру

Обновлено: 04.07.2024

Изучая оборудование систем Умный Дом мы постоянно сталкиваемся с упоминанием протокола Modbus и порта RS-485.

Например, у контроллера EasyHomePLC есть два порта RS-485 и два порта RS-232, у контроллера Wiren Board есть два порта RS-485, у контроллера Beckhoff CX-8080 есть порт RS-485 и порт RS-232. У различного оборудования есть возможность управления по протоколу Modbus: кондиционеры, вентустановки, модули ввода-вывода. А ещё программное обеспечение EasyHome связывается с контроллером по протоколу Modbus TCP. Что всё это означает? Значит ли это, что если у контроллера есть интерфейс Modbus, и у устройства есть такой интерфейс, они сразу заработают вместе? Многие так считают, но это неверно. Объясню максимально просто и понятно.

Что такое RS-485

То есть, стандарт подразумевает, что на 2-проводную шину (одну витую пару) можно подключить множество устройств. Он не описывает никакой язык общения оборудования.

Что такое RS-232

Существуют переходники с RS-232 на RS-485 и обратно. Мы получаем возможность подключить на порт RS-232 что-то, что подключается по RS-485 или сделать длинную линию связи для устройств RS-232, поставив в начале линии переходник на 485, а в конце обратно.

Что такое Modbus

И вот мы подошли к главному вопросу. У нас контроллер имеет порт (он же разъём, он же шлюз) RS-485 и в него программно заложена возможность общения по Modbus. Также у нас есть кондиционер, у которого также есть физический разъём RS-485 и в паспорте указана возможность работы по Modbus. Что это для нас значит? Это значит, что устройства теоретически могут работать совместно.
Как люди, имеющие возможность говорить, теоретически могут общаться. Для нас такая возможность подразумевает полноценное управление и контроль обратной связи. Но заставить их работать вместе не так просто. Нужно в контроллере написать драйвер для работы именно с этим устройством. Для этого в инструкции к устройству надо найти карту регистров, то есть, описание возможных команд устройства. Вот пример некоторых регистров для вентмашины:

Чем сложнее устройство, тем вариантов команд больше. В вентмашине или кондиционере их может быть до сотни. Также по протоколу RS-485 мы можем общаться с инфракрасными приёмопередатчиками, генераторами, конвекторами, электрокарнизами, кондиционерами, термостатами, датчиками и различными элементами расширения контроллера на DIN рейку: модулями входов и выходов, диммерами.

Написать драйвер связи теоретически несложно, но это большая работа. Нужно предусмотреть нюансы работы техники, придумать удобный интерфейс управления и получения обратной связи, прописать в драйвере возможные коды ошибок. После подключения реального устройства может потребоваться доналадка, если не всё было учтено в инструкции или в драйвере. Стоимость этой работы может быть достаточно высокой, поэтому стоит обращать внимание на то, какие драйверы уже присутствуют в программном обеспечении, прилагаемом к контроллеру.

Например, в программном обеспечении EasyHome есть поддержка ИК-передатчиков ICPDas и Insyte, модулей связи с кондиционерами Mitsubishi и Daikin, конвекторов Varmann, счётчиков электричества Delta, блоков расширения Овен, Razumdom, Bolid, вентмашин Komfovent и ещё много чего. Нужно смотреть конкретные поддерживаемые модели, у разных моделей разные спецификации команд.

Есть устройства с поддержкой Modbus TCP, там нужно, чтобы оно было включено в локальную сеть, отдельный порт RS-485 контроллера не нужен.

К системам на Z-Wave напрямую ничего по Modbus не подключить, там нет такой возможности. Только используя промежуточный контроллер, который поддерживает и Modbus, и Z-Wave, например, Wiren Board.

Есть важная особенность работы устройств по Modbus. У Modbus есть устройство-мастер (это контроллер) и устройство-слейв (то, что к нему подключается). Слейв не может сам инициировать передачу данных, поэтому мастер постоянно опрашивает все подключенные к нему слейвы на предмет их состояния. Если у нас датчик подключен к дискретному входу устройства Овен МВ, то при изменении состояния датчика меняется состояние входа, но модуль не может сразу же сообщить об этом контроллеру, так как не может сам инициировать связь. Нужно дождаться, пока контроллер опросит этот модуль, тогда модуль отправит ему в ответ своё состояние и контроллер поймёт, что датчик изменил состояние и что-то сделает.

Что произойдёт, если на вход Овен МВ пришёл сигнал о сработке датчика, а потом датчик изменил состояние на первоначальное, а контроллер не успел его опросить? В программе модуля МВ есть счётчики количества сработок каждого входа, вот их-то контроллер и считывает, и видит, что было изменение.

Ещё раз обозначим разницу между версиями связи по ModBus.

Есть ещё несколько разновидностей: Modbus RTU/IP (отличается от TCP наличием контрольной суммы), Modbus over UDP, Modbus Plus (собственный протокол фирмы Schneider Electric, в сети могут быть несколько мастеров).

Ещё небольшая статья про работу устройств по протоколу Modbus в системах Умный Дом: RS-485 Modbus в системах Умного Дома.


Описание протокола Modbus RTU

Modbus — коммуникационный протокол, основан на архитектуре ведущий-ведомый (master-slave). Использует для передачи данных интерфейсы RS-485, RS-422, RS-232, а также Ethernet сети TCP/IP (протокол Modbus TCP).

Если отбросить SlaveID адрес и CRC контрольную сумму, то получится PDU, Protocol Data Unit.

SlaveID – это адрес устройства, может принимать значение от 0 до 247, адреса с 248 до 255 зарезервированы.

Данные в модуле хранятся в 4 таблицах.

Две таблицы доступны только для чтения и две для чтения-записи.

В каждой таблице помещается 9999 значений.

Номер регистраАдрес регистра HEXТипНазваниеТип
1-99990000 до 270EЧтение-записьDiscrete Output CoilsDO
10001-199990000 до 270EЧтениеDiscrete Input ContactsDI
30001-399990000 до 270EЧтениеAnalog Input RegistersAI
40001-499990000 до 270EЧтение-записьAnalog Output Holding RegistersAO

Например, первый регистр AO Holding Register, имеет номер 40001, но его адрес равен 0000.

Разница между этими двумя величинами есть смещение offset.

Каждая таблица имеет свое смещение, соответственно: 1, 10001, 30001 и 40001.

В ответе от 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 integer0 до 65535AE4144,609
16-bit signed integer-32768 до 32767AE41-20,927
two character ASCII string2 знакаAE41® A
discrete on/off value0 и 100010001
32-bit unsigned integer0 до 4,294,967,295AE41 56522,923,517,522
32-bit signed integer-2,147,483,648 до 2,147,483,647AE41 5652-1,371,449,774
32-bit single precision IEEE floating point number1,2·10−38 до 3,4×10+38AE41 5652-4.395978 E-11
four character ASCII string4 знакаAE41 5652® A V R

Какие бывают команды Modbus RTU?

Приведем таблицу с кодами функций чтения и записи регистров Modbus RTU.

Код функцииЧто делает функцияТип значенияТип доступа
01 (0x01)Чтение DORead Coil StatusДискретноеЧтение
02 (0x02)Чтение DIRead Input StatusДискретноеЧтение
03 (0x03)Чтение AORead Holding Registers16 битноеЧтение
04 (0x04)Чтение AIRead Input Registers16 битноеЧтение
05 (0x05)Запись одного DOForce Single CoilДискретноеЗапись
06 (0x06)Запись одного AOPreset Single Register16 битноеЗапись
15 (0x0F)Запись нескольких DOForce Multiple CoilsДискретноеЗапись
16 (0x10)Запись нескольких AOPreset Multiple Registers16 битноеЗапись

Как послать команду 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Контрольная сумма CRC0EЗначение регистра DO 51-44 (0000 1110)
84Контрольная сумма CRC1BЗначение регистра DO 56-52 (0001 1011)
45Контрольная сумма CRC
E6Контрольная сумма CRC

Состояния выходов DO 27-20 показаны как значения байта CD hex, или в двоичной системе 1100 1101.

В регистре DO 56-52 5 битов справа были запрошены, а остальные биты заполнены нулями до полного байта (0001 1011).

Каналы---DO 56DO 55DO 54DO 53DO 52
Биты00011011
Hex1B

Модули с дискретным выводом: M-7065, ioLogik R1214, ADAM-4056S

Как послать команду Modbus RTU на чтение дискретного ввода? Команда 0x02

Эта команда используется для чтения значений дискретных входов DI.

Модули с дискретным вводом: M-7053, ioLogik R1210, ADAM-4051

Как послать команду Modbus RTU на чтение аналогового вывода? Команда 0x03

Эта команда используется для чтения значений аналоговых выходов AO.

Модули с аналоговым выводом: M-7024, ioLogik R1241, ADAM-4024

Как послать команду Modbus RTU на чтение аналогового ввода? Команда 0x04

Эта команда используется для чтения значений аналоговых входов AI.

Модули с аналоговым вводом: M-7017, ioLogik R1240, ADAM-4017+

Как послать команду Modbus RTU на запись дискретного вывода? Команда 0x05

Эта команда используется для записи одного значения дискретного выхода DO.

Значение FF 00 hex устанавливает выход в значение включен ON.

Значение 00 00 hex устанавливает выход в значение выключен OFF.

Все остальные значения недопустимы и не будут влиять значение на выходе.

Нормальный ответ на такой запрос - это эхо (повтор запроса в ответе), возвращается после того, как состояние DO было изменено.

Состояние выхода DO173 поменялось с выключен OFF на включен ON.

Модули с дискретным выводом: M-7053, ioLogik R1210, ADAM-4051

Как послать команду Modbus RTU на запись аналогового вывода? Команда 0x06

Эта команда используется для записи одного значения аналогового выхода AO.

Модули с аналоговым выводом: M-7024, ioLogik R1241, ADAM-4024

Как послать команду Modbus RTU на запись нескольких дискретных выводов? Команда 0x0F

Эта команда используется для записи нескольких значений дискретного выхода DO.

В ответе возвращается количество записанных регистров.

Модули с дискретным выводом: M-7053, ioLogik R1210, ADAM-4051

Как послать команду Modbus RTU на запись нескольких аналоговых выводов? Команда 0x10

Эта команда используется для записи нескольких значений аналогового выхода AO.

Модули с аналоговым выводом: M-7024, ioLogik R1241, ADAM-4024

Какие бывают ошибки запроса Modbus?

Если устройство получило запрос, но запрос не может быть обработан, то устройство ответит кодом ошибки.

Ответ будет содержать измененный Функциональный код, старший бит будет равен 1.

Modbus RS-485 white.jpg

Все клеммы «A» должны быть соединены вместе, также как и все клеммы «B» должны быть соединены вместе соответственно.

Инвертирование соединений «A» и «B» устройства не только препятствует его обмену данными, но также может остановить работу всей системы связи из-за неправильного прямого (поляризационного) напряжения, обнаруженного на клеммах неправильно подключенного устройства.

Чтобы избежать ошибок при подключении большого количества устройств, следует использовать кабели одного цвета для всех подключений к клеммам A, а кабели одного цвета следует использовать для всех подключений к клеммам B различных устройств (например, белый для A и синий для B).

2. Связь между устройствами

В отличие от многих систем распределения энергии, важен способ параллельного подключения устройств. Система RS485, используемая для связи Modbus, обеспечивает основной кабель (шина или магистраль), к которому все устройства должны быть подключены с помощью максимально коротких ответвлений (также называемых шлейфами).

Ветви НЕ должны быть длиннее 1200 м ! Более длинные ответвления могут вызвать отражения сигнала и вызвать помехи и, как следствие, ошибки при приеме данных.

Правильное и неправильное подключение к шине.jpg

3. Максимальное расстояние и максимальное кол-во устройств

Главный кабель НЕ должен быть длиннее 700 м ! Это расстояние не включает ветви (которые, тем не менее, должны быть короткими). Максимальное количество устройств, которые можно подключить к основному кабелю - 32, включая устройство-мастер.

4. Использование повторителей

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

Если расстояние сегмента превышает 1200 м или количество ведущих устройств в сегменте более 32 штук, следует использовать повторитель (репитер), чтобы создать следующий сегмент. Причем каждый сегмент сети должен быть подключен к терминатору.

С помощью репитера основной кабель делится на разные сегменты, каждый из которых может иметь длину до 700 м и соединять 32 устройства (в это количество входят репитеры). Максимальное количество повторителей, которые должны быть подключены последовательно - 3. Большее количество повторителей приводит к чрезмерным задержкам в системе связи.

5. Тип используемого кабеля

Используемый кабель представляет собой экранированную витую пару (телефонного типа). Например, можно указать кабель Belden 3105A, но можно использовать другие типы кабеля с эквивалентными характеристиками. Двойник состоит из двух скрученных между собой проводников.

Такое расположение повышает устойчивость к электромагнитным помехам, поскольку кабель образует серию последовательных катушек, каждая из которых обращена в направлении, противоположном направлению следующей: таким образом, любое магнитное поле в окружающей среде проходит через каждую пару катушек в противоположных направлениях, и его влияние таким образом, очень уменьшается (эффект на каждую катушку прямо противоположен влиянию на следующую, и, таким образом, эффект отменяется).

Экранирование может быть плетеным (образовано сеткой из тонких проводящих проводов) или быть фольгой (состоящей из листа металла, намотанного вокруг проводников): эти два типа эквивалентны.

sftp-shema.jpg

6. Подключение к клеммам

В некоторых странах разрешается вставлять два кабеля в одну винтовую клемму . В этом случае можно подключить основные входные и выходные клеммы непосредственно к клеммам прибора, не создавая ответвления.

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


7. Заземление экрана

Экран кабеля должен быть заземлен только в одной точке. Обычно это соединение выполняется на одном конце основного кабеля.



8. Конечное сопротивление

Чтобы избежать отражения сигнала, на каждом конце основного кабеля необходимо установить оконечное сопротивление 120 Ом . Конечное сопротивление следует использовать только на концах основного кабеля . Если общая длина основного кабеля меньше 50 м, можно избежать оконечных сопротивлений на концах основного кабеля.



9. Подключение к персональному компьютеру

Если в качестве ведущего используется персональный компьютер, обычно преобразователь последовательного интерфейса RS232 / RS485 обеспечивает соединение с шиной.

Intesis.jpg

Intesis INMBSDAL0640000 Шлюз Modbus RTU(RS232,RS485)/TCP Server - DALI, до 64 балластов

Intesis.jpg

Intesis INMBSDAL0640000 Шлюз Modbus RTU(RS232,RS485)/TCP Server - DALI, до 64 балластов

Intesis 2.jpg

Intesis Intesisbox BOX-MBS-LON-A Шлюз Modbus RTU(RS232,RS485)/TCP Server - LON

Эта глава объясняет как сконфигурировать панель в качестве Modbus сервера (modbus slave).

19.1 Обзор

После того, как панель настроена как устройство MODBUS, данные панели могут быть прочитаны или записаны через протокол MODBUS.
Как показано на следующем рисунке, панель (HMI) настроена как устройство MODBUS (также называемое MODBUS server). Панель, ПК или другие устройства могут использовать протокол MODBUS для чтения или записи данных панели через интерфейс Ethernet или RS-232 / RS-485.

image

19.2 Шаги по созданию MODBUS Server

  1. Чтобы настроить HMI как устройство MODBUS, сначала добавьте новое устройство в список устройств в [Системные параметры]. Щелкните раскрывающееся поле [Тип устройства] и выберите драйвер "MODBUS server".
    [Интерфейс] включает:
    • RS-232
    • RS-485 2W
    • RS-485 4W
    • Ethernet
    • USB
    • CAN BUS

Выберите интерфейс ПЛК, соответствующий вашей модели ПЛК

image

COM 3) и установите правильные параметры связи, как показано на следующем рисунке. Сервер MODBUS [Адрес станции] установлен на 1. Нажав [Параметры], можно установить максимальный диапазон адресов LW, читаемый/записываемый клиентом Modbus. Когда объект в проекте использует регистр LW, клиент Modbus не сможет прочитать или записать адрес, выходящий за пределы указанного диапазона.

image

Если [Интерфейс] установлен на [Ethernet], то установите [№ порта]

image

[№ порта] сервера MODBUS и HMI должны совпадать. Чтобы изменить номер порта, установите его на вкладке [Системные настройки] »[Модель].

image

image


Примечание:

Для моделей серии cMT если выбран интерфейс [Ethernet], можно указать номер порта

image

19.3 Шаги для доступа к MODBUS Server

Две панели могут быть настроены как одна как клиент MODBUS и вторая как сервер MODBUS для связи и обмена данными.

Добавьте новое устройство в список клиентских устройств. Если для клиента выбирается интерфейс ПЛК [Ethernet], то установите [Тип устройства] на «MODBUS TCP/IP» и введите правильный [IP-адрес] (IP-адрес сервера MODBUS), [Номер порта] и [Адрес станции. ].

image

Если для клиента выбран интерфейс [RS-232] или [RS-485], то [Тип устройства] должен быть установлен на «MODBUS RTU», а его параметры связи также должны быть правильно настроены.

Когда закончите, то нажмите [OK] и новое устройство “MODBUS RTU” будет отображено в списке устройств.

image

На странице параметров каждого объекта выбрав [Устройство] “MODBUS RTU” в списке адресов выберите соответствующий тип и задайте адрес.

image

Поскольку сервер является панелью, то соответствующие адреса чтения и записи представлены ниже?

19.4 Изменение адреса станции MODBUS Server онлайн

EasyBuilder Pro предоставляет следующие системные регистры для изменения адреса станции сервера MODBUS в режиме онлайн.

LW-9541 MODBUS/ASCII server адрес станции (COM 1)
LW-9542 MODBUS/ASCII server адрес станции (COM 2)
LW-9543 MODBUS/ASCII server адрес станции (COM 3)
LW-9544 MODBUS/ASCII server адрес станции (Ethernet)

19.5 Типы адресов MODBUS

В EasyBuilder Pro типы адресов протокола MODBUS: 0x, 1x, 3x, 4x, 5x, 6x, 3x_bit и 4x_bit. Коды функций MODBUS RTU перечислены ниже:

0x:
Coils
Тип устройства чтения и записи. При чтении бита с этим типом устройства код функции - 01H. При записи бита код функции 05H. При записи нескольких бит код функции равен 0fH.
1x:
Discrete Inputs
Тип устройства только для чтения. При чтении бита код функции - 02H.
3x:
Input Registers
Тип устройства только для чтения. При чтении данных используется код функции 04H.
4x:
Holding Register
Тип устройства чтения и записи. При чтении данных используется код функции 03H. При записи данных код функции - 10H.
5x Код функции такой же, как у 4x. Разница в том, что 5x заменяет двойное слово, если формат 32-битный без знака. Если данные, прочитанные 4x, равны 0x1234, данные, прочитанные 5x, будут 0x3412
6x Тип устройства чтения и записи. При чтении данных используется код функции 03H. Отличие от 4x в том, что при записи данных код функции - 06H, что означает запись в один регистр.
3x_bit Код функции такой же, как у 3x. Разница в том, что 3x_bit считывает один бит данных.
4x_bit Код функции такой же, как у 4x. Разница в том, что 4x_bit считывает один бит данных.
6x_bit Код функции такой же, как у 6x. Разница в том, что 6x_bit считывает один бит данных.


Для получения дополнительной информации см. “37 MODBUS TCP/IP шлюз”.
Ссылка, чтобы загрузить демонстрационный проект. Пожалуйста, проверьте свое интернет-соединение перед загрузкой демонстрационного проекта.

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