1

Тема: CMD/BAT: Чтение из COM-порта штатными средствами командной строки

Здравствуйте, товарищи.

Возникла задача читать данные из COM-порта, во что я и уткнулся. Хотелось бы реализовать всё штатными средствами командной строки.

Записать в порт - никаких проблем, тот же "echo Hello>COM1"

Что касается чтения, всё что смог нагуглить - это либо copy, либо set.


copy - виснет, если во входном потоке нет символа конца файла (а у меня его как раз нет)
set /p "input_str="<COM1  - не виснет, и он якобы должен возвращать принятую через COM1 строку.

По факту же я запускаю бесконечный цикл, где выполняю  set /p "input_str="<COM1,
пуляю с внешней железяки строку, но в input_str так ничего и не попадает.

Опять же якобы set /p "input_str="<COM1 сработает, только если строка оканчивается символом перевода строки (10), или возврата каретки (13), или двумя этими символами. Моя железяка пуляет строку, заканчивающуюся символом перевода строки, то есть вроде как всё должно работать.


Также попытался сделать костыль через CMD+JScript, записав файл с js-кодом и вызвав его исполнение через cscript.exe.
Однако и там упёрся, ибо не удалось прочитать ничего из файла ни с помощью ReadLine, ни с помощью побайтового чтения Read(1) (открывал в текстовом режиме файл "COM1:57600,N,8,1")

В общем не удалось штатными средствами прочитать никак.
А тащить сторонние утилиты или всякий activex типа mscomm совсем не хочется.

Есть ли какие-то решения ?

2

Re: CMD/BAT: Чтение из COM-порта штатными средствами командной строки

Может быть, COPY /B ?

3

Re: CMD/BAT: Чтение из COM-порта штатными средствами командной строки

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

4 (изменено: DnsIs, 2016-10-20 09:11:15)

Re: CMD/BAT: Чтение из COM-порта штатными средствами командной строки

А если: type COM1 ?

А еще в инете полно ссылок на примеры скриптов для Power Shell

Нас невозможно сбить с пути, нам пофигу куда идти.

5

Re: CMD/BAT: Чтение из COM-порта штатными средствами командной строки

Нет, type тоже хочет символ конца файла.

Касательно Power Shell, если я не путаю, его вмазанная поддержка появилась с Windows 7, а значит метод не будет работать на машинах с XP (а это критично).

6 (изменено: DnsIs, 2016-10-20 14:36:10)

Re: CMD/BAT: Чтение из COM-порта штатными средствами командной строки

Ладно Power Shell, тяжелый. Неужели не найдется места для небольшой утилиты?

ЗЫ Например putty.

Нас невозможно сбить с пути, нам пофигу куда идти.

7

Re: CMD/BAT: Чтение из COM-порта штатными средствами командной строки

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

8

Re: CMD/BAT: Чтение из COM-порта штатными средствами командной строки

Тогда HyperTerminal.
Правда ХЗ как его в скрипт вкрутить

Нас невозможно сбить с пути, нам пофигу куда идти.

9

Re: CMD/BAT: Чтение из COM-порта штатными средствами командной строки

Его нет в Windows 7, и скрипт туда вряд ли прикрутишь.
Пока что в голову приходит только написание коротенького (байт 50) com-файла для вычитывания байта из порта и его вывода на экран. А хранить этот com-файл внутри текста bat-файла с последующей записью на диск и исполнением из bat-файла.
Не знаю только как работают com-файлы на досовской виртуальной машине в Windows 7 (а именно разрешён ли доступ к портам).

10

Re: CMD/BAT: Чтение из COM-порта штатными средствами командной строки

А так:
TYPE COM2>CON

Нас невозможно сбить с пути, нам пофигу куда идти.

11

Re: CMD/BAT: Чтение из COM-порта штатными средствами командной строки

Ну какая разница, виснет же type. Нет там символа конца файла.

12 (изменено: DnsIs, 2016-10-22 09:26:01)

Re: CMD/BAT: Чтение из COM-порта штатными средствами командной строки

Специально установил программу Virtual Serial Ports Emulator. Прокинул мост между 2 виртуальныи портами. В одном окне
echo bla-bla-bla>COM2
в другом
TYPE COM3

И ничего.
А вот если
TYPE COM2>CON
или
TYPE COM2>output-file
То все получается.
Пробовал и Hyper terminal и putty. Мне кажется что все они работают одинаково.
И без символа конца строки, никакая программа ничего не поймает.
Тут сниффер какой то нужен. Думаю в арсенале win таких не найдется.

PS Вчера каждая строка (echo bla-bla-bla>COM2) прилетала в COM4 мгновенно. А сегодня только после переполнения буфера (то есть при многократном вызове (echo bla-bla-bla>COM2))

Нас невозможно сбить с пути, нам пофигу куда идти.