Com port toolkit инструкция на русском

Главная
/
Техника

    • Пожаловаться

COM Port Toolkit - программа для работы с последовательным портом компьютера, сочетающая в себе возможности терминала, просмотра, журналирования и экспорта данных. Во многих случаях COM Port Toolkit оказывается удобнее и функциональнее стандартного Гипертерминала. COM Port Toolkit работает под управлением ОС Windows 95, Windows 98, Windows Me, Windows NT 4.0, Windows 2000/XP, Windows Vista/7.

04.11.2021, 6:30:27


Сохранено в Radio mix

Техника

Игорь Кипарин

69 подписчиков

Представляю очередную версию программы для работы с COM-портом TerminalTMB. Предыдущая статья и версии программы, доступны по ссылке. Идея создания данного проекта возникла после непродолжительного поиска на просторах сети терминала с нужным функционалом. Отправить байт, строку, увидеть принимаемые данные, записать лог, запомнить отправленные строки — это стандартный набор возможностей большинства подобных программ, но для моей деятельности этого мало. Некоторые идеи взял из других подобных программ и развил дальше, но пока не реализовал подсветку строк, не добавил возможность построения графиков, сценариев, как в Terminal 1.9b, Al_Terminal. Пока не реализована возможность прослушивания порта, как умеет COM Port Toolkit. Это всё будет в будущем по мере развития проекта. Есть программа работы с более богатым и гибким функционалом – Обсервер, но она и сложнее для использования.

Окно программы

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

Основные возможности терминала.

  • удобное хранение и использование 4800 макросов, разбитых на 100 списков с полным описанием каждого макроса;
  • работа в HEX и ASCII режиме;
  • 4 режима отправки команд из консольной строки: ручной, периодический, после ответа и при нажатии на кнопку с макросом;
  • отправка команд из файла;
  • отправка файлов размером до 16 МБ;
  • отправка списков команд с настраиваемыми временными интервалами;
  • эмулирование ответов на запросы (до 320 запросов по 16 возможных ответов на каждый запрос, конфигурации можно сохранить и прочитать из файла);
  • режим прямой отправки кодов символов с клавиатуры в момент нажатия клавиш;
  • настройка условий для разделения строк;
  • настройка условий для очистки лога;
  • одновременный просмотр лога в HEX и ASCII-режимах;
  • фильтрация сообщений перед выводом в лог;
  • захват нужных подстрок с остановкой прокрутки лога;
  • настройка условий для автоматического разворачивания окна терминала из свёрнутого состояния;
  • ведение статистики;
  • логирование событий в файл;
  • запись текстового и бинарного лога с любым расширением;
  • настройка цветов и шрифтов, возможность быстрого поиска по началу введённой команды из списка ранее отправленных;
  • вывод лога через прямой и инверсный фильтр, когда нужно выводить ссобщения с заданной подстрокой или игнорировать только их;
  • отправка команд в HEX или ASCII и приём ответов в любом одном или одновременно двух указанных режимах.

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

Окно программы

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

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

TerminalTMB v3

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

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

TerminalTMB v3

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

TerminalTMB v3

На данной панели имеется команда очистки окна лога, окно ввода строки фильтра и настройки реакции программы при получении пакета, содержащего в себе заданную последовательность.
Miss – не выводить сообщения, содержащих подстроку из окна фильтра;
Out – в окно лога выводятся только те пакеты, которые содержат указанную подстроку;
Capt – при появлении пакета с заданной подстрокой окно лога останавливается;
No – никакое действие не выполняется (на случай, если нужно временно отключить фильтр);
Auto scroll – автоматическая прокрутка окна лога вниз при получении очередной порции байтов.
В окне статистики работы терминала отображается значение счётчика полученных подстрок, заданных в фильтре:

TerminalTMB v3

Для отображения данной статистики нужно нажать кнопку «Show stat»

TerminalTMB v3

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

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

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

TerminalTMB v3

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

TerminalTMB v3

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

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

TerminalTMB v3

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

TerminalTMB v3

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

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

Окно программы

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

TerminalTMB v3

Background color – выбор фонового цвета окна вывода лога;
Font settings – настройки шрифта окна вывода лога;
Monitor mode – скрытие/отображение нижней панели программы;

Описание нижеперечисленных кнопок будет в следующих разделах руководства:
EmulAns – режим эмулятора ответов в ответ на приходящие запросы;
Cmd list mode – режим отправки списков команд с заданными интервалами;
Fast send mode – режим прямой отправки кодов клавиатуры в порт;
Directories – настройки директорий хранения файлов, используемых программой;
Sent commands – окно отправленных в порт данных;
Sniffer – пока не задействована;
Line separator – настройка разделителя пакетов для отображения в логе;
Autocleaning – настройки автоочистки окна лога;
Buffer FIFO – работа с входным приёмным буфером;
Event alert – настройка отслеживаемых событий;
Event log – логирование событий и работы терминала;
ASCII table – таблица ASCII, актуальная для данной версии Windows.

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

Окно программы

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

TerminalTMB v3

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

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

TerminalTMB v3

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

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

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

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

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

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

TerminalTMB v3

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

TerminalTMB v3

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

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

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

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

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

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

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

TerminalTMB v3

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

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

TerminalTMB v3

Данные в консольной строке отправляются в том виде, который задан для отображения лога: 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 «, в аналогичном виде формируются строки файла команд, содержимое макросов и содержимое хвоста команд. Единственная необычность в том, что в конце консольной строки или команд в файле нужно ставить пробел, если предполагается добавление хвоста сообщений.

TerminalTMB v3

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

TerminalTMB v3

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

Макросы

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

TerminalTMB v3

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

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

TerminalTMB v3

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

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

TerminalTMB v3

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

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

Имеется возможность отправки файлов в порт. Размер файла при этом не должен превышать 16 МБ. При отправке файла можно видеть лог отправки всегда в HEX-виде и статистику процесса в правом нижнем углу, которая отображается по нажатию кнопки «Show stat»

TerminalTMB v3

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

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

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

TerminalTMB v3

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

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

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

TerminalTMB v3

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

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

TerminalTMB v3

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

Все режимы отправки команд можно использовать одновременно.

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

TerminalTMB v3

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

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

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

TerminalTMB v3

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

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

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

TerminalTMB v3

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

TerminalTMB v3

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

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

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

TerminalTMB v3

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

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

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

Скачать программу TetminalTMB v3.98b

Изменения в версии 3.104b от 2021.06.22:

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

Скачать программу TetminalTMB v3.104b

Изменения в версии 3.107b от 2021.11.20:

  • Добавлен режим перебора комбинаций пакетов (Brute force)

TerminalTMB v3

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

Скачать программу TetminalTMB v3.107b

Изменения в версии версии 3.112b от 2022.01.29:

  • алгоритм побайтного чтения файлов с диска заменён на алгоритм поблочного чтения, что увеличило скорость считывания файлов в ОЗУ перед отправкой в порт;
  • максимальный размер сравниваемых файлов увеличен до 8МБ;
  • добавлена возможность формирования команд для отправки файлов с сохранением данных команд в конфигурации макросов, в конфигурациях сценариев эмулятора ответов и в конфигурации списков отправляемых команд;
  • небольшие улучшения интерфейса.

Формат команды для отправки файла: [sendfile:]NameFile (без пробелов), пример:
[sendfile:]E:\Файлы TerminalTMB\DSCN5252.JPG
Длина всей команды должна быть не больше 250 байт, если команду предполагается сохранить в конфигурации. Режим отправки (ASCII или HEX) и шаблон хвоста пакета (добавляемый в конец символ или шаблон контрольной суммы) при отправке файла по команде значения не имеет. В редакторах макросов добавлена соответствующая кнопка для выбора отправляемого файла. Таким образом можно организовать последовательную отправку файлов или файлов вперемешку с командами. В окне эмулятора ответов можно вместо эмулируемых ответов отправлять файлы и тем самым настроить сценарий работы с каким-либо устройством, в алгоритме работы с которым предполагается отправка файлов в это самое устройство, например, запись файла альманаха в GPS-модуль. При отправке файлов больших объёмов на низкой скорости может возникнуть впечатление, что терминал завис, но это следствие отправки файла сплошным потоком. Максимальный размер отправляемого по команде файла не должен превышать 16МБ.

TerminalTMB v3.112b

TerminalTMB v3.112b

Скачать программу TerminalTMB 3.112b.rar

Абдулхаев Иван, г. Тамбов.

В этой статье мы рассмотрим пример асинхронного приема данных из СОМ порта средствами Delphi. То-есть опрос порта будет производиться непрерывно, до тех пор пока мы его не остановим, а прочитанную информацию она будет записывать в Memo. Чтобы процедура опроса не «подвешивала» наше приложение, мы организуем прослушивание порта в отдельном потоке. Поэтому прежде чем Вам начать практиковаться по настоящей статье, автор предполагает что читатель уже знаком с темой потоков в Delphi. Пример конечно примитивен, поскольку демонстрирует лишь минимум функций, которые можно реализовать для связи по трем проводкам (GND, RX и TX), но эта простота вовсе не снижает интереса к нашей с Вами теме. По скольку дает «живое» представление о принципе асинхронного чтения, да еще и на «сквозном» примере.

Исходник: скачать

Приступим:

1)  Поместим на форму следующие компоненты; Listbox — 1шт, Button — 4шт и компонент Memo — 1шт. Расставим их примерно как на рисунке ниже:

1_123123423423iudwhrijwef COM порт (RS-232) Асинхронный обмен данными.

Для чего? Мы с Вами напишем программу с помощью которой  нажав кнопку — «Сканировать», сможем увидеть доступные COM порты в нашем ListBoxе.  Кликнув по выделенному порту двойным щелчком мыши, мы к нему подключимся. После подключения нам станет доступна опция чтения, которая после того как мы нажмем на кнопку — «Начать чтение», запустится и будет крутиться в отдельном потоке цикл прослушивания порта, и по мере обнаружения информации в буфере, будет помещать ее в компонент Memo. Ну и собственно на любом этапе работы программы, мы сможем очистить содержимое приема или вовсе разорвать связь с текущим портом, чтобы переключиться на любой другой свободный COM порт, ну или вовсе завершить работу нашего приложения. И так поехали дальше…

2) Объявим глобально следующие переменные:

var

Form1:TForm1;

Adr:PWideChar; //Переменная номера COM порта;

W:WideString; //Промежуточная переменная;

ComFile:THandle; //Хендл ком порта;

Dcb:TDCB; //Структура настроек порта;

ComStat:TComStat; //Переменная состояния порта;

Timeouts:TCommTimeouts; //Переменная таймаутов;

OverRead:TOverlapped;

Buffer:array [0..255] of AnsiChar; //Массив данных AnsiChar;

Btr, Temp, Mask, Signal:DWORD;

Свойство Enabled у Button2 и Button3 установим в false, свойство ReadOnly компонента Memo установим в true;

В событии OnClick Button1 пропишем код для пересчета существующих портов и помещения их в наш ListBox:

procedure TForm1.Button1Click(Sender: TObject);{Сканируем порты, найденные помещаем в listBox;}

Var i:Integer;

begin

for i:=0 to 10 do

begin

ComFile:=CreateFile(Pchar(‘COM’+intToStr(i+1)), Generic_Read or Generic_Write, 0, nil, open_existing, file_flag_overlapped,0);

if ComFile<>invalid_handle_value then

begin

Listbox1.Items.Add(‘COM’+ IntToStr(i+1));

CloseHandle(ComFile);

end;

Button1.Enabled:=False;//Деактивируем клавишу сканирования;

end;

end;

3) B событии OnDblClick нашего ListBoxа запускаем и настраиваем выбранный порт

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

procedure TForm1.ListBox1DblClick(Sender: TObject);

begin

W:=Form1.ListBox1.Items.Strings[form1.ListBox1.ItemIndex]; {Загружаем выбранную

запись в переменную}

Adr:=PWideChar(W); {Преобразуем ее в тип годный для использования в функции открытия порта (WideChar);}

ComFile:=CreateFile(Adr, Generic_Read+Generic_Write, 0, nil,

Open_Existing, File_Flag_Overlapped, 0); {Открываем порт для асинхронной работы;}

if ComFile=Invalid_Handle_Value  then

begin

ShowMessage(‘Не удалось открыть порт’); {Если не удается, выводим сообщение об ошибке;}

exit;

end;

PurgeComm(ComFile, Purge_TXabort or Purge_RXabort or Purge_TXclear or Purge_RXclear); //Очищаем буферы приема и передачи и очередей чтения/записи;

GetCommState(ComFile, DCB); //Настраиваем DCB настройки порта;

with DCB do

begin

BaudRate:=9600;

ByteSize:=8;

Parity:=NoParity;

StopBits:=OneStopBit;

end;

if not SetCommState(ComFile, DCB) then

begin

ShowMessage(‘Порт не настроен’); //Если не удается выводим сообщение об ошибке;

CloseHandle(ComFile);

exit;

end;

if ComFile <> INVALID_HANDLE_VALUE then

begin

GetCommTimeouts(ComFile, Timeouts); { Чтение текущих таймаутов и настройка параметров структуры CommTimeouts }

Timeouts.ReadIntervalTimeout:=MAXDWORD; //Таймаут между двумя символами;

Timeouts.ReadTotalTimeoutMultiplier:=0; //Общий таймаут операции чтения;

Timeouts.ReadTotalTimeoutConstant:=0; //Константа для общего таймаута операции чтения;

Timeouts.WriteTotalTimeoutMultiplier:=0; //Общий таймаут операции записи;

Timeouts.WriteTotalTimeoutConstant:=0; //Константа для общего таймаута операции записи;

SetCommTimeouts(ComFile, Timeouts); //Установка таймаутов;

end;

SetupComm(ComFile, 4096, 4096); //Настройка буферов;

if not SetupComm(ComFile, 4096, 4096) then //Ошибка настройки буферов;

begin

ShowMessage(‘Ошибка настройки буферов’);

CloseHandle(ComFile);

exit;

end;

SetCommMask(ComFile, EV_RXchar); {Устанавливаем маску для срабатывания по событию «Прием байта в порт»}

ListBox1.Enabled:=False; //Деактивируем listbox;

Button2.Enabled:=True; //Активируем кнопку «Разъединить»;

Button3.Enabled:=True; //Деактивируем кнопку «Начать чтение»;

end;

Что мы тут сделали?

Во-первых открыли порт для асинхронной работы: — File_Flag_Overlapped. Во-вторых настроили скорость обмена (9600 бод), количество бит в посылке (8), контроль четности (NoParity), указали количество стоповых бит (OneStopBit). Также мы настроили таймауты и размеры буферов порта, но по большому счету, для нашего примера можно обойтись и без них (если их не указывать и не настраивать, система все настроит автоматически), но раз уже мы их настроили, то пусть будут. В-третьих, мы установили маску — EV_RXchar — ожидание прихода байта. Это необходимо для нашего потока чтения. Смысл какой? В отдельном потоке, который мы сейчас создадим будет крутиться цикл, для которого приход байта в порт (Mask and EV_RXchar) <>0 — будет сигналом для чтения состояния порта, получения количества этих байт и если это количество не равно 0, (If Btr.Size<>0) то запуску чтения содержимого в

переменную буфера ReadFile(ComFile, Buffer, SizeOf(Buffer), Temp, @OverRead); и дальнейшую обработку этой переменной:

Form1.Memo1.Lines.Text:=Form1.Memo1.Lines.Text+(String(buffer)); {Загружаем в Memo содержимое буфера;}
Buffer:=»; //Очищаем переменную буфера; 

В общем как то так… Ну что создаем поток?

4) Создавать поток будем без помощи мастера, для этого прямо в нашем листинге после раздела:

public

{ Public declarations }

end;

Объявим наш поток:

MyThread=class(Tthread)

private{ private declarations }

protected

procedure execute; override; // Главная процедура потока;

procedure OutToMemo; //Процедура вывода в Мемо содержимого переменной буфера;

end;

В раздел глобальных переменных добавим переменную для нашего потока

MyThr:MyThread; //Переменная потока чтения;

Выделяем  procedure execute; override; жмем Ctrl+Shift+C и в теле появившейся главной процедуры запишем:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

procedure MyThread.execute;

begin

OverRead.Hevent:=CreateEvent(Nil, True, True, Nil); //Сигнальный объект событие для ассинхронных операций;

While not MyThr.Terminated do //Пока поток не остановлен;

begin

WaitCommEvent(ComFile, Mask, @OverRead); //Ожидаем события (поступление байта);

Signal:=WaitForSingleObject(OverRead.hEvent, Infinite); {Приостанавливаем поток до тех пор пока байт не поступит;}

if (Signal=Wait_Object_0) then //Если байт поступил;

begin

if GetOverlappedResult(ComFile, OverRead, Temp, true) then {Проверяем успешность завершения операции;}

begin

if ((Mask and EV_RXchar)<>0) then //Если маска соответствует,

begin

ClearCommError(ComFile, Temp, @ComStat); //Заполняем структуру ComStat;

Btr:=ComStat.CbInQue; //Получаем из структуры количество байт;

If Btr.Size<>0 then //Если байты присутствуют,

begin

ReadFile(ComFile, Buffer, SizeOf(Buffer), Temp, @OverRead); //Читаем порт;

Synchronize(OutToMemo); {Делаем синхронный вызов процедуры загрузки буфера в     

Memo;}

end;

end;

end

end;

end;

CloseHandle(OverRead.Hevent);

end;

Для реализации процедуры чтения, выделяем procedure OutToMemo; в разделе объявления нашего потока, жмем Ctrl+Shift+C и в теле появившейся процедуры запишем:

procedure MyThread.OutToMemo; //Процедура вывода в Memo;

begin

Form1.Memo1.Lines.Text:=Form1.Memo1.Lines.Text+(String(buffer)); {Загружаем в Memo содержимое буфера;}

Buffer:=»; //Очищаем переменную буфера;

end;

5) Теперь задействуем запуск только что нами созданной процедуры чтения, для этого дважды

кликаем на Button3 и в появившейся процедуре записываем:

procedure TForm1.Button3Click(Sender: TObject); //Запуск потока чтения;

begin

MyThr:=MyThread.Create(false); //Создаем поток чтения;

MyThr.FreeOnTerminate:=true; //Запускаем поток чтения;

MyThr.Priority:=tpNormal; //Устанавливаем приоритет;

Button3.Enabled:=False; //Делаем клавишу чтения неактивной;

end;

для возможности разорвать соединение  дважды

кликаем на Button2 и в появившейся процедуре запишем:

procedure TForm1.Button2Click(Sender: TObject); {Очищаем listBox, Прерываем поток, Закрываем соединение;}

begin

if  MyThr <> nil then //Если поток чтения запущен,

MyThr.Terminate; //Тогда уничтожаем его;

ListBox1.Clear; //Очищаем содержимое ListBox1;

CloseHandle(ComFile); //Закрываем порт;

Button1.Enabled:=True; //Делаем активной кнопку «Сканировать»;

Button2.Enabled:=False; //Деактивируем кнопку «Разъединить»;

Button3.Enabled:=False; //Деактивируем кнопку «Начать чтение»;

ListBox1.Enabled:=True; //ListBox1 делаем активным;

end;

для очистки содержимого Memo  дважды кликаем на Button4 и в появившейся процедуре запишем:

procedure TForm1.Button4Click(Sender: TObject); {Очистка Memo, буферов приема, передачи и очередей.}

begin

PurgeComm(ComFile, Purge_TXabort or Purge_RXabort or Purge_TXclear or Purge_RXclear);

Buffer:=»;

Memo1.Lines.Clear;

end;

теперь в процедуре FormClose закрытия приложения запишем:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); //Закрытие програмы;

begin

if  MyThr <> nil then //Если поток запущен;

MyThr.Terminate; //Останавливаем его;

CloseHandle(ComFile); //Закрываем Порт;

end;

Ну вот как бы и все, теперь наш проект готов к запуску, но прежде настроим аппаратную часть.
Для этого нам потребуется любая программка — терминал для отправки данных, 2 COM порта на материнке, если таковые отсутствуют, тогда 2 конвертера USB>COM. Я например использую 2 вот таких переходничка и соединяю их тремя проводками по следующей схеме:

2_srdtc65xf7xs65dad5rf6x5s COM порт (RS-232) Асинхронный обмен данными.

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

Один переходничок у меня в системе определился как COM3, второй как COM4. Запускаем наше приложение, подключаемся к порту COM3 и нажимаем нашу кнопку начала чтения, на этом «прослушивание» порта началось. Теперь запускаем программку терминал, для примера я использую  COM Port Toolkit 4.0 После запуска терминал нужно настроить — выбрать порт для подключения (в моем случае это COM4) и установить настройки DСB (скорость, количество бит информации, контроль четности, количество стоповых бит) такие же как у нашей программки:

3_123123423423iudwhrijwef COM порт (RS-232) Асинхронный обмен данными.

Далее заходим в пункт меню «Сообщение» — «Отправить» и через его интерфейс пробуем отправлять различный текст, можно из файла, можно просто какие нибудь одиночные слова
или символы,

4_123123423423iudwhrijwef COM порт (RS-232) Асинхронный обмен данными.

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

  1. База знаний
  2. Программное обеспечение
  3. Статьи

Как работать с устройствами по COM-порту с помощью терминальной программы?


В различных инструкциях и руководствах вы можете увидеть рекомендации по работе с устройствами через терминальную программу. Как правило, такие действия производят с помощью HyperTerminal — стандартной программы в операционных системах Windows. Мы же рекомендуем использовать терминальную программу «Terminal v1.9b by bray», потому что это более гибкий и удобный в работе инструмент. Ниже мы расскажем как работать с нашими устройствами на примере именно этой программы.

В первую очередь подключите устройство, с которым собираетесь работать, к компьютеру через COM-порт. Подключите питание.
Теперь запустите Terminal v1.9b.

Image 53

Интерфейс и основные настройки подключения по порту

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

Image 46

  1. Колонка №1:
    Connect
    — кнопка для открытия COM-порта,
    Rescan — пересканировать список COM-портов,
    Help — справка,
    About.. — о программе,
    Quit — выход из программы.

    Колонка №2:

  2. Поле выбора номера COM-порта для подключения.
    Колонка №3:
  3. Выбор скорости COM-порта.
    Колонка №4:
  4. Выбор количества бит данных.
    Колонка №5:
  5. Выбор четности.
    Колонка №6:
    Выбор количества стоповых бит.
    Колонка №7:
  6. Выбор типа управления потоком.

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

Image 47

В разделе Recieve находятся параметры отображения ответа от устройства.

Image 48

В разделе Transmit находятся параметры передачи данных на устройство. Кнопки DTR и RTS устанавливают соответствующие выводы в положительное состояние.

Image 49

Макросы

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

Image 50

  1. Блок №1:
    Поле для ввода последовательности символов для отправки. Для того чтобы отправить специальные символы, необходимо воспользоваться ASCII таблицей и ввести код символа, предварительно экранировав его знаком «$«. Например, на картинке выше, вы можете видеть экранированный символ возврата каретки $0D (нажатие клавиши Enter)
    Блок №2:
  2. Здесь в левом поле задаётся имя кнопки, а в правом отображается сама кнопка.
    Блок №3:
  3. Тут задаётся задержка при автоматическом повторении команд.
    Блок №4:
  4. Включение автоматического повтора команды через интервал времени, заданный в п.3.

Кнопки Load и Save позволяют сохранить или загрузить файл с макросами, введёнными в этом окне.

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

Image 149

Блок №1:
В этом большом поле вы будете видеть ответы от вашего устройства.
Если в разделе «Settings» вы не забыли поставить галочку «Time«, то перед каждой строкой будет проставлена метка времени. Это бывает очень полезно при анализе логов с устройства.

Блок №2:
Тут находится поле для отправки текста сообщений. Установленная галочка «+CR» будет дописывать к отправляемому сообщению символ возврата каретки (эмулировать нажатие клавиши Enter). Кнопка «->Send» отправит ваше сообщение на устройство.

Блок №3:
В самом низу находится поле, где вы можете видеть отправленные на устройство команды.
Теперь вы знакомы с интерфейсом Terminal 1.9b!

Как происходит общение с устройством, вы можете посмотреть в этих статьях:

  • Настройка модемов для работы по технологии CSD.
  • Проверка работоспособности передачи данных по технологии CSD.

Статья

Эта статья была полезна для 150 людей. Эта статья помогла Вам?

Сервис поддержки клиентов работает на платформе UserEcho

Файл: Com port toolkit инструкция

COM Port Toolkit скачали 2197. Скачать программу COM Port Toolkit, 2.8 Подписаться на RSS обновлений версий программы. Инструментальное.

Там вводятся нужные байты с пробелами. Конкретно что нужно сделать: 1. Запускаете COM Port Toolkit. 2 Меню вверху — >Сообщение.

Информация о файле: Скачать com port toolkit инструкция
Выложил: Sania41
Дата: 2014-07-14
Проверил: Kirov
Каким антивирусом: Yandex
Дата проверки: 2014-07-16
Тип файла: .sar Архив программы JBoss
Размер файла: 82Mb
Скачали раз: 860
Сказали спасибо: selyolga@mail, Дим-Димыч, maximus-vit, питирим
Рейтинг файла: очень высокий

Скачать файл: Com port toolkit инструкция

Понравилась статья? Поделить с друзьями:

Это тоже интересно:

  • Com 100 инструкция на русском
  • Colotal tablets 135 mg инструкция на русском
  • Color lcd digital monitor tv super инструкция
  • Collaregen olimp инструкция по применению
  • Colt quad pi инструкция на русском

  • Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии