NEWS
Драйвер ModBus
-
При попытке установить драйвер вылетает ошибка в логе:
` > 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 необходимо установить для реализации этого?
И, если подобную логику кто-то делал - то где можно об этом почитать? `
Понятно, что было не понятно :DТебе нужен 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> В моём примере читается регистр с адресом 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);
}); -
Понятно, что было не понятно :D
Или можно 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 по умолчанию.
~~<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
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login