Название: Прием данных Отправлено: Eugene1911 от Сентябрь 10, 2014, 12:55 Здравствуйте :)
У меня возникла следующая проблема при приеме данных: сначала приходил не весь пакет байтов (необходимо 5, а приходило по 2). Я соединил сигнал readyRead со слотом wait_serialReceive, а в нем вызвал singleShot: Код: void MainWindow::wait_serialReceive()//ожидание приема полного пакета данных В слоте serialReceive() читаю данные и вывожу их на текстовую метку и через qDebug: Код: void MainWindow::serialReceive()//прием данных При запуске программы текстовая метка остается пустой, а qDebug пишет: first byte 7 all array "07a46c450a" first byte 0 all array "" Т.е. программа читает данные, а потом очищает массив? Или как? Название: Re: Прием данных Отправлено: Eugene1911 от Сентябрь 10, 2014, 13:27 Проблема решилась так:
temp_data объявил в хедере В слот wait_serialReceive добавил строчку Код: temp_data.clear(); Теперь все отображается. Есть еще один вопрос: сообщение которое выводится в метке, неправильное, должно быть так: "a46c450a07" а выводится так: "07a46c450a". Может, все-таки я накосячил при приеме? Название: Re: Прием данных Отправлено: Bepec от Сентябрь 10, 2014, 13:54 Всё у тебя правильно. Ты массив не правишь. Ты просто копируешь его первый элемент. Чтобы его убрать, надо сделать remove
Название: Re: Прием данных Отправлено: Eugene1911 от Сентябрь 10, 2014, 14:02 Ясно, спасибо :)
Название: Re: Прием данных Отправлено: 8Observer8 от Сентябрь 12, 2014, 07:18 Почему у вас 5 написано?
Код Это чтобы за 5 милисекунд успеть забрать данные? Или я что-то не понял? Название: Re: Прием данных Отправлено: Eugene1911 от Сентябрь 12, 2014, 09:41 Мне нужно установить время, за которое придет весь пакет данных. Я пробовал ставить разное время, в итоге остановился на 5 мс, т.к. за это время все байты успевают придти. А большее время решил не устанавливать))
Название: Re: Прием данных Отправлено: Old от Сентябрь 12, 2014, 09:43 Мне нужно установить время, за которое придет весь пакет данных. Я пробовал ставить разное время, в итоге остановился на 5 мс, т.к. за это время все байты успевают придти. А большее время решил не устанавливать)) А вы уверены, что и на других компьютерах данные будут успевать приходить за 5 мс? :)Думаю лучше сразу делать нормально и универсально. Название: Re: Прием данных Отправлено: Eugene1911 от Сентябрь 12, 2014, 09:58 Да, вы правы,я об этом не подумал)) А как тогда лучше сделать? Просто установить значение таймера побольше или сделать как-то по другому? Всего нужно принять 5 байтов :)
Название: Re: Прием данных Отправлено: Old от Сентябрь 12, 2014, 10:04 Да, вы правы,я об этом не подумал)) А как тогда лучше сделать? Просто установить значение таймера побольше или сделать как-то по другому? Всего нужно принять 5 байтов :) Так вы и ждите в слоте wait_serialReceive() что бы были доступны нужные 5 байт, а потом вычитывайте их и обрабатывайте. Код
Ну и 5 лучше константой заменить. Название: Re: Прием данных Отправлено: OKTA от Сентябрь 12, 2014, 10:06 Old - скоропечтная машинка! Не даешь слова сказать ;D
Название: Re: Прием данных Отправлено: Eugene1911 от Сентябрь 12, 2014, 10:09 Спасибо большое за совет, переделаю :)
|