Обновление программы терминала — Terminal TMB
Продолжаю дальше развивать проект терминала для работы с COM-портом. Предыстория проекта данного представлена здесь:
Универсальный терминал для работы с COM-портом «Termial ST»
Терминал — GSM DIALOG
Терминал для GSM модема SIM900 — SIM900 DIALOG
Общий вид терминала (версия 3)
Новой версии терминала ручной работы дал название «TerminalTMB», т.к. он имеет существенные отличия от предыдущих версий по функционалу, стабильности и скорости работы. От предыдущих версий взял только все идеи, подводные камни, добавил новшества и переписал проект с нуля. В результате получился терминал с теми нужными функциями, которых нет у большинства гуляющих на просторах сети терминалов.
Итак, запускаем программу. После запуска программа укажет на то, что конфигурационного файла нет и создаст пустой шаблон, совместимости с конфигурацией предыдущих версий нет.
В программе упрощён алгоритм редактирования шаблонов (макросов), добавлена возможность работы с абстрактными названиями команд, вместо ASCII-строк или бинарных последовательностей. Режим переключается с помощью соответствующих радиокнопок. При редактировании можно переключать вкладки и режим отображения команд. Редактирование может быть простым, когда изменяется название и содержимое команды, так и расширенным, когда есть возможность написать краткую справку по команде. Для перехода в режим расширенного редактирования следует дважды кликнуть по соответствующей строке редактирования с командой:
Общий вид терминала (версия 3)
При редактировании справки результат изменения будет тут же отображаться в соответствующем окне, что удобно для контролирования превышения длин строк. После закрытия окна редактирования новая команда встанет на своё законное место. В процессе работы программы все изменения макросов хранятся в ОЗУ, а для записи в файл нужно нажать соответствующую кнопку в режиме редактора или при необходимости сохранить в момент выхода из программы.
Если нажать клавишу «стрелка вниз» при нахождении фокуса ввода у командной строки, то появится окно выбора из списка ранее отправленных команд. Далее используются клавиши со стрелками и Enter, для закрытия окна нужно нажать «Esc».
Общий вид терминала (версия 3)
В данном окне отображаются не больше 50 последних отправленных команд, ранжированных так, что в самом верху будет последняя отправленная команда. Список хранится в оперативной памяти, а в файл записывается при закрытии программы.
Терминал может работать с текстовыми командами и с бинарными данными. С текстовыми командами у читателя вопросов не возникнет, пример работы с бинарными последовательностями показан на рисунке ниже:
Общий вид терминала (версия 3)
Бинарные последовательности хранятся и отправляются в текстовом виде в формате XX XX XX XX … XX[пробел]. Нужно следить за тем, чтобы впереди этой последовательности не было пробела, иначе вся строка при распарсивании разъедется.
В конец каждой отправляемой последовательности всегда добавляется содержимое дополнительной строки по правилу сложения строк.
К содержимому командной строки добавляется строка из дополнительного окна. Если в текстовой режиме нужно добавить бинарное число, то оно записывается в формате $XX. Если числа два, то конец строки будет выглядеть следующим образом: $XX$XX и т.п., например $0D или $0D$0A, аналогично в хвост каждой команды можно добавлять и текстовую строку, например «command$0D». В режиме HEX передаваемые байты записываются без символа $ перед XX при обязательном условии наличия одного пробела в конце последовательности в командной строке. Если в HEX режиме дополнительное поле остаётся пустым, то наличие пробела в конце последовательности необязательно.
Режим отправки команд задаётся на соответствующей панели:
Общий вид терминала (версия 3)
В ручном режиме команда отправляется по нажатию клавиши Enter или по нажатию кнопки «Отправить».
В режиме «При выборе» команда отправляется сразу же в порт, а содержимое командной строки не изменяется.
В режиме «После ответа» команда отправляется после получения ответа на предыдущую. Критерием завершения получения ответа является наличие символов перевода каретки или/и перехода на новую строку. В бинарном режиме критерием завершения передачи является превышение заданного времени ожидания следующего байта. Для запуска обмена следует начать процесс отправкой команды вручную. Данный режим удобен для отлавливания момента, когда прибор может не ответить на команду – в этом случае лог остановится и будет до последнего ждать какого-нибудь ответа.
В режиме «Период, мс» командная строка отправляется с указанным интервалом в независимости от наличия приходящих ответов. Это хороший способ завалить консоль прибора входящими запросами.
Далее можно установить флажок «Однократно при соединении». При установленном флажке отправка данных будет начинаться автоматически при восстановлении соединения с прибором в соответствии с выбранным режимом. Здесь нужно будет включить режим автоматического восстановления соединения с COM-портом. Это удобно, если используется эмулятор USB-COM сам по себе или эмулируется микроконтроллером. В этом случае после перезапуска прибора ему будет отправляться нужная команда. Удобно это и тогда, когда сотне приборов нужно отправить одну и ту же последовательность. В такой ситуации каждое лишнее движение пользователя по временнЫм затратам умножается на количество приборов, а в данном случае нужно будет только подключать и отключать кабель USB от прибора.
Имеется возможность использования файла с командами. Тут важно иметь ввиду, что в конце файла команд должен быть переход на новую строку. Программа считывает максимум 500 команд и отображает их в соответствующем списке появившегося окна:
Общий вид терминала (версия 3)
Далее работа с командами определяется выбранным режимом отправки команд. Если выбран ручной режим отправки, то очередная команда отправляется по нажатию кнопки «Отправить из файла», после отправки последней команды появляется соответствующее окно с сообщением.
В режимах «После ответа» и «Период мс.» также последовательно отправляются все команды из файла, при этом в режиме «После ответа» для запуска автоматической отправки нужно дать старт нажатием любой кнопки отправки команды, в данном случае логично нажать «Отправить из файла».
Если установлен флажок автоматической отправки команд при восстановлении соединения, то при каждом соединении или после каждого перезапуска прибора с эмулятором USB-COM в консоль будут по очереди отправляться все команды из файла. Это удобно, каогда сотне приборов нужно записать одну и ту же длинную последовательность команд. В этом случае достаточно будет только поочерёдно подключать кабель USB к каждому прибору, т.е. рутинная работа может выполняться быстрее, чем если бы пользователь каждый раз делал какие-либо манипуляции с кнопками программы.
Перейдём к верхним панелям:
Общий вид терминала (версия 3)
Здесь находится панель для работы с соединением и с окном лога. Настройки COM-порта стандартные, в нешатных ситуациях программа об этом сообщит. Если программа не нашла имеющийся порт, то его можно выбрать вручную. Такая ситуация возможна, если программа запущена от имени пользователя, а не администратора. Про флаг «AutoConnect» я уже упоминал – этот флаг включает режим автоматического подключения к порту после его повторного обнаружения в системе, если соединение было потеряно. Правее от этого флажка можно задать таймаут ожидания ответа в мс. В текстовом режиме терминал определяет коней ответа по символам перевода и возврата каретки, но если они не используются или пользователь работает с бинарными данными, то разделителем между пакетами будет временной интервал, превышающий заданное значение. Это удобно, если терминал используется для мониторинга полудуплексной линии связи, например, RS485 Без временного разделителя в окне терминала будет сплошное полотно байтов, а с таким разделителем запросы и ответы будут разнесены по разным строкам в окне лога. В идеале ещё можно будет увидеть время прихода данных с точностью до нескольких миллисекунд.
Справа находятся кнопки управления шрифтом и палитрой окна лога. Есть кнопка старта/паузы записи в файл. Далее находится кнопка для остановки окна лога, когда нужно что-то просмотреть. При этом после выхода из режима остановки лога можно убедиться, что запись в главное окно лога не прекращалась.
До момента закрытия программы все изменения шаблонов команд хранятся в оперативке. Если были какие-либо изменения, то программа предложит их сохранить.
Общий вид терминала (версия 3)
С уважением, Иван Абдулхаев.
Скачать программу TetminalTMB v1.10
Скачать программу TetminalTMB v1.13
Изменения в версии v1.14 от 2018.11.26 по сравнению с версией v1.10:
- добавлена отправка команды по Enter (с удалением строки) и по Ctrl+Enter (без удаления строки);
- исправлена ошибка, приводившую к зависаниям программы при работе с некоторыми драйверами (нужно отключить AutoConnect);
- в структуру файла хранения настроек добавлен номер выбранного списка команд;
- добавлена кнопка включения полноэкранного режима просмотра отправляемых и принимаемых данных;
- изменения в интерфейсе;
- продублировано нажатие кнопки переключения режима окна лога двойным кликом по окну.
Скачать программу TetminalTMB v1.14
Изменения в версии v1.15 от 2019.01.29:
- Изменил язык интерфейса на английский (гугл переводчиком);
- Сделал автосохранение содержимого дополнительного поля строки (конец строки) для каждого списка команд.
Скачать программу TetminalTMB v1.15
Изменения в версии v1.16 от 2019.02.04:
- исправлена ошибка сохранения данных дополнительной строки при переключении между текстовым и бинарным режимом;
- добавлена возможность одновременного просмотра лога в текстовом и бинарном виде (кнопка AddW в верхней панели).
Скачать программу TetminalTMB v1.16
Изменения в версии v2.00 от 2020.11.07:
Исправления:
- исправлена ошибка потери каждого 2048 байта в логе при выводе сообщений длиной больше 2КБ;
- исправлена ошибка, приводившая к утечке памяти в объёме сумарного количества выводимых в окно лога данных;
- интерфейс программы перевёл на английский язык.
Новый функциноал:
- добавлен новый режим отправки команд с возможностью настройки временной задержки после каждой отправленной команды;
- добавлена возможность отображения фактического числа принятых или отправленных байтов в каждом сообщении лога;
- несколько дополнительных сведений и кнопок для удобства работы с терминалом.
Скачать программу TetminalTMB v2.00
Изменения в версии v2.02 от 2020.12.02:
Исправления:
- входной буфер увеличен с 1.5 до 60Кб, что позволяет выводить в окно лога сообщения соответствующего размера без разбивки на части;
- изменено условие для автоматической очистки окна лога, т.е. вместо числа полученных сообщений подсчитывается число байт;
- изменён алгоритм буферизации окна лога при его остановке, что повысило стабильность работы терминала.
Новый функциноал:
- добавлен режим захвата сообщений, когда автоматически прекращается прокрутка лога, если в сообщениях появится нужный набор символов.
Скачать программу TetminalTMB v2.02
Изменения в версии 2.04 от 2020.12.22:
Улучшения:
- доработан интерфейс: на главном окне добавлена кнопка отображения/скрытия статистики, на дополнительном окне со списками команд добавлена кнопка разворачивания всего списка названий групп команд для быстрого выбора;
- добавлено автосохранение режима работы с командами (ASCII или HEX) для каждого списка команд.
Скачать программу TetminalTMB v2.04
Изменения в версии 2.11 от 2020.12.29:
Скачать программу TetminalTMB v2.11
Изменения в версии 2.14 от 2021.01.22:
Улучшения:
- добавлена возможность работы с портами COM10-COM256;
- доработана логика работы со списком дополнительных команд;
- добавлена возможность выбора скорости порта выше 115200 и возможность ручного ввода в окне выбора нестандартной скорости;
- добавлена привязка размера главного окна к разрешению дисплея, если оно меньше размеров окна программы;
- список ранее отправленных команд увеличен с 50 до 200;
- максимальное число команд из файла увеличено с 500 до 5000;
- множество несущественных улучшений и исправлений.
- добавлен алгоритм фильтрации списка ранее отправленных команд;
- добавлена настройка шрифта в окнах вывода лога;
- добавлена возможность отправки файлов размером до 1 МБ.
Новый функционал:
Поподробнее об изменениях.
Окно работы со списком дополнительных команд сделал немодальным, что позволяет независимо работать с консолью из главного и дополнительного окна. Т.е. можно в дополнительном окне настроить автоматическую отправку команд, а в главном окне команды отправлять вручную или наоборот. Настройки дополнительного окна команд отвязал от настроек главного окна и теперь дополнительные команды можно отправлять в том режиме, который указан для конкретного списка команд (HEX или ASCII). Получаемые данные в окне лога отображаются в том виде, который указан на главном окне (HEX или ASCII). Дублирующие кнопки управления главным окном с дополнительного окна убрал за ненадобностью, что позволило упростить интерфейс и логику работы терминала.
Скорость порта теперь можно задавать любую при ручном вводе, но работоспособность порта при выбранной скорости нужно проверять экспериментально. Значение выбранной скорости будет сохраняться в файле конфигурации.
Алгоритм фильтрации ранее отправленных команд позволяет ещё быстрее найти команду, если написать первые несколько символов и нажать стрелку вниз, после чего отобразится список команд для выбора с совпадающим началом.
Настройка шрифта окна лога позволяет выбрать нужный размер, цвет и стиль шрифта, но терминал может работать не со всеми стилями шрифтов. Если стиль не поддерживается, то сохраняются только настройки цвета и размера.
Совместимости с предыдущими настройками программы нет, поэтому сбросятся настройки цвета, порта, скорости и т.д., но списки команд для главного (макросов) и дополнительного окна не изменятся. Также удалится список ранее отправленных команд, отображаемых в окне подсказок при вводе вручную.
Добавлена возможность отправки в порт любого файла размером до 1 МБ. Файл отправляется сразу после выбора блоками по 64 байта, если порт открыт. В окне лога отображается процесс отправки в HEX-виде. Для просмотра в ASCII следует включить дополнительное окно лога. Процесс отправки можно остановить в любой момент соответствующей кнопкой или закрытием порта.
Скачать программу TetminalTMB v2.14
Изменения в версии 2.25 от 2021.02.06:
Улучшения:
- добавлена возможность включения окна лога отправленных команд;
- доработана логика настройки шрифта: в диалоговом окне при открытии устанавливаются текущие настройки;
- добавлена возможность настройки директорий для сохранения логов и быстрого поиска файлов с командами и данными (длина пути не больше 250 символов);
- изменена логика работы алгоритма логирования: при старте записи в файл предлагается задать префикс имени файла, при остановке записи предлагается открыть файл лога;
- добавлена возможность запуска блокнота для просмотра текущего файла лога или любого ранее сохранённого;
- доработан интерфейс главного окна: шрифт на кнопках дополнительных настроек и режимов меняется на подчёркнутый жирный, пока активно соответствующее открытое окно;
- доработана логика настройки режимов фильтрации и захвата.
Скачать программу TetminalTMB v2.25
Программа обновлена 10.02.2021
Иван Абдулхаев | 12.11.2018 | Программы |
Дмитрий пишет 30.11.2018 в 20:09 #
Что то версия 1.14 подглючивает
Подключил переходник на CP2102 замкнул RX TX
При отправке в ASCII всё нормально приходит
А в режиме HEX если написать вот так вместе приходит:
[ 18:07:32:068 > ] AABBCCDDEEFF
[ 18:07:32:092 < ] AA BC DD EF
Иван Абдулхаев пишет 03.12.2018 в 14:17 #
Это не глюк. Бинарные числа нужно записывать через пробел или через какой-нибудь разделитель. Программа считывает символы 1-2, 3 пропускает, 4-5, 6 пропускает. Выводит HEX-числа через пробел. Т.е. в Вашем случае нужно отправить строку AA BB CC DD EE FF или AA|BB|CC|DD|EE|FF, или AA»BB»CC»DD»EE»FF. Каждый третий символ программа воспринимает как разделитель и игнорирует.
Сергей пишет 25.01.2019 в 12:32 #
Хорошая программа, спасибо!
Даже немного «донатнул», так сказать на последующую разработку.
Давно искал более-менее адекватную замену Comport Toolkit.
Terminal v1.93b как-то не прижился у меня. А у Comport’a ценник не адекватный ИМХО.
Из ‘хотелок’, чтобы хотелось видеть в обновлениях:
1. Иногда хочется, одновременно видеть в получении HEX строку и ASCII. (у вас же, только по отдельности)
2. Перенос строки в получении делать по выбору. например только 0А, или только 0D, или только по времени, по аналогии с Comport Toolkit, т.е. выбирать галками критерий переноса.
3. В файл команд добавить оператор задержки между строками(командами). Поскольку иногда необходимо передавать строки с разными интервалами задержки. У вас же все интервалы одинаковые.
4. В макросы добавить возможность выбора дополнять /r/n или нет. Пока при выборе передачи ASCII, сразу добавляется 0D, а это не всегда нужно, приходится помнить для каждого устройства нужен перенос или нет.
5. А так же, штамп времени в получении ставить для каждой новой строки.
6. Ну и возможность работы с комами выше com9.
А так вполне хорошая программа, спасибо за труд !!!
Иван Абдулхаев пишет 25.01.2019 в 16:06 #
Спасибо за отзыв и за перечисленную приятность!
1. Одновременное отображение HEX и ASCII возможно сделать — это вопрос наличия свободного времени.
2. Критерий переноса тоже можно добавить. Сейчас перенос по таймауту имеется в HEX-режиме.
3. Можно что-нибудь придумать на все случаи, у меня не было необходимости отправлять через разные интервалы.
4. Тут можно наделать макросы в HEX-виде, но и ответ будет приходить в HEX.
5. Штамп времени добавляется всякий раз, когда читается приёмный буфер, а в нём могут накопиться несколько ответов, поэтому не всегда можно добавить штамп к каждому ответу. Проще будет, если сам прибор к ответам будет приклеивать время.
6. У меня старинная версия Delphi седого 2002 года, в которой только до ком9 порты имеются.
Как дойдут руки до следующей версии, так через автора сайта выложу тут.
Сергей пишет 25.01.2019 в 23:46 #
Я так же лет 7 назад писал терминал для работы с конкретным прибором, на Delphi 7 (2002г), используя компонент BComPort. Пришлось Pascal со школы вспоминать.
Вот думал опять вспоминать все и писать универсальный терминал, но увидел твою программу, которая меня в принципе, устроила.
А вы случайно не этот же компонент использовали ?
Иван Абдулхаев пишет 26.01.2019 в 16:33 #
Данный компонент не использовал, пользовался только обычными функциями работы с COM-портом ( http://www.delphimaster.ru/articles/comport2/ )
Начинал писать терминал для работы с GSM-модулем, затем всё больше и больше требовалось универсальности. Если дойдут руки, то сделаю в терминале возможность просмотра обмена по виртуальному COM-порту (монитор COM-порта). Бесплатных программ с данной функцией в сети я не нашёл. Это значит, что нужно писать самому 🙂
Иван Абдулхаев пишет 26.01.2019 в 21:25 #
«4. В макросы добавить возможность выбора дополнять /r/n или нет. Пока при выборе передачи ASCII, сразу добавляется 0D, а это не всегда нужно, приходится помнить для каждого устройства нужен перенос или нет. »
Можно сделать для каждого списка команд свой конец строки. В этом случае можно будет группировать команды по признаку наличия или отсутствия переноса, формата контрольной суммы и т.д.
Эдуард пишет 11.10.2019 в 01:53 #
Доброго времени суток!
Спасибо за труд, и возможность другим пользоваться вашей программой!
Я не спец, но кое что понимаю, и паяльник в руках держать умею).
Пришло с Али PL2303 PL2303HX USB к UART
Заказал для эксперимента по прошивке приставки.
Но, что первый адаптер, что второй не получается послать сообщение для проверки на само себя.
rx с tx перемкнул.
Драйвер установлен, в диспетчере нет вопросов.
В вашей проге запущенной от имени администратора видно что вроде бы сом порт подключён-найден сом1
Но в последней версии 1,16 вашей проги мужик начинает ругаться, Открой порт!
Что посоветуете?
Эдуард пишет 11.10.2019 в 01:54 #
Windows 10 64bit
Иван Абдулхаев пишет 11.10.2019 в 12:47 #
В диспетчере выбери COM-порт, далее на правую кнопку мышки, в меню выбери «Отключить» и затем обратно «Включить». Обычно помогает. Если не получится, то в свойствах COM-порта выбери «Параметры», затем «Дополнительно…» и поменяй номер порта на COM1..COM9. Винда может поругать, но не обращай внимания. Другие терминалы подключаются к порту? Стабильность работы может даже зависеть от качества кабеля и питания. Переходник USB-COM за 300 рублёв будет работать явно хуже переходника за 3000.
Эдуард пишет 11.10.2019 в 22:49 #
Порты менял уже.
Только драйвер осталось попробовать поменять.
Не оди и не второй адаптер не видит порт, вроде так.
Уже и правило создал в виндовс и перезагружал один фиг.
Не знаю что ещё, только попробовать под вин7.
Иван Абдулхаев пишет 14.10.2019 в 20:41 #
Если ни один терминал для работы с ком-портом не видит твой девайс, то попробуй поменять его или подключись к другому компу. Тут неисправность логично искать только методом замены.
Эдуард пишет 16.10.2019 в 09:52 #
В том то и дело что комп новый!
NUC 6i3 проц 6100
Эдуард пишет 16.10.2019 в 09:56 #
десктоп просто сейчас разобран(, по причине обновления материнки и проца. С 775 asus P5QL-P q9400 и 8gb на 1151 пока g4400 8gb (просто валялся у меня).
Воха пишет 08.08.2020 в 03:20 #
Жалко не нашёл как включить русский язык, очень мало программ с поддержкой UTF-8 ((
Иван Абдулхаев пишет 08.08.2020 в 16:08 #
Мне пока не попадался комп, на котором буквы отображались бы вопросительными знаками, но показывали скрины. Это имеете ввиду?
Владимир пишет 29.08.2020 в 16:59 #
сом порты до девятого- это мало, у меня свисток на 33, остальные заняты
Иван Абдулхаев пишет 20.09.2020 в 01:56 #
Дальше COM9 моя версия делфи не видела, заморачиваться не стал. Всё же не коммерческий софт писал, а для себя на скорую руку. Если сильно нужно, то можно переназначить ком-порт на доступный.
technik-1017 пишет 24.01.2021 в 14:47 #
Для своих программ на Delphi при работе с COM-портом (в том числе и аналогичной вашей) я использовал компонент CPort-3.10. Он позволяет работать с портами выше COM9. А вообще при обращении к портам выше COM9 используется строка «\\.\COM55», в данном компоненте данное обращение используется по умолчанию.
Мою программку для работы с COM-портом, можно посмотреть здесь
https://ru.files.fm/u/mubye7uqj#/list/
может, какой-нибудь функционал из неё добавите в свою программу
Иван Абдулхаев пишет 25.01.2021 в 11:26 #
С удовольствием посмотрел бы, но в процессе моей регистрации по ссылке у них что-то сломалось и мне предложили обратиться в техподдержку.
Иван Абдулхаев пишет 25.01.2021 в 11:31 #
Не могли бы Вы прислать на почту, указанную в программе?
technik-1017 пишет 25.01.2021 в 21:35 #
Не нашёл вашей почты. Вы должны видеть мою почту скиньте тестовое письмо. По ссылке регистрация не требуется, это файлообменник, наводите мышь на строку файла, появляются значки, выбираете «стрелка вниз», это «скачать»
Иван Абдулхаев пишет 25.01.2021 в 22:16 #
Похоже на узкоспециализированный терминал по конкретную задачу. Тоже крутится идея сделать разную подсветку для отправляемых и принимаемых строк, но пока не сообразил, как это сделать в окне Memo.
Иван Абдулхаев пишет 25.01.2021 в 22:22 #
Ещё вижу, что можно добавить вывод лога отправленных команд и действий пользователя. Скорее всего, сделаю в отдельном окне. Также можно добавить автоматическое прикрепление контрольной суммы MODBUS, т.к. протокол распространённый.
Dmi пишет 12.03.2021 в 13:30 #
Криво отображается интерфейс, внизу постоянно присутствует полоса прокрутки, как будто терминал не развернут во весь экран, и из за этого правая часть окна постоянно скрыта. Работать не удобно.
Иван Абдулхаев пишет 12.03.2021 в 15:27 #
Было бы интересно посмотреть скрин. Пришлите на указанную в программе почту.
Василь пишет 24.03.2021 в 12:54 #
Программа отличная в плане универсальности и интуитивно понятна!
Можете добавить алгоритм расчёта контрольной суммы modbus?
Иван Абдулхаев пишет 24.03.2021 в 13:19 #
В новой версии добавлена. Если нужно, то могу отправить Вам на почту. Напишите на ту, которая указана в программе. Автору сайта отправлю после того, как добавлю все текущие идеи.