Когда-то я активно работал с промышленным оборудованием. Часто мне приходило какое-то устройство, и оно общалось с внешним миром по волшебному протоколу Modbus.
Будучи излишне уверенным в себе, для каждого такого устройства я писал свою небольшую программу для тестирования. Но спустя непродолжительное время я понял, что это очень утомительное занятие. Интерфейс взаимодействия со мной с пользователем забирал кучу времени разработки. Потом еще отладка и прочее... просто жуть...
От отчаяния я решил посмотреть, а что мне может предложить мировое IT сообщество. Какие-то программы были очень ограничены в бесплатной версии, где-то такой версии не было в принципе, а что-то мне просто не понравилось внешне.
Осознав проблему, я решил пополнить свой GitHub новым проектом помочь и себе, и людям, написав свой собственный терминал.
Для меня было очень важно создать красивый GUI, которым было бы приятно пользоваться.
Поэтому представляю вам мою версию Modbus терминала!

Терминал поддерживает все разновидности протокола Modbus:
Modbus TCP
Modbus RTU
Modbus ASCII
В таблице находятся расшифрованные данные посылок. А само содержимое этих посылок находится ниже, в поле «Запрос — Ответ».
Далее расположена панель управления космическим кораблем взаимодействия с устройством. Записываем адрес регистра, а затем или читаем, или записываем в него.
В самом низу расположена строка подключения. Там содержится информация о текущем подключении и индикация.
Индикаторы приема и передачи работают таким образом:

Казалось бы, а что еще нужно для счастья? Верно, смена тем оформления.
Темная тема? Нет, не слышал
Периодически, приходится работать в IDE, в которых разработчики не добавили темную тему. Keil, CODESYS и некоторые другие.
И это не становится проблемой, когда сидишь в офисе с двумя мониторами. Проблемы появляются, когда вот уже несколько часов сидишь в цеху с ноутбуком на коленках и отлаживаешь свое изобретение. Огромное черное окно терминала, которое из раза в раз появляется на фоне светлой IDE просто утомляет глаза. Работать становится труднее, а усталость приходит быстрее.
Чтобы сделать содержимое экрана монитора более однородным я добавил светлую тему.

В настройках можно на лету переключаться между темами оформления, подобрав нужную под текущий сценарий работы.
А что еще?
А еще у меня есть два дополнительных режима работы «Без протокола» и «Http».
Первый режим я добавил для работы с текстовой информацией, а второй просто потому что могу =)

Да, в режиме «Без протокола» хотелось бы добавить работу с байтами... когда‑нибуть она появится =)
Также в программе есть возможность работы с пресетами. Иногда бывает необходимо работать поочередно с несколькими устройствами. И чтобы постоянно не менять настройки, можно создать специальные файлы с уже сохраненными параметрами и переключаться между ними.
Немного о разработке
Для написания Desktop приложений я чаще всего использую WPF. По мне, это один из самых удобных фреймворков для разработки приложений на ПК.
Первая релизная версия появилась где-то полтора года назад с момента написания этой статьи.
Сначала использовался .NET Framework, а затем все приложение переехало на .NET 7, и вот совсем недавно на .NET 8.
Были ли проблемы при переезде с платформы на платформу? В целом нет. Пришлось только немного повозиться с переездом с Framework на Core.
Сама архитектура приложения тоже менялась со временем. По началу вся логика была в обработчиках событий в code behind. А потом это стало невозможно поддерживать и проект был полностью переписан согласно паттерну MVVM.
UI тоже менялся со временем.
Например, вот так выглядел режим "Modbus" в одном из первых вариантов.

Какие-то фичи добавлялись, какие-то вырезались. У меня не было четкого плана разработки. И действовал я методом проб и ошибок.
После миграции на .NET Core я ощутил необходимость создания установщика с возможностью обновления.
Согласитесь, один файл установщика, в отличии от кучи непонятных файлов приложения, выглядит весьма лаконично. А каждое нажатие на кнопку "Далее" в мастере установки прибавляет солидности вашему ПО.
Для написания скрипта установщика я использовал Inno Setup. Может быть напишу об этом отдельную статью =)
Советую ознакомиться, если еще нет.
Итого
Планы у меня были грандиозные. Хотелось добавить все и сразу. Но, как это часто бывает, ограниченность ресурсов вводит свои коррективы.
Надеюсь, вам понравилась моя первая публикация на Хабре, а мой софт поможет вам меньше уставать на работе. Буду рад обратной связи. Всем удачи!
Скачать программу. Доступна новая, более продвинутая версия приложения. Ищите ее в статьях ниже или смотрите актуальную версию на этом сайте.
А ценители прекрасного и ужасного могут посмотреть исходный код
Смотрите также:
Кроссплатформенный терминал Modbus TCP / RTU / ASCII с открытым исходным кодом: Часть 4
Кроссплатформенный терминал Modbus TCP / RTU / ASCII с открытым исходным кодом: Часть 3
Кроссплатформенный терминал Modbus TCP / RTU / ASCII с открытым исходным кодом: Часть 2
UPD:
Проект развивается. Со временем он был переименован в CoreBus.
Смотрите все версии тут.
CoreBus — кроссплатформенный терминал для работы с COM-портами и TCP-сокетами с поддержкой протоколов Modbus TCP / RTU / ASCII.
Основные возможности приложения:
1. Два режима работы: «Без протокола» и «Modbus».
2. «Без протокола»:
Работа с данными в строковом или байтовом формате.
Поддержка разных кодировок.
Три режима отправки: одиночная, цикличная, отправка файла.
3. “Modbus”:
Поддержка различных вариаций протокола Modbus: TCP, RTU, ASCII и RTU / ASCII over TCP.
Удобная работа с функциями записи.
Возможность работы с числами типа float.
Возможность работы с бинарными данными.
Цикличный опрос.
Modbus сканер, который осуществляет поиск устройств на линии связи.
4. Макросы:
Отдельные макросы для каждого режима работы.
Макрос состоит из неограниченного количества команд (действий).
Для Modbus макросов предусмотрена возможность выставления общего Slave ID для всего макроса.
Импорт и экспорт макросов.
5. Темная и светлая темы приложения.
6. Пресеты с пользовательскими настройками.
7. Кроссплатформенность: Windows, Linux.