NEWS
Драйвер ModBus
-
По случаю мне досталось много чего - типа ПЛК-100, сименс лого и прочего, но мне ничего не понадобилось пока(( `
Вот про сименс очень интересно что там "досталось", мне сейчас не хватает портов ввода для s7-1200, вдруг у вас без дела пылится? -
Так как проблема с отсутствием в ioBroker ModBus RTU так и не решилась, вот один из вариантов как подключать устройства с RTU и интерфейсом 485 к ioBroker по ModBus TCP. Может кому пригодится. http://esp8266.ru/forum/threads/modbus- … erver.911/
-
Есть 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.
-
-
На гите лежит версия, которая поддерживает rtu по rs485.
Пришлось, правда, поменять код и для tcp мастера и слейва. Так же поменяна адресация при использовании alias.
Если кто то использует tcp: просьба протестить.
И пути назад нет. Надо что бы новая библиотека заработала, т.к. прошлый используемый пакет был в зачаточном состоянии и не изменялся уже 2 года.
-
Если кто то использует 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
В шлюзе ничего не менялось.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden