Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Eugene1911 от Сентябрь 03, 2014, 14:17



Название: И снова QSerialPort
Отправлено: Eugene1911 от Сентябрь 03, 2014, 14:17
Здравствуйте :)
При написании программы для общения с платой через COM порт возникла следующая проблема: serialport шлет на плату данные типа char, а мне надо отправить байты со значением от 0 до 255, т.е. unsigned char. Подскажите, пожалуйста, как заставить qserialport слать данные в формате unsigned char?


Название: Re: И снова QSerialPort
Отправлено: Bepec от Сентябрь 03, 2014, 14:32
serialPort шлёт байты. И ничто иное. Видимо вы неправильно отправляете данные.


Название: Re: И снова QSerialPort
Отправлено: Eugene1911 от Сентябрь 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, а что-то другое или как?


Название: Re: И снова QSerialPort
Отправлено: Bepec от Сентябрь 03, 2014, 14:52
Я не понимаю вашей проблемы. Точнее у вас проблемы то и не написано.

Как вы поняли что посылаете не то?
char это байты от 0 до 255. Так что всё нормально у вас должно отправляться.


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


Название: Re: И снова QSerialPort
Отправлено: Bepec от Сентябрь 03, 2014, 15:12
Круто. Верить отладчику надо, только не в этом случае.
Отладчик берёт число 192 и считает его signed. Потому 1й (или 8й) бит считается знаковым и интерпретирует число как -60. А на деле это 196 и всегда им останется :D

PS вы заметьте, что байт занимает 2 знака (FF/AA/0A). А отладчик вам показывает значение что то типа 0xFFFFFFC4. Но Char хранит только 1 байт. C4.


Название: Re: И снова QSerialPort
Отправлено: Eugene1911 от Сентябрь 03, 2014, 15:13
Все понял, спасибо ;D