Если вы когда-либо настраивали связь с промышленными устройствами по протоколу Modbus TCP/RTU, то знаете, насколько это может быть рутинно, неудобно и местами даже болезненно. Особенно если вы — инженер по автоматизации, которому приходится делать это не только в теплом и сухом офисе, но и в полевых условиях, где ноутбук — не всегда лучший друг. Вы скажите, что можно было бы подготовиться заранее, но к сожалению, уровень организации в различных компаниях оставляет желать лучшего.
Именно из этой "боли" и родилась идея создать мобильное приложение-клиент Modbus TCP, которое решает конкретные реальные задачи.

От Modbus Poll к мобильному решению

В своей работе я часто сталкивался с необходимостью быстро проверить или настроить связь с устройствами по протоколу Modbus TCP. Для простых случаев чтения группы регистров — обычно использовал Modbus Poll или его аналоги. Но как только дело доходило до:

  • адресации переменных в разрозненных областях памяти

  • масштабирования значений переменных

  • интерпретации отдельных битов в упакованных словах

  • работы со строками

приходилось либо писать проект для SCADA-системы, либо использовать ПЛК. Это занимало время, ресурсы и не всегда было оправдано.
Параллельно давно хотелось разобраться в мобильной разработке: от архитектуры до публикации в магазинах приложений. Так и появился проект — мобильный Modbus TCP клиент, который теперь доступен в RuStore.

Трудности при работе с протоколом Modbus:

Неполная документация

Часто неясно, как производитель того или иного устройства пронумеровал регистры при составлении документации. С какого адреса начинается первый регистр: 40000 или 40001? %MW0 или MW1? Это влияет на смещение адресации всех переменных в устройстве. И если вы ошиблись, то не очень хочется терять время на исправление десятков, а то и сотен адресов переменных, особенно если вы не в офисе, а в помещении без отопления зимой. Не во всех софтах есть настройка, позволяющая в один клик добавить нужное смещение ко всем адресам переменных.

Формат адресов

Адреса переменных в документации могут быть в десятичной (DEC) или шестнадцатеричной (HEX) системе счисления. Тут обычно помогает калькулятор для перевода из HEX в DEC, но на это уходит драгоценное время и вероятность ошибки растет.

Интерпретация битов

Когда биты упакованы компактно в слова, приходится вручную переводить значения переменных в двоичную систему счисления (BIN) и искать нужный бит. После этого возникает другая задача — как правильно интерпретировать значение 0 и 1 в переменной. Пример: Концевой выключатель обычно подключается нормально замкнутым контактом (NC) и в несработанном состоянии в переменной хранится значение 1, а при срабатывании 0.

Масштабирование переменных

Например, значение 12000 в регистре может означать 50°C, если датчик температуры имеет токовый выход 4–20 mA, его аналогово-цифровое преобразование (ADC) цифровым устройством конвертировалось в диапазон 4000–20000, и затем это конвертировалось в диапазон измерения датчика 0–100°C. Наблюдать значения в регистре без масштабирования (12000) не очень комфортно, хочется видеть понятное человеку значение в физических единицах (50°C).

Работа со строками

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

Пространство

Иногда при работе на реальном оборудовании, нужно вручную сымитировать переключение датчика, и ноутбук не всегда получается разместить перед глазами, чтобы видеть изменение в регистре. Тут обычно помогает второй коллега, но решение это не самое эффективное, клиентам нужно оплачивать работу 2х специалистов. А наличие компактного телефона, где можно посмотреть обратную связь от датчика и разместить его в ограниченном пространстве, вполне рабочее решение.

Что умеет приложение

Вот ключевые функции, которые делают приложение полезным в реальной работе:

  • Создание/редактирование неограниченного количества устройств и переменных в них

  • Гибкая настройка связи: IP-адрес, порт, slave ID, таймаут, частота опроса, порядок байт и др.

  • Поддержка основных типов регистров: Coils (0x), Discrete Inputs (1x), Input Registers (3x), Holding Registers (4x)

  • Поддержка типов данных: Bit (1 бит), UINT (16 бит), INT (16 бит), UDINT (32 бита), DINT (32 бита), Float (32 бита), String

  • Масштабирование значений и отображение физических единиц (°C, %, bar, кВт и др.)

  • Кастомизация отображения: количество цифр после запятой, цвет, тексты значений (True/False, Вкл/Выкл, Норма/Авария и т.д.)

  • Импорт/экспорт конфигурации, чтобы можно было переслать коллеге или клиенту, или скачать готовую конфигурацию к конкретному устройству

  • Мониторинг и управление устройствами в реальном времени

  • Русскоязычный интерфейс и встроенная справка

  • Измерение и оптимизация цикла опроса, можно регулировать размер фрейма, это особенно полезно при разрозненном размещении переменных в памяти устройства

  • Поддержка телефонов и планшетов с различным разрешением

Как это выглядит на экране мобильного устройства

Основной экран

На основном экране имеется возможность: создавать/редактировать/удалять устройства, импортировать/экспортировать конфигурацию в JSON-файл, перейти в режим мониторинга и управления устройством.

Редактор устройства

В редакторе устройства доступна настройка: имени, IP-адреса, номера порта, Slave ID для возможности работы с шлюзом Modbus TCP<->RTU, адреса первого регистра в памяти, порядка слов в 32-битных типах переменных, перестановки байт внутри слов, частоты опроса, времени таймаута, длины фрейма.

Список переменных

На экране списка переменных доступен: переход к редактору переменной, удаление переменной, изменение порядка отображения (перемещение вверх и вниз).

Режим мониторинга и управления

На экране режима мониторинга и управления можно: оценить длительность цикла опроса переменных, увидеть текущие значения, послать команду записи. Для дискретных переменных доступно изменение цвета текста подписи.

Запись в переменную

Запись в дискретную переменную возможна в удобочитаемом человеческом формате (ОТКЛ/ВКЛ). В переменные аналогового типа запись ведется с учетом масштабирования.

Редактор переменной

На экране редактора переменной доступно: изменение имени и комментария, выбор типа регистра, выбор типа данных, ввод адреса с автоматическим пересчетом между DEC<>HEX, настройка масштабирования, указание физических единиц, разрешение записи, выбор формата вывода.

Сервисные возможности для служб эксплуатации

При неисправностях оборудования далеко не всегда есть в наличии необходимые запасные части, инструменты и принадлежности (ЗИП). В случае неисправности HMI-панели на шкафу управления или компьютера SCADA-системы, можно оперативно использовать приложение, как временное решение по мониторингу и управлению технологическим оборудованием в упрощенной форме с минимальным набором переменных. Желательно заранее подготовить конфигурации для приложения, чтобы минимизировать время простоя оборудования.

Возможности для систем типа "умный дом" на базе устройств с поддержкой протокола Modbus

Вы можете построить свой собственный "умный дом" на базе обычных контроллеров с Modbus, цена на подобные решения будет намного ниже классических систем на базе других протоколов (KNX и другие). Приложение поможет избежать использование облачных сервисов, вы всегда сможете управлять своей системой и не зависеть от внешних факторов.

Заключение

Этот проект — не просто очередное приложение. Это инструмент, созданный инженером для инженеров. Он родился из реальных задач, прошел путь от идеи до публикации, и теперь помогает решать задачи быстрее, проще и удобнее — прямо с телефона.
Если вы работаете с Modbus TCP/RTU — попробуйте. Возможно, это именно то, чего вам не хватало.

Ссылки

https://www.rustore.ru/catalog/app/com.wega.ModVision

QR для загрузки
Наведите камеру, чтобы установить приложение с помощью RuStore
Наведите камеру, чтобы установить приложение с помощью RuStore

Комментарии (21)


  1. aborouhin
    02.10.2025 19:10

    С интересом прочитал описание, наверняка очень полезное приложение... но, помилуйте, ссылка только на Рустор?.. Если уж по каким-то идеологическим причинам не хотите на Гугл Плей загрузить, дайте хотя бы возможность apk скачать напрямую.


    1. alekseypro
      02.10.2025 19:10

      Приложение сырое, не оптимизировано под Android 15+ с EdgeToEdge (хотя версия уже 2.3), да еще и с встроенными покупками. Что там может весить аж 41 МБ непонятно :)


      1. Shevman Автор
        02.10.2025 19:10

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


    1. Shevman Автор
      02.10.2025 19:10

      Спасибо за Ваш комментарий, на google play планирую выложить приложение, как разберусь с процессом регистрации там. Если Вам нужно срочно, дайте знать, попробую загрузить apk на файлообменник.


  1. Vorchun
    02.10.2025 19:10

    Горячо вас поддерживаю. Лайкнул. Хабр становится хабром again


  1. OlegMal
    02.10.2025 19:10

    А как подключить мобильный телефон к шине Modbus?


    1. Komrus
      02.10.2025 19:10

      Если шина Modbus-TCP бегающая поверх Ethernet'а - то мобильный подключается через WiFi точку доступа, сидящую в той же Ethernet сети.
      Если Modbus RTU, бегающий поверх RS-485 - то нужен ещё и шлюз из Modbus-RTU и Modbus-TCP.
      А далее - "задача сведена к предыдущей" :)))


      1. Shevman Автор
        02.10.2025 19:10

        Все верно описано


      1. AlexHighTower
        02.10.2025 19:10

        А далее - "задача сведена к предыдущей" :)))
        

        далее задача сведена к решению проблемы двух модбас мастеров на rs-485 шине )))


        1. Shevman Автор
          02.10.2025 19:10

          Modbus master только один, это приложение. Шлюз TCP-RTU трансформирует пакеты в обе стороны, для rtu стороны он мастер, для tcp стороны он slave. Никаких проблем тут нет, это стандартное решение


    1. Shevman Автор
      02.10.2025 19:10

      Для этого нужно использовать роутер с wifi и Ethernet-разьемом. Я использую TP-LINK TL-WR702N, он миниатюрный и питается от USB.


  1. zurabob
    02.10.2025 19:10

    Для несложных устройств очень интересный проект. А не планируется проводное подключение через USB-RS485 переходник, чтобы можно бы просто проверить работу одного устройства например?


    1. Shevman Автор
      02.10.2025 19:10

      Планируется. Если у вас есть еще пожелания, буду благодарен за идеи.


  1. oleg_km
    02.10.2025 19:10

    Можно уточнить, оно работает с устройствами по ModbusTCP или по ModbusRTU поверх TCP? Это же немного разные протоколы? Переключателя нет, как в программе ModbusPoll


    1. Shevman Автор
      02.10.2025 19:10

      Приложение использует Modbus TCP. Для подключения к устройствам Modbus RTU, требуется шлюз, например Moxa MGate


      1. oleg_km
        02.10.2025 19:10

        А у меня устройства Modbus RTU просто подключены к конвертеру TCP - RS485. Можно такую опцию добавить?


        1. Shevman Автор
          02.10.2025 19:10

          Напишите пожалуйста модель вашего конвертера, буду разбираться


          1. oleg_km
            02.10.2025 19:10

            Да там разные китайские поделки, у меня есть свой эмулятор на C#, просто данные перекладывает из последовательного порта на сокет и обратно.

            Просто должен быть обмен как с устройством ModbusRTU, без дополнительного заголовка ModbusTCP


            1. Shevman Автор
              02.10.2025 19:10

              Понял. Попробую доработать


  1. oleg_km
    02.10.2025 19:10

    И не понял, как выходить из приложения?


    1. Shevman Автор
      02.10.2025 19:10

      Пальцем если провести с нижнего края должна открываться панелька Android с главными кнопками, и через них можно либо закрыть или перейти в другое приложение