NEWS
Драйвер ModBus
-
Есть 4 типа регистров:
-
бинарные read only
-
бинарные read/write
-
аналоговые регистры входа
-
holding регистры.
О каких идёт речь? И какого типа аналоговый регистр: short, int32, float? `
holding регистры.
-
-
Есть 4 типа регистров:
-
бинарные read only
-
бинарные read/write
-
аналоговые регистры входа
-
holding регистры.
О каких идёт речь? И какого типа аналоговый регистр: short, int32, float? `
holding регистры. `
Да… мини инструкции не хватает.Собрал переходник Modbus TCP RTU RS-485 http://esp8266.ru/forum/threads/modbus- … erver.911/
Тоже думал осилю настройку драйвера методом тыка, но увы
Программой QModBus подаю запрос (Подсмотрел тут http://www.iobroker.net/?page_id=4643&l … ModBus_RTU)
05 03 00 00 00 09
В ответ получаю 9 строк со значением состояний входов и датчиков.
При записи новых значений
05 06 00 02 значения, меняются.
Как теперь из запихнуть в IOB?
Вот кусок кода из arduin-ки
! ````
#include <simplemodbusslave.h>
! //////////////////// Макроопределения портов и настройки программы ///////////////////
#define TxEnablePin 13 // Tx/Rx пин RS485
#define baud 9600 // скоростьобмена по последовательному интерфейсу. (UART)
#define Slave_ID 5 // Адрес Slave устройсва
! enum
{
// just add or remove registers and your good to go...
// The first register starts at address 0
P0,
P1,
P2,
P3,
P4,
P5,
P6,
P7,
P8,
HOLDING_REGS_SIZE /// Это не удалять размер массива HOLDING_REGS.
//общее количество регистров для функции 3 и 16 разделяет тотже самый массив регистров
//т.е. то же самое адресное пространство
};
!
unsigned int holdingRegs[HOLDING_REGS_SIZE]; // function 3 and 16 register array</simplemodbusslave.h> -
-
Есть 4 типа регистров:
-
бинарные read only
-
бинарные read/write
-
аналоговые регистры входа
-
holding регистры.
О каких идёт речь? И какого типа аналоговый регистр: short, int32, float? `
holding регистры. `
Да… мини инструкции не хватает.Собрал переходник Modbus TCP RTU RS-485 http://esp8266.ru/forum/threads/modbus- … erver.911/
Тоже думал осилю настройку драйвера методом тыка, но увы
Программой QModBus подаю запрос (Подсмотрел тут http://www.iobroker.net/?page_id=4643&l … ModBus_RTU)
05 03 00 00 00 09
В ответ получаю 9 строк со значением состояний входов и датчиков.
При записи новых значений
05 06 00 02 значения, меняются.
Как теперь из запихнуть в IOB?
Вот кусок кода из arduin-ки
!
#include <simplemodbusslave.h> ! //////////////////// Макроопределения портов и настройки программы /////////////////// #define TxEnablePin 13 // Tx/Rx пин RS485 #define baud 9600 // скоростьобмена по последовательному интерфейсу. (UART) #define Slave_ID 5 // Адрес Slave устройсва ! enum { // just add or remove registers and your good to go... // The first register starts at address 0 P0, P1, P2, P3, P4, P5, P6, P7, P8, HOLDING_REGS_SIZE /// Это не удалять размер массива HOLDING_REGS. //общее количество регистров для функции 3 и 16 разделяет тотже самый массив регистров //т.е. то же самое адресное пространство }; ! unsigned int holdingRegs[HOLDING_REGS_SIZE]; // function 3 and 16 register array</simplemodbusslave.h>
`
Если я правильно понимаю Modbus TCP RTU и Modbus over TCP разные протоколы. Драйвер поддерживает только Modbus over TCP. -
-
Если я правильно понимаю Modbus TCP RTU и Modbus over TCP разные протоколы. Драйвер поддерживает только Modbus over TCP. `
Я то и подавно не понимаю… А как-же
@dito85:Так как проблема с отсутствием в ioBroker ModBus RTU так и не решилась, вот один из вариантов как подключать устройства с RTU и интерфейсом 485 к ioBroker по ModBus TCP. Может кому пригодится. http://esp8266.ru/forum/threads/modbus- … erver.911/ `
И там и там порт 502 по умолчанию и упоминается Modbus TCP, может это все-же оно?Хоть кусочек примера дайте… куда вписывать ID от Slave устройства, номер регистра...
-
Если я правильно понимаю Modbus TCP RTU и Modbus over TCP разные протоколы. Драйвер поддерживает только Modbus over TCP. `
Я то и подавно не понимаю… А как-же
@dito85:Так как проблема с отсутствием в ioBroker ModBus RTU так и не решилась, вот один из вариантов как подключать устройства с RTU и интерфейсом 485 к ioBroker по ModBus TCP. Может кому пригодится. http://esp8266.ru/forum/threads/modbus- … erver.911/ `
И там и там порт 502 по умолчанию и упоминается Modbus TCP, может это все-же оно?Хоть кусочек примера дайте… куда вписывать ID от Slave устройства, номер регистра... `
А ты можешь к своему устройству напрямую через serial порт подключится?Тогда можно попробовать https://www.npmjs.com/package/jsmodbus
` > MODBUS TCP is a protocol that has a specification.
MODBUS RTU and MODBUS ASCII are protocols that have specifications.
TCP/IP is a protocol that has a specification.
MODBUS over TCP means a MODBUS RTU packet wrapped in a TCP packet. (A)
MODBUS TCP means a MODBUS TCP packet wrapped in a TCP packet. (B)
A and B are not compatible. They transfer like data but have different structures. `
Здесь можно посмотреть структуру пакетов: -
Тогда можно попробовать https://www.npmjs.com/package/jsmodbus `
Для меня это непосильный труд… Я мало что понимаю в том, куда я должен это поставить?Есть виртуалка с IOB,
Есть Win10 c USB-COM-портом к которому подключен RS-485
Есть ESP8266 c RS-485 ( Modbus TCP to RTU)
Есть Ардуинка с RS-485 (могу залить любой скетч).
Если постараться, то могу прокинуть USB-COM с RS485 внутрь IOB на виртуалку.
-
Немного продвинулся…
При помощи все того-же переходника на ESP8266 - Modbus TCP to Modbus RTU получилось прочитать данные. Значит переходник работает!!!
Делал так: в IOB в конфигурации modbus установил следующее:
IP адрес партнера: 192.168.11.205
Порт: 502
ID устройства: 5
Тип: Slave
Еще были созданы Holding регистры 40001-40009. При записи значений в эти регистры, я могу их прочитать при помощи все тойже QModBus.
Получается что я создал эмулятор slave устройства!!!
А теперь вопросы:
1. Как сделать так, чтобы IOB был как мастер? (Что нужно указать в конфиге)
2. Опрос slave устройства с номером 6 2 раза в секунду?
3. Драйверов modbus должно быть столько-же, сколько и Slave устройств?
4. На каждый slave свой драйвер?
PS: Отвечаю сам.
1. Выбрать IP адрес партнера: 192.168.11.205
Порт: 502
ID устройства: 6
Тип: Master.
2. Интервал опроса: 500
Правильно ли я понял, что в этой связке я не подключу еще устройства на шину RS-485.
Даже создав новый драйвер modbus.1 и указав в нем то-же IP 192.168.11.205, только изменив ID устройства например на 10, у меня уже неполучается считать данный с 10-го устройства.
Выходит что для каждого устройства нужен свой Modbus TCP to Modbus RTU шлюз.
А если в качестве мастера будет Modbus TCP to Modbus RTU шлюз, то как в этом случае настраивать драйвер?
-
Правильно ли я понял, что в этой связке я не подключу еще устройства на шину RS-485.
Даже создав новый драйвер modbus.1 и указав в нем то-же IP 192.168.11.205, только изменив ID устройства например на 10, у меня уже неполучается считать данный с 10-го устройства.
Выходит что для каждого устройства нужен свой Modbus TCP to Modbus RTU шлюз.
А если в качестве мастера будет Modbus TCP to Modbus RTU шлюз, то как в этом случае настраивать драйвер? `
Вы, видимо, не совсем разобрались в настройках и принципах работы самого шлюза. Шлюз, как бы, состоит из двух устройств:
-
ModBus RTU master -который опрашивает и управляет устройствами на линии 485 (я подключал 6 устройств). Причем опрос устройств на стороне RTU происходит независимо от запросов со стороны TCP(скорость опроса, сами запросы настраиваются в шлюзе) . Ответы от каждого устройства записываются в определенный участок памяти.
-
ModBus TCP slave - устройство, которое и должно отвечать вашему IOB, это устройство видит ту же область памяти что и ModBus RTU. Поэтому в IOB достаточно одного экземпляра драйвера ModBus TCP. Просто обращайтесь к определенному участку памяти где лежат данные от нужного устройства.
P.S. На стороне TCP данный шлюз, так же поддерживает GET запросы, которыми можно управлять и опрашивать устройства на стороне RTU.
-
-
Bluefox анонсировал доработку Modbus, версия на git
Bluefox: Допилил Modbus RTU
-
На гите лежит версия, которая поддерживает rtu по rs485.
Пришлось, правда, поменять код и для tcp мастера и слейва. Так же поменяна адресация при использовании alias.
Если кто то использует tcp: просьба протестить.
И пути назад нет. Надо что бы новая библиотека заработала, т.к. прошлый используемый пакет был в зачаточном состоянии и не изменялся уже 2 года.
-
Если кто то использует tcp: просьба протестить. `
Жду с Китая Orange PI Plus 2 и детали на очередной шлюз ESP8266 TCP/RTU.
Как все приедет, соберу и буду тестить )
-
Если кто то использует tcp: просьба протестить. `
Жду с Китая Orange PI Plus 2 и детали на очередной шлюз ESP8266 TCP/RTU.
Как все приедет, соберу и буду тестить ) `
У меня все это есть и ESP8266 и Orange PI PC :Шлюз ESP8266 TCP/RTU делаю по верхней схеме http://esp8266.ru/forum/threads/modbus- … erver.911/
На странице Modbus setting в ESP8266 что прописать, что-бы протестировать?
Драйвер поставил 0.4.0.
-
Что-то покраснел modbus при выборе TCP и master.
host-Bee-IoT 2016-10-18 21:07:39.679 info Restart adapter system.adapter.modbus.0 because enabled host-Bee-IoT 2016-10-18 21:07:39.679 error instance system.adapter.modbus.0 terminated with code 0 (OK) modbus-0 2016-10-18 21:07:39.671 info terminating RangeError: 2016-10-18 21:07:39.651 error at Socket.Readable.push (_stream_readable.js:111:10) RangeError: 2016-10-18 21:07:39.651 error at readableAddChunk (_stream_readable.js:153:18) RangeError: 2016-10-18 21:07:39.651 error at Socket.emit (events.js:169:7) RangeError: 2016-10-18 21:07:39.651 error at emitOne (events.js:77:13) RangeError: 2016-10-18 21:07:39.651 error at Object. (/opt/iobroker/node_modules/iobroker.modbus/node_modules/jsmodbus/src/modbus-tcp-client.js:129:22) RangeError: 2016-10-18 21:07:39.651 error at Object.emit (/opt/iobroker/node_modules/iobroker.modbus/node_modules/stampit-event-bus/src/stampit-event-bus.js:20:38) RangeError: 2016-10-18 21:07:39.651 error at Object. (/opt/iobroker/node_modules/iobroker.modbus/node_modules/jsmodbus/src/modbus-client-core.js:135:17) RangeError: 2016-10-18 21:07:39.651 error at Object. (/opt/iobroker/node_modules/iobroker.modbus/node_modules/jsmodbus/src/modbus-client-core.js:91:33) RangeError: 2016-10-18 21:07:39.651 error at Buffer.readUInt8 (buffer.js:718:5) RangeError: 2016-10-18 21:07:39.651 error at checkOffset (buffer.js:680:11) RangeError: 2016-10-18 21:07:39.651 error index out of range uncaught 2016-10-18 21:07:39.651 error exception: index out of range modbus-0 2016-10-18 21:07:39.620 info Connected to slave 192.168.11.205 modbus-0 2016-10-18 21:07:39.565 warn Serial is not available modbus-0 2016-10-18 21:07:39.561 info starting. Version 0.4.0 in /opt/iobroker/node_modules/iobroker.modbus host-Bee-IoT 2016-10-18 21:07:39.136 info instance system.adapter.modbus.0 started with pid 23265 host-Bee-IoT 2016-10-18 21:07:26.437 info Restart adapter system.adapter.modbus.0 because enabled host-Bee-IoT 2016-10-18 21:07:26.437 error instance system.adapter.modbus.0 terminated with code 0 (OK) uncaught 2016-10-18 21:07:26.423 error exception: index out of range modbus-0 2016-10-18 21:07:26.403 info Connected to slave 192.168.11.205 modbus-0 2016-10-18 21:07:26.353 warn Serial is not available
-
Что-то покраснел modbus при выборе TCP и master.
host-Bee-IoT 2016-10-18 21:07:39.679 info Restart adapter system.adapter.modbus.0 because enabled host-Bee-IoT 2016-10-18 21:07:39.679 error instance system.adapter.modbus.0 terminated with code 0 (OK) modbus-0 2016-10-18 21:07:39.671 info terminating RangeError: 2016-10-18 21:07:39.651 error at Socket.Readable.push (_stream_readable.js:111:10) RangeError: 2016-10-18 21:07:39.651 error at readableAddChunk (_stream_readable.js:153:18) RangeError: 2016-10-18 21:07:39.651 error at Socket.emit (events.js:169:7) RangeError: 2016-10-18 21:07:39.651 error at emitOne (events.js:77:13) RangeError: 2016-10-18 21:07:39.651 error at Object. (/opt/iobroker/node_modules/iobroker.modbus/node_modules/jsmodbus/src/modbus-tcp-client.js:129:22) RangeError: 2016-10-18 21:07:39.651 error at Object.emit (/opt/iobroker/node_modules/iobroker.modbus/node_modules/stampit-event-bus/src/stampit-event-bus.js:20:38) RangeError: 2016-10-18 21:07:39.651 error at Object. (/opt/iobroker/node_modules/iobroker.modbus/node_modules/jsmodbus/src/modbus-client-core.js:135:17) RangeError: 2016-10-18 21:07:39.651 error at Object. (/opt/iobroker/node_modules/iobroker.modbus/node_modules/jsmodbus/src/modbus-client-core.js:91:33) RangeError: 2016-10-18 21:07:39.651 error at Buffer.readUInt8 (buffer.js:718:5) RangeError: 2016-10-18 21:07:39.651 error at checkOffset (buffer.js:680:11) RangeError: 2016-10-18 21:07:39.651 error index out of range uncaught 2016-10-18 21:07:39.651 error exception: index out of range modbus-0 2016-10-18 21:07:39.620 info Connected to slave 192.168.11.205 modbus-0 2016-10-18 21:07:39.565 warn Serial is not available modbus-0 2016-10-18 21:07:39.561 info starting. Version 0.4.0 in /opt/iobroker/node_modules/iobroker.modbus host-Bee-IoT 2016-10-18 21:07:39.136 info instance system.adapter.modbus.0 started with pid 23265 host-Bee-IoT 2016-10-18 21:07:26.437 info Restart adapter system.adapter.modbus.0 because enabled host-Bee-IoT 2016-10-18 21:07:26.437 error instance system.adapter.modbus.0 terminated with code 0 (OK) uncaught 2016-10-18 21:07:26.423 error exception: index out of range modbus-0 2016-10-18 21:07:26.403 info Connected to slave 192.168.11.205 modbus-0 2016-10-18 21:07:26.353 warn Serial is not available ```` `
А настройки? Адреса? Тип адресов?
-
Что-то покраснел modbus при выборе TCP и master.
host-Bee-IoT 2016-10-18 21:07:39.679 info Restart adapter system.adapter.modbus.0 because enabled host-Bee-IoT 2016-10-18 21:07:39.679 error instance system.adapter.modbus.0 terminated with code 0 (OK) modbus-0 2016-10-18 21:07:39.671 info terminating RangeError: 2016-10-18 21:07:39.651 error at Socket.Readable.push (_stream_readable.js:111:10) RangeError: 2016-10-18 21:07:39.651 error at readableAddChunk (_stream_readable.js:153:18) RangeError: 2016-10-18 21:07:39.651 error at Socket.emit (events.js:169:7) RangeError: 2016-10-18 21:07:39.651 error at emitOne (events.js:77:13) RangeError: 2016-10-18 21:07:39.651 error at Object. (/opt/iobroker/node_modules/iobroker.modbus/node_modules/jsmodbus/src/modbus-tcp-client.js:129:22) RangeError: 2016-10-18 21:07:39.651 error at Object.emit (/opt/iobroker/node_modules/iobroker.modbus/node_modules/stampit-event-bus/src/stampit-event-bus.js:20:38) RangeError: 2016-10-18 21:07:39.651 error at Object. (/opt/iobroker/node_modules/iobroker.modbus/node_modules/jsmodbus/src/modbus-client-core.js:135:17) RangeError: 2016-10-18 21:07:39.651 error at Object. (/opt/iobroker/node_modules/iobroker.modbus/node_modules/jsmodbus/src/modbus-client-core.js:91:33) RangeError: 2016-10-18 21:07:39.651 error at Buffer.readUInt8 (buffer.js:718:5) RangeError: 2016-10-18 21:07:39.651 error at checkOffset (buffer.js:680:11) RangeError: 2016-10-18 21:07:39.651 error index out of range uncaught 2016-10-18 21:07:39.651 error exception: index out of range modbus-0 2016-10-18 21:07:39.620 info Connected to slave 192.168.11.205 modbus-0 2016-10-18 21:07:39.565 warn Serial is not available modbus-0 2016-10-18 21:07:39.561 info starting. Version 0.4.0 in /opt/iobroker/node_modules/iobroker.modbus host-Bee-IoT 2016-10-18 21:07:39.136 info instance system.adapter.modbus.0 started with pid 23265 host-Bee-IoT 2016-10-18 21:07:26.437 info Restart adapter system.adapter.modbus.0 because enabled host-Bee-IoT 2016-10-18 21:07:26.437 error instance system.adapter.modbus.0 terminated with code 0 (OK) uncaught 2016-10-18 21:07:26.423 error exception: index out of range modbus-0 2016-10-18 21:07:26.403 info Connected to slave 192.168.11.205 modbus-0 2016-10-18 21:07:26.353 warn Serial is not available ```` `
А настройки? Адреса? Тип адресов? `
IP адрес партнера: 192.168.11.205Порт: 502
ID устройства: 5
Тип: Master
В шлюзе ничего не менялось.
-
IP адрес партнера: 192.168.11.205
Порт: 502
ID устройства: 5
Тип: Master
В шлюзе ничего не менялось. `
Какой адрес и какой тип регистра. Какой максимальный и какой минимальный адреса для данного типа регистра? -
-
IP адрес партнера: 192.168.11.205
Порт: 502
ID устройства: 5
Тип: Master
В шлюзе ничего не менялось.
Какой адрес и какой тип регистра. Какой максимальный и какой минимальный адреса для данного типа регистра?
??? Только Holding (40001-40009)Опрос 200 мс. `
Я надеюсь с Aliases?А лучше скрин настроек и страницы с регистрами
-
Какой адрес и какой тип регистра. Какой максимальный и какой минимальный адреса для данного типа регистра? `
??? Только Holding (40001-40009)Опрос 200 мс. `
Я надеюсь с Aliases?А лучше скрин настроек и страницы с регистрами `
Да с ними.
Может я в настройках что не учел…
!
-
Правильно ли я понял, что в этой связке я не подключу еще устройства на шину RS-485.
Даже создав новый драйвер modbus.1 и указав в нем то-же IP 192.168.11.205, только изменив ID устройства например на 10, у меня уже неполучается считать данный с 10-го устройства.
Выходит что для каждого устройства нужен свой Modbus TCP to Modbus RTU шлюз.
А если в качестве мастера будет Modbus TCP to Modbus RTU шлюз, то как в этом случае настраивать драйвер? `
Вы, видимо, не совсем разобрались в настройках и принципах работы самого шлюза. Шлюз, как бы, состоит из двух устройств:
-
ModBus RTU master -который опрашивает и управляет устройствами на линии 485 (я подключал 6 устройств). Причем опрос устройств на стороне RTU происходит независимо от запросов со стороны TCP(скорость опроса, сами запросы настраиваются в шлюзе) . Ответы от каждого устройства записываются в определенный участок памяти.
-
ModBus TCP slave - устройство, которое и должно отвечать вашему IOB, это устройство видит ту же область памяти что и ModBus RTU. Поэтому в IOB достаточно одного экземпляра драйвера ModBus TCP. Просто обращайтесь к определенному участку памяти где лежат данные от нужного устройства.
P.S. На стороне TCP данный шлюз, так же поддерживает GET запросы, которыми можно управлять и опрашивать устройства на стороне RTU. `
У меня пока 2 устройства RTU c ID 5 и ID 10 у обоих только Holding 40001-40009. Опрос 2 раза секунду.Подскажите, как правильно настроить ESP , что-бы можно было использовать 1 экземпляр драйвера на IOB.
И как тогда в IOB правильно прописать 2 устройства 5 и 10.
-