Встречайте новое обновление моего терминала!
Терминальная программа – это многофункциональный кроссплатформенный инструмент инженера, который позволяет взаимодействовать с внешним устройством или сервером. Приложение поддерживает различные вариации протокола Modbus, а также дает возможность работы с данными в строковом или байтовом формате.
Главные фичи этой версии это макросы с пользовательскими именами, работа с байтами в режиме "Без протокола" и поддержка протоколов Modbus RTU и ASCII поверх TCP.
Изменения:
Добавлена поддержка Modbus RTU over TCP.
Добавлена поддержка Modbus ASCII over TCP.
Добавлена возможность работы с байтами в режиме "Без протокола".
Добавлены макросы.
Добавлено руководство пользователя.
Исправление ошибок, мелкие улучшения и рефакторинг.
Ссылки для скачивания вы можете найти в конце статьи. А теперь приступим к разбору нового функционала!
Макросы
Это, пожалуй, основная фича этого обновления. Но зачем они нужны?
В моей практике часто случалась ситуация, когда нужно написать одноразовое или временное ПО. Скажем прямо - разрабатывать его скучно. Поэтому удобнее задать макросы в каком-нибудь терминале. И время сэкономим, и работать не надо :-)
Но возникает следующая проблема. В популярных терминалах не всегда можно задать имя макросу или же такой функционал плохо реализован (например, как в Terminal 1.9b). Из-за этого обычному пользователю трудно разобраться какие кнопки нажимать, чтобы все заработало.
Как раз эти проблемы и призван решить режим макросов в моем приложении.
Перед нами представлена панель макросов. Для каждого режима она своя. При переключении режимов в главном окне панель обновляется.
Макросы можно создавать, редактировать и удалять.
Также всю панель для конкретного режима можно импортировать и экспортировать. Это удобно использовать, когда нужно распространить макросы на несколько ПК. Важно отметить, что при импорте старый файл удаляется без возможности восстановления.
При наведении курсора на макрос, появляются две дополнительные кнопки «Редактирование» и «Удаление» выбранного макроса.
Очевидно, что для каждого режима будет своя форма создания/редактирования макроса. Рассмотрим их поближе и ознакомимся с особенностями.
"Без протокола"
Взаимодействие в данном окне аналогично обычному режиму «Без протокола».
Из особенностей важно отметить, что кодировка строки в макросе не зависит от общей кодировки, заданной в настройках приложения.
Это сделано для того, чтобы макрос был автономным и не зависел от пользовательских настроек.
"Modbus"
Управление в этом окне схоже с обычным режимом "Modbus".
Также отмечу, что тут формат числа типа float в макросе не зависит от формата, выбранного в настройках приложения.
Работа с байтами в режиме "Без протокола"
Это как раз то, что я ждал сам от себя, наверное, еще с самой первой непубличной версии приложения.
Периодически в целях отладки мне нужно было отправить внешнему устройству только один или несколько байт. Но что делать, если в таблице ASCII нет подходящих значений? Для этих целей мне приходилось держать второй терминал рядом. Но эти времена прошли, и в моем приложении появился необходимый минимум для работы с байтами. Поэтому второй терминал я удалил :-)
С помощью соответствующих переключателей можно выбирать способ отображения контента. Тут есть небольшие особенности.
В поле передачи и в обычном режиме (верхнее поле на картинке), и в режиме цикличного опроса все содержимое поля автоматически преобразуется в байты и наоборот с учетом выбранной кодировки.
А в поле приема преобразуется только та часть контента, которая была получена после переключения.
Например в режиме цикличного опроса с включенными служебными полями это может выглядеть так:
Итого
В версии 3.1.0 был добавлен функционал, реализацию которого я откладывал довольно давно. Приложение стало еще более универсальным инструментом в руках инженера. И если вы запутайтесь в его функционале, то не забывайте обращаться к встроенному руководству пользователя (кнопка с вопросительным знаком в верхнем левом углу) и статьям из этого цикла.
Приложение все также тестировалось на Windows 10/11, Ubuntu и Astra Linux.
Буду рад обратной связи в комментариях.
Смотрите также:
AbitLogic
Спасибо, очень актуально, после праздников попробую, как раз сейчас анализирую пакеты с устройством без даташита, дам фидбэк
Там же 232-й есть?
AndreyAbdulkayumov Автор
Да, в приложении есть возможность работы с последовательным портом.
AbitLogic
Я бегло попробовал с моим самодельным устройством на 485-м, вскочил вопрос, а есть ли возможность задать готовые пресеты для отправки? Поясню, у меня при подключении инициализируются некоторые регистры и далее во время работы нужно переключать режимы, т.е. отсылать несколько вариантов заранее заданных данных, а не менять пакет туда-сюда
Скрытый текст
Что-то в таком духе
AndreyAbdulkayumov Автор
Используйте макросы. Например, можно создать макрос для каждого режима, дать каждому из них какое-то название, и во время работы при необходимости нажимать на соответствующие макросы. Окно макросов можно скрыть или закрыть вовсе, если оно сейчас не нужно.
В случае на картинке есть проблема, что нужно записать два регистра, которые располагаются непоследовательно в памяти.
Но я вижу несколько вариантов:
1. Использовать макрос Modbus и функцию 0х10 Запись нескольких регистров. Регистрам, которые находятся между 0х64 и 0х70, можно задать нулевое значение. Убедитесь, что это не критично.
2. Использовать несколько макросов Modbus. В каждом макросе используется функция 0х06, которая записывает в один регистр. Чтобы не запутаться, их можно назвать, например так: "Режим Х 1", "Режим Х 2", "Режим Y 1", "Режим Y 2" и т.д.
Для переключения режима придется понажимать пару кнопок.
3. (Костыль, костыль) Использовать макрос режима "Без протокола". Записать последовательно байты для каждой посылки. Попробовать отправить. Скорее всего устройство это проигнорирует, из-за отсутствия служебных полей UART между посылками и из-за отсутствия паузы между сообщениями. Если так произошло, то можно попробовать сымитировать старт и стоп биты, с помощью байтовых значений, а паузу между посылками - нулевыми значениями. Для отладки всего этого неплохо бы воспользоваться осциллографом или логическим анализатором.
AndreyAbdulkayumov Автор
А реализации пресетов как таковых сейчас нет. Это было бы самым удобным вариантом для случая на картинке. Возможно, они появятся в будущем)
AbitLogic
Спасибо, на моих платах, что имею дома по 485-му всё отлично работает, есть правда некоторые предложения по улучшению, кроме пресетов, но это скорее юзерфрендли, чем функционал
А впрочем, подумайте над вариантом добавить протокол из CAN), могу оказать содействие
Попробую ещё на заводе с другими устройствами и не программистами)
AndreyAbdulkayumov Автор
Юзерфрендли и общий дизайн приложения это были одни из основных причин, почему я когда-то начал писать это приложение) Интересно будет услышать ваши предложения.
AndreyAbdulkayumov Автор
А CAN вообще сильно распространен в промышленной автоматике? Честно говоря, я с ним и не сталкивался в живую) Даже при подборе комплектующих для разработки нового оборудования у различных исполнительных модулей редко бывает поддержка CAN протокола.
Обычно у большинства устройств есть поддержка Modbus или на худой конец какого-нибуть простенького собственного протокола.
AbitLogic
Вообще встречается часто, чаще всего в автомобиле, ну примерно как Манчестер-2 (MIL-STD-1553) в авиации, никакая ракета и самолёт без этого
Но и по внутренней сети между станками не раз видел CAN-устройства, например в Микроне
Я без шуток, оно используется
Напишу вам свои пожелания, мне нужно их сформировать
AbitLogic
1) "Использовать макрос Modbus и функцию 0х10 Запись нескольких регистров. Регистрам, которые находятся между 0х64 и 0х70, можно задать нулевое значение. Убедитесь, что это не критично."
Ой, там я эти регистры натыкал ещё когда устройства не было даже в kiCAD нарисовано, там с большими интервалами
Скрытый текст
В теории конечно можно переделать карту регистров, но это ради одной чужой программы такое себе)))
2) "Использовать несколько макросов Modbus. В каждом макросе используется функция 0х06, которая записывает в один регистр"
Это рабочий вариант, но объяснять людям нажми все Xn чтобы установить режим X странно, если перед глазами компьютер, а не арифмометр
3) "Использовать макрос режима "Без протокола". Записать последовательно байты для каждой посылки. Попробовать отправить. "
Как вариант, впринципе разбор пакетов писал я, могу сделать чтобы он дробил длинные данные по длине пакета и совпавшей crc, добавлял их в очередь , и по хорошему надо бы, но опять же ради одной программы...
Было бы чудесно иметь в закромах возможность исполнить сразу несколько команд подряд, у меня есть одна плата на ПЛИС, там около 12 разных регистров пишется, чтобы задать параметры работы и естественно все в разных местах по адресам, эти параметры пишутся не один и не два раза за сеанс