реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Обмен через COM-порт в Windows XP (командная строка)
koluna
сообщение Apr 28 2016, 10:26
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Всем привет!

Необходимо в bat-файле с помощью стандартных команд отправить данные в порт, потом сразу считать данные из порта и вывести на экран.
Могу реализовать на Си, могу на Питоне, но надо именно с помощью стандартных команд в командной строке...
Отправить данные - не проблема.
А вот принять - не очень-то просто.

С помощью команд "copy /B com1 con" и "type com1" данные принимаются и выводятся на экран, но данные я вижу на экране спустя 1-2 минуты (точно не измерял, долго ждать, одним словом). Видимо, есть какой-то таймаут, скорее всего в драйвере (ожидается ^-z, но его не будет).
Можно ли этот таймаут настроить т. о., чтобы данные ожидались, скажем, не дольше 1 секунды?


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Apr 28 2016, 16:49
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(koluna @ Apr 28 2016, 14:26) *
Можно ли этот таймаут настроить т. о., чтобы данные ожидались, скажем, не дольше 1 секунды?

Есть же команда mode для настройки ком-порта. Может через неё задаётся таймаут?

Имя ком-порта в copy/type пишется с двоеточием. "Type com1: >filename" при незаданном таймауте и отключенным управлением потоком вообще будет работать бесконечно. То есть командную строку с клавиатуры будет не прервать. У меня получалось только принудительно закрыть виндовс-процесс. Конец файла при этом в файле отсутствовал. Обычно менее 512-байтного сектора. Буферизация записи.

Сообщение отредактировал GetSmart - Apr 28 2016, 17:15


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
koluna
сообщение Apr 28 2016, 19:01
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата(GetSmart @ Apr 28 2016, 20:49) *
Есть же команда mode для настройки ком-порта. Может через неё задаётся таймаут?


Нет, не через нее. Через нее можно таймаут отключить или включить.

Цитата
Имя ком-порта в copy/type пишется с двоеточием. "Type com1: >filename"


Насколько я знаю, двоеточие необязательно, в справке написано.

Цитата
при незаданном таймауте и отключенным управлением потоком вообще будет работать бесконечно.


Ну впринципе, так и есть, параметр "to=on|off" команды "mode".

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


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
r_dot
сообщение Apr 28 2016, 20:39
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 237
Регистрация: 14-08-07
Из: Москва
Пользователь №: 29 791



Цитата(koluna @ Apr 28 2016, 13:26) *
... есть какой-то таймаут, скорее всего в драйвере (ожидается ^-z, но его не будет)...

Помню смутно, но по-моему при работе из командной строки под СОМ-портом подразумевается терминальный протокол, соответственно действуют его настройки. Можно, конечно, поковыряться и поискать, чего там можно настроить, но проще протокол соблюдать, и не говорить категорично "^-z, но его не будет", а подумать, как в источнике после данных данных выдать символ конца передачи.
Go to the top of the page
 
+Quote Post
V_G
сообщение Apr 28 2016, 21:17
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Это что - учебная задача, почему с помощью стандартных команд?
Кто мешает написать программу на Си и запускать ее из bat-файла?
Go to the top of the page
 
+Quote Post
koluna
сообщение Apr 29 2016, 05:31
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата(r_dot @ Apr 29 2016, 00:39) *
Помню смутно, но по-моему при работе из командной строки под СОМ-портом подразумевается терминальный протокол, соответственно действуют его настройки. Можно, конечно, поковыряться и поискать, чего там можно настроить, но проще протокол соблюдать, и не говорить категорично "^-z, но его не будет", а подумать, как в источнике после данных данных выдать символ конца передачи.


Протокол менять никто не будет, он чужой.

Цитата(V_G @ Apr 29 2016, 01:17) *
Это что - учебная задача, почему с помощью стандартных команд?
Кто мешает написать программу на Си и запускать ее из bat-файла?


Не учебная.
Требуется элементарный алгоритм: 10 байт отправить, 100 байт принять и отобразить. Условно.
Думал, что с помощью стандартных команд из командной строки это можно сделать просто и быстро, с наскока.
Но вот ошибся...

Написать на Си никто не мешает, видимо, придется так сделать.


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Apr 30 2016, 16:22
Сообщение #7


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(koluna @ Apr 28 2016, 23:01) *
Нет, не через нее. Через нее можно таймаут отключить или включить.

Что зашито именно в драйвере, - слабо верится. В диспетчере устройств таймаут тоже не задаётся. Более логично, если это задаётся в реестре. Реестр можно корректировать прямо из батника, если права админские.

Упд.
Корректировать реестр из батника - не очень удачная затея.

Сообщение отредактировал GetSmart - Apr 30 2016, 16:55


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aiwa
сообщение Apr 30 2016, 16:48
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Права админа - только начало. Потом вмешается антивирусник.
Состряпать программку выйдет гораздо быстрее.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 21:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016