Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • 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

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

Драйвер ModBus

Geplant Angeheftet Gesperrt Verschoben ioBroker драйвера
174 Beiträge 25 Kommentatoren 54.5k Aufrufe 2 Watching
  • Ä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.
  • 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
                                        • A Offline
                                          A Offline
                                          avaal
                                          schrieb am zuletzt editiert von
                                          #160

                                          @Adav:

                                          @avaal:

                                          Работает.

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

                                          @avaal:

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

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

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

                                          Проблема именно в том, что iobroker не может обратиться к любому com порту, вне зависимости от того, что там висит. Мне почему то кажется, что проблема в конкретной сборке или я что то не так делаю в порядке или способах установки.

                                          Есть какие либо подробные логи?

                                          Нужно ли пересобирать драйвер модбаса?

                                          По инструкции установка не получается, может там что то не дописано?

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          901

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          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