Russian Qt Forum

Программирование => С/C++ => Тема начата: BuRn от Ноябрь 01, 2011, 00:52



Название: работа с com портом проблема чтения данных
Отправлено: 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;
т.е. данные не читаются


Название: Re: работа с com портом проблема чтения данных
Отправлено: Bepec от Ноябрь 01, 2011, 07:15
Проблема проста помоему(мб я и ошибаюсь), но прога у тебя считает подтверждение, если синхронизация с устройством будет ровно полсекунды, и ни миллисекундой меньше/больше.

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

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

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


Название: Re: работа с com портом проблема чтения данных
Отправлено: ddrtn от Ноябрь 01, 2011, 07:41
НЕ нужно использовать слип.

Если мне не изменяет склероз - sleep принимает параметр int. поэтому sleep(0.5) то же, что и sleep(0).


Название: Re: работа с com портом проблема чтения данных
Отправлено: BuRn от Ноябрь 01, 2011, 14:24
а не ругнулся ли он бы тогда на типы, что я передаю даубл а принимает он инт ?


Название: Re: работа с com портом проблема чтения данных
Отправлено: Bepec от Ноябрь 02, 2011, 07:27
Ему то что, он простые типы преобразовывает на ходу, чтоб ты не задумывался :)

Повторюсь - слип тут не решение :)


Название: Re: работа с com портом проблема чтения данных
Отправлено: Странник от Ноябрь 02, 2011, 09:42
попробуйте просто ожидать событие прихода данных с таймаутом 500 мс (waitForReadyRead, waitForSingleObject или на чем вы там пишете).


Название: Re: работа с com портом проблема чтения данных
Отправлено: BuRn от Ноябрь 04, 2011, 17:25
проблема решена, была в настройке порта, + таймауты ставлю через селект, т.е. ожидаю данных в течении нескольких секунд