koluna 0 28 апреля, 2016 Опубликовано 28 апреля, 2016 · Жалоба Всем привет! Необходимо в bat-файле с помощью стандартных команд отправить данные в порт, потом сразу считать данные из порта и вывести на экран. Могу реализовать на Си, могу на Питоне, но надо именно с помощью стандартных команд в командной строке... Отправить данные - не проблема. А вот принять - не очень-то просто. С помощью команд "copy /B com1 con" и "type com1" данные принимаются и выводятся на экран, но данные я вижу на экране спустя 1-2 минуты (точно не измерял, долго ждать, одним словом). Видимо, есть какой-то таймаут, скорее всего в драйвере (ожидается ^-z, но его не будет). Можно ли этот таймаут настроить т. о., чтобы данные ожидались, скажем, не дольше 1 секунды? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 28 апреля, 2016 Опубликовано 28 апреля, 2016 (изменено) · Жалоба Можно ли этот таймаут настроить т. о., чтобы данные ожидались, скажем, не дольше 1 секунды? Есть же команда mode для настройки ком-порта. Может через неё задаётся таймаут? Имя ком-порта в copy/type пишется с двоеточием. "Type com1: >filename" при незаданном таймауте и отключенным управлением потоком вообще будет работать бесконечно. То есть командную строку с клавиатуры будет не прервать. У меня получалось только принудительно закрыть виндовс-процесс. Конец файла при этом в файле отсутствовал. Обычно менее 512-байтного сектора. Буферизация записи. Изменено 28 апреля, 2016 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
koluna 0 28 апреля, 2016 Опубликовано 28 апреля, 2016 · Жалоба Есть же команда mode для настройки ком-порта. Может через неё задаётся таймаут? Нет, не через нее. Через нее можно таймаут отключить или включить. Имя ком-порта в copy/type пишется с двоеточием. "Type com1: >filename" Насколько я знаю, двоеточие необязательно, в справке написано. при незаданном таймауте и отключенным управлением потоком вообще будет работать бесконечно. Ну впринципе, так и есть, параметр "to=on|off" команды "mode". Получается, что надо таймаут включить и выставить небольшое значение. Ну или как-то считать содержимое буфера принудительно и завершить процесс... Вопрос в том, как это сделать :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
r_dot 0 28 апреля, 2016 Опубликовано 28 апреля, 2016 · Жалоба ... есть какой-то таймаут, скорее всего в драйвере (ожидается ^-z, но его не будет)... Помню смутно, но по-моему при работе из командной строки под СОМ-портом подразумевается терминальный протокол, соответственно действуют его настройки. Можно, конечно, поковыряться и поискать, чего там можно настроить, но проще протокол соблюдать, и не говорить категорично "^-z, но его не будет", а подумать, как в источнике после данных данных выдать символ конца передачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 11 28 апреля, 2016 Опубликовано 28 апреля, 2016 · Жалоба Это что - учебная задача, почему с помощью стандартных команд? Кто мешает написать программу на Си и запускать ее из bat-файла? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
koluna 0 29 апреля, 2016 Опубликовано 29 апреля, 2016 · Жалоба Помню смутно, но по-моему при работе из командной строки под СОМ-портом подразумевается терминальный протокол, соответственно действуют его настройки. Можно, конечно, поковыряться и поискать, чего там можно настроить, но проще протокол соблюдать, и не говорить категорично "^-z, но его не будет", а подумать, как в источнике после данных данных выдать символ конца передачи. Протокол менять никто не будет, он чужой. Это что - учебная задача, почему с помощью стандартных команд? Кто мешает написать программу на Си и запускать ее из bat-файла? Не учебная. Требуется элементарный алгоритм: 10 байт отправить, 100 байт принять и отобразить. Условно. Думал, что с помощью стандартных команд из командной строки это можно сделать просто и быстро, с наскока. Но вот ошибся... Написать на Си никто не мешает, видимо, придется так сделать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 30 апреля, 2016 Опубликовано 30 апреля, 2016 (изменено) · Жалоба Нет, не через нее. Через нее можно таймаут отключить или включить. Что зашито именно в драйвере, - слабо верится. В диспетчере устройств таймаут тоже не задаётся. Более логично, если это задаётся в реестре. Реестр можно корректировать прямо из батника, если права админские. Упд. Корректировать реестр из батника - не очень удачная затея. Изменено 30 апреля, 2016 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aiwa 0 30 апреля, 2016 Опубликовано 30 апреля, 2016 · Жалоба Права админа - только начало. Потом вмешается антивирусник. Состряпать программку выйдет гораздо быстрее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться