Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. ioBroker драйвера
  5. Драйвер ModBus

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    650

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    18
    1
    5.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.5k

Драйвер ModBus

Geplant Angeheftet Gesperrt Verschoben ioBroker драйвера
174 Beiträge 25 Kommentatoren 58.0k Aufrufe 2 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • BluefoxB Offline
    BluefoxB Offline
    Bluefox
    schrieb am zuletzt editiert von
    #140

    @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 Antwort Letzte Antwort
    0
    • A Offline
      A Offline
      Adav
      schrieb am zuletzt editiert von
      #141

      @Bluefox:

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

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

      1 Antwort Letzte Antwort
      0
      • K Offline
        K Offline
        kab1561
        schrieb am zuletzt editiert von
        #142

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

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

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

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

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

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

        1 Antwort Letzte Antwort
        0
        • BluefoxB Offline
          BluefoxB Offline
          Bluefox
          schrieb am zuletzt editiert von
          #143

          @kab1561:

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

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

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

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

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

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

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

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

          1 Antwort Letzte Antwort
          0
          • K Offline
            K Offline
            kab1561
            schrieb am zuletzt editiert von
            #144

            @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 Antwort Letzte Antwort
            0
            • BluefoxB Offline
              BluefoxB Offline
              Bluefox
              schrieb am zuletzt editiert von
              #145

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

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

              Тебе нужен 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 Antwort Letzte Antwort
              0
              • K Offline
                K Offline
                kab1561
                schrieb am zuletzt editiert von
                #146

                @Bluefox:

                Понятно, что было не понятно :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);
                });
                
                1 Antwort Letzte Antwort
                0
                • A Offline
                  A Offline
                  Adav
                  schrieb am zuletzt editiert von
                  #147

                  Добрался наконец попробовать 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 Antwort Letzte Antwort
                  0
                  • A Offline
                    A Offline
                    Adav
                    schrieb am zuletzt editiert von
                    #148

                    Разобрался с дискретными входами-выходами. Надо было поставить галку "использовать прямые адреса при alias". После этого увидел что адреса созданных ранее дискретных регистров уползли вверх на 8, адреса аналоговых - не изменились. После этого удалил то, что уползло и создал заново с правильными адресами. После чего дискретные входы-выходы заработали. Не понял в чем смысл alias и почему при этом изменяются адреса регистров, причем только дискретных.

                    1 Antwort Letzte Antwort
                    0
                    • A Offline
                      A Offline
                      Adav
                      schrieb am zuletzt editiert von
                      #149

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

                      1 Antwort Letzte Antwort
                      0
                      • A Offline
                        A Offline
                        Adav
                        schrieb am zuletzt editiert von
                        #150

                        Возвращаюсь к вопросу о работе с новым девайсом. С input регистрами удалось разобраться. Стали считываться все переменные при параметре "максисмальное кол-во регистров при чтении = 1". А вот с регистрами флагов ничего не выходит. Есть подозрение что причина в том, что ioBroker пытается считать сразу группу coil одним запросом с номерами подряд. А дело в том, что не все адреса с coil у устройства рабочие. К примеру, 0, 2, 3 - рабочие, 1 - нет (просто нет такого регистра в реальном устройстве). Ну и получается в итоге ошибка адреса у ioBroker. При этом с modbus poll считывается все нормально (кроме 1 конечно). Другое же устройство у меня имеет coil адреса подряд и там как раз все работает с ioBroker нормально. Если все так - получается необходимо предусмотреть в софте и такую возможность.

                        1 Antwort Letzte Antwort
                        0
                        • VumerV Offline
                          VumerV Offline
                          Vumer
                          schrieb am zuletzt editiert von
                          #151

                          Вечер добрый,

                          поприветствуйте ещё одного чайника. Только просьба, сильно не пинать.

                          Приобрёл два месяца назад Siemens LOGO последнюю, поигрался, понравилась. Сейчас хочу, с вашей помощью, познакомиться с Modbus.Можно сказать с нуля. Начну с входом NI1, как его и драйвер настроить чтоб друг друга понимали?

                          Спасибо
                          2071_01-ni1.jpg
                          2071_01_1-ni1.jpg

                          1 Antwort Letzte Antwort
                          0
                          • A Offline
                            A Offline
                            Adav
                            schrieb am zuletzt editiert von
                            #152

                            Так и не получилось заставить работать драйвер modbus в ioBroker c coil на конкретном устройстве (о чем выше)…

                            Возникла и другая проблема - два одинаковых устройства на одной шине RS485 отказываются нормально опрашиваться. Разумеется, они с разными ID. По одному работают нормально. А вот парой - никак. Пробовал через COM сервер с настройкой как RTU over TCP, так и Modbus TCP - секунд 10 работают, после чего в логах идут постоянные ошибки timeout c рестартами. По отдельности - все нормально. Modbus poll работает нормально... Попробовал подключить на serial (usb-485) - то же самое, по одному работают, парой - нет. При этом при старте второго драйвера в его логе сразу ошибка On error: {}. Тут, как я понимаю, первый драйвер просто блокирует серийный порт и не дает второму работать с ним. Получается, что ioBroker не умеет работать на одной 485 шине с несколькими устройствами? Если так - то печально...

                            1 Antwort Letzte Antwort
                            0
                            • A Offline
                              A Offline
                              Adav
                              schrieb am zuletzt editiert von
                              #153

                              Две недели прошло - результат все тот же - тишина. Никто не использует подключение по modbus нескольких устройств на одной RS-485 шине? Очень-очень странно, что такое не работает в ioBroker, вполне типичный способ подключения группы modbus устройств. Или все же есть какой-то "тайный" способ настройки драйвера в ioBroker на несколько устройств на шине?

                              1 Antwort Letzte Antwort
                              0
                              • A Offline
                                A Offline
                                avaal
                                schrieb am zuletzt editiert von
                                #154

                                Разбираюсь с драйвером modbus.

                                Не может открыть порт. Лог:

                                modbus.0 2017-07-18 15:57:38.048 error Cannot create modbus master!

                                modbus.0 2017-07-18 15:57:38.045 error Cannot open port "/dev/ttyUSB0" [19200]: ReferenceError: serialport is not defined

                                В чем может быть проблема?

                                1 Antwort Letzte Antwort
                                0
                                • A Offline
                                  A Offline
                                  avaal
                                  schrieb am zuletzt editiert von
                                  #155

                                  Так же пробовал устанавливать драйвера по инструкции

                                  http://www.iobroker.net/docu/?page_id=5506&lang=ru

                                  и устанавливать на виртуалку ubuntu

                                  результат все тот же

                                  куда копать?

                                  1 Antwort Letzte Antwort
                                  0
                                  • A Offline
                                    A Offline
                                    avaal
                                    schrieb am zuletzt editiert von
                                    #156

                                    На винде тоже самое(((((

                                    1 Antwort Letzte Antwort
                                    0
                                    • A Offline
                                      A Offline
                                      Adav
                                      schrieb am zuletzt editiert von
                                      #157

                                      @avaal:

                                      На винде тоже самое((((( `

                                      COM порт у Вас вообще работает? Не пробовали опрашивать устройства через софт modbus poll? Что за USB-COM переходник используете? Драйвера ставили? Там в зависимости от чипсета могут быть разные заморочки, а в линуксе вообще могут потребоваться танцы с бубнами при какой-нибудь экзотике. К примеру мне попался как-то на Exar XR21B1411 - специфичная вещь.

                                      1 Antwort Letzte Antwort
                                      0
                                      • A Offline
                                        A Offline
                                        avaal
                                        schrieb am zuletzt editiert von
                                        #158

                                        Работает.

                                        Пробовал как usb to rs232, usb to rs485 так и штатную гребенку orange pi. Чипы не скажу какие именно, но rs485 вроде на мах485.

                                        С обратной стороны arduino. Отвечает корректно, если эмулировать запросы програмкой modbus master (точное название не скажу сейчас). Так же корректно работает, если пробросить порт (любой о котором я написал) через ser2net на 502 порт и с любого компа пробросить ком порт и засылать запросы мастером. Но если слать запросы modbus tcp или modbus rtu over tcp ардуинка не отвечает. Причем видно что пакеты к ней идут (по светодиоду) но она не отвечает. Я думаю что пакеты разные, или косяк в библиотеке ардуино или ser2net не то что то днлает, порт еще не сканил сниффером. Т.е. если пробрасывать именно ком порт (прогой, которая прям создает на удаленном хосте ком порт) работает, а modbus tcp запросы нет.

                                        Но я хочу пока разобраться с modbus rtu, но на всех моих компах эта ошибка возникает. Что только не делал.

                                        1 Antwort Letzte Antwort
                                        0
                                        • A Offline
                                          A Offline
                                          Adav
                                          schrieb am zuletzt editiert von
                                          #159

                                          @avaal:

                                          Работает.

                                          Чипы не скажу какие именно, но rs485 вроде на мах485. `
                                          Это приемопередатчик 485, я имел ввиду чип USB-serial.

                                          @avaal:

                                          ардуинка не отвечает `

                                          Не имел с ними дел, но подозреваю что дело именно в ней. Попробуйте подключить какой-нибудь промышленный modbus девайс к ioBroker. Так Вы хоть частично локализуете проблему. У меня не было проблем с работой modbus в ioBroker. И через serial, и оба режима TCP. Если не считать тех особенностей, что я выше указывал, но мне так никто и не ответил. Похоже реализация драйвера еще далека от желаемой… :(

                                          Еще могу предположить, что Вы на своей ардуине пытаетесь реализовать дискретные входы-выходы, причем адресация там идет не подряд по 8... именно в таком случае у меня это не получилось на одном из фирменных девайсов (уж так производитель сделал), а на другом, где регистры идут подряд - нормально. Это только касаемо дискретных... поизучал это дело немного, выяснил, что ioBroker считывает массивами по 8 регистров, ну и в результате если регистр отсутствует - ошибка. И ничего вообще не считывается в этой группе.

                                          1 Antwort Letzte Antwort
                                          0

                                          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
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          387

                                          Online

                                          32.7k

                                          Benutzer

                                          82.6k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe