Перейти к содержанию
    

Обмен через COM-порт в Windows XP (командная строка)

Всем привет!

 

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

Могу реализовать на Си, могу на Питоне, но надо именно с помощью стандартных команд в командной строке...

Отправить данные - не проблема.

А вот принять - не очень-то просто.

 

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

Можно ли этот таймаут настроить т. о., чтобы данные ожидались, скажем, не дольше 1 секунды?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно ли этот таймаут настроить т. о., чтобы данные ожидались, скажем, не дольше 1 секунды?

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

 

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

Изменено пользователем GetSmart

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

 

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

 

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

 

Получается, что надо таймаут включить и выставить небольшое значение.

Ну или как-то считать содержимое буфера принудительно и завершить процесс...

Вопрос в том, как это сделать :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... есть какой-то таймаут, скорее всего в драйвере (ожидается ^-z, но его не будет)...

Помню смутно, но по-моему при работе из командной строки под СОМ-портом подразумевается терминальный протокол, соответственно действуют его настройки. Можно, конечно, поковыряться и поискать, чего там можно настроить, но проще протокол соблюдать, и не говорить категорично "^-z, но его не будет", а подумать, как в источнике после данных данных выдать символ конца передачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это что - учебная задача, почему с помощью стандартных команд?

Кто мешает написать программу на Си и запускать ее из bat-файла?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помню смутно, но по-моему при работе из командной строки под СОМ-портом подразумевается терминальный протокол, соответственно действуют его настройки. Можно, конечно, поковыряться и поискать, чего там можно настроить, но проще протокол соблюдать, и не говорить категорично "^-z, но его не будет", а подумать, как в источнике после данных данных выдать символ конца передачи.

 

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

 

Это что - учебная задача, почему с помощью стандартных команд?

Кто мешает написать программу на Си и запускать ее из bat-файла?

 

Не учебная.

Требуется элементарный алгоритм: 10 байт отправить, 100 байт принять и отобразить. Условно.

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

Но вот ошибся...

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

Упд.

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

Изменено пользователем GetSmart

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Права админа - только начало. Потом вмешается антивирусник.

Состряпать программку выйдет гораздо быстрее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...