вторник, 31 марта 2015 г.

Работа с COM портом из командной строки. Мониторинг

...вот все-таки батники незаслуженно игнорируются любителями высокоуровневых языков, а тем не менее даже на них можно решить задачи по мониторингу не только удаленных хостов, но и мониторинга COM-порта, что под DOS, что под Windows. К примеру, возникла задача реагирования (запуска какого-либо приложения) на приход сигнала на один из пинов, кнопка к примеру (выставить DTR тот же и замкнуть с CTS).


Напомню еще раз распиновку COM-порта:
 Номер вывода Наименование Характер сигнала Сигнал
 1 DCD Входной Data carrier detect
 2 RxD Выходной Transmit data
 3 TxD Входной Receive data
 4 DTR Выходной Data terminal ready
 5 GND - Ground
 6 DSR Входной Data set ready
 7 RTS Выходной Request to send
 8 CTS Входной Clear to send
 9 RI Входной Ring indicator
Нам нужно управлять состоянием устройства ввода-вывода. Одной из таких команд - mode (синтаксис см. по mode /?):



Что мы видим? Видим возможность установки скорости, паритета, служебных пинов, паритета и иже с ними. А что нам даст обращение (mode com1) к конкретному COM-порту? А вот сие даст:



Cостояние пинов и настроек порта. Можем прочитать? Можем. Для этого воспользуемся FIND="параметр" (важно точное указание всех знаков):
@ echo off
mode com1 dtr=on > nul
:m1
mode com1 | find "CTS:     ON" > nul
if errorlevel=1 goto m1
if errorlevel=0 start notepad.exe

Флаги:
  •  "dtr=on" установит единичку на DTR.
  •  "> nul" - этим мы убираем вывод ответа на экран.
  •  "errorlevel" - отрабатываем результат выполнения.

Если команда FIND не нашла в ответе "CTS: ON", то повторить опрос по циклу. Ежели нашла, запустит блокнот.

Настроить COM порт:
mode com46:19200,n,8,1,p
Передача в COM-порт

Отослать число в COM порт через ECHO (служит для вывода текста в стандартный поток вывода информации):
echo ^1> \\.\com46
Если же вам нужен полный контроль отсылаемых символов (байтов) без лишних нечитаемых и извращением с экранированием символов, то самое верное и простое - создать текстовый файл, записать туда нужный пакет данных в бинарном виде и воспользоваться старым и надежным copy myfile.ext > \\.\com46. Простенько и со вкусом )))

Прием из COM-порта

Сразу в файл:
type COMn>output.ext

Ссылки по тематике
  1. Виртуальный или... железный
  2. Удаленный COM-порт по TCP/IP

Комментариев нет:

Отправить комментарий

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.