Протокол 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, составим список требований к специализированному программному обеспечению.
- Поддержка настроек COM-порта (номер, скорость, четность, количество бит данных и стоп бит)
- Настройка таймаутов (время ожидания приема ответа на запрос, время между символами и кадрами)
- Поддержка стандартного Modbus
- Поддержка нестандартного Modbus
- Авто-опрос одного/нескольких устройств
- Настройка авто-опроса
- Логирование сессии / настройка логирования
- Создание профилей для быстрого переключения между настройками порта
- Работа в режиме сниффер
- Лицензия продукта
- Сопровождение продукта разработчиком
Обзор ПО для работы с 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, в ручную это делать накладно, также важно, чтобы программа могла уметь разделять кадры, иначе все превращается в сплошную мешанину байтов, ну и если есть авто-опрос, то это сильно упрощает жизнь.
Хочется дополнить список ПО и библиотек для работы с Modbus, тем, что было переставлено в комментариях.
SCADA
FreeSCADA
Modbus TCP/RTU
Advanced TCP/IP Data Logger
Ardsoft Эмулятор Modbus
PortMon
MODBUS FOR WINDOWS
PeakHMI
Modpoll Modbus Master Simulator
QModMaster
modbus_tk
pymodbus
libmodbus
Благодарю всех, кто помог улучшить статью!
Спасибо за внимание!
Комментарии (58)
AndreyUA
12.04.2016 13:07Писать свое не имея опыта разработки на C# в кратчайшие сроки — рисковое дело. А рисковать на производстве очень не хочется.
alex_kag
12.04.2016 14:57Совсем не имея опыта программирования в C# (только с++ на непонятно каком уровне :( ), написание конвертера modbus — dde заняло очень мало времени. Приложение консольное, легко переделывается в службу.
marat_ab
12.04.2016 15:01Если ПО занимается сбросом данных куда-либо для последующего анализа, то да, можно и самому писать. Если же участвует в управлении тех. процессом, а опыта разработки мало, то лучше десять раз подумать, прежде чем браться, наверное лучше попробовать найти уже готовое, работающее решение.
alex_kag
12.04.2016 15:42+1Управление — это совсем другая тема… А у меня было просто задача забрать данные из контроллера и отдать их в сеть… я и подсунул данные своей SCADA. Это оказалось самым простым способом… Собственно говоря, для работы с modbus есть очень приятная библиотека — nmodbus умеет очень много.
alsakharov
12.04.2016 14:07(оно называется Master или Client)… (они называются Slave или Server)
Нет ли тут ошибки?A1ien
12.04.2016 14:20+1Нету тут все верно — в контексте ModBus — Slave это тот кто предоставляет данные, то есть он же Server а slave он потому, что предоставляет данные только по запросу, а вот как и когда запрашивать как раз решает Master который фактически является клиентом тех данных которые предоставляет Slave/Server.
slepowl
12.04.2016 15:11Есть еще неплохой Modbus Tester от НПФ «АГРОСТРОЙ». Только RTU, однако автозапрос, удобный интерфейс, представление в различных типах данных итд. Freeware. С помощью этой программы имел первое знакомство с многими устройствами, которые потом успешно поддерживал в АСУТП. Взять утилиту можно здесь.
Iceg
12.04.2016 16:04Надысь ещё про такую штуку выяснили: http://www.ardsoft.ru/mEmulator.html — достаточно неплохо, бесплатное, умеет симулировать несколько слейвов на одном айпишнике, ещё заявлены ОРС и скрипты.
Описание из-под ссылки для ленивыхЭмулятор Modbus устройств предназначен для создания виртуальной сети Modbus RTU или Modbus TCP устройств.
Эмулятор полезен в первую очередь специалистам разрабатывающим программное обеспечение опроса Modbus устройств, системным интеграторам, студентам, для отладки Modbus клиентов, OPC/DDE серверов, тестирования оборудования, проверки SCADA проектов, создания стендов имитации технологического оборудования, систем обучения оперативного персонала, диагностики каналов связи и для многих других задач.
Эмулятор позволяет создавать виртуальные modbus сети без ограничения по количеству устройств и количеству параметров внутри одного устройства.
Встроенный скриптовый язык позволяет имитировать технологические процессы любой сложности.
Встроенный OPC клиент позволяет масштабировать данные с любого OPC сервера в Modbus пространство с последующей передачей по сети, что позволяет исключить настройку DCOM.
Ключевые особенности эмулятора:
— работа по протоколам Modbus RTU и Modbus TCP;
— встроенный скриптовый язык позволяющий имитировать любой алгоритм;
— встроенный OPC клиент для масштабирования OPC тегов в Modbus;
— масштабирование OPC тегов в Modbus позволяет исключить настройку DCOM;
— нет ограничений по конфигурированию;
— нет ограничений при подключениии к OPC серверам;
— бесплатен для коммерческого использования;
— работа во всех версиях ОС Microsoft Windows, начиная с Windows 2000;
— работа в ОС Microsoft Windows 7 Embedded
Версия: 2.32.53.929 от 24.03.2016
ОС Windows: 2000, XP, Vista, 7, 7 Embedded, 8.x, 10 Technical Preview.
Цена: бесплатно.Iceg
12.04.2016 16:09А порты снифать ещё можно с помощью PortMon https://technet.microsoft.com/ru-ru/sysinternals/portmon.aspx
Оно, правда, своеобразоное, работает через раз)Vladimir_N-sk
12.04.2016 20:37Не, PortMon работает великолепно! И помошник замечательный! Может вы его «не умеете готовить» ;-)? Его надо запускать ДО любых программ, которые общаются по ком.порту. Во всяком случае, пока не подводил.
Iceg
13.04.2016 01:14Может, и не умею. Версия 3.02 иногда принципиально отказывается подключаться, в версии 3.03 вообще пропало меню Connect.
m0Ray
13.04.2016 04:29Всё под Windows. Вынес из поста ровно ноль полезных программ.
Я лично использую самописные (C, libmodbus) инструменты и bash для скриптов.marat_ab
13.04.2016 08:47К сожалению, в современных реалиях на производстве (особенно на шахтах и рудниках) весь верхний уровень — это Windows. А наладку, тестирование и диагностику, зачастую, приходится вести именно «сверху», поэтому приходится использовать софт под эту платформу.
m0Ray
13.04.2016 09:28Я использую Linux. В нём же и наладка, и диагностика.
И мне странно видеть, что кто-то использует на производстве, особенно на опасном, глючный закрытый софт. Я винде даже домашний термостат не доверю.slepowl
13.04.2016 10:28Ну, глючный софт бывает и открытым. WinServer или Embedded вполне стабильны. ОРС на линукс… ну, понятно. Я бы вообще ОРС выпилил бы из стека пром протоколов.
И самый важный момент: нет, практически, скада-систем под UNIX-подобные системы. В наше время тенденция меняется в сторону открытых технологий, но очень медленно. Спецов тоже нет.
Да и сбои чаще бывают не из-за винды, а из-за кривого софта скады итд.m0Ray
13.04.2016 11:44Я вот ваяю свою скада-систему и систему автоматизации. Всё на открытых технологиях.
Если глки появляются, их в открытой системе практически всегда можно найти, устранить или обойти самостоятельно. В закрытых системах — только уповать на разработчика, который наконец почешется и что-то там подправит. А работа страдает.
Недавно на одном объекте «упало» питание. Шкафы с Honeywell-ами не вернулись в работу самостоятельно — пришлось какие-то пляски с бубном устраивать. Моя «наколенная» поделка, отвечающая за свой участок и занимающая пару блоков на DIN-рейке, как ни в чём не бывало «поднялась» и отдала веб-интерфейс на планшет инженера (пока чинился и грузился комп с виндой). Такие дела.Balpak
13.04.2016 12:32А можно поподробнее про «Шкафы с Honeywell-ами»? Работаю с различным оборудованием от этого вендора более 20 лет и вроде не помню проблем именно с контроллерами.
Ну если не секрет конечно. Или в личку.m0Ray
13.04.2016 13:09Я сам с ними не работаю. Зато матюки инженера слышу регулярно. То одно вылетит, то другое, то поставщики цены заломят, то железо никак не привезут даже за такие деньги… Контроллеры вроде работают, но некоторые блоки связи с оборудованием могут зависнуть, не включиться, сдохнуть вообще. В итоге дежурные бегают крутить заслонки вручную, пока не приедет инженер и не разберётся.
Balpak
13.04.2016 16:59Насчёт цен это истинная правда, на каждую софтовую мелочь лицензию надо брать, но конкретно к железу первый раз слышу чтобы были такие претензии. Предыдущее поколение (TDC3000 / TPS) вообще неубиваемое.
А материть инженер должен не Хоневелл, а электриков/проектантов, это ж как возможно чтобы питание «упало»? Тут любая железка может помереть. Резервный ввод UPS + батарея часов на 6, не?m0Ray
14.04.2016 18:55Места достаточно отдалённые от цивилизации. Дизель не всегда успевают запустить, батарея старая уже.
Зависание или непонятные отказы оборудования Honeywell на том объекте — дело обычное и привычное. Оно может запуститься один раз, не запуститься в другой. Отвалиться на ходу. Лечится многократными перезапусками — рано или поздно можно поймать момент, когда запустятся все модули. Диагностика убогая — что можно сказать по миганию лампочки и скромному сообщению типа «связь с модулем прервана»? Причины неясны до сих пор.
То ли дело моё решение — даже если что-то не запустилось — вся подноготная в логах. ;) Да и не падает.
grossws
13.04.2016 11:10Посмотрите ещё на pymodbus, на мой взгляд для многих задач оно существенно удобнее использования libmodbus напрямую.
m0Ray
13.04.2016 11:49Ну я его не напрямую. Вот допилю инструменты (а там осталось-то реализовать считывание идентификационных строк modbus-клиента, но сейчас это не горит и там затычка) — выложу куда-нибудь на sourceforge (гитхаб — это какой-то кошмар, а не система управления версиями).
Я, прежде чем писать своё, упорно погуглил, есть ли для командной строки простые инструменты. Не нашёл.
Ну и написал. Получилась пачка утилит: modbus-read, modbus-write, modbus-ping… Всё это позволяет достаточно универсальным образом, из любых языков и скриптов пинать шину в нужном направлении.
Unix way — я его люблю.grossws
13.04.2016 11:52гитхаб — это какой-то кошмар, а не система управления версиями
Он никогда и не был VCS, равно как и sourceforge.
Выбор github/bitbucket/sf/whatever — на вкус и цвет — но sf с точки зрения пользователя, ИМХО, крайне неудобен. Не говоря уже про невозможность отправить pull request.
m0Ray
13.04.2016 12:23> Он никогда и не был VCS
А тогда что это вообще такое и зачем? git, как я понял — какая-то анархия, делай с кодом кто что хочет. Я попробовал его освоить, сломал башку и больше не возвращался к этому вопросу. Не понимаю, зачем и кому это нужно и как с этим работать, хотя и вижу, что народу нравится. Вот в SVN всё чётко, есть права — коммитишь и никого не спрашиваешь. Тёплый ламповый, так сказать.
Мабуть, я просто уже старый стал для таких вещей…
> равно как и sourceforge
Ну там я хотя бы SVN могу пользоваться. Issue tracker есть. Можно выложить на всеобщее скачивание. В принципе меня всё устраивает.grossws
13.04.2016 12:52- git != github, также как svn != sourceforge/googlecode
- Публичный доступ может быть к любому репозиторию и cvs/svn/hg/git — роли не играет. Стоит также отметить, что на github'е полными правами на репозиторий обладает создатель, на чтение — все (если это не закрытый репозиторий; эта фича относится к платным), а другим он может давать доступ на запись по желанию. Или принимать патчи из pull request'ов, как обычно делают.
- Возможно, есть некоторое непонимание. В svn термин commit означает отправку патча в централизованное хранилище. В git/hg — в локальное. Поэтому коммит в dvcs не требует никаких дополнительных прав кроме прав доступа к локальной файловой системе. При этом опубликование изменений выполняется с помощью git push, который является объектом авторизации. И по умолчанию на сервисах типа github'а этот самый push в чужой репозиторий можно сделать только с разрешения владельца.
Если вы хотите закрытый код, то другой вопрос, смотрите ToS конкретного сервиса (того же sf) и, если разрешает, — в путь. Правда я не вижу никаких бонусов в закрытии кода утилит типа описанных выше.
m0Ray
13.04.2016 13:17Да я и не собираюсь ничего закрывать в данном случае. У меня для закрытых проектов svn over ssh на личный сервак, мне хватает.
Вот зачем в git сделано ещё и локальное хранилище — я не очень понимаю. У svn оно тоже есть, но — для вычисления патчей относительно предыдущих версий. Если я закоммитил код — патчи ушли на сервер и я спокоен. Тут же приходится зачем-то в два этапа: сначала локально, потом ещё куда-то, а там, на том конце, опять надо подтверждать… Куча лишних действий, которые мне только усложняют жизнь.
Если я посторонний в svn-репозитории — я могу в issue tracker прикрепить патч вместе с описанием проблемы, админы разберутся, накатить патч не проблема, если им всё нравится. Тут какие-то форки, мерджи, пуш-пулл, чёрт ногу сломит…
Balpak
13.04.2016 09:51Дополню авторский список:
1. MDBUS for Windows — умеет вообще всё и очень удобная в работе, единственный недостаток — цена в 180$, но если не нужна самая последняя версия и молчит совесть, то сборка 3.31 лежит в сети в некоторых местах.
2. PeakHMI — бесплатная, эмулирует все 247 slaves, лежит в разделе «Slave Simulators»
3. modpoll — классика, консольный вариант, странно что никто не упомянул. В отличии от многих других мастеров позволяет выбирать количество стоп битов. Уникальная фишка — поддержка encapsulated modbus, требуется при работе с терминальными серверами типа Digi или Systech. Есть бинарник под линукс.
Из преобразователей рекомендую Trendnet TU-S9, есть только RS-232, но и цена в районе 1200 рублей. Для Ethernet/RS-485 попробуйте Digi One SP, поддерживает в том числе UDP и Raw Sockets, цена вопроса около 13 тыс. рублей, но это самый лучший вариант по соотношению цена/качество. Пользуюсь обоими уже года два, замечаний нет.
Romer
13.04.2016 10:02У Modscan есть одна уникальная особенность для программ данного типа — это возможность создания форм (своего рода мнемосхем).
Да ладно??? Пожалуйста, ткните меня — где там такое есть??? Аж интересно стало.marat_ab
14.04.2016 21:19Выбираем File->Custom Form->Create
Открывает «Дизайнер» форм. Здесь можно разместить простой текст, bargraph, trend, данные из Modbus регистров и т.д.
Список возможных элементов конечно очень скудный, с нормальной SCADA не сравнить, но поиграть можно. Лично мое мнение, для нормальной работы пока не годится.
marus-ka
13.04.2016 10:20+1Вы серьезно? Это статья для хабра? Я когда увидела название надеялась на какое-то откровение, интересное решение по отладке modbus. А в итоге статья о том, что есть переходники из 485 и терминалки. Слабовато.
marat_ab
13.04.2016 11:36-1Я когда увидела название надеялась на какое-то откровение, интересное решение по отладке modbus.
Наверное просто ваш уровень уже настолько высок, что материал статьи для вас просто не интересен и скучен. Те, у кого таких знаний не достаточно, смогут найти, что-то полезное для себя. Modbus довольно прост и узкоспециализирован, и я пока не вижу темы, которая содержала бы «откровения», кроме как вопросы непосредственной реализации протокола своими силами. Но это уже за рамками тематики статьи.
А в итоге статья о том, что есть переходники из 485 и терминалки.
Ммм… название «Программное обеспечение для тестирования и наладки устройств и сетей на базе MODBUS» и предполагает обзор «терминалок» и прочего ПО предназначенного работы с Modbus, с остановкой на определенных моментах, которые важны в при решении конкретных задач. Не вижу противоречия.
grossws
13.04.2016 11:15Из конвертеров usb-rs485 могу посоветовать delta ifd6500, цена ~$65. Нормально работает и на винде, и на linux'е (на винде требует установки дров, ессно).
andersong
13.04.2016 15:34Попытка хорошая, но статья получилась больше для начинающих.
Можно было пошарить на форумах асушников (которых более-менее живых штуки три на русском), там темы на подобные вопросы возникают периодически и достаточно подробно обсуждаются.
asutpforum.ru, например, довольно сильный в этом плане.
Добавлю, что Modbus бегает не только на RS 485, но и на 422 и 232.
AndreyUA
Сейчас озабочен вопросом снятия данных по Modbus TCP с контроллера и сохранением их в базу. Данные счетчиков продукции надо сохранять в базу для последующего использования в ERP системе. Попробовал использовать Advanced TCP/IP Data Logger. Имеет гибкие настройки, Modbus поддерживается плагином. В триальной версии все вроде бы работает, но запросов можно сделать только 100. Собираюсь купить и проверить в боевых условиях.
AngelOfSnow
Если я правильно понял вашу задачу, тогда по-моему проще своими силами решить ее на том же C#. К тому же, если в последствии вам понадобиться расширить функционал, то свой софт вы просто допишите.
A1ien
Для решения подобной задачи на С++/boost у меня ушло две недели. Есть готовое решение но оно имеет реализацию другоо протокола, прикрутить туда модбас будет очень просто, могу расшарить на github если кому интересно.
AndreyUA
Я, конечно, изобретать свое не буду, потому что, как всегда, все должно уже работать вчера, но с удовольствием посмотрел бы на ваш проект. По поводу FreeScada, не хотелось бы тянуть скаду или ОРС сервер ради того чтобы вытянуть три счетчика в базу. Хочется чего-либо попроще.
A1ien
Да, совсем забыл FreeSCADA имеет поддержку мобас, и сохраняет данные в SQLITE базу.
marat_ab
Кстати, та же MasterSCADA, отмеченная в статье, поддерживает Modbus TCP. Если что-то по быстрому нужно, то на ней можно реализовать. Но нужно помнить, что бесплатно предоставляется только 32 тега.
AndreyUA
Купил, запустил. Все работает нормально. Данные с контроллера собирает и пишет в базу. Получил работающее решение в течение 3 дней, 2 из которых потратил на покупку. Для тех, кто не хочет заморачиваться с реализацией собственного решения — отличный вариант. Хотя, если есть время, то реализовать собственное решение не составит большого труда, протокол не сложный.