#include "QSerialPortUtil.h" #include <iostream> #include <QTimer> #include <QDateTime> QSerialPortUtil::QSerialPortUtil(QObject *parent) : QObject(parent) { // 其他默认配置 serial.setDataBits(QSerialPort::Data8); serial.setParity(QSerialPort::NoParity); serial.setStopBits(QSerialPort::OneStop); serial.setFlowControl(QSerialPort::NoFlowControl); } void QSerialPortUtil::openSerialPort(QString portName, int baudRate) { serial.setPortName(portName); // 串口名 serial.setBaudRate(baudRate); // 波特率 open = serial.open(QIODevice::ReadWrite); // if (open == true) // { // 绑定信号与槽 connect(&serial, &QSerialPort::readyRead, this, &QSerialPortUtil::readData); // mock data received per second QTimer * timer = new QTimer(this); connect(timer, &QTimer::timeout, this, &QSerialPortUtil::mockReceivData); timer->start(1000); // } } void QSerialPortUtil::sendData(QByteArray data) { if (this->open == true) { std::cout << data.toStdString() << std::endl; serial.write(data); } } void QSerialPortUtil::readData() { QByteArray buffer = serial.readAll(); emit dataRecieved(buffer); } bool QSerialPortUtil::isOpen() { return this->open; } void QSerialPortUtil::mockReceivData() { QDateTime now = QDateTime::currentDateTime(); /* QByteArray buffer; buffer.append("$XHTS"); buffer.append("03100010"); buffer.append(now.toString("yyMMddHHmmss")); buffer.append("276"); qsrand(QDateTime::currentDateTime().toMSecsSinceEpoch()); QByteArray statusBuff; QByteArray dataBuff; QString validStr = "1111010111001011"; statusBuff.append("|").append("1").append(validStr.toLocal8Bit()).append("01"); dataBuff.append("|").append("+0.000000000112"); for (int i = 1; i < 16; i++) { int valid = validStr.mid(i, 1).toInt(); int zero = qrand() % 2; double data = qrand() % 200 * 1e-12; dataBuff.append("|"); if (valid == 0) { dataBuff.append("+0.000000000000"); } else { dataBuff.append(zero == 0 ? "+" : "-"); dataBuff.append(QString::number(data, 'f', 12)); } } buffer.append(statusBuff).append(dataBuff).append("0"); emit dataRecieved(buffer); */ for (int i = 1; i <= 8; i++) { QByteArray buffer; QString channel = QString("%1").arg(i); QString channelRef = "1"; QString dataValue = QString("%1").arg(qrand() % 400); QString level = QString("%1").arg(qrand() % 4 / (double) 10); QString frameId = QString("%1").arg(now.toSecsSinceEpoch() % 10000); buffer.append("$GL,") .append("0,").append(channel + ",").append("1,").append(channelRef + ",") .append(dataValue + ",").append("1,").append(level + ",").append(frameId + "*") .append("00").append("\r\n"); emit dataRecieved(buffer); } }