Терминал для работы с COM-портом TerminalTMB

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Представляю на обозрение терминал для работы с COM-портом. Уверен, что с данным портом многие знакомы с детского сада, поэтому не буду останавливаться на нём, а перейду сразу к терминалу. Идея создания данного терминала появилась во время утомительного набора команд в консольной строке при работе с GSM-модулями. Дальше - больше.

Программа обрастала новыми возможностями и функционалом. От аналогичных программ данный терминал отличается широким функционалом. Программа сильно упростит процесс разработки приборов, которые так или иначе используют UART. Например, всевозможные GSM- и GPS-модули, датчики с выводом данных по RS232/485, приборы с эмулятором COM-порта через USB, беспроводные модули связи c выходом RS232 и т.д. Описание данного терминала имеется на просторах сети, но за 2-3 года с момента публикации оно потеряло свою актуальность.

Возможности терминала

  • удобное хранение и использование в сумме до 4800 макросов, разбитых на 100 списков с полным описанием каждого макроса + 200 списков по 216 макросов на дополнительной форме.

  • работа в HEX, ASCII и DEC режиме на передачу и в HEX, ASCII, DEC и CUSTOM на приём;

  • 4 режима отправки команд или файлов из консольной строки: ручной, периодический, после ответа и при нажатии на кнопку с макросом;

  • режим побайтной ручной отправки содержимого консольной строки в порт;

  • отправка команд или файлов по нажатию настраиваемых “горячих клавиш”;

  • отправка команд или файлов с использованием джойстиков;

  • отправка команд или файлов из списка файла команд;

  • отправка файлов размером до 16 МБ;

  • отправка списков команд с настраиваемыми временными интервалами;

  • автоматический расчёт настраиваемых контрольных сумм при отправке команд;

  • эмулирование ответов на запросы (до 320 запросов по 16 возможных ответов на каждый запрос, конфигурации можно сохранить и прочитать из файла);

  • режим прямой отправки кодов символов с клавиатуры в момент нажатия клавиш;

  • настройка условий для разделения строк;

  • настройка условий для очистки лога;

  • одновременный просмотр лога в HEX, DEC, CUSTOM и ASCII-режимах;

  • фильтрация сообщений перед выводом в лог;

  • захват нужных подстрок с остановкой прокрутки лога;

  • настройка условий для автоматического разворачивания окна терминала из свёрнутого состояния;

  • ведение статистики;

  • логирование событий в файл;

  • запись текстового и бинарного лога с любым расширением;

  • настройка цветов и шрифтов, возможность быстрого поиска по началу введённой команды из списка ранее отправленных;

  • вывод лога через прямой и инверсный фильтр, когда нужно выводить сообщения с заданной подстрокой или игнорировать только их;

  • контроль и индикация прекращения поступления данных в порт в течение заданного времени;

  • отправка пакетов длиной от 1 до 32 байт с перебором всех возможных комбинаций из разрешённых байтов для каждой позиции в случайном или последовательном виде;

  • настраиваемые парсеры для бинарного режима приёма с конвертированием в переменные любого типа: uint8, int8, uint16, int16, uint32, int32, uint24 и float.

  • вывод графика любого параметра, полученного с помощью парсера. Вывод графика возможен в режиме плоттера и в режиме осциллографа. Данные каждого параметра буферизируются в кольцевом буфере (512 000 точек) для возможности просмотра графика любого параметра с предысторией.

  • возможна работа одновременно до 3200 парсеров (200 списков по 16 парсеров) с выводом результата в лог и/или в файл;

  • работа с двумя дополнительными портами только на чтение;

  • возможность организации сниффера физического или виртуального COM-порта с получением лога обмена в удобном виде.

    Встроенные утилиты:

  • сравнение бинарных файлов;

  • генератор случайных и последовательных чисел.

Первый запуск программы

После копирования программы в пустую папку и её запуска создаются несколько пустых файлов для хранения настроек конфигурации, ранее отправленных команд и макросов, после чего открывается главное окно программы:

Главное окно программы после первого запуска
Главное окно программы после первого запуска

Настройки порта

При нажатии кнопки “Port” выполняется считывание существующих портов из реестра OC Windows, затем предлагается выбрать нужный порт для подключения. Первым в списке предлагаемых портов будет последний использованный, если такой был.

Настройки порта
Настройки порта

В открывшемся окне будет предложено выбрать порт и задать его настройки. Если скорость порта нестандартная, то в соответствующем окне можно вручную ввести необходимое значение. В настройках порта имеются две опции для настройки автоматического соединения. Первая нужна для случая, когда порт временно пропадает из системы и заново появляется в ней, например, при перезапуске микроконтроллера устройства или при переподключении кабеля USB. Вторая опция настройка автоматического соединения отвечает за автоматическое нажатие кнопки Connect после запуска терминала. В этой ситуации вероятна ситуация, когда терминал намертво зависнет (порт прописан в файле конфигурации, но из системы удалён вместе с переходником usb-com) и потребуется нажать три кнопки, но после данного способа выхода при повторном запуске эта опция будет отключена. Также здесь имеется возможность включить программное инвертирование каждого бита в принимаемом и отправляемом байте, например байт 0b11010000 будет представлен как 0b00101111. При включении реверсивного представления байтов происходит зеркальное преобразование: 0b11010000->0b00001011.  Данные опции очень редко используются, поэтому в файле конфигурации не сохраняются.

Если настроить автоматическое соединение при каждом появлении порта в системе и включить опцию отправки команды при соединении, то можно заметно уменьшить количество лишних движений, когда в каждый из десятков приборов нужно отправить одну и ту же команду или последовательность команд из файла. Все действия сведутся только к поочерёдному подключению кабеля к каждому прибору.

Включение автоматической отправки команды при подключении порта
Включение автоматической отправки команды при подключении порта

Работа с логом

Панель работы с логом
Панель работы с логом

На данной панели имеется команда очистки окна лога, окно ввода строки фильтра и настройки реакции программы при получении пакета, содержащего в себе заданную последовательность.

Miss не выводить сообщения, содержащих подстроку из окна фильтра;

Out – в окно лога выводятся только те пакеты, которые содержат указанную подстроку;

Capt – при появлении пакета с заданной подстрокой окно лога останавливается;

No – никакое действие не выполняется (на случай, если нужно временно отключить фильтр);

Skip Reps – пропуск повторяющихся пакетов, т.е. если новый пакет идентичен предыдущему, то он не выводится в лог.

 В окне статистики работы терминала отображается значение счётчика полученных подстрок, заданных в фильтре:

Окно статистики лога
Окно статистики лога

Для отображения данной статистики нужно нажать соответствующую кнопку “S”:

Включение режима отображения статистики
Включение режима отображения статистики

Всё это даёт большие удобства, когда нет возможности постоянно следить за логом работы какого-либо прибора, отлавливая глазами нужное сообщение или выполняя его поиск в ранее записанном файле лога, когда уже всё пропало и прибор испустил дух.

 “||” - кнопка остановки лога с последующим просмотром в отдельном окне, при этом в главном окне запись лога будет продолжаться. Для возврата в главное окно лога нужно нажать данную кнопку ещё раз (в это время на ней будет символ “>”).

Старт/стоп вывода лога
Старт/стоп вывода лога

Настройки программы  

Кнопки меню функций терминала
Кнопки меню функций терминала

Start log – кнопка запуска записи лога. После её нажатия будет предложено ввести префикс названия файла, выбрать тип записываемого файла и записываемые данные: отправляемые и/или принимаемые данные для каждого записываемого файла.

Меню настроек сохранения лога
Меню настроек сохранения лога

Текстовый файл сохраняется в том виде, как его видно в окне лога без учёта фильтра. В бинарный файл сохраняются только те данные, которые были отправлены или получены из порта. Если задать расширение .exe, то можно таким образом принимать исполняемые файлы, которые можно затем запускать.

После завершения записи лога будет предложено открыть записанные файлы для просмотра в блокноте.

Окно открытия файла лога
Окно открытия файла лога

Файлы логов также можно просмотреть до остановки записи, нажав одну из соответствующих кнопок:

Окно открытия файла лога
Окно открытия файла лога

При нажатии данных кнопок откроется проводник для выбора файла, при этом в качестве пердвыбранного будет задано имя текущего файла.

Second Window – включение второго окна вывода лога, в котором можно указать режим вывода (ASCII, HEX, DEC или CUSTOM) и направление выводимых сообщений (TX и/или RX). Для отправляемых пакетов (TX) отображается только режим ASCII и HEX. На скрине показан пример использования дополнительного окна, когда в левом окне отфильтрованный лог, а в правом полностью весь лог отображается. В левом окне запрещено выводить сообщения, содержащие подстроку “AT+”, в правом окне настроен вывод только прочитанных сообщений и только в формате ASCII. Включена опция игнорирования фильтра, чтобы выводить полный лог. Окно настроек дополнительного окна открывается при открытии этого окна.

Дополнительное окно лога
Дополнительное окно лога

Add Menu – отображение дополнительных пунктов меню настройки программы и включения дополнительных режимов программы.

Дополнительные функции и настройки терминала
Дополнительные функции и настройки терминала

Log window sett. – выбор фонового цвета окна вывода лога, размера и цвета шрифта для отправляемых и принимаемых пакетов, выбор цвета фона для сигнализации прекращения поступления новых данных в порт в течение заданного времени (например, ситуация обрыва линии);

Forms color – выбор цвета главной и дочерних форм на случай, когда запущено одновременно несколько копий терминалов;

Monitor mode/Dialog mode – скрытие/отображение нижней панели программы;

Описание нижеперечисленных кнопок будет в следующих разделах руководства:

Answer emulator – режим эмулятора ответов в ответ на приходящие запросы;

Cmd list mode – режим отправки списков команд с заданными интервалами;

Fast send mode – режим прямой отправки кодов клавиатуры в порт;

Directories – настройки директорий хранения файлов, используемых программой;

Sent commands – окно отправленных в порт данных;

Packet generator – перебор комбинаций из разрешённых комбинаций в пакете нужной длины;

Parser HEX – работа с парсером в бинарном режиме приёма входящих пакетов;

Add. macros – форма со списками дополнительных макросов;

Utilites – дополнительные полезные подпрограммы;

Statistic – статистика прочитанных и отправленных байтов;

Add ports – работа с дополнительными портами на чтение;

CUSTOM Decod – таблица представления данных в логе вывода для режима чтения  CUSTOM;

Line separator – настройка разделителя пакетов для отображения в логе;

Autocleaning – настройки автоочистки окна лога;

Buffer FIFO – работа с входным приёмным буфером;

Event alert – настройка отслеживаемых событий;

Event log – логирование событий и работы терминала;

ASCII table – таблица ASCII, актуальная для данной версии Windows.

Отображение лога

Лог
Лог

Имеется возможность выводить лог в текстовом, бинарном, десятичном и пользовательском режиме, а при необходимости в нескольких режимах. Режим вывода можно менять для главного и для дополнительного окна, в дополнительном окне можно одновременно выводить данные в нескольких режимах и задать опцию для отображения режима вывода каждого пакета наряду с отображением временного штампа и счётчика числа байтов. К каждому пакету можно прикреплять временной штамп со значком направления передачи, именем порта и значение счётчика числа принятых или отправленных байт. Аналогичные дополнительные данные прикрепляются к пакетам в дополнительном окне, что упрощает поиск нужного сообщения, если их нужно посмотреть одновременно в двух режимах.

Вывод дополнительных данных в окно лога
Вывод дополнительных данных в окно лога

Если включена запись лога в файл, то в текстовый лог всё пишется вместе с дополнительной информацией, а в бинарный записываются только отправляемые и принимаемые данные.

Режим отправки пакетов

Имеется возможность задать один из нескольких режимов отправки содержимого консольной строки в порт:

Manual – только ручная отправка по нажатию Enter (с очисткой строки), Ctrl+Enter(без очистки строки) или соответствующей кнопки отправки команды справа от окна ввода хвоста команды. Содержимое консольной строки меняется вручную или при нажатии соответствующей кнопки с макросом.

When choosing – отправка команды сразу после нажатия кнопки с соответствующим макросом, при этом содержимое консольной строки не изменяется, что позволяет без лишних движений повторно отправлять вручную содержимое консольной строки.

After answering – отправка содержимого консольной строки сразу после получения ответа на предыдущую команду или после прихода любых данных в общем случае. Содержимое консольной строки можно менять вручную или нажатием соответствующей кнопки с макросом. На частоту отправки команд влияет время, указанное в качестве разделителя строк, указываемое в дополнительном меню (Line separator). 

Periodic – периодическая отправка содержимого консольной строки в порт с заданной периодичностью. Точность выдержки периодичности в пределах 10-30 мс, поэтому относительно точно период отправки будет выдерживаться при его значении больше 1000 мс. Содержимое консольной строки в данном режиме можно менять вручную или с помощью кнопок макросов.

Byte by byte – побайтная отправка содержимого консольной строки в порт. Данный режим удобно применять для отладки софта или прошивки. Каждый очередной байт пакета отправляется при нажатии Ctrl+Enter или при нажатии соответствующей кнопки.

Данные режимы отправки актуальны и при отправке команд из файла, в котором каждая команда записывается в текстовом виде с новой строки.

Выбор файла команд
Выбор файла команд

После выбора файла с командами можно организовать их отправку разными способами в зависимости от выбранного режима На скрине ниже показана кнопка, которая в режиме отправки команд из файла при каждом нажатии отправляет следующую команду.

Отправка следующей команды из файла
Отправка следующей команды из файла

В ручном режиме (Manual) содержимое консольной строки меняется при клике мышкой по соответствующей строке с командой, далее отправка выполняется любым способом вручную, но для минимизации движений при последовательной отправке команд имеется отдельная кнопка, которая при каждом нажатии отправляет в порт следующую команду из файла.

В режиме отправки при выборе (When choosing) в консоль отправляется сразу же та команда из файла, по которой кликнули мышкой.

В режиме отправки “после ответа” (After answering) в консоль отправляется следующая команда из файла после получения ответа на предыдущую, что удобно, например, когда нужно отправить сразу несколько команд, на каждую из которых обязательно нужно получить ответ. Начинать процесс отправки нужно ручной отправкой первой командой. В данном режиме можно задать циклическую отправку команд, когда все команды из файла будут отправляться по кругу бесконечно.

В режиме периодической отправки (Periodic) все команды из файла отправляются по очереди с заданным интервалом вне зависимости от получаемого ответа на предыдущую команду. Аналогично можно задать циклическую отправку в данном режиме.

Файл команд нужно обязательно завершать переходом на новую строку в конце файла.

 Если задана опция “Send on connect”, то содержимое консольной строки отправляется в порт сразу после установки соединения, а дальше алгоритм отправки задаётся настройками режима отправки. Данная опция позволяет отправлять в порт при соединении не только содержимое консольной строки, но и файл команд, если он выбран и настроен нужный режим отправки. Вместе с опцией первого вида автоконнекта в настройках порта можно настроить такой алгоритм отправки, когда консольная строка или файл команд будет отправляться в прибор автоматически при подключении USB-кабеля.

Консольная строка

Пакет для отправки данных формируется из содержимого консольной строки и “хвоста сообщений”, которые склеиваются вместе перед отправкой. Для отправки консольной строки нужно нажать Enter, если нужно отправить строку с очисткой содержимого или Ctrl+Enter, если очищать не нужно. Нажатие стрелки вверх при нахождении фокуса ввода в консольной строке будет выполнена очистка окна лога. Нажатие стрелки вниз развернёт окно с историей ранее отправленных команд, начало которых совпадает с частично введённой командой. Если консольная строка пуста, то нажатие стрелки вниз отобразит все ранее отправленные из консольной строки команды (всего запоминается не более 500, повторно отправляемые команды в данный список не добавляются, а ранжируются в списке так, что в верхней строке списка будет последняя отправленная строка). Длина строки консоли не должна превышать 65000 символов для текстового режима и 205000 символов для бинарного.

“Хвост сообщений” – это та сущность, которая всегда добавляется к содержимому консольной строки. Если нужно добавить одно или несколько шестнадцатеричных чисел, то они записываются в виде $XX$YY$ZZ. Если нужно добавлять смешанные данные, то пример хвоста будет такой “text cmd$0D”, также имеется возможность вставки в хвост сообщений шаблона контрольной суммы, рассчитываемого по одному из алгоритмов, например для NMEA-сообщений шаблон будет следующий: “*[XOR_8 (1..n)]$0D$0A”

Данные в консольной строке отправляются в том виде, который задан для отображения лога: ASCII или HEX. Всё ранее написанное было справедливо для текстового режима. При отправке данных из консоли в HEX-режиме строка формируется из двоичных чисел в формате XX через пробел, например “70 77 64 20 31 32 33 34 35 3B 65 63 68 6F 20 6F 66 66 2A 37 37 0D ”, в аналогичном виде формируются строки файла команд, содержимое макросов и содержимое хвоста команд.

При формировании HEX-команды в самом конце следует добавлять пробел, если предполагается прикрепление “хвоста сообщений” (В новой версии терминала необязательно).

В хвост сообщений тоже можно добавлять один или несколько шаблонов контрольных сумм (для извращений) через пробел, например:

В логе выделена та часть отправленного сообщения, которая сформировалась из шаблона контрольной суммы и одного байта в хвосте сообщения, полученный ответ видно в режиме ASCII, как указано в настройке отображения прочитанных данных.

Макросы

 В программе имеется возможность сохранения макросов, организованных в виде списков, число которых может быть не больше 100. Всего на главной форме в сумме можно хранить до 4800 макросов с их описанием.

Макросы
Макросы

Макросы могут отображаться в виде списков команд или списков названий макросов (жирный шрифт), соответствующий режим выбирается радиокнопками справа от названия списка. При наведении указателя мышки на активный макрос в подсказке отображается содержимое команды или имя макроса в зависимости от выбранного режима отображения. В прямоугольном поле справа может выводиться справочная информация по каждому макросу. Для удобства пользователя макросы можно редактировать. Редактирование может быть простым, когда можно поменять название и содержимое и расширенным, когда дополнительно можно редактировать справочную информацию.

Для переключения в режим простого редактирования нужно выбрать вкладку “Edit”.

Редактирование макросов
Редактирование макросов

В данном режиме можно менять название списка макросов их имена и содержимое, доступно перелистывание списков и переключение между режимами отображения команды и имени. Для каждого списка макросов сохраняется свой хвост сообщений и свой режим работы (ASCII или HEX). Для режима HEX команды записываются в том же виде, как в консоли для данного режима, например: “11 22 33 44 55 0F AB CD ” с обязательным добавлением пробела в конце, если предполагается прикрепление хвоста сообщений.

Для переключения в режим расширенного редактирования макроса нужно на соответствующем макросе дважды кликнуть мышкой, после чего откроется нужное окно редактора:

Форма для расширенного редактирования макросов
Форма для расширенного редактирования макросов

На главном окне в правом нижнем углу будет отображаться результат редактирования в том виде, в котором он будет виден при наведении указателя мыши на редактируемый макрос. Вместо команды к макросу можно привязать любой файл для отправки, который выбирается после нажатия кнопки “Send file…”. После выбора файла автоматически сформируется и сохранится нужная команда для отправки файла в порт. Данную команду можно редактировать вручную и использовать в других режимах работы терминала, например в режиме эмуляции ответов, когда в качестве возможного ответа нужно отправить какой-либо файл, например файл с расписанием спутников, используемый в режиме AGPS навигационных модулей. Во время отправки файла терминал может сделать вид, что завис, но это не так. После завершения отправки терминал вернётся в рабочее состояние.

Отправка файлов

 Имеется возможность отправки файлов в порт по нажатию отдельной кнопки. Размер файла при этом не должен превышать 16 МБ. При отправке файла можно видеть лог отправки всегда в HEX-виде и статистику процесса в правом нижнем углу, которая отображается по нажатию кнопки отображения статистики “S” (Надпись поменяется на “H” – “Help”).

Отправка файлов
Отправка файлов

После выбора файла его содержимое копируется в буфер оперативной памяти и на это время возможно временное зависание программы, после чего начнётся процесс отправки, который можно прервать или приостановить в любой момент закрытием порта или нажатием соответствующей кнопки.  

Работа с «горячими клавишами»

 Данный способ отправки команд удобно использовать, когда нужно разные команды отправлять быстрыми последовательностями и быстро между ними переключаться, например, при управлении видеокамерой.

Для работы с горячими клавишами фокус ввода должен быть в главном окне лога или на кнопке отправки команды (под флажком включения режима работы с горячими кнопками).

Нажатие горячей кнопки имитирует нажатие кнопки с соответствующим макросом. Далее логика работы зависит от выбранного режима отправки команд. Здесь уместнее будет включить режим отправки по нажатию кнопки (When shoosing).

Настройка "горячих" клавиш
Настройка "горячих" клавиш

Работа с джойстиками

Каждый макрос можно привязать к коду комбинаций нажатых кнопок на джойстике (не больше двух кнопок). Каждые 20-50 миллисекунд выполняется проверка совпадения текущего состояния кнопок джойстика с заданным для каждого макроса. Если совпадение имеется, то выполняется нажатие кнопки с макросом. Нажатие можно задать однократным (Single Action) или многократным (Multipli Action), пока нажата нужная комбинация кнопок на джойстике. Режим отправки команд следует выбрать "Отправлять по нажатию". Для настройки нужной комбинации нужно по двойному клику открыть окно настройки джойстика для соответствующего макроса, указать номер джойстика, нажать нужные кнопки на джойстике и, не отпуская их, нажать мышкой кнопку "Update key", после чего кнопки на джойстике можно будет отпустить. Работа с джойстиком удобна при работе с видеокамерой.

Настройка работы с джойстиками
Настройка работы с джойстиками

Теперь вернёмся к описанию дополнительных режимов работы и настройкам терминала, доступных по нажатию кнопки “Add menu”.

Режим эмулятора ответов (Answer emulator)

Режим эмулятора ответов
Режим эмулятора ответов

В данном режиме можно настраивать списки ответов, возвращаемых в порт после получения целого запроса или его части, начало которого совпадает с одним из заданных в списке входящих пакетов. Для активации данного режима нужно нажать нижнюю правую кнопку со значком “>”. В процессе работы можно на ходу делать активными шаблоны входящих запросов и варианты ответов на них установкой галочки в соответствующем чекбоксе. На скрине показан пример настройки режима автоматической отправки ответов на запросы с использованием только текущего списка запросов. В автоматическом режиме в ответ на запросы будут автоматически отправляться в случайном порядке один из активных ответов именно для конкретного запроса. Для каждого запроса можно задать до 16 возможных ответов. Если число возможных запросов не помещаются в списке, то можно задействовать все списки, установив соответствующий режим. Ответы могут отправляться в текстовом или в бинарном виде, что выбирается соотвествующими радиокнопками слева от каждого возможного ответа. Правило записи бинарных последовательностей такое же, как и для консольной строки, т.е. в виде “XX YY ZZ ” с обязательным наличием пробела в конце строки, если предполагается использование  хвоста сообщений. Хвост сообщений для данного режима задаётся в соответствующих окнах отдельно для каждого возможного ответа. По нажатию стрелки вниз в окне редактирования хвоста сообщений открывается список шаблонов контрольных сумм, а далее алгоритм формирования такой же, как и при работе с консольной строкой.

Внизу окна находятся кнопки редактирования списков и изменения пропорции ширины окон редактирования запросов и ответов. Данный режим можно применять для эмулирования ответов датчиков, возвращающих данные по запросу. Не составит большого труда составить нужный алгоритм работы с GSM-модулем, если задать ответы-команды на каждое синхронное или асинхронное сообщение данного модуля. Ещё одно применение данного режима можно найти при тестировании софта, который должен работать с каким-либо устройством по последовательному порту. В данном случае следует применить пару виртуальных портов com0com, к одному из которых следует подключить тестируемую программу верхнего уровня, а ко второму данный терминал и задействовать этот режим. Ничто не мешает отвечать программе верхнего уровня вручную или с помощью макросов, но в реальном времени это часто бывает сложно делать из-за необходимости быстро отвечать на запросы и вот тут будет очень удобно применять этот режим. Для каждого устройства или программы можно сохранять и загружать свою конфигурацию запросов и ответов. Также в данном режиме вместо отправляемых пакетов можно указывать отправляемые файлы в формате, который формируется при настройке макросов. В качестве ответа на запрос можно настроить отправку файла. Для выбора отправляемого файла нужно дважды кликнуть по строке эмулируемого ответа.

Режим списка команд (Cmd list mode)

Иногда требуется отправлять последовательно несколько команд с разными интервалами времени. Данный режим доступен в терминале по нажатию соответствующей кнопки в дополнительном меню.

Режим списка команд
Режим списка команд

В данном режиме можно формировать список отправляемых команд, после отправки каждой из которых нужно выдержать заданную паузу. Последняя отправленная команда подсвечивается зелёным цветом. Отправка может выполняться вручную или автоматически. В обоих режимах доступными для отправки будут только активные команды. Команды можно редактировать непосредственно в строке или в отдельном окне по двойному клику мыши. Пока ещё несохранённая команда выделяется жирным шрифтом. В отдельном окне редактирования можно также написать краткую справку к каждой команде. Список команд можно отправлять однократно или циклически. Также можно задать диапазон страниц с командами для автоматической  отправки, если команд больше 32. Режим отправки данных (HEX, ASCII или DEC) задаётся отдельно для каждого списка команд. Правила формирования сообщений и хвостов такие же, как и для консольной строки. Данный режим можно применять для отправки асинхронных сообщений в порт совместно с другими режимами работы терминала. Также в данном режиме вместо отправляемых пакетов можно указывать отправляемые файлы в формате, который формируется при настройке макросов.

Режим быстрой отправки команд (Fast send mode)

Режим быстрой отправки
Режим быстрой отправки

Данный режим позволяет отправлять печатаемые символы в порт сразу после нажатия.

Окно просмотра ранее отправленных команд (Sent commands)

Окно ранее отправленных команд
Окно ранее отправленных команд

В данном окне отображаются все ранее отправленные команды и опционально их режим отправки ([H] – HEX, [A] – ASCII, [D] – DEC). Данное окно очищается автоматически и/или вручную при нажатии соответствующей кнопки.

Бывают ситуации, когда главное окно терминала закрывает окно дополнительного режима или окно дополнительного режима не разворачивается. В этом случае в дополнительном меню главного окна нужно повторно нажать на соответствующую кнопку.

Настройки директорий (Directories)

Настройка директорий
Настройка директорий

Для устранения неудобств при поиске нужных файлов имеется возможность настроить нужные пути к файлам разных типов, но будет удобнее хранить их все в одной директории.

Если пути к файлам не заданы, то они будут храниться в директории с программой.

Следующие настройки не открываются в отдельных окнах:

По нажатию каждой из кнопок открывается соответствующая панель с настройками. Для простоты и удобства повествования все эти панели показаны на одном скрине.

Здесь имеются следующие возможности:

  • настроить условия разделения пакетов для вывода следующего в новой строке лога (данная настройка особенно актуальна при работе с парсером HEX-пакетов);

  • настроить условие автоочистки окна лога;

  • сбросить входной буфер, если нет желания томительно ожидать, пока он весь выгрузится в окно лога, также можно настроить условия для автоматического сброса входного буфера;

  • настроить условия регистрации определённых событий и задать возможность автоматического разворачивания окна терминала при наступлении заданного события, что удобно, когда нужно посидеть за чаем в интернетах, но ещё нужнее в это время отслеживать появление нужного сообщения или ситуации в логе;

  • включить/выключить опцию записи лога событий и просмотреть этот самый журнал с помощью блокнота.

Перебор комбинаций пакетов (Packet generator)

Перебор комбинаций пакетов
Перебор комбинаций пакетов

Данный режим предназначен для формирования пакетов заданной длины перебором всех возможных комбинаций выбранных байтов для каждой позиции. Имеются два режима перебора: последовательный и случайный. В режиме случайного перебора на каждую позицию каждого нового пакета выставляется случайный байт из разрешённых для данной позиции.

Это удобно на случай подбора контрольной суммы или пароля, для тестирования реакции прибора на получение различных комбинаций входящих данных. На скрине ниже показан результат работы переборщика в последовательном и случайном режиме.

Два режима перебора комбинаций отправляемых пакетов
Два режима перебора комбинаций отправляемых пакетов

Пример 1: нужно подобрать контрольную сумму для последовательности 11 22 33 44 55 XX

Первый байт указываем 0x11, второй байт 0x22, третий 0x33, четвёртый 0x44, пятый 0x55, а в шестом байте указываем все 256 позиций и запускаем отправку, предварительно задав интервал отправки.

Пример 2: известно, что пароль отправляется в формате "pwd XXXX\r", где X - число от 0 до 9. В этом случае указываем 1-4 байты как "p", "w", "d", " ", затем для каждого из 5-8 байтов выбираем числа от "0" до "9", 9 байт будет 0x0D, затем нажимаем на запуск отправки и любуемся тем, как программа перебирает комбинации. Для приёма входящих ответов можно настроить соответствующие события в меню "Event alert" или в настройках фильтра.

Имеется возможность выбора пределов длины пакета. Длина отправляемого пакета варьируется в пределах указанного диапазона с использованием генератора случайных чисел. Если длина сформированного пакета больше максимальной длины, то отбрасываются байты справа. Если длина меньше минимальной, то количество байт задаётся настройками количеством позиций отправляемых байтов в пакете. Если задать максимальную и минимальную длину 32 байта, то данная настройка никак не повлияет на работу генератора комбинаций пакетов.

Работа с парсером HEX-пакетов (Parser HEX)

Парсер позволяет фильтровать и выделять одновременно до 16 параметров из входящих пакетов в HEX-виде. При настройке парсера следует указать порт источника. Если используется главный порт, то в качестве источника следует указать Port MAIN. Для фильрации указываются сравниваемые байты в позиции от 0 до 15. Если сравниваемый байт не указан, то в данной позиции может быть любой байт. Далее нужно указать тип переменной параметра и указать номера байтов, из которых будет складываться нужный параметр. Нумерация байтов начинается с нуля. Длина входящего пакета может быть любая, но фильтрация будет выполняться по указанным байтам. Всего можно настроить до 200 списков парсеров по 16 параметров. При желании их переключение можно синхронизировать с переключением списков макросов установкой соответствующего флажка (первые 100 списков).

 Примеры:

1. Нужно фильтровать пакеты, начинающиеся на 3E и байты 2,3,4,5 конвертировать в переменную типа float.

Для этого указываем условие совпадения первого байта пакета с числом 3E, длина пакета произвольная или фиксированная (тоже критерий фильтрации), тип переменной - float, далее указываем используемые байты 2,3,4,5 (позиция начинается с нуля). Жмём OK и первый параметр отображается.

2. Нужно фильтровать пакеты фиксированной длины, начинающихся с байтов 11 22 и третий байт выводить в виде переменной типа int8.

Аналогично указываем условие совпадения первых двух байтов , указываем тип переменной int8_t и её позицию 2 (позиция начинается с нуля).

3. Нужно подключиться к линии RS485 и парсить пакеты в режиме монитора. Есть датчик топлива, у которого все запросы начинаются на 0x31, а ответы имеют структуру: 0x3E ADDR CMD TEMP[1] FREQ[2] LEVEL[2] CRC. Т.е. известна длина пакета, первые три байта, тип и расположение параметров в пакете. Для разбора нужных пакетов сначала нужно настроить переход на новую строку по условиям : переход перед байтом 0x31 и переход перед байтом 0x3E. Затем в парсере настроить выделение трёх параметров. Общим для каждого параметра будет фильтр по первым трём байтам и длине пакета в 10 байт. Далее для каждого параметра указываем свои настройки. Для температуры это будет тип переменной int8_t и позиция байта 3. Для частоты и уровня тип переменных будет uint16_t и позиции 4,5 и 6,7 соответственно. Возможно, придётся поменять позиции местами. 

 Парсер не срабатывает в случаях:

1. В качестве источника данных указан не тот порт или в настройках дополнительного порта в качестве приёмника не указан парсер;

2. Входящий пакет не соответствует критериям фильтрации;

3. Позиция одного из извлекаемого из пакета байтов выходит за границы длины пакета;

4. Приём данных ведётся в режиме ASCII.

 Перед использованием парсера нужно сначала настроить критерий перехода на новую строку, если терминал используется в качестве монитора линии передачи данных.

Если прибор опрашивается самим терминалом, то критерии перехода на новую строку и настройки парсера упрощаются.

 В настройках парсера можно указать границы и пороги значений для изменения подсветки параметра в списке и для отображения цветовых зон в области вывода графика в окне графопостроителя. Также можно включить автоматическое разворачивание окна терминала, если значение параметра попало в один из указанных диапазонов.

Пример настройки парсера
Пример настройки парсера

Парсер отслеживает минимальное и максимальное значение каждого параметра. Для отображения данной пары значений нужно кликнуть мышкой в области значения соответствующего параметра. Имеется возможность сброса данной пары значений.

Форма для работы с парсерами
Форма для работы с парсерами

На форме списка парсеров имеются кнопки для открытия окна редактирования, копирования, вставки, удаления конкретного парсера, кнопки открытия окна графопостроителя или окна гистограммы для любого параметра. Данные каждого парсера записываются в свой отдельный буфер с целью вывода графика. Всего буферов 16 по 512000 точек. Буферизация данных возможна только для одного списка парсеров. Данный список указывается радиокнопкой “Use graphis buffers for this parser”. При переключении на другой список парсеров буферизация для выбранного списка не прерывается. Для очистки буфера следует предварительно кликнуть по соответствующей радиокнопке, чтобы активировать кнопку очистки соответствующего буфера. Данное усложнение исключает возможность случайного удаления данных. Имеется возможность сохранения в файл всех настроек списка парсера со всеми буферизированными данными. Данный файл можно будет загрузить обратно с целью просмотра графиков данных и/или продолжения записи данных. Для этого нужно предварительно отключить буферизацию, сняв галочку в чекбоксе “Write plotter data to buffers”, при этом активируются две кнопки справа для загрузки и сохранения списка парсеров с буферизированными данными в файл. Также имеется возможность вести запись лога парсера. При необходимости в лог можно записывать только те строки, в которых имеется выход какого-либо параметра в заданную зону (запись события). Для этого нужно установить галку в чекбоксе “Log only events”

В любой момент времени может работать может только активный список парсеров, список с включенной буферизацией данных и списки, в которых включен вывод данных в окна лога. Если какие-то данные в лог выводить не нужно, то в данных списках парсеров нужно снять галки вывода данных в лог, т.к. это дополнительная нагрузка на процессор. Для сброса настройки вывода результатов в лог сразу для всех списков имеется кнопка “Reset ALL”, для приостановки/возобновления вывода в лог имеется соответствующая кнопка слева от кнопки сброса.  

Для возможности просмотра результата работы парсера имеется соответствующее окно вывода лога работы парсера. Размер шрифта данного окна лога задаётся одновременно с
размером шрифта в главном окне вывода лога.

Лог результата работы парсера
Лог результата работы парсера

Также лог работы парсера можно выводить в главное и дополнительное окно вывода лога на главной форме.

Вывод результата работы парсера в главный лог
Вывод результата работы парсера в главный лог

Графопостроитель

На основе полученных парсером значений параметра можно построить график его изменения. Для отображения графика параметра нужно нажать кнопку “Graph” напротив соответствующего параметра в списке парсеров. На форме вывода графика можно задавать верхний и нижний предел шкалы по вертикали. По горизонтали каждая следующая позиция привязана к каждому входящему пакету.

Вывод результата работы парсера в графическом виде
Вывод результата работы парсера в графическом виде

На форме графопостроителя можно просматривать данные в режиме осциллографа и плоттера. Режим осциллографа доступен в том случае, если для соответствующего списка парсеров включена буферизация данных. В данном режиме график параметра передвигается в левую сторону при каждом получении новых данных, также имеется возможность просмотра ранее буферизированных данных. Имеется возможность запоминать нужную позицию графика кликом мышки по интересующему месту. Время интересующей позиции запоминается и отображается на соответствующей кнопке внизу. Затем можно перейти к графику другого параметра и нажатием кнопки с зафиксированным моментом времени переместить график на нужную позицию. Аналогично можно сделать и перед изменением масштаба. Например, если нужно найти интересное место на графике, то можно его сжать по горизонтали, кликнуть на интересующее место графика, затем растянуть график по горизонтали и нажать на кнопку перемещения в нужную позицию. Это избавляет от необходимости ручной прокрутки графика, которая может занимать много времени.  

В режиме плоттера отрисовка графика выполняется слева направо с последующей перерисовкой при достижении правого края окна вывода графика. Данный режим имеет максимальное быстродействие ввиду отсутствия необходимости перерисовки всего графика при получении очередного значения параметра.

Далее на скрине показана форма графопостроителя со всеми настройками и кнопками управления. Размеры формы можно менять вручную с помощью мыши.

Окно графопостроителя
Окно графопостроителя

Если нажата кнопка паузы вывода графика, то буферизация данных будет продолжаться, если она не приостановлена снятием соответствующей галки буферизации данных.

Включение/выключение буферизации данных графопостроителя
Включение/выключение буферизации данных графопостроителя

В этом случае форма графопостроителя будет оранжевого цвета. В режиме осциллографа после приостановки можно прокручивать график влево и вправо. При наведении курсора в определённое место графика в правом верхнем углу на зелёном фоне будет отображаться время и значение для той точки, на которой находится указатель мыши в данный момент.

Если в процессе просмотра графика в режиме осциллографа параметр вышел за границы окна вывода или весь график по вертикали уменьшился до размеров в несколько пикселей, то следует переустановить галку “Autosize”. Возможно, это нужно будет сделать несколько раз.

При открытии окна “Chart” в реальном времени выводится гистограмма распределения значений параметра.  

Окно отображения гистограммы распределения значений параметра
Окно отображения гистограммы распределения значений параметра

В данном окне можно менять границы и шаг гистограммы. Можно сбрасывать текущую гистограмму, но при передвижении или при изменении масштаба будет выполнен пересчёт на основе всех ранее буферизированных данных, если буферизация включена. Если интересно сбросить текущую гистограмму, то нужно предварительно установить нужную позицию и масштаб по горизонтали, сбросить гистограмму и больше не менять смещение и масштаб по горизонтали. Столбец с последним значением параметра подсвечивается зелёным цветом. Если значение параметра не попадает в текущее окно, то в верхней части значение параметра отображается на жёлтом фоне. Настройки гистограммы сохраняются в файле конфигурации. Имеется возможность для ручного изменения масштабы гистограммы по вертикали. Для этого нужно снять галочку автоматического расчёта высоты в левом верхнем углу формы. Справа появится ползунок масштабирования по вертикали. Это нужно в тех случаях, когда нужно посмотреть столбцы с высотой меньше одного пикселя.           

При нажатии на кнопку Multigraph открывается окно для вывода до четырёх графиков одновременно.

Окно вывода графиков нескольких параметров
Окно вывода графиков нескольких параметров

На данной форме можно выбирать параметры для вывода графика, настраивать масштаб и смещение каждого графика по вертикали и горизонтали. Имеется настройка масштаба по горизонтали для всех графиков одновременно. Графики выводятся только в режиме графопостроителя.

Дополнительные макросы (Add. macros)

Данная форма дополняет список макросов главной формы программы. Режим отправки макросов задаётся также на главной форме.

Форма для работы с дополнительными макросами
Форма для работы с дополнительными макросами

Statistic – форма, отображающая значения счётчиков каждого принятого и отправленного байта. Данное наглядное представление статистики удобно для обнаружения каких-либо закономерностей и тестирования. Доступна статистика для каждого порта.

Форма для вывода статистики принятых/отправленных байтов
Форма для вывода статистики принятых/отправленных байтов

Форма для работы с дополнительными портами (Add ports)

Работа с дополнительными портами
Работа с дополнительными портами

Терминал может работать с двумя дополнительными портами только для чтения. На форме имеются два идентичных окна для настройки работы с двумя портами. Для каждого порта можно настроить:

  • отображение данных в логе (порт, время, счётчик, направление и режим HEX / ASCII / DEC / CUSTOM);

  • условия разделения пакетов для перехода на новую строку;

  • приёмники данных порта (главный и дополнительный лог, парсер, второй дополнительный порт, текстовый и бинарный файл);

  • действия при приёме нужных пакетов.

Для каждого порта имеется возможность открыть отдельный лог для просмотра отправленных и принятых пакетов.

На форме можно указать режим быстрого чтения порта, но при этом будет максимальная нагрузка на процессор, т.к. в этом случае поток будет работать без пауз для переключения на другие потоки. Если в процессоре несколько логических ядер, то данный режим не загрузит процессор на 100%. Быстрый режим позволяет считывать данные порта в реальном времени, в логе время будет отображаться с точностью 1 мс.

Возможность отправки данных в парсер позволяет мониторить одновременно работу двух приборов. При этом в настройках парсера в качестве источника данных следует указать Port1 и Port2.

Имеется возможность вести запись в текстовый и бинарный файл с возможностью перезаписи или дополнения файла, что выбирается при установке соответствующей галки.

Отправка данных в другой порт позволяет осуществить связь между двумя приборами, у которых отличается скорость порта. Также данная возможность позволит организовать сниффер порта для ведения записи лога принимаемых и отправляемых пакетов.

 Логирование в режиме сниффера можно организовать двумя способами:

  • мониторинг линий TX и RX физического порта, подключив линии RX каждого порта к линиям TX и RX интересующего нас прибора;

  • мониторинг виртуального порта с использованием виртуальной пары com0com.

В первом случае желательно работать с TTL-уровнями UART, а во втором случае нужно сделать настройки как на скрине:

Организация сниффера
Организация сниффера

Здесь важно правильно настроить разделитель линий. Если протокол неизвестен, то можно настроить вот так:

Пакеты в логе могут быть рваными, но на обмен это не повлияет. По пакетам можно будет сориентироваться и задать правильные настройки.

Также сниффер можно организовать с помощью отдельного окна лога каждого порта, имеется также возможность записи лога в файл и копирование видимого лога в буфер обмена без потери данных о цвете строк. (Можно вставить в документ Word или WordPad).

При нажатии на кнопку CUSTOM Decod. открывается окно настройки режима отображения данных для соответствующего режима чтения:

Данный режим позволяет настроить способ отображения входящих данных для каждого байта. В частности, на правом скрине показано, как настроить запрет вывода некоторых непечатаемых символов в окно лога при чтении данных из порта. Также имеются 4 предустановленных и 32 изменяемых таблицы декодирования. Для выбора, например, двоичного режима вывода нужно нажать на кнопку “BIN” и затем “Save as CUSTOM”.

Утилиты (Utilites)

На данной форме имеется генератор чисел и утилита побайтного сравнения файлов.

Генератор чисел
Генератор чисел
Сравнение файлов
Сравнение файлов

На скринах показан пример генерации таблицы случайных чисел и пример сравнения двух файлов. Отличающиеся байты подсвечиваются зелёным фоном. Максимальный размер сравниваемых файлов 8МБ.

При нажатии на кнопку ASCII открывается окно с соответствующей таблицей:

Таблица формируется программным способом, поэтому для каждой версии Windows может отличаться от представленной на рисунке.

Данный терминал можно скачать по ссылке. Пароль архива 1111.

На 14.04.2024 Актуальная версия TerminalTMB v5.152b

Источник: https://habr.com/ru/articles/808019/


Интересные статьи

Интересные статьи

Когда дело доходит до выбора серверного веб-фреймворка в экосистеме Rust, можно запутаться из-за большого количества вариантов. В прошлом, лидером по популярности был Rocket, но сейчас за первенст...
Всем привет, меня зовут Михаил, я младший разработчик в компании БФТ-Холдинг. Под катом делюсь кейсом, который недавно реализовал. В нем я написал консольное приложение, которое упростило сбор статист...
Если вам приходится время от времени работать в терминале, и хочется сделать его удобнее, не затрачивая много сил, то небольшое руководство от Рейгана Макфарланда будет как нельзя кстати.Есть масса бо...
За 15 лет работы разработчиком я обнаружил, что ложные убеждения о человеческой природе — основные враги хорошей декомпозиции. Если знать о них и стремиться не угодить к ним в ловушку, ...
Иногда получается, что при выполнении очередного проекта, я случайно открываю какие-то обстоятельства, которые, вроде, никто не скрывает, можно даже найти документацию, поясняющую сут...