VS2019读串口操作。代码要想正常运行,需要进行相关配置,参考相关配置。
改代码使用698协议读电表地址,串口监听显示电表接收和发送正常,但是PC端接收报文不完整,详细原因等待进一步研究。
#include <QCoreApplication>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QDebug>
#include <QThread>
int main(int argc, char* argv[]) {
QCoreApplication a(argc, argv);
// 获取可用的串口信息
qDebug() << "Available ports:";
foreach(const QSerialPortInfo & info, QSerialPortInfo::availablePorts()) {
qDebug() << "Port: " << info.portName();
qDebug() << "Description: " << info.description();
qDebug() << "Manufacturer: " << info.manufacturer();
}
// 设置串口参数
QSerialPort* serial = new QSerialPort();
serial->setPortName("COM3"); // 设置串口名字
serial->setBaudRate(QSerialPort::Baud9600); // 设置波特率
serial->setDataBits(QSerialPort::Data8); // 设置数据位
serial->setParity(QSerialPort::EvenParity); // 设置校验位
serial->setStopBits(QSerialPort::OneStop); // 设置停止位
serial->setFlowControl(QSerialPort::NoFlowControl); // 设置流控制
// 打开串口
if (serial->open(QIODevice::ReadWrite)) {
qDebug() << "Serial port opened successfully.";
// 发送数据
const char* a = "68 17 00 43 45 AA AA AA AA AA AA a1 D8 FB 05 01 02 40 01 02 00 00 BB 0B 16";
QByteArray requestData(a);
qint64 bytesWritten = serial->write(QByteArray::fromHex(requestData), 25);
//serial.waitForBytesWritten(bytesWritten); //和以下代码二选一
serial->flush();
qDebug() << "Bytes written: " << bytesWritten;
qDebug() << "data send: " << QByteArray::fromHex(requestData);
QByteArray responseData;
//QThread::sleep(1);
// 读取数据
if (serial->waitForReadyRead(3000)) { // 3秒内等待数据准备
responseData = serial->readAll();
qDebug() << "Response data: " << QByteArray::fromHex(responseData);
//处理接收到的数据
}
else {
qDebug() << "Timeout waiting for data.";
}
/*QThread::sleep(1);
QByteArray responseData = serial.readAll();*/
//qDebug() << "Response data: " << responseData;
// 关闭串口
serial->close();
}
else {
qDebug() << "Error opening serial port: " << serial->errorString();
}
return a.exec();
}