Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Таймауты чтения с COM порта 
:(
    Опции темы
SeregaLBN
Дата 22.7.2005, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.10.2003
Где: Киев

Репутация: нет
Всего: нет



Что-то не могу добиться нужного результата.
Есть железка, подключаемая в COM. Работает на скорости 19200.
Ещё известно что таймаут ожидания очередного байта - 1..2 сек.
После отправки запроса на железку, оператор должен с ним поработать. И после этого девайс отвечает.
На всё это (ввод данных оператором и ответ железки) я даю 30 сек.
Я немогу добится следующего - когда девайс вообще неподключён к порту, мне, получается, надо что бы через 30 сек ф-ция ReadFile отработалась с таймаутом.
Делаю так:
Код

BOOL CComPort::SetCommReadTimeOuts(DWORD dwReadIntervalTimeout, DWORD dwReadTotalTimeoutMultiplier, DWORD dwReadTotalTimeoutConstant) {
   COMMTIMEOUTS CommTimeOuts;
   BOOL bRes =  ::GetCommTimeouts(m_hCom, &CommTimeOuts);
   if (!bRes) {
      //...
   }

   CommTimeOuts.ReadIntervalTimeout        = dwReadIntervalTimeout;        // Maximum time between read chars
   CommTimeOuts.ReadTotalTimeoutMultiplier = dwReadTotalTimeoutMultiplier; // Multiplier of characters.
   CommTimeOuts.ReadTotalTimeoutConstant   = dwReadTotalTimeoutConstant;   // Constant in milliseconds.

   bRes &= ::SetCommTimeouts(m_hCom, &CommTimeOuts);
   if (!bRes) {
      //...
   }

   return bRes;
}

ну и вызываю так:
Код

   DWORD dwReadIntervalTimeout        = 2000;  // таймаут ожидания очередного байта
   DWORD dwReadTotalTimeoutMultiplier = 294;   // читаю по 512 байт. Используется 8 бит на символ, без чётности и 2 стоповых бита. Т.е. 512*(8+2)/19200 = 0.29333 сек.
   DWORD dwReadTotalTimeoutConstant   = 30000; // 30 сек на всё
   m_Com.SetCommReadTimeOuts(dwReadIntervalTimeout, dwReadTotalTimeoutMultiplier, dwReadTotalTimeoutConstant);


Вот с таким вызовом ReadFile возвращает WAIT_TIMEOUT через 2 сек.
Как мне добиться нужного результата?
Подскажите, плз!

PM MAIL   Вверх
oper54
Дата 22.7.2005, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 13.5.2005

Репутация: нет
Всего: 1



Цитата
Я немогу добится следующего - когда девайс вообще неподключён к порту, мне, получается, надо что бы через 30 сек ф-ция ReadFile отработалась с таймаутом.

не ясно, что ты собрался читать функцией ReadFile? Зачем чего-то там читать если девайс вообще не подключен?
PM MAIL   Вверх
SeregaLBN
Дата 22.7.2005, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.10.2003
Где: Киев

Репутация: нет
Всего: нет



Ну как для чего:
1. Запустили прогу, а девайса нет. Таких юзеров полно!
2. Забыли включить питание.
3. Девайс есть, он включен и полностью работоспособен. Но при запросе на устройство, опрератор не ввёл данные.

Я сейчас такие ситуации не отрабатываю... А надо.

PM MAIL   Вверх
oper54
Дата 22.7.2005, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 13.5.2005

Репутация: нет
Всего: 1



Аааа, ну тогда ясно.
Так сделай readfile при запуске программы чисто для проверки и все.
А данные можно заставить вводить.
PM MAIL   Вверх
SeregaLBN
Дата 22.7.2005, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.10.2003
Где: Киев

Репутация: нет
Всего: нет



Не всё так просто
Мая прога - это ActiveX, которая в нужный момент подргружается, работает и выгружается.
Так что у меня просто нет времени на холостой ReadFile...
PM MAIL   Вверх
oper54
Дата 28.7.2005, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 13.5.2005

Репутация: нет
Всего: 1



я точно не помню, но есть функция проверяющая наличия девайса, с помощью неё я проверял подключен ли дисковод или цидюк, в файл менеджере, может тебе подойдет, но какая это была функция не помню извини...
PM MAIL   Вверх
Fixin
Дата 28.7.2005, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



А может дрова к это штуке задвинуть? тогда система сама будет проверать подлючение. smile О-о-х, сморозил.
PM MAIL ICQ   Вверх
Nastya
Дата 29.7.2005, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 3
Всего: 44



Ничего подобного для ком-порта на сколько я знаю нет. На приходелось делать спецальнй переходник где были спаяны два контакта на ком, что бы это отловить smile



--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
Fixin
Дата 29.7.2005, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



Дрова на диал-модем? если включить комп без модема - в списе устройств его нет, если вместе включать, то обнаруживается. СУВ
PM MAIL ICQ   Вверх
maxim1000
Дата 29.7.2005, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



может, как-то используется тот факт, что нормальным состоянием на линии, пока ничего не передается, является "высокое" (мне кажется, для этого так и сделали)
честно говоря, не знаю, как это проверить средствами WinAPI, но вполне возможно, Windows проверяет уровень...


--------------------
qqq
PM WWW   Вверх
ManiaK
Дата 1.8.2005, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 2
Всего: 29



Цитата(Nastya @ 29.7.2005, 11:43)
Ничего подобного для ком-порта на сколько я знаю нет.

Поправочка: есть, но писать свои дрова может не каждый.

Цитата(Nastya @ 29.7.2005, 11:43)
На приходелось делать спецальнй переходник где были спаяны два контакта на ком, что бы это отловить

Можно использовать выводы CTS/DSR/.... Их состояния легко определяются в компе, а в разъёме можно один из них подвесить на +.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0612 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.