Вопрос или проблема
Я на Windows 8.1, и мне нужна программа, которая позволяет отправлять шестнадцатеричный закодированный массив байтов на COM-порт моего компьютера, а затем принимать ASCII-строку через тот же COM-порт.
Я пробовал серийный монитор, который идет с Arduino, но он может отправлять только текст.
Я пробовал Putty, но как только подключился, не смог ничего ввести в консольное окно.
Я пробовал Termite, но у него была такая же проблема, как и у серийного монитора Arduino.
Я пробовал следующий пакетный скрипт, но он мог только отправить данные, и я не могу ничего получить:
@echo off
echo 04185A5A5A5A55AA19A7FFFF00000001FFE0F8BD0001FFF800185A5A5A5A55AA00091A9D000000000000000000000000>example_dump_1.txt
certutil -decodehex example_dump_1.txt example_dump_1.bin
MODE COM8:115200,n,8,1
copy example_dump_1.bin \\.\com8 /b
Termite поддерживает отправку и получение двоичных данных. Перейдите в Настройки->Шестнадцатеричный вид.
Затем введите 0xDEADBEEF
или что-то подобное в окне ввода.
Sparkfun рекомендует RealTerm для чего-то подобного. Я наткнулся на RealTerm и этот вопрос, ищя похожее программное обеспечение. Я собираюсь запустить его в первый раз. Думаю, это программное обеспечение только для Windows.
Sparkfun говорит:
TeraTerm отлично подходит для простых серийных терминальных задач только с ASCII, но что если вам нужно отправить строку двоичных значений от 0 до 255? Для этого мы предпочитаем использовать RealTerm. RealTerm разработан специально для передачи двоичных и других сложных для ввода потоков данных.
На сайте RealTerm:
Realterm – это терминальная программа для инженеров, специально разработанная для захвата, управления и отладки двоичных и других сложных потоков данных. Это лучший инструмент для отладки связи.
Я думаю, что дело очень легко решить с помощью Python, как подробно описано в ReferenceDesigner. Это позволит вам добиться большего контроля над тем, что вы хотите отправить, и вы сможете создавать и изменять скрипт.
import serial ser = serial.Serial("COM5", 9600) command = b'\x41\x42\x43\x44\x48\x65\x6c\x6c\x6f' ser.write(command) s = ser.read(9) print(s)
Вы можете сделать это в ZOC Terminal различными способами:
Создайте серийное соединение: например, в Quick-Connect выберите “localhost” как ваш пункт назначения и выберите “Serial/Direct” как метод соединения, затем нажмите ‘Настроить’, чтобы выбрать COM-порт и т.д. (см. здесь для подробностей).
Затем, для коротких шестнадцатеричных последовательностей, вы можете ввести байты в форме ^(xx) (например, ^(01) для символа SOH) в окне локальной печати: выберите меню Вид > Локальная печать, введите вашу последовательность, нажмите Alt+Enter
Если вам нужно отправить одну и ту же последовательность несколько раз (в разные моменты), вы также можете назначить ее на клавишу или пользовательскую кнопку для быстрого доступа/отправки (либо в меню Настройки > Профили клавиатуры, либо в меню Настройки > Редактировать профиль сессии):
Для более длинных последовательностей, как ваша, вы можете использовать простой скрипт REXX и затем запустить его или назначить на кнопку или клавишу.
Наконец, чтобы мониторить передачу данных в шестнадцатеричном представлении, есть множество вариантов в Профиль сессии > Отладка/Трассировка
Это старый пост. Но мой ответ может быть полезен кому-то другому. Есть еще один инструмент, не упомянутый в этой теме, для отправки шестнадцатеричных значений, и это comDebug. Вы можете попробовать это. Это бесплатно.
Ответ или решение
Как отправлять и принимать шестнадцатеричные байты через COM-порт на Windows 8.1
Ваша задача заключается в отправке шестнадцатеричных данных на COM-порт, а также в приеме ASCII-строк с того же порта. Давайте рассмотрим различные способы, которые помогут вам решить эту проблему.
1. Использование специализированных терминальных программ
Некоторые программы, рекомендуемые специалистами и пользователями для работы с серийными портами, помогут вам эффективно отправлять и получать данные в бинарном формате:
RealTerm
RealTerm является мощным инструментом для инженеров, предназначенным для захвата, управления и отладки бинарных и других сложных потоков данных. Для отправки шестнадцатеричных байтов вы можете использовать интерфейс программы для ввода значений в формате 0xDEADBEEF
. Подробнее ознакомиться с функционалом RealTerm можно на официальном сайте.
TerraTerm и Termite
Если вам нужны просто ASCII-данные, TerraTerm подходит для простых сценариев. Однако для передачи бинарных данных рекомендуем использовать Termite, который поддерживает HEX-режим. В Termite вам нужно зайти в Настройки и активировать режим Hex View. Это позволит вам вводить двоичные значения непосредственно. Дополнительная информация и загрузка доступны на официальном сайте Termite.
2. Использование Python
Если вам нужно больше гибкости или вы хотите автоматизировать процесс, использование Python с библиотекой pyserial
может стать отличным решением. Вот пример простого скрипта:
import serial
# Установите параметры COM-порта
ser = serial.Serial("COM8", 115200)
# Шестнадцатеричные данные для отправки
command = b'\x04\x18\x5A\x5A\x5A\x5A\x55\xAA\x19\xA7\xFF\xFF\x00\x00\x00\x01\xFF\xE0\xF8\xBD\x00\x01\xFF\xF8\x00\x18\x5A\x5A\x5A\x5A\x55\xAA\x00\x09\x1A\x9D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
ser.write(command)
# Чтение данных
data = ser.read(100) # Читаем 100 байт
print(data.decode('ascii'))
Это решение даёт вам возможность точно управлять тем, что отправляется и принимается через COM-порт.
3. Командные утилиты и сценарии
Если вы предпочитаете работать с уже созданными скриптами, можете попробовать использовать certutil
, как в вашем примере, но с добавлением функционала для чтения данных:
@echo off
rem Преобразуем hex в бинарный файл
echo 04185A5A5A5A55AA19A7FFFF00000001FFE0F8BD0001FFF800185A5A5A5A55AA00091A9D000000000000000000000000 > example_dump_1.txt
certutil -decodehex example_dump_1.txt example_dump_1.bin
MODE COM8:115200,n,8,1
copy example_dump_1.bin \\.\COM8 /b
rem Теперь ваша задача - слушать входящий поток, что сложнее осуществить из батника.
Для чтения данных, возможно, вам придется использовать другие инструменты или программы.
4. Альтернативные программы
Кроме вышеперечисленных, вы можете попробовать ZOC Terminal, который предлагает различные способы работы с шестнадцатеричными данными. В ZOC вам необходимо будет установить соединение с COM-портом и воспользоваться функцией "Local Typing" для отправки данных в нужном формате. Инструкции можно найти в документации ZOC.
Заключение
На основании вышеизложенного, у вас есть несколько вариантов для решения задачи по отправке и приему шестнадцатеричных байтов через COM-порт. Выбор подходящего инструмента будет зависеть от ваших предпочтений: будь то графический интерфейс, командная строка или программирование. Рекомендуется начать с RealTerm или Python для гибкости и удобства.