Комментарии 31
А ссылка на github будет ?
Навскидку проверил с библиотекой NI Modbus, и оно работает, спасибо!
![](https://habrastorage.org/webt/nd/at/yc/ndatycqvaw18geslayispgi5d48.png)
А сервером (в смысле слейвом) ваша программа может выступать? Ну чтобы она просто слушала 502-й порт, а я бы к ней подключился?
Нет, сейчас моя программа может выступать только в роли мастера. Но ваша идея интересная)
А в каких сценариях реального использования может пригодится такой функционал? И как думайте, он был бы нужен только для Modbus TCP или еще для RTU и ASCII?
Спасибо за отзыв)
Ответ на комментарий https://habr.com/ru/articles/795387/#comment_26529969
А в каких сценариях реального использования может пригодится такой функционал?
Как пример — предположим у меня есть ПЛК, наружу из него торчит Modbus TCP, и я разрабатываю десктопное приложение, которое с ним общается. Держать ПЛК на столе неудобно, соответственно программа выступает "заглушкой", к которой я и подсоединяюсь вместо настоящей железки. Ну и когда я что-то пишу, то сразу вижу чего и в какой регистр записалось (на самом ПЛК это смотреть опять же не всегда удобно), ну и вручную могу какие-то регистры установить и их читать. Логики там не надо, просто статические регистры. Этакий примитивный "эмулятор". Ещё вот был случай, когда соединение разрывалось по таймауту, и чтобы определить, какая сторона "глючит", такая "независимая" программа была бы кстати.
Интересно почему WPF, а не Avalonia?) Мне кажется Avalonia намного более предпочтительна в 2024 году, особенно, если нет потребности использовать какие-нибудь телерик и devExpress.
Когда я начинал этот проект, Avalonia была не настолько хороша как сейчас) Я пробовал часть программы переносить на Avalonia. В целом все работало, но оценив объем работы по переносу, я решил отложить это дело. Поэтому в будущем я скорее всего перейду на Avalonia. Текущая архитектура программы как раз и предназначена для этого.
Под что нибудь кроме винды эта тулза собирается ?
Если в устройстве много регистров, а иногда их несколько сотен, то пользоваться таким терминалом очень неудобно. В реальных устройствах с протоколом Modbus RTU к примеру структура регистров может ссылаться на другие регистры, регистр может иметь определённый тип и назначение и связанный с ним регистр с данными и т п. Обычно для прибора с несколькими сотнями регистров разрабатывается специальная программа-мастер, которая содержит меню и связанные с меню наборы регистров, сгруппированные по функционалу, с помощью которой можно читать регистры и видеть их наименование, связанные с ним данные и тп, записывать в них и даже отображать тренды. Ваш монитор просто игрушка, малоприменимая в реальной жизни. Поиграться можно конечно, но и только.
Я для таких задач использую Radzio Modbus Master Simulator. В Вашем варианте я бы стремился по интерфейсу к чему то подобному (но это чисто дело вкуса), не хватает побитового разложения числа, когда тянем маску с ПЛК, не хватает работы с float, сам регистр мало информативен в данном случае, да и часто приходится слова местами менять, потому что разные железки старшее слово засовывают либо в конец посылки, либо в начало. Ну и табличное представление регистров тоже очень выигрывает, если еще и символьные имена им присваивать для отладки можно, то вообще супер.
Под Windows 11 не ставится. Так и не смог запустить.
Напишите в чем была проблема?
У меня на двух разных ПК с Windows 11 программа работает без проблем.
У меня на двух разных ПК с Windows 11 программа работает без проблем.
Устанавливается, но не видит порты, т.е. пустой серый список.
Возможно проблема с СОМ портами.
Есть несколько вариантов:
Посмотрите в "Диспетчер устройств - Порты (СОМ и LPT)". Если в этом списке нет портов, значит у меня в программе их тоже не будет)
Также может быть проблема с USB драйверами, в таком случае в Диспетчере устройств будет предупреждение об этом, а моя программа также не отобразит эти порты.
Если в Диспетчере устройств порты отображаются, а в терминале нет, то в окне настроек нажмите на кнопку "Поиск СОМ портов". Список с доступными портами должен обновиться.
Проблема с правами (фантастично, но почему бы и нет). Попробуйте запустить программу от имени администратора.
Хорошо поработали. Думали над браузерной программой?
Над таким вариантом не думал) Как мне кажется, эта программа чаще всего будет использоваться на закрытых предприятиях и заводах. Из за внутренних ограничений, там нет смысла в браузерной версии.
Предупреждаю )) с 24.09.2024 использование операционной системы Windows на объектах критической инфраструктуры будет запрещено. Как минимум, ограничено. Поэтому вам следует заранее задуматься о портировании. И браузерная версия становится не лишена смысла.
Поэтому я и думаю о переходе на Avalonia UI.
Если развернуть приложение в глобальной сети, то появится проблема с доступом к портам на конкретном ПК. Плюс скорее всего там используется терминальный интернет, что вообще лишает приложение смысла.
А если развернуть браузерную версию локально и использовать любой браузер для взаимодействия с пользователем, то получится то же самое что и при использовании обычного приложения) А вариант с WebView по мне больше на костыль похож в данном случае.
А вообще будет интересно посмотреть как произойдет отказ от винды. Слишком много софта под нее написано. Плюс пользователи к ней привыкли.
Кто-то сам пишет, а я вот бесплатный Termite Modbus Terminal скачал и не напрягаюсь. Для простых задач хватает.
Скачал, спасибо за труд! Интересно поюзать.
Как раз сейчас ковыряю одну железку с работой по Modbus TCP. Спасибо, будет интересно попробовать вашу прогу.
Как человек который регулярно использует modbus эмуляторы как Master и как Slave вашей программе еще есть куда расти.
1.Проблемы с масштабированием окна. На среднестатистическом ноутбуке с разрешением экрана 1600х900 программа не влазит по высоте.
2.Удобно смотреть только одиночные запрос\ответ. При циклическом опросе, да еще и большого количества регистров все сваливается в кашу в которой сложно что то найти.
3.Нет времени отправки\приёма посылки
4.Нет возможности побитового отображения регистров
5.Нет цветового выделения регистров которые были обновлены
6.Циклический опрос перестает работать когда закрываешь окошко циклического опроса.
7.Нет настройки межсимвольного таймаута
Сам использую программы для тестирования modbus, хоть они и не идеальны:
Для режима Master - Modbus Universal MasterOPC , есть бесплатный вариант, каждый час надо перезапускать.
Для режима Slave Эмулятор Modbus устройств https://ardsoft.ru/mEmulator.html
Спасибо за замечания, но хотелось бы пояснений к некоторым пунктам.
Пункт 4:
Как думайте, было бы удобно видеть содержимое регистра одновременно во всех трех представлениях (шестнадцатеричное, десятичное и двоичное с разделителем между байтами)? Или же лучше переключаться между представлениями?
Пункт 5:
Вы имейте ввиду режим Modbus сервера (которого пока нет)? А если нет, то зачем клиенту такой функционал?
Пункт 7:
Вы имейте ввиду задержку между отправкой / приемом слов? Напишите, пожалуйста, в каких случаях может пригодиться такой функционал.
Пункт 4. В своей самописной программе я обычно использую комбинацию DEC + BIN или HEX + BIN. Одновременно отображать DEC + HEX необходимости у меня не было
Пункт 5. Так как программа используется для отладки устройства, то полезно смотреть регистры и биты и регистре которые были изменены в последние n секунд. Опять же в своей программе я использую цветовую маркировку битов которые были изменены. Красным цветом помечаются биты которые изменились в последние 3 секунды, оранжевый помечаются те биты время изменения которых больше 3 но меньше 5 секунд и желтым помечаются те, которые обновлялись в промежутке больше 5 и меньше 10 секунд. А так как отлаживаемое устройство может работать как в режиме master так и в режиме slave то на мой взгляд функционал можно делать одинаковый во всех режимах работы.
Пункт 7. По стандарту modbus время окончания посылки должно определяться по задержке в 3.5 символа. Хоть и в реальности мало кто придерживается этого правила, но как-то попалось устройство которые придерживалось этого правила, из-за чего возникли проблемы при подключении менее расторопного устройства.
Терминал Modbus TCP / RTU / ASCII с открытым исходным кодом