NEWS
Драйвер ModBus
-
Попробуй перезапустить драйвер…
У меня разрешает выбор COM порта только когда драйвер запущен.
А на Опельсинке вообще никогда проблем не было с выбором COM порта (Armbian 5.20)
-
При попытке установить драйвер вылетает ошибка в логе:
` > ERR!
Tried to download: https://github.com/voodootikigod/node-s … a32.tar.gz `
По данной ссылке действительно ничего нет, при этом в более новой версии node-serialport (4.0.7) присутствует архив ia32. Что с этим можно сделать?
-
При попытке установить драйвер вылетает ошибка в логе:
` > ERR!
Tried to download: https://github.com/voodootikigod/node-s … a32.tar.gz `
По данной ссылке действительно ничего нет, при этом в более новой версии node-serialport (4.0.7) присутствует архив ia32. Что с этим можно сделать? `
Это стандартный метод установки. Сначала установщик пытается скачать предкомпилированную версию для системы. И если система экзотическая, то пытается собрать из исходников сам.Для этого нужно установить соответсвующие apt-get пакеты.
Исходя из того что для windows бинарные версии существуют, то значит у тебя linux.
Нужно сначала установить
sudo apt-get install build-essential
и потом установить iob драйвер от рута.
И запускать его тоже надо от рута
-
Да, Debian 8 32-bit.
build-essential уже стоял, использую root, других пользователей не заводил, драйвера наверное тоже запускаются от root, или я что-то не так понимаю? В admin интерфейсе просто пытаюсь ставить modbus… или надо как-то принудительно из командной строки?
-
Да, Debian 8 32-bit.
build-essential уже стоял, использую root, других пользователей не заводил, драйвера наверное тоже запускаются от root, или я что-то не так понимаю? В admin интерфейсе просто пытаюсь ставить modbus… или надо как-то принудительно из командной строки? `
Ну в целях эксперимента попробуй установить из командной строкиcd /opt/iobroker sudo npm i iobroker.modbus
При ошибке должен появится npm-debug.log в /opt/iobroker. Было бы интересно его посмотреть.
-
Попробовал. Cначала удалил в админе старую установку modbus, потом установил из строки. Вроде установилось. Никаких сообщений об ошибках в консоли не увидел, в логах админа вообще пусто, npm-debug.log не появился. Но… захожу в админ - закладки "драйвера" - вижу установленный modbus adapter, захожу в закладку "настройки драйверов" - там нет modbus. Когда до этого игрался с этим делом - обнаружил, что именно так и бывает с версией 0.5.2, а вот если поставить ее поверх 0.5.0 - то нормально. Видимо в свежей версии есть в этой части ошибки.
Пробую еще раз, но теперь из админа. Удаляю драйвер, ставлю 0.5.2 с github - установилось на этот раз без ошибок (node-serialport сохранился от установки через консоль?), но с настройками драйвера все та же беда. Еще раз удаляю драйвер и на этот раз ставлю в админе версию 0.5.0 - повторяется ошибка с node-serialport-ia32 (разные версии modbus смотрят в разные каталоги?), но при этом а настройках драйверов появляется modbus. Ставлю через админ (обновляю) драйвер с github на версию 0.5.2 - ошибок с ia32 нет (в этот раз увидела сохраненное от установки через строку?), в настройках драйверов modbus сохранился.
Надеюсь, что заработает, проверить смогу не скоро, когда прибудет из Китая новое modbus устройство, те что есть не хочу отключать пока от существующего контроллера. Будут проблемы - отпишусь. А пока на лицо помимо ошибки с ia32 (как видим преодолимо через строку), так и ошибки в новой версии с настройками драйверов.
Кстати, node-serialport используется не совсем свежий по каким-то важным причинам?
-
Попробовал. Cначала удалил в админе старую установку modbus, потом установил из строки. Вроде установилось. Никаких сообщений об ошибках в консоли не увидел, в логах админа вообще пусто, npm-debug.log не появился. Но… захожу в админ - закладки "драйвера" - вижу установленный modbus adapter, захожу в закладку "настройки драйверов" - там нет modbus. Когда до этого игрался с этим делом - обнаружил, что именно так и бывает с версией 0.5.2, а вот если поставить ее поверх 0.5.0 - то нормально. Видимо в свежей версии есть в этой части ошибки. `
Надо просто выполнитьiobroker upload modbus iobroker add modbus
Пробую еще раз, но теперь из админа. Удаляю драйвер, ставлю 0.5.2 с github - установилось на этот раз без ошибок (node-serialport сохранился от установки через консоль?), но с настройками драйвера все та же беда. Еще раз удаляю драйвер и на этот раз ставлю в админе версию 0.5.0 - повторяется ошибка с node-serialport-ia32 (разные версии modbus смотрят в разные каталоги?), но при этом а настройках драйверов появляется modbus. Ставлю через админ (обновляю) драйвер с github на версию 0.5.2 - ошибок с ia32 нет (в этот раз увидела сохраненное от установки через строку?), в настройках драйверов modbus сохранился.
Надеюсь, что заработает, проверить смогу не скоро, когда прибудет из Китая новое modbus устройство, те что есть не хочу отключать пока от существующего контроллера. Будут проблемы - отпишусь. А пока на лицо помимо ошибки с ia32 (как видим преодолимо через строку), так и ошибки в новой версии с настройками драйверов. `
@Adav:Кстати, node-serialport используется не совсем свежий по каким-то важным причинам? `
Новый serialport ломает поддержку 0.12.x node.js версий -
Был немного занят другими делами…
Надо просто выполнить
iobroker upload modbus iobroker add modbus ```` `
После этого действительно появляется modbus последней версии в настройках, но вот в процессе опять появляется та же ошибка:
root@ioBroker:/opt/iobroker# iobroker add modbus
host.ioBroker install adapter modbus
npm install –production (System call) in "/opt/iobroker/node_modules/iobroker.modbus"
node-pre-gyp ERR! Tried to download: https://github.com/voodootikigod/node-s ... a32.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for serialport@3.1.2 and node@4.8.1 (node-v46 ABI) (falling back to source compile with node-gyp)
Я правильно понимаю, что в итоге node-serialport так и не ставится на моей версии linux?
Попробовал еще на Orange Pi Zero с Armbian - та же проблема:
ERR! Tried to download(404): https://github.com/EmergingTechnologyAd ... arm.tar.gz node-pre-gyp ERR! Pre-built binaries not found for serialport@4.0.7 and node@4.8.1 (node-v46 ABI) (falling back to source compile with node-gyp)
Но вот почему-то лезет уже к свежей версии. Хотя Вы говорили выше, что нужна старая... ничего не понимаю
build-essential здесь также установлен.
-
Был немного занят другими делами…
Надо просто выполнить
iobroker upload modbus iobroker add modbus ```` `
После этого действительно появляется modbus последней версии в настройках, но вот в процессе опять появляется та же ошибка:
root@ioBroker:/opt/iobroker# iobroker add modbus
host.ioBroker install adapter modbus
npm install –production (System call) in "/opt/iobroker/node_modules/iobroker.modbus"
node-pre-gyp ERR! Tried to download: https://github.com/voodootikigod/node-s ... a32.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for serialport@3.1.2 and node@4.8.1 (node-v46 ABI) (falling back to source compile with node-gyp)
Я правильно понимаю, что в итоге node-serialport так и не ставится на моей версии linux?
Попробовал еще на Orange Pi Zero с Armbian - та же проблема:
ERR! Tried to download(404): https://github.com/EmergingTechnologyAd ... arm.tar.gz node-pre-gyp ERR! Pre-built binaries not found for serialport@4.0.7 and node@4.8.1 (node-v46 ABI) (falling back to source compile with node-gyp)
Но вот почему-то лезет уже к свежей версии. Хотя Вы говорили выше, что нужна старая... ничего не понимаю
build-essential здесь также установлен. `
Это только надпись. А устанавливать все равно должен. -
Это только надпись. А устанавливать все равно должен. `
Понятно. Надеюсь заработает, когда будет с чем попробовать. А что на счет версий? Почему на разных железках пытается ставиться разные версии? Как это соответствует Вашему утверждению, что нужна старая?
-
Доброго времени суток всем!
Пытаюсь использовать драйвер Modbus для работы с самосборным контроллером, работающим по протоколу Modbus RTU.
Настроил драйвер на опрос holdingRegisters. Опрос ведется, данные с контроллера принимаются - проблем нет. Как я понимаю, здесь драйвер использует функцию 03 (Read Holding Registers) протокола Modbus.
Но, я пока так и не понял, как записать из ioBroker какие-нибудь данные в единичный регистр контроллера.
Это вообще возможно?
Сейчас драйвер Modbus каким-либо образом может использовать функции 06 (Preset Single Register) и 16 (Preset Multiple Regs)? Если может, то как?
-
Доброго времени суток всем!
Пытаюсь использовать драйвер Modbus для работы с самосборным контроллером, работающим по протоколу Modbus RTU.
Настроил драйвер на опрос holdingRegisters. Опрос ведется, данные с контроллера принимаются - проблем нет. Как я понимаю, здесь драйвер использует функцию 03 (Read Holding Registers) протокола Modbus.
Но, я пока так и не понял, как записать из ioBroker какие-нибудь данные в единичный регистр контроллера.
Это вообще возможно?
Сейчас драйвер Modbus каким-либо образом может использовать функции 06 (Preset Single Register) и 16 (Preset Multiple Regs)? Если может, то как? `
Для записи используется 16 если длина адресов больше 1 и6 если нужно считать только один адрес.
А что не работает?
-
Для записи используется 16 если длина адресов больше 1 и
6 если нужно считать только один адрес.
А что не работает? `
Я понимаю, что для Вас это "азы", но я просто не могу "въехать" в логику обработки событий ioBroker.
В моем случае ioBroker получает от удаленного контроллера данные из 17 Holding Registers (в драйвере Modbus они описаны как 40001 … 40017). У этого контроллера есть один входной регистр (Preset Single Register), если записать в него какое-либо шестнадцатиричное число, то он исполняет сооветствующие команды.
К примеру, я хочу, чтобы при появлении значения 280 в 40002 Holding Registers ioBroker отправлял значение 4 (0x4) в указанный Single Register контроллера посредством функции 06 (Preset Single Register) протокола Modbus. Как мне это реализовать в ioBroker?
Какие драйверы кроме Modbus необходимо установить для реализации этого?
И, если подобную логику кто-то делал - то где можно об этом почитать?
-
Для записи используется 16 если длина адресов больше 1 и
6 если нужно считать только один адрес.
А что не работает? `
Я понимаю, что для Вас это "азы", но я просто не могу "въехать" в логику обработки событий ioBroker.
В моем случае ioBroker получает от удаленного контроллера данные из 17 Holding Registers (в драйвере Modbus они описаны как 40001 … 40017). У этого контроллера есть один входной регистр (Preset Single Register), если записать в него какое-либо шестнадцатиричное число, то он исполняет сооветствующие команды.
К примеру, я хочу, чтобы при появлении значения 280 в 40002 Holding Registers ioBroker отправлял значение 4 (0x4) в указанный Single Register контроллера посредством функции 06 (Preset Single Register) протокола Modbus. Как мне это реализовать в ioBroker?
Какие драйверы кроме Modbus необходимо установить для реализации этого?
И, если подобную логику кто-то делал - то где можно об этом почитать? `
Понятно, что было не понятноТебе нужен Javascript драйвер и твой случай будет выглядеть так:
Для этого можешь импортировать код отсюда.
! ````
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="on_ext" id="6o:Z)o={6z!yNYw2%Q!u" x="63" y="63"><mutation items="1"></mutation>
<field name="CONDITION">any</field><value name="OID0"><shadow type="field_oid" id=";R*F2k/]wqu#aGAZo8d*"><field name="oid">modbus.0.holdingRegisters.1</field></shadow></value> <statement name="STATEMENT"><block type="controls_if" id="WVf9W,,C2j?,BMc{mWKU"><value name="IF0"><block type="logic_compare" id="1,b~SR78igB..=oouJ5y"><field name="OP">EQ</field> <value name="A"><block type="on_source" id="9hE-J`4B{`*Xh^By3sZC"><field name="ATTR">state.val</field></block></value> <value name="B"><block type="math_number" id="%n0=RkQG]^IJ=MjnabbD"><field name="NUM">280</field></block></value></block></value> <statement name="DO0"><block type="control" id="-CL55G=Hr[UyJ5_p/xI]"><mutation delay_input="false"></mutation> <field name="OID">modbus.0.holdingRegisters.2</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="math_number" id="T%[O)Rm:B`Uz=HGuP7W("><field name="NUM">4</field></block></value></block></statement></block></statement></block></xml>
![48_2017-04-20_00_01_48-iobroker.admin.png](/assets/uploads/files/48_2017-04-20_00_01_48-iobroker.admin.png) В моём примере читается регистр с адресом 1 и если там появляется 280, то пишется в регистр с адресом 2 значение 4. Или можно javascript:
on({id: 'modbus.0.holdingRegisters.1', change: "any"}, function (obj) {
if (obj.state.val === 280) setState("modbus.0.holdingRegisters.2", 4);
}); -
Понятно, что было не понятно
Или можно javascript:
on({id: 'modbus.0.holdingRegisters.1', change: "any"}, function (obj) { if (obj.state.val === 280) setState("modbus.0.holdingRegisters.2", 4); }); ```` `
Большое спасибо за пинок в нужном направлении!
Никогда бы не подумал, что здесь необходимо для отправки контроллеру числа в его входной регистр указывать адрес Holding Registers. У меня была твердая убежденность, что это и логически и физически разные ячейки памяти Modbus контроллера. По крайней мере я в прошивке своего контроллера сделал именно такое разделение.
Кстати, в моем случае Ваш скрипт не сработает совсем из-за неверной адресации регистров. Но работает следующий код, который и обрабатывает мой пример :
on({id: 'modbus.0.holdingRegisters.40002', change: "any"}, function (obj) { if (obj.state.val == 280) setState("modbus.0.holdingRegisters.40001", 4); });
-
Добрался наконец попробовать modbus напрямую с ioBroker. Девайс имеет набор разных входов - AO-AI-DO-DI и подключен через TCP. Настройки драйвера оставлены по умолчанию. Адреса регистров девайса совпадают с адресами, назначаемыми драйвером ioBroker по умолчанию.
~~![](</s><URL url=)<link_text text="http://www.strict-con.com/product/pics/ ... 659916.jpg">http://www.strict-con.com/product/pics/20170131/201701311485849659916.jpg</link_text>" />
Аналоговые входы-выходы (AI-AO), они же регистры входа и holding работают. А вот дискретные входы и выходы (регистры флагов) - никак не удалось заставить работать. Не отрабатываются изменения. Настроек там совсем мало, пробовал менять роль - никакой реакции. Что еще и где можно подкрутить?
С контроллером WB5 сей девайс через 485 работает по всем входам-выходам нормально.
И еще заметил странность - может работать довольно долго и стабильно, потом начинают в логах идти сообщения вроде
warn Poll error count: 1 code: {"err":"timeout"}
причем понять причину с чего вдруг это начинает происходить не удается, перезапуск драйвера помогает. Отчего может происходить такой сбой?~~
-
Разобрался с дискретными входами-выходами. Надо было поставить галку "использовать прямые адреса при alias". После этого увидел что адреса созданных ранее дискретных регистров уползли вверх на 8, адреса аналоговых - не изменились. После этого удалил то, что уползло и создал заново с правильными адресами. После чего дискретные входы-выходы заработали. Не понял в чем смысл alias и почему при этом изменяются адреса регистров, причем только дискретных.
-
Появился у меня еще девайс, который хотелось бы прикрутить к ioBroker. Девайс - контроллер заряда батареи. Выход у него - 485, подключается через конвертер в TCP, в итоге в ioBroker я настраиваю Modbus TCP. Описание протокола девайса - http://www.solar-elektro.cz/data/dokume … otocol.pdf, в наличии все 4 типа регистров. Наиболее интересны input регистры. Результат получается странный - бОльшая часть регистров опрашивается нормально, но некоторые не работают - в логах идет "Poll error count: 6 code: {"errorCode":132,"exceptionCode":2,"message":"ILLEGAL DATA ADDRESS"}", то есть как бы регистра такого нет… при этом через Modbus poll я без проблем считываю данные с этого адреса. Ошибиться с пересчетом адресов из HEX в десятичные трудно, поскольку, к примеру, с адреса 3111 данные считываются, с 311A - не считываются, 311D - опять нормально считываются. То есть они идут почти подряд. Галки alias ставил-снимал - ничего не меняется. Дискретные входы не пробовал - не интересны, holding - нормально работают, а вот регистры флагов - вообще никак не идут. Но самое забавное с input - как такое может быть совсем не понятно.
-
Возвращаюсь к вопросу о работе с новым девайсом. С input регистрами удалось разобраться. Стали считываться все переменные при параметре "максисмальное кол-во регистров при чтении = 1". А вот с регистрами флагов ничего не выходит. Есть подозрение что причина в том, что ioBroker пытается считать сразу группу coil одним запросом с номерами подряд. А дело в том, что не все адреса с coil у устройства рабочие. К примеру, 0, 2, 3 - рабочие, 1 - нет (просто нет такого регистра в реальном устройстве). Ну и получается в итоге ошибка адреса у ioBroker. При этом с modbus poll считывается все нормально (кроме 1 конечно). Другое же устройство у меня имеет coil адреса подряд и там как раз все работает с ioBroker нормально. Если все так - получается необходимо предусмотреть в софте и такую возможность.
-
Вечер добрый,
поприветствуйте ещё одного чайника. Только просьба, сильно не пинать.
Приобрёл два месяца назад Siemens LOGO последнюю, поигрался, понравилась. Сейчас хочу, с вашей помощью, познакомиться с Modbus.Можно сказать с нуля. Начну с входом NI1, как его и драйвер настроить чтоб друг друга понимали?
Спасибо
2071_01-ni1.jpg
2071_01_1-ni1.jpg