赞
踩
这两天在帮小伙伴做项目,给我提了一个任务,就是用Qt做一个串口通信的上位机。研究了两天后,直接利用Qt封装了一个类。
关于串口通信协议,我就不多扯了,别人说的比我专业,我这里直接把我参考的作者的连结放在这里,感兴趣的直接跳转过去就好了。
《Qt实现串口通信(C++实现串口通信小助手)—串口收发及串口数据解码、串口通信模拟器。》
如果你需要代码的话,直接拷贝复制到你的项目就可以用了,除了Qt的库以外没有用任何第三方库,所以应该很容易移植的。
H文件部分
#ifndef SERIALHELPER_H #define SERIALHELPER_H #include <QtSerialPort/QSerialPort> #include <QtSerialPort/QSerialPortInfo> class SerialHelper { private: QSerialPort serial; public: SerialHelper(); public: void connect(QString portName, qint32 baudRate, QSerialPort::DataBits dataBits, QSerialPort::StopBits stopBits, QSerialPort::Parity parity); void disconnect(); bool connected(); bool available(); QSerialPort* getInstance(); void send(QString msg); QString recv(); QString errormsg(); }; #endif // SERIALHELPER_H
C++ 文件部分
#include "serialhelper.h" SerialHelper::SerialHelper() : serial() { } void SerialHelper::connect(QString portName, qint32 baudRate, QSerialPort::DataBits dataBits, QSerialPort::StopBits stopBits, QSerialPort::Parity parity) { serial.setPortName(portName); serial.setBaudRate(baudRate); serial.setStopBits(stopBits); serial.setDataBits(dataBits); serial.setParity(parity); // connect to remote device via serial port serial.open(QIODevice::ReadWrite); }; void SerialHelper::disconnect() { serial.clear(); serial.close(); }; bool SerialHelper::connected() { return serial.isOpen(); }; bool SerialHelper::available() { return serial.isOpen() & serial.isWritable() & serial.isReadable(); }; QSerialPort* SerialHelper::getInstance() { return &serial; }; void SerialHelper::send(QString msg) { serial.write(msg.toLocal8Bit()); }; QString SerialHelper::recv() { auto buf = serial.readAll(); if (!buf.isEmpty()) { QString msg = QString::fromLocal8Bit(buf); //支持中文显示 buf.clear(); return msg; } else { return "read data failed"; buf.clear(); } }; QString SerialHelper::errormsg() { return serial.errorString(); }
你要做的就是拷贝以上两段代码,然后在下面做如下操作:
// 创建对象 SerialHelper helper; // 创建Serial的连结 helper.connect("COM", QSerialPort::Baud1200, QSerialPort::Data8, QSerialPort::OneStop, QSerialPort::NoParity); // 断开连结 helper.disconnect(); // 收发数据 if (helper.available()) { // 发送数据 helper.send("Hello world!"); ... // 接收数据 auto msg = helper.recv(); ... }
大概就这么简单,好了,祝你顺利!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。