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.
    • 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
        • A
          Adav last edited by

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

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

            Появился у меня еще девайс, который хотелось бы прикрутить к 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 Reply Last reply Reply Quote 0
            • A
              Adav last edited by

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

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

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

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

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

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

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

                  Так и не получилось заставить работать драйвер 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 Reply Last reply Reply Quote 0
                  • A
                    Adav last edited by

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

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

                      Разбираюсь с драйвером 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 Reply Last reply Reply Quote 0
                      • A
                        avaal last edited by

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

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

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

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

                        куда копать?

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

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

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

                            @avaal:

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

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

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

                              Работает.

                              Пробовал как 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 Reply Last reply Reply Quote 0
                              • A
                                Adav last edited by

                                @avaal:

                                Работает.

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

                                @avaal:

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

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

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

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

                                  @Adav:

                                  @avaal:

                                  Работает.

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

                                  @avaal:

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

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

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

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

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

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

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

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

                                    @avaal:

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

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

                                    На текущий момент пробовал 4 разных типа modbus устройств. Просто ставил драйвер и все. Устройства такие: универсальный модуль входов-выходов, контроллеры заряда батареи, модуль опроса датчиков влажности-температуры, счетчик ЭЭ.

                                    1. Универсальный модуль. На борту есть как 485, так и Ethernet. Полный набор входов выходов (регистров) - coil, discrete, input, holding. Подключал через modbus TCP. Заработал в итоге полностью и нормально.

                                    2. Контроллер заряда. Только RS-485, причем только на 115200. Тоже полный набор регистров. Заработало нормально только с input и holding, причем с установкой "максимальное кол-во регистров при чтении = 1". С дискретными - никак… но они не очень-то и полезны, поэтому пока устраивает. Подключалось через 2xRS-485 - Ethernet конвертер. На ioBroker пробовал как modbus TCP, так и RTU over TCP. Работают оба, но субъективно второй работает стабильнее. Попытка добавить второе аналогичное устройство на одну шину 485 приводила к тому, что сие работало некоторое время, потом уходило в постоянные рестарты modbus драйвера из-за ошибок. В итоге просто воткнул (уже портов не хватило) USB-485 (на чипе cp210x) и второе устройство подключил туда. Работает также. Пробовал подключать на него (на одну шину) и оба устройства, но с удивлением обнаружил, что на одном драйвере вообще нет возможности настроить два устройства с разными ID. А разные драйвера с одним COM портом просто не работают из-за блокировки порта первым драйвером.

                                    3. Модуль опроса датчиков. 485. Нормально работает. Регистры только input. Подключал через конвертор.

                                    4. Счетчик ЭЭ. 485 Нормально работает. Регистры только input. Подключал через конвертор.

                                    Попытка подключить устройства 3 и 4 на одну шину приводила к тому же результату, что и с вариантом 2. По одному - работают без проблем. В итоге получилось что для нормальной работы требуется подключать каждое устройство на отдельный RS-485 порт в не зависимости от того, конвертор ли это или USB затычка в сервере. Что вообщем-то быть не должно. Из-за этого остановил пока перенос устройств с контроллера WB5 (где они висят "гирляндой" на 485) на ioBroker. Надеюсь, разработчики со временем эти проблемы решат.

                                    И да, в качестве сервера использовалась виртуальная машина на ESXi с Debian. Пробовалось (Modbus TCP и RTU over TCP) и на Orange PI Zero - результат тот же самый.

                                    1 Reply Last reply Reply Quote 0
                                    • R
                                      radon last edited by

                                      По какой то причине иногда подвисает modbus.

                                      Протокол TCP, устройство WAGO 750-841

                                      Через какое-то время в настройках драйверов modbus загорается жёлтым цветом, при этом команды с web интерфейса проходят крайне медленно либо вообще не проходят, помогает перезагрузка драйвера, на некоторое время, потом снова всё сначала.

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

                                        @radon:

                                        По какой то причине иногда подвисает modbus.

                                        Протокол TCP, устройство WAGO 750-841

                                        Через какое-то время в настройках драйверов modbus загорается жёлтым цветом, при этом команды с web интерфейса проходят крайне медленно либо вообще не проходят, помогает перезагрузка драйвера, на некоторое время, потом снова всё сначала. `

                                        Версия драйвера не 0.5.0? Попробуйте обновить на 0.5.3

                                        https://github.com/ioBroker/ioBroker.mo … d5365a421c

                                        У меня тоже случаются ошибки на модбасе, нечасто вроде… в результате перегружается драйвер самостоятельно (видно по логам). Раньше тоже с этим были проблемы.

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

                                          Подключил ESP8266 к IO Broker через MODBUS. Брокер как мастер, ESP как слэйв. Работает, но почему-то медленно, апдейт происходит раз в 15-20 секунд, хотя другая SCADA (mySCADA ot https://www.myscada.org/en/) делает апдейт как минимyм раз в секунду от того же ESP. Не могу понять в чем дело, может библиотека MODBUS на ESP не тянет? Я пользуюсь библиотекой от https://github.com/andresarmento/modbus-arduino

                                          Спасибо

                                          1 Reply Last reply Reply Quote 0
                                          • P
                                            Pooh last edited by

                                            @ap2017:

                                            Подключил ESP8266 к IO Broker через MODBUS… `
                                            Почему именно MODBUS? в чем секрет? почему не MQTT, например?

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            593
                                            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