Russian Qt Forum
Октябрь 02, 2024, 11:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: работа с com портом проблема чтения данных  (Прочитано 3547 раз)
BuRn
Гость
« : Ноябрь 01, 2011, 00:52 »

Проблема такая, что порт открывается, пишу в него команду, относительно устройства, write(fd,"\x05",1); 05h это запрос на устройство, после он должен мне прислать подтверждение 06h с таймаутом в пол секунды, но почему-то этого не происходит, делаю так
write(fd,"\x05",1) // успешно, возвращает 1
char buf[255];
sleep(0.5);
read(fd,buf,255); // вот тут возвращает -1;
т.е. данные не читаются
Записан
Bepec
Гость
« Ответ #1 : Ноябрь 01, 2011, 07:15 »

Проблема проста помоему(мб я и ошибаюсь), но прога у тебя считает подтверждение, если синхронизация с устройством будет ровно полсекунды, и ни миллисекундой меньше/больше.

Наводка - считывание раз в 20/60 миллисекунд.

Подводка - использовать цикл.

Ужастик - НЕ нужно использовать слип.
Записан
ddrtn
Гость
« Ответ #2 : Ноябрь 01, 2011, 07:41 »

НЕ нужно использовать слип.

Если мне не изменяет склероз - sleep принимает параметр int. поэтому sleep(0.5) то же, что и sleep(0).
Записан
BuRn
Гость
« Ответ #3 : Ноябрь 01, 2011, 14:24 »

а не ругнулся ли он бы тогда на типы, что я передаю даубл а принимает он инт ?
Записан
Bepec
Гость
« Ответ #4 : Ноябрь 02, 2011, 07:27 »

Ему то что, он простые типы преобразовывает на ходу, чтоб ты не задумывался Улыбающийся

Повторюсь - слип тут не решение Улыбающийся
Записан
Странник
Гость
« Ответ #5 : Ноябрь 02, 2011, 09:42 »

попробуйте просто ожидать событие прихода данных с таймаутом 500 мс (waitForReadyRead, waitForSingleObject или на чем вы там пишете).
Записан
BuRn
Гость
« Ответ #6 : Ноябрь 04, 2011, 17:25 »

проблема решена, была в настройке порта, + таймауты ставлю через селект, т.е. ожидаю данных в течении нескольких секунд
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.155 секунд. Запросов: 21.