【发布时间】:2016-09-01 09:27:38
【问题描述】:
我想使用QSerialPort 进行交流。这是我正在尝试的:
QByteArray bytes;
bytes.append(( char) 0x6E);
bytes.append(( char) 0x00);
bytes.append(( char) 0x00);
bytes.append(( char) 0x0B);
bytes.append(( char) 0x00);
bytes.append(( char) 0x00);
bytes.append(( char) 0x2F);
bytes.append(( char) 0x4A);
bytes.append(( char) 0x00);
bytes.append(( char) 0x00);
bytes.append(( char) 0x00);
int transmitted = qSerialPort->write(bytes); //returns no error, transmitted = 11
QSerialPort 是这样配置的:
qSerialPort = new QSerialPort(path);
qSerialPort->setBaudRate(QSerialPort::Baud9600);
qSerialPort->setDataBits(QSerialPort::Data8);
qSerialPort->setParity(QSerialPort::NoParity);
qSerialPort->setStopBits(QSerialPort::OneStop);
qSerialPort->setFlowControl(QSerialPort::NoFlowControl);
qSerialPort->open(QIODevice::ReadWrite);
我没有从硬件设备得到正确的响应。使用QSerialPort 将十六进制值发送到串行端口有什么我忽略的吗?谢谢。
【问题讨论】:
-
是的。您忽略了发布完整的测试用例。也就是说,您的问题中没有任何内容可以告诉我们您正确读取了设备中的数据。
-
旁注:可以将数据包写成字符串:
const char data[] = "\x6E\x00\x00...\x00"; transmitted = qSerialPort->write(data, sizeof(data)-1); -
您的数据包内容可能有误。您将“\x00”作为数据部分,但您没有为该部分计算正确的 CRC。请参阅您应该使用哪种 CRC 的协议文档,然后在发送数据包之前计算 CRC。
标签: c++ qt serial-port