4 / 4 / 0
Регистрация: 19.01.2011
Сообщений: 26
|
|||||||||||
1 | |||||||||||
Задержка между записью/чтением Serial-порта21.01.2011, 04:15. Показов 4188. Ответов 4
Метки нет Все метки)
(
Доброе время суток.
Работаю с одним устройством через RS232 порт, точнее через его эмуляцию с помощью PL2303 (USB-to-RS232). Подключаюсь к порту на скорости 38400, 8 бит, без учета четности. Так же устанавливаю таймауты чтения записи (вот тут-то мне скорее всего и нужна ваша помощь). Затем передаю два байта: необходимый мне байт и байт окончания данных '\0'. Далее мне необходимо делать Sleep(1500); для того что бы ReadFile(..); дал какие-то результаты. Находил в интернете всякие рассуждения по этому поводу, советовали эти таймауты менять. Но как бы я их не менял результат один и тот же, если не поставлю Sleep(1500); - данные не будут приняты (BytesRead = 0), а буффер пуст. Получается что я считываю данные до того, как эти данные сгенерируются на устройстве. Мне постоянно надо слип ставить между этими операциями? Ставить 1500 или рассчитывать число как количество_байт*время_передачи_1_байт? Или может время узнавать какой-то функцией, которой передам хэндл порта а она узнает время? Или может я что-то не правильно делаю с настройками таймаута? Сейчас они такие:
Проблему решил:
1500 подобралось подбором. Но почему именно 1500? Никто не объяснит?
0
|
|
21.01.2011, 04:15 | |
Ответы с готовыми решениями:
4
Шифрование. Проблема с чтением и записью файла. Задержка между показом картинок Задержка между выводом изображении Работа с чтением/записью бинарного файла |
Модератор
![]() ![]() ![]() ![]() 12225 / 7357 / 1730
Регистрация: 25.07.2009
Сообщений: 13,470
|
|
21.01.2011, 13:30 | 2 |
Да, иначе устройство не будет успевать отвечать.
Так не рассчитаете - нужно ещё на время работы самого устройства закладываться. Я бы эмпирически нашёл минимальное время отклика уменьшая время засыпания, умножил бы его на два (а то и на три), да так и оставил бы. Более "продвинутый" вариант - отправил данные, подождал минимальное время с небольшим запасом, попробовал прочитать. Если тишина, подождал ещё два раза по столько, потом ещё три... Если снова ни ответа, ни привета - выдавать сообщение, что устройство не готово...
0
|
4 / 4 / 0
Регистрация: 19.01.2011
Сообщений: 26
|
|
21.01.2011, 14:44 [ТС] | 3 |
Я так и делал)
Кстати, слип уже не делаю, выставил таймауты в 1500 и пока-что норм. Столкнулся с другой проблемой, устройство оказывается может отключится во время обработки, если не подавать на его порт символ @ раз-два в секунду. Придется в потоке его отправлять и ставить на паузу во время реальных обращений на запись/чтение =(
0
|
Модератор
![]() ![]() ![]() ![]() 12225 / 7357 / 1730
Регистрация: 25.07.2009
Сообщений: 13,470
|
|
21.01.2011, 16:11 | 4 |
А в описании к устройству ничего не сказано про флаг, который можно взвести/снять, чтобы оно не засыпало?
0
|
![]() 2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
21.01.2011, 17:57 | 5 |
Вероятнее всего, эта задержка (ну или любая другая) зависит уже не от порта, а от удаленного устройства. Читай доку на само устройство, там, если повезет, должно быть описано....
0
|
21.01.2011, 17:57 | |
Помогаю со студенческими работами здесь
5
Задачка с записью и чтением из текстового файла с++ Задержка между командами Проблемы с чтением и записью в файл в Юникоде Шифрование и расшифровка строки с записью/чтением из БД Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |