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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: И снова QSerialPort  (Прочитано 2445 раз)
Eugene1911
Гость
« : Сентябрь 03, 2014, 14:17 »

Здравствуйте Улыбающийся
При написании программы для общения с платой через COM порт возникла следующая проблема: serialport шлет на плату данные типа char, а мне надо отправить байты со значением от 0 до 255, т.е. unsigned char. Подскажите, пожалуйста, как заставить qserialport слать данные в формате unsigned char?
Записан
Bepec
Гость
« Ответ #1 : Сентябрь 03, 2014, 14:32 »

serialPort шлёт байты. И ничто иное. Видимо вы неправильно отправляете данные.
Записан
Eugene1911
Гость
« Ответ #2 : Сентябрь 03, 2014, 14:38 »

Прошу прощения, протупил))

Байты я отправляю так:
Код:
void MainWindow::on_sendButton_clicked()//отправка данных
{
    QByteArray dat;
    dat.clear();//очищаем массив данных
    if (ui->controlButton->isChecked()){//формируем сообщение
        dat.append(control_b1);
        dat.append(control_b2);
        dat.append(control_b3);
        dat.append(control_b4);
        dat.append(control_b5);
    }
    serial->write(dat);//посылаем сообщение

}
переменные control_b1, control_b2 и т.д. - типа int. Нужно тогда использовать не QByteArray, а что-то другое или как?
Записан
Bepec
Гость
« Ответ #3 : Сентябрь 03, 2014, 14:52 »

Я не понимаю вашей проблемы. Точнее у вас проблемы то и не написано.

Как вы поняли что посылаете не то?
char это байты от 0 до 255. Так что всё нормально у вас должно отправляться.
Записан
Eugene1911
Гость
« Ответ #4 : Сентябрь 03, 2014, 15:02 »

В отладчике видно, что высылается не то.
В сообщении 5 байтов. 1-й байт равен 196, со второго по пятый значения байтов меньше 128.
Отладчик показывает значения dat[0], dat[1] и т.д., а также показывает тип этих этих переменных - char.
dat[1]=control_b2
dat[2]=control_b3
Здесь все нормально.
А вот значение первого байта неверное:
dat[0]=-60
Записан
Bepec
Гость
« Ответ #5 : Сентябрь 03, 2014, 15:12 »

Круто. Верить отладчику надо, только не в этом случае.
Отладчик берёт число 192 и считает его signed. Потому 1й (или 8й) бит считается знаковым и интерпретирует число как -60. А на деле это 196 и всегда им останется Веселый

PS вы заметьте, что байт занимает 2 знака (FF/AA/0A). А отладчик вам показывает значение что то типа 0xFFFFFFC4. Но Char хранит только 1 байт. C4.
Записан
Eugene1911
Гость
« Ответ #6 : Сентябрь 03, 2014, 15:13 »

Все понял, спасибо Смеющийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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