Modbus tcp client windows

Форум АСУТП

Клуб специалистов в области промышленной автоматизации

  • Обязательно представиться на русском языке кириллицей (заполнить поле «Имя»).
  • Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже предостаточно — придумайте что-то пооригинальнее.
  • Не писать свой вопрос в первую попавшуюся тему — вместо этого создать новую тему.
  • За поиск и предложение пиратского ПО — бан без предупреждения.
  • Рекламу и частные объявления «куплю/продам/есть халтура» мы не размещаем ни на каких условиях.
  • Перед тем как что-то написать — читать здесь и здесь.

Modbus TCP client

Modbus TCP client

Сообщение Andrey 2014 » 11 ноя 2014, 09:12

Здравствуйте! Посоветуйте пожалуйста Modbus TCP client какой-нибудь, нужен для тестирования, чтобы соединялся с контроллером и мог поглядеть, что записано в регистрах. Чем проще программа, тем лучше, желательно вообще, чтобы без установки с любой флешки программу можно было запустить и посмотреть. Пробовал Ananas, но видимо что-то не так делаю, так как прочитать из контроллера ничего не смог.

UPD: упс, похоже я поторопился с созданием темы, вроде регистры Ананасом получилось посмотреть. Вот только не могу понять где биты посмотреть? Или посоветуйте, кто какой программой пользуется для этих нужд? 🙂

Утилита «modbus_client»

modbus_client — утилита для опроса устройств по протоколам Modbus RTU и Modbus TCP из командной строки.

Содержание

Подготовка к работе

Контроллер Wiren Board

Утилита modbus_client предустановлена на все контроллеры Wiren Board. Для использования утилиты нужно подключиться к контроллеру по протоколу SSH.

Обычно порт RS-485 занят драйвером wb-mqtt-serial, поэтому перед запуском modbus_client этот драйвер надо остановить:

После завершения работы с modbus_client запустите драйвер обратно:

Настольный компьютер с Linux

Перейдите в папку со скаченным пакетом и установите его командой:

Также автоматически должен установиться пакет libmodbus , если этого не произошло — установите его из репозитория apt.

Аргументы командной строки

Вызов modbus_client без аргументов выдает краткое описание возможных аргументов команды:

Значения параметров (адрес, таймаут, тип функции и т.д.) можно указывать как в шестнадцатеричном (0x**), так и в десятичном виде.

Параметр Описание Обязателен Значение по умолчанию
—debug Может указываться в любой позиции и включает отладку, выводя на экран шестнадцатеричные коды отправляемых и принимаемых данных. нет
-m Определяет тип используемого протокола:
  • -mrtu — Modbus RTU,
  • -mtcp — Modbus TCP.

Он должен указываться первым в командной строке, или вторым, если первый аргумент — —debug или имя файла порта RS-485.

да
-a Задает Modbus-адрес устройства, к которому мы обращаемся. нет 1
Определяет, какое количество элементов мы запрашиваем. нет 1
-r Задает начальный адрес для чтения или записи. не 100
-t Указывает код функции Modbus. Кратко они перечислены в выводе modbus_client, подробнее значения кодов описаны на странице Протокол Modbus. да
-o Задает таймаут в миллисекундах. нет 1000
-0 Ноль. Уменьшает на единицу адрес, задаваемый аргументом -r.
Это может быть полезным при работе с устройствами с нестандартной адресацией, например, с диапазоном адресов 1 — 65536 вместо привычного 0 — 65535.
нет

Затем указываются специфические параметры протокола (Modbus RTU или Modbus TCP). Несмотря на информацию, выводимую в подсказке, эти параметры также начинаются со знака — (минус,дефис).

Параметр Описание Значение по умолчанию
-b Скорость передачи данных по последовательной линии 9600
-d Количество передаваемых бит данных, 7 или 8 8
-s Количество стоповых битов, 1 или 2 1
-p Контроль четности:
  • -pnone — нет проверки,
  • -peven — передается бит контроля на четность,
  • -podd— передается бит контроля на нечетность.
even
Параметр Описание
-p Номер TCP-порта устройства, с которым взаимодействует контроллер.

Далее следует имя файла порта RS-485 или адрес хоста, а в конце необязательный параметр — данные для функций записи.

Примеры использования с оборудованием Wiren Board

Проверка подключения к устройству и считывание адреса

Все устройства Wiren Board с протоколом Modbus RTU хранят адрес в регистре 128 — его удобно считывать для проверки подключения.

Читаем содержимое регистра 128 из устройства с адресом 2 , подключенного к serial-порту /dev/ttyRS485-1 , с помощью функции 0x03 (Read Holding Registers) :

Аргумент Описание
—debug отладка включена, будут выведены шестнадцатеричные коды отправляемых и принимаемых данных
-mrtu выбран протокол Modbus RTU
-pnone без проверки контроля четности
-s2 стоповых битов 2
/dev/ttyRS485-1 адрес serial-порта, к которому подключено опрашиваемое устройство
-a2 адрес устройства, 2
-t0x03 адрес функции чтения из holding-регистра
-r128 адрес регистра, значение которого мы запрашиваем

Запись нового адреса

Записываем новый адреса устройства в регистр 0x80 , используя функцию 0x06 (Write Single Register) .

ВНИМАНИЕ: в примере используется широковещательный адрес 0x00 . Использование примера в таком виде изменит адрес на всех устройствах Wiren Board, подключенных к порту /dev/ttyRS485-1 . Чтобы этого не произошло — отключите другие устройства от шины.

Где 0x00 — широковещательный адрес, а 0x02 — адрес, который нужно задать.

Сообщение об ошибке возникает всегда, когда запись производится на специальный (широковещательный) адрес 0 (-a0x00) . Теперь к устройству нужно обращаться по адресу 0x02 .

Пример неправильного использования команды:

Здесь не указано значение, которое нужно записать в регистр адреса, поэтому устройство получит неизвестное значение.

Чтение сигнатуры устройства

Прочтем регистры релейного модуля WB-MR14 с адресом 0x01 , содержащие сигнатуру (модель) устройства: WBMR14. Известно, что сигнатура хранится по адресу 200 и занимает 6 регистров.

В ответе мы получили шесть 16-битных значений, в каждом из которых содержится код одного ASCII-символа. Преобразуем их, заменив начальные 0x00 на /x и удалив пробелы, к виду \x57 и т.д., который понятен команде echo , и выведем на экран получившееся:

В старых версиях прошивки вводить | xxd -r -p не было нужно.

Чтение версии прошивки

Прочтем версию прошивки из модуля с modbus-адресом 189. По адресу 250 хранится null-termitated строка максимальной длиной в 16 регистров. Прочтем 16 регистров, начиная с адреса 250, и преобразуем полученный шестнадцатеричный ответ в символьную строку:

В результате выполнения команды получаем строку, например 1.3.1.

Включение реле релейного модуля

На модуле WB-MR14 включим реле с номером 6 (адреса регистров флагов начинаются с нуля, помним об этом!). Используем для этого команду 0x05 (Write Single Coil) :

Обратите внимание, утилита modbus_client при записи заменила 1 на 0x00FF , поскольку именно это значение служит для включения реле. Любое ненулевое значение будет заменено на 0x00FF , поэкспериментируйте.

Одновременное включение нескольких реле

Включим все нечетные реле и выключим все четные. Для этого используем функцию 15 (Write Multiple Coils) . В модуле всего 14 реле, так что мы должны передать значения для 14 регистров с 0 по 13.

Обратите внимание на структуру данных запроса:

  • [01] — адрес
  • [0F] — код функции Write Multiple Coils
  • [00][00] — адрес первого регистра флагов для записи
  • [00][0E] — количество элементов для записи (14)
  • [02] — количество байт данных (14 бит помещаются в 2 байтах)
  • [55][15] — 01010101 00010101 (первое реле — младший бит первого байта, 8 реле — старший бит первого байта, 9 реле — младший бит второго байта)
  • [1A][97] — CRC16

А так же на структуру ответа:

  • — адрес
  • — код функции Write Multiple Coils
  • — адрес первого регистра флагов для записи
  • — количество записанных регистров флагов
  • — CRC16

Подробнее описание структуры данных запросов и ответов можно найти на странице Протокол Modbus.

Программное обеспечение для тестирования и наладки устройств и сетей на базе MODBUS

Протокол Modbus довольно распространен как в промышленных системах автоматизации, так и сетях систем типа «Умный дом», автоматизации малых объектов (теплицы и т.п.) и стыковки различного оборудования с домашним компьютером. Появление таких проектов как Arduino и Raspberry Pi значительно повысило интерес к задачам, связанным с робототехникой, автоматикой и автоматизацией. Все это обеспечивает рост популярности Modbus среди любителей и профессионалов. В статье рассмотрен вопрос тестирования и наладки, как отдельных устройств, так и сетей на базе протокола Modbus с позиции требований к программному обеспечению для решения таких задач и обзора существующих инструментов.

Если вы знакомы с архитектурой протокола, то можете смело пролистать пару следующих абзацев и перейти к дальнейшему описанию. Если же нет, то специально для вас ниже приведено небольшое введение в Modbus.

Modbus, краткое введение

Modbus является довольно распространённым протоколом в системах автоматизации на среднем и нижнем (полевом) уровнях. Средний — это уровень контроллеров — устройств, осуществляющих сбор данных и управление технологическим процессом. Нижний или полевой — это уровень взаимодействия датчиков и контроллеров или датчиков напрямую с сервером. Более подробно об уровнях в системах автоматизации можно посмотреть здесь.

Как правило, структура типовой системы автоматизации, использующей в качестве базового протокола Modbus, выглядит так как показано на рисунке в начале статьи. В качестве ”среды” для протокола Modbus может выступать либо RS-485/422/232 (подробно про RS-485 можно прочитать здесь и здесь), поверх него работает Modbus RTU или Modbus ASCII, либо транспортный протокол TCP в TCP/IP сетях, такая версия носит название Modbus TCP. В данной статье будет рассмотрен Modbus RTU.

Протокол Modbus предполагает наличие одного ведущего устройства в сети (оно называется Master или Client) и от 1 до 247 ведомых (они называются Slave или Server). Полное описание можно найти на официальном сайте или в вики.

Master периодически взаимодействует со Slave-устройствами, считывая или записывая в них какую-либо информацию. Этот процесс осуществляется в форме запрос-ответ. Запрос представляет собой последовательность байт, называемую кадром, в котором время между байтами стандартизировано и зависит от скорости передачи данных (напомним, что речь идет о Modbus RTU) и составляет не более длительности интервала, в течение которого может быть передано 1,5 байта данных. Время между кадрами должно быть не меньше времени передачи 3,5 байт.

Формат запроса имеет следующий вид:

ID — адрес устройства (1 байт),
FN — Modbus функция (1 байт),
[args] — аргументы функции (N байт, зависит от функции),
CRC — контрольная сумма CRC-16 (2 байта).

Ответ имеет схожий формат:

Почти все поля ответного кадра аналогичны кадру запроса, за исключением поля DATA, оно имеет различное наполнение, в зависимости от функции.

Если устройством не поддерживается запрашиваемая функция или аргументы в поле [args] запроса являются некорректными для данного Slave-устройства, то в ответе, в поле FN старший бит будет выставлен в 1 (т.е. на FN наложится маска 0x80), а в поле DATA будет помещена дополнительная информация об ошибке.

Каждое Slave-устройство может иметь определенные области данных и содержать дополнительную специфическую информацию.
Возможные области данных представлены в таблице ниже:

Поле Доступ Размер Описание
Discrete Inputs Только чтение Один бит Данные от системы ввода/вывода
Coils Чтение/Запись Один бит Ячейки могут использоваться по своему усмотрению
Input registers Только чтение 16 бит Данные от системы ввода/вывода
Holding registers Чтение/Запись 16 бит Регистры могут использоваться по своему усмотрению

За более подробной информацией следует обратиться к полному описанию Modbus RTU, доступному в виде спецификации.

Тестирование устройств с поддержкой Modbus RTU в рамках процесса разработки

Как при разработке, так и при наладке устройств с поддержкой протокола Modbus RTU, вам необходимо иметь специализированное программное обеспечение и технические средства. Из технических средств наиболее простой вариант — это преобразователь RS-485/USB, из всех устройств такого типа, по нашему мнению, наилучшим выбором является MOXA UPORT 1130/UPORT 1150, цена вопроса которого составит 5000 — 6000 руб. Существуют различные отечественные решения, например, преобразователи фирмы Fractal или ОВЕН. Конструкция этих устройств достаточно проста, и при определенной сноровке такой преобразователь можно собрать самостоятельно. Более сложными являются решения типа Ethernet/RS-485 (например, NPORT от MOXA).

При разработке устройств с поддержкой Modbus RTU, чаще всего требуется реализовать функцию Slave, так как в основном это различные датчики, управляемые реле, модули ввода/вывода и т.п., Master-устройства создаются реже. В сетях автоматизации в качестве мастера, обычно выступает контроллер, а он, как правило, уже имеет реализацию Modbus-стека, либо OPC Server/SCADA система, укомплектованные Modbus-драйвером.

Вопрос разработки непосредственно Modbus-стека мы не будем рассматривать в этой статье. Единственное, стоит отметить библиотеку FreeMODBUS, на базе которой достаточно просто построить устройство с поддержкой функций Modbus Slave. Пример реализации описан в статье на Хабре.

Вторым важным моментом при разработке Modbus-устройств является тестирование. Здесь всё зависит от стадии разработки и цели тестирования.

На начальных этапах полезным инструментом является Modbus-терминал. С помощью него мы можем вручную сконструировать запрос, послать его и проанализировать ответ. Существуют терминалы в чистом виде, например, SmartTerminal, Access Port, терминалы с поддержкой Modbus RTU — Termite от S2-Team или Pic18 Terminal от Fractal (не обновлялась с 2006 года) и т.п. Последний заточен под оборудование компании Fractal, но позволяет “общаться” с любыми устройствами, у которых в настойках порта выставлена четность None, с другими вариантами он не работает.

В процессе разработки нередко возникает ситуация, когда устройство принимает запрос и отвечает на него (это можно понять либо по светодиодам приема/передачи пакетов, если вы их предусмотрели в конструкции, либо через отладчик, поставив breakpoint в нужном месте), а в терминале или какой-то другой специализированной программе, данные не отображаются. В таком случае вам пригодится сниффер для последовательного порта, желательно, с поддержкой протокола Modbus. В качестве примера можно привести Free Serial Analyzer, COM Port Toolkit. Последний в настоящее время, похоже, прекратил свое развитие.

В дальнейшем, требуется не только проверять работает ли устройство в принципе (т.е. корректно отвечает на запросы), но и определять наработку на отказ с помощью длительного тестирования. Важными аспектами здесь являются поддержка авто-опроса с изменяемой нагрузкой (количество запросов в секунду) и наличие функции логирования. С этими задачами поможет справиться Modbus Poll или Modscan, это ПО платное, но имеется пробный период.

Следует учитывать, что собранные логи нужно будет анализировать, то есть определять количество запросов, на которые устройство не ответило, обнаруживать сбои, например, самопроизвольное изменение данных в ячейках и т.п. Конечно, можно использовать полноценную SCADA-систему, либо самому разработать и написать систему анализа и визуализации логов. Как вариант, рекомендуем обратить внимание на MasterSCADA от Insat. Она имеет встроенный Modbus-драйвер и версия до 32 точек является бесплатной, довольно проста в освоении (на сайте производителя есть хорошая документация и видео уроки).

В конце данной статьи мы определим список функций “идеального” инструмента для тестирования и наладки устройств/систем на базе протокола Modbus, а также сделаем небольшой обзор существующих инструментов.

Наладка систем автоматизации, использующих Modbus устройства

Людей, занимающихся наладкой систем автоматизации и просто пытающихся “подружиться” с каким-либо устройством, на борту которого находится Modbus, в разы больше чем, тех, кто эти устройства разрабатывает. Исходя из специфики задачи, требования к соответствующему ПО будут немного отличаться.

Если необходимо соединить контроллер и одиночное Slave-устройство, то прежде всего, нужно установить с ним связь с помощью преобразователя интерфейсов RS-485/USB, ПК и специализированного программного обеспечения либо терминала. В таком случае, логика работы и набор инструментов ничем не отличается от тех, что применяются при разработке Slave-устройства на стадии тестирования. На этом этапе не требуется длительное тестирование с последующим анализом большого количества лог-файлов.

В случае, когда у вас уже есть готовая сеть устройств, можно выделить следующие задачи:

  • проверка работоспособности всех устройств в сети (опрос каждого устройства в отдельности и проверка корректности ответа);
  • нагрузочное тестирование (опрос устройств в сети в течение длительного времени). Желательно сделать несколько экспериментов с различной частотой опроса, а после провести анализ собранных данных на наличие отказов, не ответов, порчи данных и т.п.

В этом случае, понадобится либо терминал с возможностью создания списка запросов, либо специализированный инструмент типа Modbus Poll, который позволяет опрашивать несколько устройств в рамках одного проекта.

Modbus-устройства могут иметь определенные настройки интерфейса RS-485: количество бит данных, четность и количество стоп бит. Устройства с различными настройками не могут работать в одной сети с одним и тем же мастером. Тестирование и конфигурирование таких устройств удобно проводить, применяя терминальные программы, имеющие возможность быстрого переключения между предустановленными профилями настроек портов или работающие с несколькими линиями одновременно.

Реже возникает задача организации обмена данными с устройством, протокол которого отличается от стандартной спецификации Modbus RTU. Нам приходилось встречаться с ситуацией, когда протокол Slave-устройства логически повторяет Modbus (структура пакета, таймауты и т.п.), но использует функции вне стандарта. В таком случаем возможна работа с использованием Modbus Poll, он позволяет строить произвольные запросы, или терминала, обладающего сходным функционалом. Стандартная SCADA-система, обычно, в такой ситуации бессильна, и работа с подобным оборудованием осуществляется через специальный OPC сервер.

Требования к ПО для работы с Modbus-устройствами в режиме мастера

Описав различные задачи, которые возникают при разработке, настройке и наладке устройств с протоколом Modbus, составим список требований к специализированному программному обеспечению.

  1. Поддержка настроек COM-порта (номер, скорость, четность, количество бит данных и стоп бит)
  2. Настройка таймаутов (время ожидания приема ответа на запрос, время между символами и кадрами)
  3. Поддержка стандартного Modbus
  4. Поддержка нестандартного Modbus
  5. Авто-опрос одного/нескольких устройств
  6. Настройка авто-опроса
  7. Логирование сессии / настройка логирования
  8. Создание профилей для быстрого переключения между настройками порта
  9. Работа в режиме сниффер
  10. Лицензия продукта
  11. Сопровождение продукта разработчиком

Обзор ПО для работы с Modbus протоколом

Modbus Poll

Начнем с классического приложения и довольно известного в наших “узких” кругах — Modbus Poll от Witte Software.

Эта программа является симулятором мастера в Modbus-сети. Интерфейс Modbus Poll интуитивно понятен. Если вы представляете себе логику работы протокола, то разобраться с программой труда не составит.

Функция Наличие Комментарий
Поддержка настроек COM-порта +
Настройка таймаутов + Доступны: время ожидания ответа
Поддержка стандартного Modbus + Список функций ограничен
Поддержка нестандартного Modbus +
Авто-опрос одного / нескольких устройств + / +
Настройка авто-опроса + Доступно: время между запросами
Логирование сессии / настройка логирования + / +
Создание профилей для быстрого переключения между настройками порта
Работа в режиме сниффер
Лицензия продукта ПО платное Есть пробный период 30 дней
Сопровождение продукта +

Достоинства: хорошая система логирования, достаточное количество поддерживаемых функций (во всяком случае, наиболее востребованные присутствуют), большое количество настроек внешнего вида.

Недостатки: цена (одна лицензия $ 129.00), нестандартный Modbus поддерживается как опциональная функция, нет профилей для быстрого переключения портов — приходится каждый раз перенастраивать соединение.

Modscan32/64

Следующим ПО в нашем обзоре будет Modscan от WinTECH. Внешне эта программа очень похожа на Modbus Poll, но функционалом она обладает значительно меньшим.

У Modscan есть одна уникальная особенность для программ данного типа — это возможность создания форм (своего рода мнемосхем). Пока ее функционалу далеко до реальных SCADA-систем, но наличие такого бонуса радует. На сегодняшний день это достаточно скудный, по своим возможностям инструмент (имеется ввиду редактор форм), но будем надеяться, что со временем, разработчики доведут его до хорошего уровня.

Функция Наличие Комментарий
Поддержка настроек COM-порта +
Настройка таймаутов + Доступны: время ожидания ответа
Поддержка стандартного Modbus + Список функций ограничен
Поддержка нестандартного Modbus
Авто-опрос одного / нескольких устройств + / +
Настройка авто-опроса + Доступно: время между запросами
Логирование сессии / настройка логирования + / —
Создание профилей для быстрого переключения между настройками порта
Работа в режиме сниффер
Лицензия продукта ПО платное Есть пробный период
Сопровождение продукта +

Достоинства: возможность создания собственных форм для просмотра данных, поддержка MMI & OLE Automation.

Недостатки: цена (одна лицензия $ 84.95), нет поддержки нестандартного Modbus, нет профилей для быстрого переключения портов, ненастраиваемая система логирования, малое количество поддерживаемых Modbus-функций.

Termite

Следующим в нашем списке будет терминал Termite от S2-Team. Termite является специализированный Modbus терминалом. Это означает, что он сам будет считать за вас CRC, распознавать сообщения об ошибках в ответах и т.д., ваша задача заключается в том, чтобы ввести корректное тело запроса в поле команды.

Функция Наличие Комментарий
Поддержка настроек COM-порта +
Настройка таймаутов + Доступны: время ожидания ответа,
время между символами и кадрами
Поддержка стандартного Modbus +
Поддержка нестандартного Modbus +
Авто-опрос одного / нескольких устройств + / +
Настройка авто-опроса + Доступно: время между запросами
Логирование сессии / настройка логирования + / —
Создание профилей для быстрого переключения между настройками порта +
Работа в режиме сниффер
Лицензия продукта Есть платная и
бесплатная версии
Бесплатная версия обладает
ограниченным функционалом
(на количество каналов,
одновременно ведомых лог файлов и
количество разных запросов в авто-опросе)
Сопровождение продукта +

Достоинства: поддержка всех Modbus-функций, работа с нестандартным Modbus, удобная система подсказок, возможность настройки внешнего вида ПО, поддержка профилей для быстрого переключения между настройками порта.

Недостатки: PRO версия платная (одна лицензия $ 10), в текущем релизе нет возможности гибко настраивать логирование.

AccessPort

Программа из разряда “чистых” терминалов. Она не поддерживает Modbus, поэтому при её использовании будьте готовы считать CRC для ваших кадров самостоятельно. Несомненным плюсом является то, что в неё встроен сниффер последовательного порта.

Функция Наличие Комментарий
Поддержка настроек COM-порта +
Настройка таймаутов +
Поддержка стандартного Modbus
Поддержка нестандартного Modbus
Авто-опрос одного / нескольких устройств + / —
Настройка авто-опроса + Доступно: время между запросами
Логирование сессии / настройка логирования + / —
Создание профилей для быстрого переключения между настройками порта
Работа в режиме сниффер +
Лицензия продукта ПО бесплатное
Сопровождение продукта Не поддерживается Крайняя версия продукта
была выпущена 2012-04-23

Достоинства: наличие сниффера порта, ПО бесплатное, настраиваемое представление данных, возможность передачи файлов.

Недостатки: не поддерживает Modbus вообще, нет возможность создавать профили, в режиме авто-опрос можно работать только с одним устройством, в настоящее время ПО не развивается.

В заключение хотелось бы добавить, что в сети достаточно большое количество программ для работы с последовательным портом, но если есть необходимость работать именно с Modbus протоколом, то его поддержка в таком ПО крайне желательна. Одна из основных причин — это расчет CRC, в ручную это делать накладно, также важно, чтобы программа могла уметь разделять кадры, иначе все превращается в сплошную мешанину байтов, ну и если есть авто-опрос, то это сильно упрощает жизнь.

Читайте также:  Transferring file from windows to mac
Оцените статью