Как подключить modbus rtu к компьютеру
Изучая оборудование систем Умный Дом мы постоянно сталкиваемся с упоминанием протокола 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-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 |
Например, первый регистр 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 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.
Модули с дискретным вводом: 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.
Все клеммы «A» должны быть соединены вместе, также как и все клеммы «B» должны быть соединены вместе соответственно.
Инвертирование соединений «A» и «B» устройства не только препятствует его обмену данными, но также может остановить работу всей системы связи из-за неправильного прямого (поляризационного) напряжения, обнаруженного на клеммах неправильно подключенного устройства.
Чтобы избежать ошибок при подключении большого количества устройств, следует использовать кабели одного цвета для всех подключений к клеммам A, а кабели одного цвета следует использовать для всех подключений к клеммам B различных устройств (например, белый для A и синий для B).
2. Связь между устройствами
В отличие от многих систем распределения энергии, важен способ параллельного подключения устройств. Система RS485, используемая для связи Modbus, обеспечивает основной кабель (шина или магистраль), к которому все устройства должны быть подключены с помощью максимально коротких ответвлений (также называемых шлейфами).
Ветви НЕ должны быть длиннее 1200 м ! Более длинные ответвления могут вызвать отражения сигнала и вызвать помехи и, как следствие, ошибки при приеме данных.
3. Максимальное расстояние и максимальное кол-во устройств
Главный кабель НЕ должен быть длиннее 700 м ! Это расстояние не включает ветви (которые, тем не менее, должны быть короткими). Максимальное количество устройств, которые можно подключить к основному кабелю - 32, включая устройство-мастер.
4. Использование повторителей
Для увеличения протяженности сети Modbus можно использовать повторители, а также устройства усиления и восстановления сигналов, снабженные двумя портами связи, которые передают всем сигнал от предыдущего устройства.
Если расстояние сегмента превышает 1200 м или количество ведущих устройств в сегменте более 32 штук, следует использовать повторитель (репитер), чтобы создать следующий сегмент. Причем каждый сегмент сети должен быть подключен к терминатору.
С помощью репитера основной кабель делится на разные сегменты, каждый из которых может иметь длину до 700 м и соединять 32 устройства (в это количество входят репитеры). Максимальное количество повторителей, которые должны быть подключены последовательно - 3. Большее количество повторителей приводит к чрезмерным задержкам в системе связи.
5. Тип используемого кабеля
Используемый кабель представляет собой экранированную витую пару (телефонного типа). Например, можно указать кабель Belden 3105A, но можно использовать другие типы кабеля с эквивалентными характеристиками. Двойник состоит из двух скрученных между собой проводников.
Такое расположение повышает устойчивость к электромагнитным помехам, поскольку кабель образует серию последовательных катушек, каждая из которых обращена в направлении, противоположном направлению следующей: таким образом, любое магнитное поле в окружающей среде проходит через каждую пару катушек в противоположных направлениях, и его влияние таким образом, очень уменьшается (эффект на каждую катушку прямо противоположен влиянию на следующую, и, таким образом, эффект отменяется).
Экранирование может быть плетеным (образовано сеткой из тонких проводящих проводов) или быть фольгой (состоящей из листа металла, намотанного вокруг проводников): эти два типа эквивалентны.
6. Подключение к клеммам
В некоторых странах разрешается вставлять два кабеля в одну винтовую клемму . В этом случае можно подключить основные входные и выходные клеммы непосредственно к клеммам прибора, не создавая ответвления.
Если, с другой стороны, каждый терминал может принимать только один кабель, необходимо создать соответствующую ветвь с использованием трех вспомогательных терминалов для каждого подключаемого прибора.
7. Заземление экрана
Экран кабеля должен быть заземлен только в одной точке. Обычно это соединение выполняется на одном конце основного кабеля.
8. Конечное сопротивление
Чтобы избежать отражения сигнала, на каждом конце основного кабеля необходимо установить оконечное сопротивление 120 Ом . Конечное сопротивление следует использовать только на концах основного кабеля . Если общая длина основного кабеля меньше 50 м, можно избежать оконечных сопротивлений на концах основного кабеля.
9. Подключение к персональному компьютеру
Если в качестве ведущего используется персональный компьютер, обычно преобразователь последовательного интерфейса RS232 / RS485 обеспечивает соединение с шиной.
Intesis INMBSDAL0640000 Шлюз Modbus RTU(RS232,RS485)/TCP Server - DALI, до 64 балластов
Intesis INMBSDAL0640000 Шлюз Modbus RTU(RS232,RS485)/TCP Server - DALI, до 64 балластов
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.
19.2 Шаги по созданию MODBUS Server
- Чтобы настроить HMI как устройство MODBUS, сначала добавьте новое устройство в список устройств в [Системные параметры]. Щелкните раскрывающееся поле [Тип устройства] и выберите драйвер "MODBUS server".
[Интерфейс] включает:- RS-232
- RS-485 2W
- RS-485 4W
- Ethernet
- USB
- CAN BUS
Выберите интерфейс ПЛК, соответствующий вашей модели ПЛК
COM 3) и установите правильные параметры связи, как показано на следующем рисунке. Сервер MODBUS [Адрес станции] установлен на 1. Нажав [Параметры], можно установить максимальный диапазон адресов LW, читаемый/записываемый клиентом Modbus. Когда объект в проекте использует регистр LW, клиент Modbus не сможет прочитать или записать адрес, выходящий за пределы указанного диапазона.
Если [Интерфейс] установлен на [Ethernet], то установите [№ порта]
[№ порта] сервера MODBUS и HMI должны совпадать. Чтобы изменить номер порта, установите его на вкладке [Системные настройки] »[Модель].
Примечание:
Для моделей серии cMT если выбран интерфейс [Ethernet], можно указать номер порта
19.3 Шаги для доступа к MODBUS Server
Две панели могут быть настроены как одна как клиент MODBUS и вторая как сервер MODBUS для связи и обмена данными.
Добавьте новое устройство в список клиентских устройств. Если для клиента выбирается интерфейс ПЛК [Ethernet], то установите [Тип устройства] на «MODBUS TCP/IP» и введите правильный [IP-адрес] (IP-адрес сервера MODBUS), [Номер порта] и [Адрес станции. ].
Если для клиента выбран интерфейс [RS-232] или [RS-485], то [Тип устройства] должен быть установлен на «MODBUS RTU», а его параметры связи также должны быть правильно настроены.
Когда закончите, то нажмите [OK] и новое устройство “MODBUS RTU” будет отображено в списке устройств.
На странице параметров каждого объекта выбрав [Устройство] “MODBUS RTU” в списке адресов выберите соответствующий тип и задайте адрес.
Поскольку сервер является панелью, то соответствующие адреса чтения и записи представлены ниже?
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 шлюз”.
Ссылка, чтобы загрузить демонстрационный проект. Пожалуйста, проверьте свое интернет-соединение перед загрузкой демонстрационного проекта.
Читайте также: