Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. ioBroker драйвера
    5. Драйвер ModBus

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Драйвер ModBus

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      sv102 last edited by

      @aurodionov:

      @sv102:

      Здравствуйте, подскажите пожалуйста как настроить Modbus через Serial, порт USB пишет "Note Available". `
      А что выдаёт по lsusb ?

      Должен показать все устройства подключенные по usb.

      Интересует /dev/ttyUSBx, это и есть искомый порт, и да у меня на такой -же микре переходник нормально видится в дебиан `
      По lsusb тоже виден

      ! ````
      root@orangepipc2:/opt/iobroker# lsusb
      Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
      Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
      Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
      Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
      Bus 004 Device 002: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
      Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
      Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
      root@orangepipc2:/opt/iobroker#

      1 Reply Last reply Reply Quote 0
      • aurodionov
        aurodionov last edited by

        Тогда возможно не хватает прав, у меня иоброкер бегает от рута

        Пишу с пульта….

        1 Reply Last reply Reply Quote 0
        • S
          sv102 last edited by

          @aurodionov:

          Тогда возможно не хватает прав, у меня иоброкер бегает от рута

          Пишу с пульта…. `
          Не безопасно конечно, но запущено от рута. Как же заставить ioBroker видеть usb? :roll: 😢
          2244_2017-02-26_00-04-30.jpg

          1 Reply Last reply Reply Quote 0
          • aurodionov
            aurodionov last edited by

            Попробуй подключиться к этому порту терминалом, может порт чем-то занят

            1 Reply Last reply Reply Quote 0
            • M
              MSapogov last edited by

              Попробуй перезапустить драйвер…

              У меня разрешает выбор COM порта только когда драйвер запущен.

              А на Опельсинке вообще никогда проблем не было с выбором COM порта (Armbian 5.20)

              1 Reply Last reply Reply Quote 0
              • A
                Adav last edited by

                При попытке установить драйвер вылетает ошибка в логе:

                ` > ERR!

                Tried to download: https://github.com/voodootikigod/node-s … a32.tar.gz `

                По данной ссылке действительно ничего нет, при этом в более новой версии node-serialport (4.0.7) присутствует архив ia32. Что с этим можно сделать?

                1 Reply Last reply Reply Quote 0
                • Bluefox
                  Bluefox last edited by

                  @Adav:

                  При попытке установить драйвер вылетает ошибка в логе:

                  ` > 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 драйвер от рута.

                  И запускать его тоже надо от рута

                  1 Reply Last reply Reply Quote 0
                  • A
                    Adav last edited by

                    Да, Debian 8 32-bit.

                    build-essential уже стоял, использую root, других пользователей не заводил, драйвера наверное тоже запускаются от root, или я что-то не так понимаю? В admin интерфейсе просто пытаюсь ставить modbus… или надо как-то принудительно из командной строки?

                    1 Reply Last reply Reply Quote 0
                    • Bluefox
                      Bluefox last edited by

                      @Adav:

                      Да, Debian 8 32-bit.

                      build-essential уже стоял, использую root, других пользователей не заводил, драйвера наверное тоже запускаются от root, или я что-то не так понимаю? В admin интерфейсе просто пытаюсь ставить modbus… или надо как-то принудительно из командной строки? `
                      Ну в целях эксперимента попробуй установить из командной строки

                      cd /opt/iobroker
                      sudo npm i iobroker.modbus
                      

                      При ошибке должен появится npm-debug.log в /opt/iobroker. Было бы интересно его посмотреть.

                      1 Reply Last reply Reply Quote 0
                      • A
                        Adav last edited by

                        Попробовал. 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 используется не совсем свежий по каким-то важным причинам?

                        1 Reply Last reply Reply Quote 0
                        • Bluefox
                          Bluefox last edited by

                          @Adav:

                          Попробовал. Cначала удалил в админе старую установку modbus, потом установил из строки. Вроде установилось. Никаких сообщений об ошибках в консоли не увидел, в логах админа вообще пусто, npm-debug.log не появился. Но… захожу в админ - закладки "драйвера" - вижу установленный modbus adapter, захожу в закладку "настройки драйверов" - там нет modbus. Когда до этого игрался с этим делом - обнаружил, что именно так и бывает с версией 0.5.2, а вот если поставить ее поверх 0.5.0 - то нормально. Видимо в свежей версии есть в этой части ошибки. `
                          Надо просто выполнить

                          iobroker upload modbus
                          iobroker add modbus
                          

                          @Adav:

                          Пробую еще раз, но теперь из админа. Удаляю драйвер, ставлю 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 версий

                          1 Reply Last reply Reply Quote 0
                          • A
                            Adav last edited by

                            Был немного занят другими делами…

                            @Bluefox:

                            Надо просто выполнить

                            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 здесь также установлен.

                            1 Reply Last reply Reply Quote 0
                            • Bluefox
                              Bluefox last edited by

                              @Adav:

                              Был немного занят другими делами…

                              @Bluefox:

                              Надо просто выполнить

                              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 здесь также установлен. `
                              Это только надпись. А устанавливать все равно должен.

                              1 Reply Last reply Reply Quote 0
                              • A
                                Adav last edited by

                                @Bluefox:

                                Это только надпись. А устанавливать все равно должен. `

                                Понятно. Надеюсь заработает, когда будет с чем попробовать. А что на счет версий? Почему на разных железках пытается ставиться разные версии? Как это соответствует Вашему утверждению, что нужна старая?

                                1 Reply Last reply Reply Quote 0
                                • K
                                  kab1561 last edited by

                                  Доброго времени суток всем!

                                  Пытаюсь использовать драйвер Modbus для работы с самосборным контроллером, работающим по протоколу Modbus RTU.

                                  Настроил драйвер на опрос holdingRegisters. Опрос ведется, данные с контроллера принимаются - проблем нет. Как я понимаю, здесь драйвер использует функцию 03 (Read Holding Registers) протокола Modbus.

                                  Но, я пока так и не понял, как записать из ioBroker какие-нибудь данные в единичный регистр контроллера.

                                  Это вообще возможно?

                                  Сейчас драйвер Modbus каким-либо образом может использовать функции 06 (Preset Single Register) и 16 (Preset Multiple Regs)? Если может, то как?

                                  1 Reply Last reply Reply Quote 0
                                  • Bluefox
                                    Bluefox last edited by

                                    @kab1561:

                                    Доброго времени суток всем!

                                    Пытаюсь использовать драйвер Modbus для работы с самосборным контроллером, работающим по протоколу Modbus RTU.

                                    Настроил драйвер на опрос holdingRegisters. Опрос ведется, данные с контроллера принимаются - проблем нет. Как я понимаю, здесь драйвер использует функцию 03 (Read Holding Registers) протокола Modbus.

                                    Но, я пока так и не понял, как записать из ioBroker какие-нибудь данные в единичный регистр контроллера.

                                    Это вообще возможно?

                                    Сейчас драйвер Modbus каким-либо образом может использовать функции 06 (Preset Single Register) и 16 (Preset Multiple Regs)? Если может, то как? `
                                    Для записи используется 16 если длина адресов больше 1 и

                                    6 если нужно считать только один адрес.

                                    А что не работает?

                                    1 Reply Last reply Reply Quote 0
                                    • K
                                      kab1561 last edited by

                                      @Bluefox:

                                      Для записи используется 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 необходимо установить для реализации этого?

                                      И, если подобную логику кто-то делал - то где можно об этом почитать?

                                      1 Reply Last reply Reply Quote 0
                                      • Bluefox
                                        Bluefox last edited by

                                        @kab1561:

                                        @Bluefox:

                                        Для записи используется 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 драйвер и твой случай будет выглядеть так:
                                        48_2017-04-20_00_00_27-iobroker.admin.png

                                        Для этого можешь импортировать код отсюда.

                                        ! ````
                                        <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);
                                        });

                                        1 Reply Last reply Reply Quote 0
                                        • K
                                          kab1561 last edited by

                                          @Bluefox:

                                          Понятно, что было не понятно 😄

                                          Или можно 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);
                                          });
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • A
                                            Adav last edited by

                                            Добрался наконец попробовать 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"}

                                            причем понять причину с чего вдруг это начинает происходить не удается, перезапуск драйвера помогает. Отчего может происходить такой сбой?~~

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            636
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            25
                                            174
                                            48616
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo