diff --git a/CounterAcq/common/utils/QSerialPortUtil.cpp b/CounterAcq/common/utils/QSerialPortUtil.cpp index 5c800ce..22b6ad2 100644 --- a/CounterAcq/common/utils/QSerialPortUtil.cpp +++ b/CounterAcq/common/utils/QSerialPortUtil.cpp @@ -20,18 +20,18 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + if (open == true) + { // 绑定信号与槽 -// connect(&serial, &QSerialPort::readyRead, -// this, &QSerialPortUtil::readData); + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) diff --git a/CounterAcq/common/utils/QSerialPortUtil.cpp b/CounterAcq/common/utils/QSerialPortUtil.cpp index 5c800ce..22b6ad2 100644 --- a/CounterAcq/common/utils/QSerialPortUtil.cpp +++ b/CounterAcq/common/utils/QSerialPortUtil.cpp @@ -20,18 +20,18 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + if (open == true) + { // 绑定信号与槽 -// connect(&serial, &QSerialPort::readyRead, -// this, &QSerialPortUtil::readData); + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) diff --git a/CounterAcqBM/CounterDevice.cpp b/CounterAcqBM/CounterDevice.cpp index 6ba2a5d..88eca67 100644 --- a/CounterAcqBM/CounterDevice.cpp +++ b/CounterAcqBM/CounterDevice.cpp @@ -57,39 +57,51 @@ void CounterDevice::dataReceivedHandler(QByteArray data) { - this->dataBuff.append(data); + QList frameList = CounterProtocolBM::extractFrameList(data); - CounterDataDto * counterData = new CounterDataDto(this); - if (CounterProtocolBM::checkFrame(this->dataBuff) == true) + if (frameList.size() > 0) { - counterData->rawFrame = this->dataBuff; -// std::cout << counterData->rawFrame.toStdString() << std::endl; - - // ★解析成数据对象 - bool parse = CounterProtocolBM::parseMessureData(this->dataBuff, counterData); - - // 解析成功 - if (parse == true) + std::cout << QDateTime::currentDateTime().toString("MMddHHmmss").toStdString() << ": " << QString::number(frameList.size()).toStdString() << std::endl; + for (int i = 0; i < frameList.size(); i++) { - // 1. 清空dataBuff,等待下一帧的数据 - this->dataBuff.clear(); + QByteArray frameByte = frameList.at(i); + if (CounterProtocolBM::checkFrame(frameByte) == true) + { + std::cout << frameByte.toStdString() << std::endl; + CounterDataDto * counterData = new CounterDataDto(this); + counterData->rawFrame = frameByte; + // ★解析成数据对象 + bool parse = CounterProtocolBM::parseMessureData(frameByte, counterData); - // 2. 补充其他字段 - QDateTime now = QDateTime::currentDateTime(); - counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); - counterData->milisecond = now.toMSecsSinceEpoch(); - counterData->devCode = devCode; + // 解析成功 + if (parse == true) + { + // 1. 清空dataBuff,等待下一帧的数据 +// this->dataBuff.clear(); - this->afterFramePhase(counterData); + if (counterData->channelActive == 0) + { + continue; + } - // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 - this->pushChannelRawFrame(counterData); + // 2. 补充其他字段 + QDateTime now = QDateTime::currentDateTime(); + counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); + counterData->milisecond = now.toMSecsSinceEpoch(); + counterData->devCode = devCode; + +// this->afterFramePhase(counterData); + + // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 + this->pushChannelRawFrame(counterData); + + // 在此处释放内存,不影响后续显示 + // 不在此处释放内存则会导致内存持续增加 + delete counterData; + } + } } } - - // 在此处释放内存,不影响后续显示 - // 不在此处释放内存则会导致内存持续增加 - delete counterData; } void CounterDevice::afterFramePhase(CounterDataDto * counterData) @@ -116,7 +128,7 @@ .arg(counterData->timestamp) .arg(counterData->frameId) .arg(counterData->channelData) - .arg(counterData->channelClockValue); + .arg(counterData->channelClockValueStr); QLogUtil::writeChannelDataLogByDate(date, chFilename, channelDataStr); // 3. 输出到中间件,执行后续处理过程 @@ -142,6 +154,7 @@ // 自身是参考通道 counterData->clone(&bench); counterData->channelClockValue = 0; + counterData->channelClockValueStr = "0"; emit successDataCalculate(counterData); @@ -154,7 +167,8 @@ CounterDataDto * hisItem = hisList.at(i); if (qAbs(hisItem->milisecond - bench.milisecond) < 500) { - hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // ns + hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // 10ps to ns + hisItem->channelClockValueStr = QString::fromStdString(std::to_string(hisItem->channelClockValue)); emit successDataCalculate(hisItem); delete hisItem; @@ -170,7 +184,8 @@ { // 在参考基准中能找到 qlonglong currentBench = bench.channelData; - counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps - ns + counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps to ns + counterData->channelClockValueStr = QString::fromStdString(std::to_string(counterData->channelClockValue)); emit successDataCalculate(counterData); } else diff --git a/CounterAcq/common/utils/QSerialPortUtil.cpp b/CounterAcq/common/utils/QSerialPortUtil.cpp index 5c800ce..22b6ad2 100644 --- a/CounterAcq/common/utils/QSerialPortUtil.cpp +++ b/CounterAcq/common/utils/QSerialPortUtil.cpp @@ -20,18 +20,18 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + if (open == true) + { // 绑定信号与槽 -// connect(&serial, &QSerialPort::readyRead, -// this, &QSerialPortUtil::readData); + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) diff --git a/CounterAcqBM/CounterDevice.cpp b/CounterAcqBM/CounterDevice.cpp index 6ba2a5d..88eca67 100644 --- a/CounterAcqBM/CounterDevice.cpp +++ b/CounterAcqBM/CounterDevice.cpp @@ -57,39 +57,51 @@ void CounterDevice::dataReceivedHandler(QByteArray data) { - this->dataBuff.append(data); + QList frameList = CounterProtocolBM::extractFrameList(data); - CounterDataDto * counterData = new CounterDataDto(this); - if (CounterProtocolBM::checkFrame(this->dataBuff) == true) + if (frameList.size() > 0) { - counterData->rawFrame = this->dataBuff; -// std::cout << counterData->rawFrame.toStdString() << std::endl; - - // ★解析成数据对象 - bool parse = CounterProtocolBM::parseMessureData(this->dataBuff, counterData); - - // 解析成功 - if (parse == true) + std::cout << QDateTime::currentDateTime().toString("MMddHHmmss").toStdString() << ": " << QString::number(frameList.size()).toStdString() << std::endl; + for (int i = 0; i < frameList.size(); i++) { - // 1. 清空dataBuff,等待下一帧的数据 - this->dataBuff.clear(); + QByteArray frameByte = frameList.at(i); + if (CounterProtocolBM::checkFrame(frameByte) == true) + { + std::cout << frameByte.toStdString() << std::endl; + CounterDataDto * counterData = new CounterDataDto(this); + counterData->rawFrame = frameByte; + // ★解析成数据对象 + bool parse = CounterProtocolBM::parseMessureData(frameByte, counterData); - // 2. 补充其他字段 - QDateTime now = QDateTime::currentDateTime(); - counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); - counterData->milisecond = now.toMSecsSinceEpoch(); - counterData->devCode = devCode; + // 解析成功 + if (parse == true) + { + // 1. 清空dataBuff,等待下一帧的数据 +// this->dataBuff.clear(); - this->afterFramePhase(counterData); + if (counterData->channelActive == 0) + { + continue; + } - // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 - this->pushChannelRawFrame(counterData); + // 2. 补充其他字段 + QDateTime now = QDateTime::currentDateTime(); + counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); + counterData->milisecond = now.toMSecsSinceEpoch(); + counterData->devCode = devCode; + +// this->afterFramePhase(counterData); + + // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 + this->pushChannelRawFrame(counterData); + + // 在此处释放内存,不影响后续显示 + // 不在此处释放内存则会导致内存持续增加 + delete counterData; + } + } } } - - // 在此处释放内存,不影响后续显示 - // 不在此处释放内存则会导致内存持续增加 - delete counterData; } void CounterDevice::afterFramePhase(CounterDataDto * counterData) @@ -116,7 +128,7 @@ .arg(counterData->timestamp) .arg(counterData->frameId) .arg(counterData->channelData) - .arg(counterData->channelClockValue); + .arg(counterData->channelClockValueStr); QLogUtil::writeChannelDataLogByDate(date, chFilename, channelDataStr); // 3. 输出到中间件,执行后续处理过程 @@ -142,6 +154,7 @@ // 自身是参考通道 counterData->clone(&bench); counterData->channelClockValue = 0; + counterData->channelClockValueStr = "0"; emit successDataCalculate(counterData); @@ -154,7 +167,8 @@ CounterDataDto * hisItem = hisList.at(i); if (qAbs(hisItem->milisecond - bench.milisecond) < 500) { - hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // ns + hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // 10ps to ns + hisItem->channelClockValueStr = QString::fromStdString(std::to_string(hisItem->channelClockValue)); emit successDataCalculate(hisItem); delete hisItem; @@ -170,7 +184,8 @@ { // 在参考基准中能找到 qlonglong currentBench = bench.channelData; - counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps - ns + counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps to ns + counterData->channelClockValueStr = QString::fromStdString(std::to_string(counterData->channelClockValue)); emit successDataCalculate(counterData); } else diff --git a/CounterAcqBM/CounterWindow.cpp b/CounterAcqBM/CounterWindow.cpp index 8166d47..f14f587 100644 --- a/CounterAcqBM/CounterWindow.cpp +++ b/CounterAcqBM/CounterWindow.cpp @@ -130,7 +130,7 @@ dataLabel->setStyleSheet("margin-left:20;"); vbox->addWidget(dataLabel); QLineEdit * dataValue = new QLineEdit(); - dataValue->setFixedWidth(75); + dataValue->setFixedWidth(200); dataValue->setFont(labelFont); vbox->addWidget(dataValue); @@ -209,7 +209,7 @@ // 赋值,对应的lineEdit/label ((QLineEdit *)channelBox->children().at(2))->setText(counterData->timestamp); - ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValue)); + ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValueStr)); ((QLineEdit *)channelBox->children().at(6))->setText(counterData->frameId); ((QLineEdit *)channelBox->children().at(8))->setText(QString("%1").arg(counterData->channelRefId)); ((QLineEdit *)channelBox->children().at(10))->setText(QString("%1 Ω").arg(counterData->load == 1 ? "1M" : "50")); diff --git a/CounterAcq/common/utils/QSerialPortUtil.cpp b/CounterAcq/common/utils/QSerialPortUtil.cpp index 5c800ce..22b6ad2 100644 --- a/CounterAcq/common/utils/QSerialPortUtil.cpp +++ b/CounterAcq/common/utils/QSerialPortUtil.cpp @@ -20,18 +20,18 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + if (open == true) + { // 绑定信号与槽 -// connect(&serial, &QSerialPort::readyRead, -// this, &QSerialPortUtil::readData); + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) diff --git a/CounterAcqBM/CounterDevice.cpp b/CounterAcqBM/CounterDevice.cpp index 6ba2a5d..88eca67 100644 --- a/CounterAcqBM/CounterDevice.cpp +++ b/CounterAcqBM/CounterDevice.cpp @@ -57,39 +57,51 @@ void CounterDevice::dataReceivedHandler(QByteArray data) { - this->dataBuff.append(data); + QList frameList = CounterProtocolBM::extractFrameList(data); - CounterDataDto * counterData = new CounterDataDto(this); - if (CounterProtocolBM::checkFrame(this->dataBuff) == true) + if (frameList.size() > 0) { - counterData->rawFrame = this->dataBuff; -// std::cout << counterData->rawFrame.toStdString() << std::endl; - - // ★解析成数据对象 - bool parse = CounterProtocolBM::parseMessureData(this->dataBuff, counterData); - - // 解析成功 - if (parse == true) + std::cout << QDateTime::currentDateTime().toString("MMddHHmmss").toStdString() << ": " << QString::number(frameList.size()).toStdString() << std::endl; + for (int i = 0; i < frameList.size(); i++) { - // 1. 清空dataBuff,等待下一帧的数据 - this->dataBuff.clear(); + QByteArray frameByte = frameList.at(i); + if (CounterProtocolBM::checkFrame(frameByte) == true) + { + std::cout << frameByte.toStdString() << std::endl; + CounterDataDto * counterData = new CounterDataDto(this); + counterData->rawFrame = frameByte; + // ★解析成数据对象 + bool parse = CounterProtocolBM::parseMessureData(frameByte, counterData); - // 2. 补充其他字段 - QDateTime now = QDateTime::currentDateTime(); - counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); - counterData->milisecond = now.toMSecsSinceEpoch(); - counterData->devCode = devCode; + // 解析成功 + if (parse == true) + { + // 1. 清空dataBuff,等待下一帧的数据 +// this->dataBuff.clear(); - this->afterFramePhase(counterData); + if (counterData->channelActive == 0) + { + continue; + } - // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 - this->pushChannelRawFrame(counterData); + // 2. 补充其他字段 + QDateTime now = QDateTime::currentDateTime(); + counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); + counterData->milisecond = now.toMSecsSinceEpoch(); + counterData->devCode = devCode; + +// this->afterFramePhase(counterData); + + // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 + this->pushChannelRawFrame(counterData); + + // 在此处释放内存,不影响后续显示 + // 不在此处释放内存则会导致内存持续增加 + delete counterData; + } + } } } - - // 在此处释放内存,不影响后续显示 - // 不在此处释放内存则会导致内存持续增加 - delete counterData; } void CounterDevice::afterFramePhase(CounterDataDto * counterData) @@ -116,7 +128,7 @@ .arg(counterData->timestamp) .arg(counterData->frameId) .arg(counterData->channelData) - .arg(counterData->channelClockValue); + .arg(counterData->channelClockValueStr); QLogUtil::writeChannelDataLogByDate(date, chFilename, channelDataStr); // 3. 输出到中间件,执行后续处理过程 @@ -142,6 +154,7 @@ // 自身是参考通道 counterData->clone(&bench); counterData->channelClockValue = 0; + counterData->channelClockValueStr = "0"; emit successDataCalculate(counterData); @@ -154,7 +167,8 @@ CounterDataDto * hisItem = hisList.at(i); if (qAbs(hisItem->milisecond - bench.milisecond) < 500) { - hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // ns + hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // 10ps to ns + hisItem->channelClockValueStr = QString::fromStdString(std::to_string(hisItem->channelClockValue)); emit successDataCalculate(hisItem); delete hisItem; @@ -170,7 +184,8 @@ { // 在参考基准中能找到 qlonglong currentBench = bench.channelData; - counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps - ns + counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps to ns + counterData->channelClockValueStr = QString::fromStdString(std::to_string(counterData->channelClockValue)); emit successDataCalculate(counterData); } else diff --git a/CounterAcqBM/CounterWindow.cpp b/CounterAcqBM/CounterWindow.cpp index 8166d47..f14f587 100644 --- a/CounterAcqBM/CounterWindow.cpp +++ b/CounterAcqBM/CounterWindow.cpp @@ -130,7 +130,7 @@ dataLabel->setStyleSheet("margin-left:20;"); vbox->addWidget(dataLabel); QLineEdit * dataValue = new QLineEdit(); - dataValue->setFixedWidth(75); + dataValue->setFixedWidth(200); dataValue->setFont(labelFont); vbox->addWidget(dataValue); @@ -209,7 +209,7 @@ // 赋值,对应的lineEdit/label ((QLineEdit *)channelBox->children().at(2))->setText(counterData->timestamp); - ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValue)); + ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValueStr)); ((QLineEdit *)channelBox->children().at(6))->setText(counterData->frameId); ((QLineEdit *)channelBox->children().at(8))->setText(QString("%1").arg(counterData->channelRefId)); ((QLineEdit *)channelBox->children().at(10))->setText(QString("%1 Ω").arg(counterData->load == 1 ? "1M" : "50")); diff --git a/CounterAcqBM/common/utils/QSerialPortUtil.cpp b/CounterAcqBM/common/utils/QSerialPortUtil.cpp index 051aeb0..aa8e2c4 100644 --- a/CounterAcqBM/common/utils/QSerialPortUtil.cpp +++ b/CounterAcqBM/common/utils/QSerialPortUtil.cpp @@ -8,7 +8,7 @@ { // 其他默认配置 serial.setDataBits(QSerialPort::Data8); - serial.setParity(QSerialPort::NoParity); + serial.setParity(QSerialPort::EvenParity); serial.setStopBits(QSerialPort::OneStop); serial.setFlowControl(QSerialPort::NoFlowControl); } @@ -20,18 +20,20 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + std::cout << QString("%1, %2, %3").arg(portName).arg(baudRate).arg(open).toStdString() << std::endl; + + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) @@ -46,8 +48,12 @@ void QSerialPortUtil::readData() { QByteArray buffer = serial.readAll(); - - emit dataRecieved(buffer); + recvBuff.append(buffer); + if (recvBuff.endsWith("\r\n")) + { + emit dataRecieved(recvBuff); + recvBuff.clear(); + } } bool QSerialPortUtil::isOpen() @@ -97,21 +103,38 @@ emit dataRecieved(buffer); */ - for (int i = 1; i <= 8; i++) - { - QByteArray buffer; + QByteArray buffer; +// for (int i = 1; i <= 8; i++) +// { +// 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); - 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"); +// } - 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); - } + buffer.append("$GL,0,1,1,1,10304181796,0,1.0,59354*1D").append("\r\n"); + buffer.append("$GL,0,2,1,1,10304180924,0,1.0,59341*1C").append("\r\n"); + buffer.append("$GL,0,3,1,1,10304181782,0,1.0,59371*1D").append("\r\n"); + buffer.append("$GL,0,4,1,1,10304182288,0,1.0,59874*18").append("\r\n"); + buffer.append("$GL,0,5,1,1,10304182136,0,1.0,59695*1E").append("\r\n"); + buffer.append("$GL,0,6,1,1,10304182466,0,1.0,60015*19").append("\r\n"); + buffer.append("$GL,0,7,1,1,10304175641,0,1.0,41447*17").append("\r\n"); + buffer.append("$GL,0,8,1,1,10304175969,0,1.0,32686*16").append("\r\n"); + buffer.append("$GL,0,9,1,1,25393441727,0,1.0,32979*16").append("\r\n"); + buffer.append("$GL,0,10,1,1,59027139401,0,1.0,64835*2E").append("\r\n"); + buffer.append("$GL,0,11,1,1,70478437959,0,1.0,54457*2A").append("\r\n"); + buffer.append("$GL,0,12,1,1,10304168666,0,1.0,41512*2B").append("\r\n"); + buffer.append("$GL,0,13,1,1,4194443548,0,1.0,31190*1E").append("\r\n"); + buffer.append("$GL,0,14,1,1,58426511854,0,1.0,31289*21").append("\r\n"); + buffer.append("$GL,0,15,0,1,0,0,1.0,0*21").append("\r\n"); + buffer.append("$GL,0,16,0,1,0,0,1.0,0*22").append("\r\n"); + buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,2000,3000,3001*74").append("\r\n"); + buffer.append("$GL,1,2,2,211123,210930*1D").append("\r\n"); + emit dataRecieved(buffer); } diff --git a/CounterAcq/common/utils/QSerialPortUtil.cpp b/CounterAcq/common/utils/QSerialPortUtil.cpp index 5c800ce..22b6ad2 100644 --- a/CounterAcq/common/utils/QSerialPortUtil.cpp +++ b/CounterAcq/common/utils/QSerialPortUtil.cpp @@ -20,18 +20,18 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + if (open == true) + { // 绑定信号与槽 -// connect(&serial, &QSerialPort::readyRead, -// this, &QSerialPortUtil::readData); + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) diff --git a/CounterAcqBM/CounterDevice.cpp b/CounterAcqBM/CounterDevice.cpp index 6ba2a5d..88eca67 100644 --- a/CounterAcqBM/CounterDevice.cpp +++ b/CounterAcqBM/CounterDevice.cpp @@ -57,39 +57,51 @@ void CounterDevice::dataReceivedHandler(QByteArray data) { - this->dataBuff.append(data); + QList frameList = CounterProtocolBM::extractFrameList(data); - CounterDataDto * counterData = new CounterDataDto(this); - if (CounterProtocolBM::checkFrame(this->dataBuff) == true) + if (frameList.size() > 0) { - counterData->rawFrame = this->dataBuff; -// std::cout << counterData->rawFrame.toStdString() << std::endl; - - // ★解析成数据对象 - bool parse = CounterProtocolBM::parseMessureData(this->dataBuff, counterData); - - // 解析成功 - if (parse == true) + std::cout << QDateTime::currentDateTime().toString("MMddHHmmss").toStdString() << ": " << QString::number(frameList.size()).toStdString() << std::endl; + for (int i = 0; i < frameList.size(); i++) { - // 1. 清空dataBuff,等待下一帧的数据 - this->dataBuff.clear(); + QByteArray frameByte = frameList.at(i); + if (CounterProtocolBM::checkFrame(frameByte) == true) + { + std::cout << frameByte.toStdString() << std::endl; + CounterDataDto * counterData = new CounterDataDto(this); + counterData->rawFrame = frameByte; + // ★解析成数据对象 + bool parse = CounterProtocolBM::parseMessureData(frameByte, counterData); - // 2. 补充其他字段 - QDateTime now = QDateTime::currentDateTime(); - counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); - counterData->milisecond = now.toMSecsSinceEpoch(); - counterData->devCode = devCode; + // 解析成功 + if (parse == true) + { + // 1. 清空dataBuff,等待下一帧的数据 +// this->dataBuff.clear(); - this->afterFramePhase(counterData); + if (counterData->channelActive == 0) + { + continue; + } - // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 - this->pushChannelRawFrame(counterData); + // 2. 补充其他字段 + QDateTime now = QDateTime::currentDateTime(); + counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); + counterData->milisecond = now.toMSecsSinceEpoch(); + counterData->devCode = devCode; + +// this->afterFramePhase(counterData); + + // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 + this->pushChannelRawFrame(counterData); + + // 在此处释放内存,不影响后续显示 + // 不在此处释放内存则会导致内存持续增加 + delete counterData; + } + } } } - - // 在此处释放内存,不影响后续显示 - // 不在此处释放内存则会导致内存持续增加 - delete counterData; } void CounterDevice::afterFramePhase(CounterDataDto * counterData) @@ -116,7 +128,7 @@ .arg(counterData->timestamp) .arg(counterData->frameId) .arg(counterData->channelData) - .arg(counterData->channelClockValue); + .arg(counterData->channelClockValueStr); QLogUtil::writeChannelDataLogByDate(date, chFilename, channelDataStr); // 3. 输出到中间件,执行后续处理过程 @@ -142,6 +154,7 @@ // 自身是参考通道 counterData->clone(&bench); counterData->channelClockValue = 0; + counterData->channelClockValueStr = "0"; emit successDataCalculate(counterData); @@ -154,7 +167,8 @@ CounterDataDto * hisItem = hisList.at(i); if (qAbs(hisItem->milisecond - bench.milisecond) < 500) { - hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // ns + hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // 10ps to ns + hisItem->channelClockValueStr = QString::fromStdString(std::to_string(hisItem->channelClockValue)); emit successDataCalculate(hisItem); delete hisItem; @@ -170,7 +184,8 @@ { // 在参考基准中能找到 qlonglong currentBench = bench.channelData; - counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps - ns + counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps to ns + counterData->channelClockValueStr = QString::fromStdString(std::to_string(counterData->channelClockValue)); emit successDataCalculate(counterData); } else diff --git a/CounterAcqBM/CounterWindow.cpp b/CounterAcqBM/CounterWindow.cpp index 8166d47..f14f587 100644 --- a/CounterAcqBM/CounterWindow.cpp +++ b/CounterAcqBM/CounterWindow.cpp @@ -130,7 +130,7 @@ dataLabel->setStyleSheet("margin-left:20;"); vbox->addWidget(dataLabel); QLineEdit * dataValue = new QLineEdit(); - dataValue->setFixedWidth(75); + dataValue->setFixedWidth(200); dataValue->setFont(labelFont); vbox->addWidget(dataValue); @@ -209,7 +209,7 @@ // 赋值,对应的lineEdit/label ((QLineEdit *)channelBox->children().at(2))->setText(counterData->timestamp); - ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValue)); + ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValueStr)); ((QLineEdit *)channelBox->children().at(6))->setText(counterData->frameId); ((QLineEdit *)channelBox->children().at(8))->setText(QString("%1").arg(counterData->channelRefId)); ((QLineEdit *)channelBox->children().at(10))->setText(QString("%1 Ω").arg(counterData->load == 1 ? "1M" : "50")); diff --git a/CounterAcqBM/common/utils/QSerialPortUtil.cpp b/CounterAcqBM/common/utils/QSerialPortUtil.cpp index 051aeb0..aa8e2c4 100644 --- a/CounterAcqBM/common/utils/QSerialPortUtil.cpp +++ b/CounterAcqBM/common/utils/QSerialPortUtil.cpp @@ -8,7 +8,7 @@ { // 其他默认配置 serial.setDataBits(QSerialPort::Data8); - serial.setParity(QSerialPort::NoParity); + serial.setParity(QSerialPort::EvenParity); serial.setStopBits(QSerialPort::OneStop); serial.setFlowControl(QSerialPort::NoFlowControl); } @@ -20,18 +20,20 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + std::cout << QString("%1, %2, %3").arg(portName).arg(baudRate).arg(open).toStdString() << std::endl; + + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) @@ -46,8 +48,12 @@ void QSerialPortUtil::readData() { QByteArray buffer = serial.readAll(); - - emit dataRecieved(buffer); + recvBuff.append(buffer); + if (recvBuff.endsWith("\r\n")) + { + emit dataRecieved(recvBuff); + recvBuff.clear(); + } } bool QSerialPortUtil::isOpen() @@ -97,21 +103,38 @@ emit dataRecieved(buffer); */ - for (int i = 1; i <= 8; i++) - { - QByteArray buffer; + QByteArray buffer; +// for (int i = 1; i <= 8; i++) +// { +// 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); - 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"); +// } - 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); - } + buffer.append("$GL,0,1,1,1,10304181796,0,1.0,59354*1D").append("\r\n"); + buffer.append("$GL,0,2,1,1,10304180924,0,1.0,59341*1C").append("\r\n"); + buffer.append("$GL,0,3,1,1,10304181782,0,1.0,59371*1D").append("\r\n"); + buffer.append("$GL,0,4,1,1,10304182288,0,1.0,59874*18").append("\r\n"); + buffer.append("$GL,0,5,1,1,10304182136,0,1.0,59695*1E").append("\r\n"); + buffer.append("$GL,0,6,1,1,10304182466,0,1.0,60015*19").append("\r\n"); + buffer.append("$GL,0,7,1,1,10304175641,0,1.0,41447*17").append("\r\n"); + buffer.append("$GL,0,8,1,1,10304175969,0,1.0,32686*16").append("\r\n"); + buffer.append("$GL,0,9,1,1,25393441727,0,1.0,32979*16").append("\r\n"); + buffer.append("$GL,0,10,1,1,59027139401,0,1.0,64835*2E").append("\r\n"); + buffer.append("$GL,0,11,1,1,70478437959,0,1.0,54457*2A").append("\r\n"); + buffer.append("$GL,0,12,1,1,10304168666,0,1.0,41512*2B").append("\r\n"); + buffer.append("$GL,0,13,1,1,4194443548,0,1.0,31190*1E").append("\r\n"); + buffer.append("$GL,0,14,1,1,58426511854,0,1.0,31289*21").append("\r\n"); + buffer.append("$GL,0,15,0,1,0,0,1.0,0*21").append("\r\n"); + buffer.append("$GL,0,16,0,1,0,0,1.0,0*22").append("\r\n"); + buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,2000,3000,3001*74").append("\r\n"); + buffer.append("$GL,1,2,2,211123,210930*1D").append("\r\n"); + emit dataRecieved(buffer); } diff --git a/CounterAcqBM/common/utils/QSerialPortUtil.h b/CounterAcqBM/common/utils/QSerialPortUtil.h index accf403..9af813a 100644 --- a/CounterAcqBM/common/utils/QSerialPortUtil.h +++ b/CounterAcqBM/common/utils/QSerialPortUtil.h @@ -20,6 +20,7 @@ QSerialPort serial; bool open; + QByteArray recvBuff; void mockReceivData(); diff --git a/CounterAcq/common/utils/QSerialPortUtil.cpp b/CounterAcq/common/utils/QSerialPortUtil.cpp index 5c800ce..22b6ad2 100644 --- a/CounterAcq/common/utils/QSerialPortUtil.cpp +++ b/CounterAcq/common/utils/QSerialPortUtil.cpp @@ -20,18 +20,18 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + if (open == true) + { // 绑定信号与槽 -// connect(&serial, &QSerialPort::readyRead, -// this, &QSerialPortUtil::readData); + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) diff --git a/CounterAcqBM/CounterDevice.cpp b/CounterAcqBM/CounterDevice.cpp index 6ba2a5d..88eca67 100644 --- a/CounterAcqBM/CounterDevice.cpp +++ b/CounterAcqBM/CounterDevice.cpp @@ -57,39 +57,51 @@ void CounterDevice::dataReceivedHandler(QByteArray data) { - this->dataBuff.append(data); + QList frameList = CounterProtocolBM::extractFrameList(data); - CounterDataDto * counterData = new CounterDataDto(this); - if (CounterProtocolBM::checkFrame(this->dataBuff) == true) + if (frameList.size() > 0) { - counterData->rawFrame = this->dataBuff; -// std::cout << counterData->rawFrame.toStdString() << std::endl; - - // ★解析成数据对象 - bool parse = CounterProtocolBM::parseMessureData(this->dataBuff, counterData); - - // 解析成功 - if (parse == true) + std::cout << QDateTime::currentDateTime().toString("MMddHHmmss").toStdString() << ": " << QString::number(frameList.size()).toStdString() << std::endl; + for (int i = 0; i < frameList.size(); i++) { - // 1. 清空dataBuff,等待下一帧的数据 - this->dataBuff.clear(); + QByteArray frameByte = frameList.at(i); + if (CounterProtocolBM::checkFrame(frameByte) == true) + { + std::cout << frameByte.toStdString() << std::endl; + CounterDataDto * counterData = new CounterDataDto(this); + counterData->rawFrame = frameByte; + // ★解析成数据对象 + bool parse = CounterProtocolBM::parseMessureData(frameByte, counterData); - // 2. 补充其他字段 - QDateTime now = QDateTime::currentDateTime(); - counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); - counterData->milisecond = now.toMSecsSinceEpoch(); - counterData->devCode = devCode; + // 解析成功 + if (parse == true) + { + // 1. 清空dataBuff,等待下一帧的数据 +// this->dataBuff.clear(); - this->afterFramePhase(counterData); + if (counterData->channelActive == 0) + { + continue; + } - // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 - this->pushChannelRawFrame(counterData); + // 2. 补充其他字段 + QDateTime now = QDateTime::currentDateTime(); + counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); + counterData->milisecond = now.toMSecsSinceEpoch(); + counterData->devCode = devCode; + +// this->afterFramePhase(counterData); + + // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 + this->pushChannelRawFrame(counterData); + + // 在此处释放内存,不影响后续显示 + // 不在此处释放内存则会导致内存持续增加 + delete counterData; + } + } } } - - // 在此处释放内存,不影响后续显示 - // 不在此处释放内存则会导致内存持续增加 - delete counterData; } void CounterDevice::afterFramePhase(CounterDataDto * counterData) @@ -116,7 +128,7 @@ .arg(counterData->timestamp) .arg(counterData->frameId) .arg(counterData->channelData) - .arg(counterData->channelClockValue); + .arg(counterData->channelClockValueStr); QLogUtil::writeChannelDataLogByDate(date, chFilename, channelDataStr); // 3. 输出到中间件,执行后续处理过程 @@ -142,6 +154,7 @@ // 自身是参考通道 counterData->clone(&bench); counterData->channelClockValue = 0; + counterData->channelClockValueStr = "0"; emit successDataCalculate(counterData); @@ -154,7 +167,8 @@ CounterDataDto * hisItem = hisList.at(i); if (qAbs(hisItem->milisecond - bench.milisecond) < 500) { - hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // ns + hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // 10ps to ns + hisItem->channelClockValueStr = QString::fromStdString(std::to_string(hisItem->channelClockValue)); emit successDataCalculate(hisItem); delete hisItem; @@ -170,7 +184,8 @@ { // 在参考基准中能找到 qlonglong currentBench = bench.channelData; - counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps - ns + counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps to ns + counterData->channelClockValueStr = QString::fromStdString(std::to_string(counterData->channelClockValue)); emit successDataCalculate(counterData); } else diff --git a/CounterAcqBM/CounterWindow.cpp b/CounterAcqBM/CounterWindow.cpp index 8166d47..f14f587 100644 --- a/CounterAcqBM/CounterWindow.cpp +++ b/CounterAcqBM/CounterWindow.cpp @@ -130,7 +130,7 @@ dataLabel->setStyleSheet("margin-left:20;"); vbox->addWidget(dataLabel); QLineEdit * dataValue = new QLineEdit(); - dataValue->setFixedWidth(75); + dataValue->setFixedWidth(200); dataValue->setFont(labelFont); vbox->addWidget(dataValue); @@ -209,7 +209,7 @@ // 赋值,对应的lineEdit/label ((QLineEdit *)channelBox->children().at(2))->setText(counterData->timestamp); - ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValue)); + ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValueStr)); ((QLineEdit *)channelBox->children().at(6))->setText(counterData->frameId); ((QLineEdit *)channelBox->children().at(8))->setText(QString("%1").arg(counterData->channelRefId)); ((QLineEdit *)channelBox->children().at(10))->setText(QString("%1 Ω").arg(counterData->load == 1 ? "1M" : "50")); diff --git a/CounterAcqBM/common/utils/QSerialPortUtil.cpp b/CounterAcqBM/common/utils/QSerialPortUtil.cpp index 051aeb0..aa8e2c4 100644 --- a/CounterAcqBM/common/utils/QSerialPortUtil.cpp +++ b/CounterAcqBM/common/utils/QSerialPortUtil.cpp @@ -8,7 +8,7 @@ { // 其他默认配置 serial.setDataBits(QSerialPort::Data8); - serial.setParity(QSerialPort::NoParity); + serial.setParity(QSerialPort::EvenParity); serial.setStopBits(QSerialPort::OneStop); serial.setFlowControl(QSerialPort::NoFlowControl); } @@ -20,18 +20,20 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + std::cout << QString("%1, %2, %3").arg(portName).arg(baudRate).arg(open).toStdString() << std::endl; + + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) @@ -46,8 +48,12 @@ void QSerialPortUtil::readData() { QByteArray buffer = serial.readAll(); - - emit dataRecieved(buffer); + recvBuff.append(buffer); + if (recvBuff.endsWith("\r\n")) + { + emit dataRecieved(recvBuff); + recvBuff.clear(); + } } bool QSerialPortUtil::isOpen() @@ -97,21 +103,38 @@ emit dataRecieved(buffer); */ - for (int i = 1; i <= 8; i++) - { - QByteArray buffer; + QByteArray buffer; +// for (int i = 1; i <= 8; i++) +// { +// 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); - 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"); +// } - 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); - } + buffer.append("$GL,0,1,1,1,10304181796,0,1.0,59354*1D").append("\r\n"); + buffer.append("$GL,0,2,1,1,10304180924,0,1.0,59341*1C").append("\r\n"); + buffer.append("$GL,0,3,1,1,10304181782,0,1.0,59371*1D").append("\r\n"); + buffer.append("$GL,0,4,1,1,10304182288,0,1.0,59874*18").append("\r\n"); + buffer.append("$GL,0,5,1,1,10304182136,0,1.0,59695*1E").append("\r\n"); + buffer.append("$GL,0,6,1,1,10304182466,0,1.0,60015*19").append("\r\n"); + buffer.append("$GL,0,7,1,1,10304175641,0,1.0,41447*17").append("\r\n"); + buffer.append("$GL,0,8,1,1,10304175969,0,1.0,32686*16").append("\r\n"); + buffer.append("$GL,0,9,1,1,25393441727,0,1.0,32979*16").append("\r\n"); + buffer.append("$GL,0,10,1,1,59027139401,0,1.0,64835*2E").append("\r\n"); + buffer.append("$GL,0,11,1,1,70478437959,0,1.0,54457*2A").append("\r\n"); + buffer.append("$GL,0,12,1,1,10304168666,0,1.0,41512*2B").append("\r\n"); + buffer.append("$GL,0,13,1,1,4194443548,0,1.0,31190*1E").append("\r\n"); + buffer.append("$GL,0,14,1,1,58426511854,0,1.0,31289*21").append("\r\n"); + buffer.append("$GL,0,15,0,1,0,0,1.0,0*21").append("\r\n"); + buffer.append("$GL,0,16,0,1,0,0,1.0,0*22").append("\r\n"); + buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,2000,3000,3001*74").append("\r\n"); + buffer.append("$GL,1,2,2,211123,210930*1D").append("\r\n"); + emit dataRecieved(buffer); } diff --git a/CounterAcqBM/common/utils/QSerialPortUtil.h b/CounterAcqBM/common/utils/QSerialPortUtil.h index accf403..9af813a 100644 --- a/CounterAcqBM/common/utils/QSerialPortUtil.h +++ b/CounterAcqBM/common/utils/QSerialPortUtil.h @@ -20,6 +20,7 @@ QSerialPort serial; bool open; + QByteArray recvBuff; void mockReceivData(); diff --git a/CounterAcqBM/common/utils/SettingConfig.cpp b/CounterAcqBM/common/utils/SettingConfig.cpp index c95ff2a..9a84a43 100644 --- a/CounterAcqBM/common/utils/SettingConfig.cpp +++ b/CounterAcqBM/common/utils/SettingConfig.cpp @@ -11,8 +11,8 @@ KAFKA_BROKERS = getProperty("kafka", "brokers").toString(); KAFKA_DATA_TOPIC = getProperty("kafka", "dataTopic").toString(); NEED_SASL = getProperty("kafka", "needSasl").toInt(); - SASL_USERNAME = getProperty("kafka", "sasl_username").toString(); - SASL_PASSWORD = getProperty("kafka", "sasl_password").toString(); + SASL_USERNAME = getProperty("kafka", "saslUsername").toString(); + SASL_PASSWORD = getProperty("kafka", "saslPassword").toString(); CLIENT_ID = getProperty("client", "clientId").toString(); APP_KEY = getProperty("client", "appKey").toString(); diff --git a/CounterAcq/common/utils/QSerialPortUtil.cpp b/CounterAcq/common/utils/QSerialPortUtil.cpp index 5c800ce..22b6ad2 100644 --- a/CounterAcq/common/utils/QSerialPortUtil.cpp +++ b/CounterAcq/common/utils/QSerialPortUtil.cpp @@ -20,18 +20,18 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + if (open == true) + { // 绑定信号与槽 -// connect(&serial, &QSerialPort::readyRead, -// this, &QSerialPortUtil::readData); + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) diff --git a/CounterAcqBM/CounterDevice.cpp b/CounterAcqBM/CounterDevice.cpp index 6ba2a5d..88eca67 100644 --- a/CounterAcqBM/CounterDevice.cpp +++ b/CounterAcqBM/CounterDevice.cpp @@ -57,39 +57,51 @@ void CounterDevice::dataReceivedHandler(QByteArray data) { - this->dataBuff.append(data); + QList frameList = CounterProtocolBM::extractFrameList(data); - CounterDataDto * counterData = new CounterDataDto(this); - if (CounterProtocolBM::checkFrame(this->dataBuff) == true) + if (frameList.size() > 0) { - counterData->rawFrame = this->dataBuff; -// std::cout << counterData->rawFrame.toStdString() << std::endl; - - // ★解析成数据对象 - bool parse = CounterProtocolBM::parseMessureData(this->dataBuff, counterData); - - // 解析成功 - if (parse == true) + std::cout << QDateTime::currentDateTime().toString("MMddHHmmss").toStdString() << ": " << QString::number(frameList.size()).toStdString() << std::endl; + for (int i = 0; i < frameList.size(); i++) { - // 1. 清空dataBuff,等待下一帧的数据 - this->dataBuff.clear(); + QByteArray frameByte = frameList.at(i); + if (CounterProtocolBM::checkFrame(frameByte) == true) + { + std::cout << frameByte.toStdString() << std::endl; + CounterDataDto * counterData = new CounterDataDto(this); + counterData->rawFrame = frameByte; + // ★解析成数据对象 + bool parse = CounterProtocolBM::parseMessureData(frameByte, counterData); - // 2. 补充其他字段 - QDateTime now = QDateTime::currentDateTime(); - counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); - counterData->milisecond = now.toMSecsSinceEpoch(); - counterData->devCode = devCode; + // 解析成功 + if (parse == true) + { + // 1. 清空dataBuff,等待下一帧的数据 +// this->dataBuff.clear(); - this->afterFramePhase(counterData); + if (counterData->channelActive == 0) + { + continue; + } - // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 - this->pushChannelRawFrame(counterData); + // 2. 补充其他字段 + QDateTime now = QDateTime::currentDateTime(); + counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); + counterData->milisecond = now.toMSecsSinceEpoch(); + counterData->devCode = devCode; + +// this->afterFramePhase(counterData); + + // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 + this->pushChannelRawFrame(counterData); + + // 在此处释放内存,不影响后续显示 + // 不在此处释放内存则会导致内存持续增加 + delete counterData; + } + } } } - - // 在此处释放内存,不影响后续显示 - // 不在此处释放内存则会导致内存持续增加 - delete counterData; } void CounterDevice::afterFramePhase(CounterDataDto * counterData) @@ -116,7 +128,7 @@ .arg(counterData->timestamp) .arg(counterData->frameId) .arg(counterData->channelData) - .arg(counterData->channelClockValue); + .arg(counterData->channelClockValueStr); QLogUtil::writeChannelDataLogByDate(date, chFilename, channelDataStr); // 3. 输出到中间件,执行后续处理过程 @@ -142,6 +154,7 @@ // 自身是参考通道 counterData->clone(&bench); counterData->channelClockValue = 0; + counterData->channelClockValueStr = "0"; emit successDataCalculate(counterData); @@ -154,7 +167,8 @@ CounterDataDto * hisItem = hisList.at(i); if (qAbs(hisItem->milisecond - bench.milisecond) < 500) { - hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // ns + hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // 10ps to ns + hisItem->channelClockValueStr = QString::fromStdString(std::to_string(hisItem->channelClockValue)); emit successDataCalculate(hisItem); delete hisItem; @@ -170,7 +184,8 @@ { // 在参考基准中能找到 qlonglong currentBench = bench.channelData; - counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps - ns + counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps to ns + counterData->channelClockValueStr = QString::fromStdString(std::to_string(counterData->channelClockValue)); emit successDataCalculate(counterData); } else diff --git a/CounterAcqBM/CounterWindow.cpp b/CounterAcqBM/CounterWindow.cpp index 8166d47..f14f587 100644 --- a/CounterAcqBM/CounterWindow.cpp +++ b/CounterAcqBM/CounterWindow.cpp @@ -130,7 +130,7 @@ dataLabel->setStyleSheet("margin-left:20;"); vbox->addWidget(dataLabel); QLineEdit * dataValue = new QLineEdit(); - dataValue->setFixedWidth(75); + dataValue->setFixedWidth(200); dataValue->setFont(labelFont); vbox->addWidget(dataValue); @@ -209,7 +209,7 @@ // 赋值,对应的lineEdit/label ((QLineEdit *)channelBox->children().at(2))->setText(counterData->timestamp); - ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValue)); + ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValueStr)); ((QLineEdit *)channelBox->children().at(6))->setText(counterData->frameId); ((QLineEdit *)channelBox->children().at(8))->setText(QString("%1").arg(counterData->channelRefId)); ((QLineEdit *)channelBox->children().at(10))->setText(QString("%1 Ω").arg(counterData->load == 1 ? "1M" : "50")); diff --git a/CounterAcqBM/common/utils/QSerialPortUtil.cpp b/CounterAcqBM/common/utils/QSerialPortUtil.cpp index 051aeb0..aa8e2c4 100644 --- a/CounterAcqBM/common/utils/QSerialPortUtil.cpp +++ b/CounterAcqBM/common/utils/QSerialPortUtil.cpp @@ -8,7 +8,7 @@ { // 其他默认配置 serial.setDataBits(QSerialPort::Data8); - serial.setParity(QSerialPort::NoParity); + serial.setParity(QSerialPort::EvenParity); serial.setStopBits(QSerialPort::OneStop); serial.setFlowControl(QSerialPort::NoFlowControl); } @@ -20,18 +20,20 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + std::cout << QString("%1, %2, %3").arg(portName).arg(baudRate).arg(open).toStdString() << std::endl; + + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) @@ -46,8 +48,12 @@ void QSerialPortUtil::readData() { QByteArray buffer = serial.readAll(); - - emit dataRecieved(buffer); + recvBuff.append(buffer); + if (recvBuff.endsWith("\r\n")) + { + emit dataRecieved(recvBuff); + recvBuff.clear(); + } } bool QSerialPortUtil::isOpen() @@ -97,21 +103,38 @@ emit dataRecieved(buffer); */ - for (int i = 1; i <= 8; i++) - { - QByteArray buffer; + QByteArray buffer; +// for (int i = 1; i <= 8; i++) +// { +// 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); - 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"); +// } - 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); - } + buffer.append("$GL,0,1,1,1,10304181796,0,1.0,59354*1D").append("\r\n"); + buffer.append("$GL,0,2,1,1,10304180924,0,1.0,59341*1C").append("\r\n"); + buffer.append("$GL,0,3,1,1,10304181782,0,1.0,59371*1D").append("\r\n"); + buffer.append("$GL,0,4,1,1,10304182288,0,1.0,59874*18").append("\r\n"); + buffer.append("$GL,0,5,1,1,10304182136,0,1.0,59695*1E").append("\r\n"); + buffer.append("$GL,0,6,1,1,10304182466,0,1.0,60015*19").append("\r\n"); + buffer.append("$GL,0,7,1,1,10304175641,0,1.0,41447*17").append("\r\n"); + buffer.append("$GL,0,8,1,1,10304175969,0,1.0,32686*16").append("\r\n"); + buffer.append("$GL,0,9,1,1,25393441727,0,1.0,32979*16").append("\r\n"); + buffer.append("$GL,0,10,1,1,59027139401,0,1.0,64835*2E").append("\r\n"); + buffer.append("$GL,0,11,1,1,70478437959,0,1.0,54457*2A").append("\r\n"); + buffer.append("$GL,0,12,1,1,10304168666,0,1.0,41512*2B").append("\r\n"); + buffer.append("$GL,0,13,1,1,4194443548,0,1.0,31190*1E").append("\r\n"); + buffer.append("$GL,0,14,1,1,58426511854,0,1.0,31289*21").append("\r\n"); + buffer.append("$GL,0,15,0,1,0,0,1.0,0*21").append("\r\n"); + buffer.append("$GL,0,16,0,1,0,0,1.0,0*22").append("\r\n"); + buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,2000,3000,3001*74").append("\r\n"); + buffer.append("$GL,1,2,2,211123,210930*1D").append("\r\n"); + emit dataRecieved(buffer); } diff --git a/CounterAcqBM/common/utils/QSerialPortUtil.h b/CounterAcqBM/common/utils/QSerialPortUtil.h index accf403..9af813a 100644 --- a/CounterAcqBM/common/utils/QSerialPortUtil.h +++ b/CounterAcqBM/common/utils/QSerialPortUtil.h @@ -20,6 +20,7 @@ QSerialPort serial; bool open; + QByteArray recvBuff; void mockReceivData(); diff --git a/CounterAcqBM/common/utils/SettingConfig.cpp b/CounterAcqBM/common/utils/SettingConfig.cpp index c95ff2a..9a84a43 100644 --- a/CounterAcqBM/common/utils/SettingConfig.cpp +++ b/CounterAcqBM/common/utils/SettingConfig.cpp @@ -11,8 +11,8 @@ KAFKA_BROKERS = getProperty("kafka", "brokers").toString(); KAFKA_DATA_TOPIC = getProperty("kafka", "dataTopic").toString(); NEED_SASL = getProperty("kafka", "needSasl").toInt(); - SASL_USERNAME = getProperty("kafka", "sasl_username").toString(); - SASL_PASSWORD = getProperty("kafka", "sasl_password").toString(); + SASL_USERNAME = getProperty("kafka", "saslUsername").toString(); + SASL_PASSWORD = getProperty("kafka", "saslPassword").toString(); CLIENT_ID = getProperty("client", "clientId").toString(); APP_KEY = getProperty("client", "appKey").toString(); diff --git a/CounterAcqBM/conf/config.ini b/CounterAcqBM/conf/config.ini index 3eedbc6..4bff694 100644 --- a/CounterAcqBM/conf/config.ini +++ b/CounterAcqBM/conf/config.ini @@ -6,8 +6,8 @@ brokers="111.198.10.15:12502" dataTopic="cppTest" needSasl=0 -sasl.username="admin" -sasl.password="casicss" +saslUsername="admin" +saslPassword="casicss" [client] clientId="clock" diff --git a/CounterAcq/common/utils/QSerialPortUtil.cpp b/CounterAcq/common/utils/QSerialPortUtil.cpp index 5c800ce..22b6ad2 100644 --- a/CounterAcq/common/utils/QSerialPortUtil.cpp +++ b/CounterAcq/common/utils/QSerialPortUtil.cpp @@ -20,18 +20,18 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + if (open == true) + { // 绑定信号与槽 -// connect(&serial, &QSerialPort::readyRead, -// this, &QSerialPortUtil::readData); + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) diff --git a/CounterAcqBM/CounterDevice.cpp b/CounterAcqBM/CounterDevice.cpp index 6ba2a5d..88eca67 100644 --- a/CounterAcqBM/CounterDevice.cpp +++ b/CounterAcqBM/CounterDevice.cpp @@ -57,39 +57,51 @@ void CounterDevice::dataReceivedHandler(QByteArray data) { - this->dataBuff.append(data); + QList frameList = CounterProtocolBM::extractFrameList(data); - CounterDataDto * counterData = new CounterDataDto(this); - if (CounterProtocolBM::checkFrame(this->dataBuff) == true) + if (frameList.size() > 0) { - counterData->rawFrame = this->dataBuff; -// std::cout << counterData->rawFrame.toStdString() << std::endl; - - // ★解析成数据对象 - bool parse = CounterProtocolBM::parseMessureData(this->dataBuff, counterData); - - // 解析成功 - if (parse == true) + std::cout << QDateTime::currentDateTime().toString("MMddHHmmss").toStdString() << ": " << QString::number(frameList.size()).toStdString() << std::endl; + for (int i = 0; i < frameList.size(); i++) { - // 1. 清空dataBuff,等待下一帧的数据 - this->dataBuff.clear(); + QByteArray frameByte = frameList.at(i); + if (CounterProtocolBM::checkFrame(frameByte) == true) + { + std::cout << frameByte.toStdString() << std::endl; + CounterDataDto * counterData = new CounterDataDto(this); + counterData->rawFrame = frameByte; + // ★解析成数据对象 + bool parse = CounterProtocolBM::parseMessureData(frameByte, counterData); - // 2. 补充其他字段 - QDateTime now = QDateTime::currentDateTime(); - counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); - counterData->milisecond = now.toMSecsSinceEpoch(); - counterData->devCode = devCode; + // 解析成功 + if (parse == true) + { + // 1. 清空dataBuff,等待下一帧的数据 +// this->dataBuff.clear(); - this->afterFramePhase(counterData); + if (counterData->channelActive == 0) + { + continue; + } - // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 - this->pushChannelRawFrame(counterData); + // 2. 补充其他字段 + QDateTime now = QDateTime::currentDateTime(); + counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); + counterData->milisecond = now.toMSecsSinceEpoch(); + counterData->devCode = devCode; + +// this->afterFramePhase(counterData); + + // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 + this->pushChannelRawFrame(counterData); + + // 在此处释放内存,不影响后续显示 + // 不在此处释放内存则会导致内存持续增加 + delete counterData; + } + } } } - - // 在此处释放内存,不影响后续显示 - // 不在此处释放内存则会导致内存持续增加 - delete counterData; } void CounterDevice::afterFramePhase(CounterDataDto * counterData) @@ -116,7 +128,7 @@ .arg(counterData->timestamp) .arg(counterData->frameId) .arg(counterData->channelData) - .arg(counterData->channelClockValue); + .arg(counterData->channelClockValueStr); QLogUtil::writeChannelDataLogByDate(date, chFilename, channelDataStr); // 3. 输出到中间件,执行后续处理过程 @@ -142,6 +154,7 @@ // 自身是参考通道 counterData->clone(&bench); counterData->channelClockValue = 0; + counterData->channelClockValueStr = "0"; emit successDataCalculate(counterData); @@ -154,7 +167,8 @@ CounterDataDto * hisItem = hisList.at(i); if (qAbs(hisItem->milisecond - bench.milisecond) < 500) { - hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // ns + hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // 10ps to ns + hisItem->channelClockValueStr = QString::fromStdString(std::to_string(hisItem->channelClockValue)); emit successDataCalculate(hisItem); delete hisItem; @@ -170,7 +184,8 @@ { // 在参考基准中能找到 qlonglong currentBench = bench.channelData; - counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps - ns + counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps to ns + counterData->channelClockValueStr = QString::fromStdString(std::to_string(counterData->channelClockValue)); emit successDataCalculate(counterData); } else diff --git a/CounterAcqBM/CounterWindow.cpp b/CounterAcqBM/CounterWindow.cpp index 8166d47..f14f587 100644 --- a/CounterAcqBM/CounterWindow.cpp +++ b/CounterAcqBM/CounterWindow.cpp @@ -130,7 +130,7 @@ dataLabel->setStyleSheet("margin-left:20;"); vbox->addWidget(dataLabel); QLineEdit * dataValue = new QLineEdit(); - dataValue->setFixedWidth(75); + dataValue->setFixedWidth(200); dataValue->setFont(labelFont); vbox->addWidget(dataValue); @@ -209,7 +209,7 @@ // 赋值,对应的lineEdit/label ((QLineEdit *)channelBox->children().at(2))->setText(counterData->timestamp); - ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValue)); + ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValueStr)); ((QLineEdit *)channelBox->children().at(6))->setText(counterData->frameId); ((QLineEdit *)channelBox->children().at(8))->setText(QString("%1").arg(counterData->channelRefId)); ((QLineEdit *)channelBox->children().at(10))->setText(QString("%1 Ω").arg(counterData->load == 1 ? "1M" : "50")); diff --git a/CounterAcqBM/common/utils/QSerialPortUtil.cpp b/CounterAcqBM/common/utils/QSerialPortUtil.cpp index 051aeb0..aa8e2c4 100644 --- a/CounterAcqBM/common/utils/QSerialPortUtil.cpp +++ b/CounterAcqBM/common/utils/QSerialPortUtil.cpp @@ -8,7 +8,7 @@ { // 其他默认配置 serial.setDataBits(QSerialPort::Data8); - serial.setParity(QSerialPort::NoParity); + serial.setParity(QSerialPort::EvenParity); serial.setStopBits(QSerialPort::OneStop); serial.setFlowControl(QSerialPort::NoFlowControl); } @@ -20,18 +20,20 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + std::cout << QString("%1, %2, %3").arg(portName).arg(baudRate).arg(open).toStdString() << std::endl; + + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) @@ -46,8 +48,12 @@ void QSerialPortUtil::readData() { QByteArray buffer = serial.readAll(); - - emit dataRecieved(buffer); + recvBuff.append(buffer); + if (recvBuff.endsWith("\r\n")) + { + emit dataRecieved(recvBuff); + recvBuff.clear(); + } } bool QSerialPortUtil::isOpen() @@ -97,21 +103,38 @@ emit dataRecieved(buffer); */ - for (int i = 1; i <= 8; i++) - { - QByteArray buffer; + QByteArray buffer; +// for (int i = 1; i <= 8; i++) +// { +// 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); - 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"); +// } - 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); - } + buffer.append("$GL,0,1,1,1,10304181796,0,1.0,59354*1D").append("\r\n"); + buffer.append("$GL,0,2,1,1,10304180924,0,1.0,59341*1C").append("\r\n"); + buffer.append("$GL,0,3,1,1,10304181782,0,1.0,59371*1D").append("\r\n"); + buffer.append("$GL,0,4,1,1,10304182288,0,1.0,59874*18").append("\r\n"); + buffer.append("$GL,0,5,1,1,10304182136,0,1.0,59695*1E").append("\r\n"); + buffer.append("$GL,0,6,1,1,10304182466,0,1.0,60015*19").append("\r\n"); + buffer.append("$GL,0,7,1,1,10304175641,0,1.0,41447*17").append("\r\n"); + buffer.append("$GL,0,8,1,1,10304175969,0,1.0,32686*16").append("\r\n"); + buffer.append("$GL,0,9,1,1,25393441727,0,1.0,32979*16").append("\r\n"); + buffer.append("$GL,0,10,1,1,59027139401,0,1.0,64835*2E").append("\r\n"); + buffer.append("$GL,0,11,1,1,70478437959,0,1.0,54457*2A").append("\r\n"); + buffer.append("$GL,0,12,1,1,10304168666,0,1.0,41512*2B").append("\r\n"); + buffer.append("$GL,0,13,1,1,4194443548,0,1.0,31190*1E").append("\r\n"); + buffer.append("$GL,0,14,1,1,58426511854,0,1.0,31289*21").append("\r\n"); + buffer.append("$GL,0,15,0,1,0,0,1.0,0*21").append("\r\n"); + buffer.append("$GL,0,16,0,1,0,0,1.0,0*22").append("\r\n"); + buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,2000,3000,3001*74").append("\r\n"); + buffer.append("$GL,1,2,2,211123,210930*1D").append("\r\n"); + emit dataRecieved(buffer); } diff --git a/CounterAcqBM/common/utils/QSerialPortUtil.h b/CounterAcqBM/common/utils/QSerialPortUtil.h index accf403..9af813a 100644 --- a/CounterAcqBM/common/utils/QSerialPortUtil.h +++ b/CounterAcqBM/common/utils/QSerialPortUtil.h @@ -20,6 +20,7 @@ QSerialPort serial; bool open; + QByteArray recvBuff; void mockReceivData(); diff --git a/CounterAcqBM/common/utils/SettingConfig.cpp b/CounterAcqBM/common/utils/SettingConfig.cpp index c95ff2a..9a84a43 100644 --- a/CounterAcqBM/common/utils/SettingConfig.cpp +++ b/CounterAcqBM/common/utils/SettingConfig.cpp @@ -11,8 +11,8 @@ KAFKA_BROKERS = getProperty("kafka", "brokers").toString(); KAFKA_DATA_TOPIC = getProperty("kafka", "dataTopic").toString(); NEED_SASL = getProperty("kafka", "needSasl").toInt(); - SASL_USERNAME = getProperty("kafka", "sasl_username").toString(); - SASL_PASSWORD = getProperty("kafka", "sasl_password").toString(); + SASL_USERNAME = getProperty("kafka", "saslUsername").toString(); + SASL_PASSWORD = getProperty("kafka", "saslPassword").toString(); CLIENT_ID = getProperty("client", "clientId").toString(); APP_KEY = getProperty("client", "appKey").toString(); diff --git a/CounterAcqBM/conf/config.ini b/CounterAcqBM/conf/config.ini index 3eedbc6..4bff694 100644 --- a/CounterAcqBM/conf/config.ini +++ b/CounterAcqBM/conf/config.ini @@ -6,8 +6,8 @@ brokers="111.198.10.15:12502" dataTopic="cppTest" needSasl=0 -sasl.username="admin" -sasl.password="casicss" +saslUsername="admin" +saslPassword="casicss" [client] clientId="clock" diff --git a/CounterAcqBM/protocol/CounterProtocolBM.cpp b/CounterAcqBM/protocol/CounterProtocolBM.cpp index 2aca849..26cf70c 100644 --- a/CounterAcqBM/protocol/CounterProtocolBM.cpp +++ b/CounterAcqBM/protocol/CounterProtocolBM.cpp @@ -24,7 +24,7 @@ counterData->channelId = subList.at(1).toUInt(); counterData->channelActive = subList.at(2).toUInt(); counterData->channelRefId = subList.at(3).toUInt(); - counterData->channelData = subList.at(4).toLongLong(); + counterData->channelData = subList.at(4).toLongLong(); // counterData->load = subList.at(5); counterData->level = subList.at(6).toDouble(); counterData->frameId = subList.at(7); @@ -32,6 +32,49 @@ return true; } +QList CounterProtocolBM::extractFrameList(QByteArray rawData) +{ + QList resultList; + int head = rawData.indexOf(COUNTER_FRAME_HEAD); + if (head < 0) + { + return resultList; + } + int tail = rawData.lastIndexOf(COUNTER_FRAME_TAIL); + if (tail < 0) + { + return resultList; + } + rawData = rawData.mid(head, tail - head + 2); + std::cout << rawData.toStdString() << std::endl; + + if (rawData.endsWith(QByteArray("\r\n")) == true && rawData.startsWith("$GL") == true) + { + QByteArray ba; + for (int i = 0; i < rawData.size() - 1; i++) + { + if (rawData.at(i) != '\r') + { + ba.append(rawData.at(i)); + } else + { + if (rawData.at(i + 1) == '\n') + { + ba.append("\r\n"); + resultList.append(ba); + ba.clear(); + i++; + } else + { + ba.append(rawData.at(i)); + } + } + } + } + + return resultList; +} + bool CounterProtocolBM::checkFrame(QByteArray rawData) { // 帧长度小于最小的长度 @@ -41,7 +84,7 @@ } // 帧头不是$GL - if (COUNTER_FRAME_HEAD.toLocal8Bit() != rawData.mid(0, COUNTER_FRAME_HEAD.size())) + if ("$GL,0" != rawData.mid(0, 5)) { return false; } diff --git a/CounterAcq/common/utils/QSerialPortUtil.cpp b/CounterAcq/common/utils/QSerialPortUtil.cpp index 5c800ce..22b6ad2 100644 --- a/CounterAcq/common/utils/QSerialPortUtil.cpp +++ b/CounterAcq/common/utils/QSerialPortUtil.cpp @@ -20,18 +20,18 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + if (open == true) + { // 绑定信号与槽 -// connect(&serial, &QSerialPort::readyRead, -// this, &QSerialPortUtil::readData); + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) diff --git a/CounterAcqBM/CounterDevice.cpp b/CounterAcqBM/CounterDevice.cpp index 6ba2a5d..88eca67 100644 --- a/CounterAcqBM/CounterDevice.cpp +++ b/CounterAcqBM/CounterDevice.cpp @@ -57,39 +57,51 @@ void CounterDevice::dataReceivedHandler(QByteArray data) { - this->dataBuff.append(data); + QList frameList = CounterProtocolBM::extractFrameList(data); - CounterDataDto * counterData = new CounterDataDto(this); - if (CounterProtocolBM::checkFrame(this->dataBuff) == true) + if (frameList.size() > 0) { - counterData->rawFrame = this->dataBuff; -// std::cout << counterData->rawFrame.toStdString() << std::endl; - - // ★解析成数据对象 - bool parse = CounterProtocolBM::parseMessureData(this->dataBuff, counterData); - - // 解析成功 - if (parse == true) + std::cout << QDateTime::currentDateTime().toString("MMddHHmmss").toStdString() << ": " << QString::number(frameList.size()).toStdString() << std::endl; + for (int i = 0; i < frameList.size(); i++) { - // 1. 清空dataBuff,等待下一帧的数据 - this->dataBuff.clear(); + QByteArray frameByte = frameList.at(i); + if (CounterProtocolBM::checkFrame(frameByte) == true) + { + std::cout << frameByte.toStdString() << std::endl; + CounterDataDto * counterData = new CounterDataDto(this); + counterData->rawFrame = frameByte; + // ★解析成数据对象 + bool parse = CounterProtocolBM::parseMessureData(frameByte, counterData); - // 2. 补充其他字段 - QDateTime now = QDateTime::currentDateTime(); - counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); - counterData->milisecond = now.toMSecsSinceEpoch(); - counterData->devCode = devCode; + // 解析成功 + if (parse == true) + { + // 1. 清空dataBuff,等待下一帧的数据 +// this->dataBuff.clear(); - this->afterFramePhase(counterData); + if (counterData->channelActive == 0) + { + continue; + } - // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 - this->pushChannelRawFrame(counterData); + // 2. 补充其他字段 + QDateTime now = QDateTime::currentDateTime(); + counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); + counterData->milisecond = now.toMSecsSinceEpoch(); + counterData->devCode = devCode; + +// this->afterFramePhase(counterData); + + // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 + this->pushChannelRawFrame(counterData); + + // 在此处释放内存,不影响后续显示 + // 不在此处释放内存则会导致内存持续增加 + delete counterData; + } + } } } - - // 在此处释放内存,不影响后续显示 - // 不在此处释放内存则会导致内存持续增加 - delete counterData; } void CounterDevice::afterFramePhase(CounterDataDto * counterData) @@ -116,7 +128,7 @@ .arg(counterData->timestamp) .arg(counterData->frameId) .arg(counterData->channelData) - .arg(counterData->channelClockValue); + .arg(counterData->channelClockValueStr); QLogUtil::writeChannelDataLogByDate(date, chFilename, channelDataStr); // 3. 输出到中间件,执行后续处理过程 @@ -142,6 +154,7 @@ // 自身是参考通道 counterData->clone(&bench); counterData->channelClockValue = 0; + counterData->channelClockValueStr = "0"; emit successDataCalculate(counterData); @@ -154,7 +167,8 @@ CounterDataDto * hisItem = hisList.at(i); if (qAbs(hisItem->milisecond - bench.milisecond) < 500) { - hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // ns + hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // 10ps to ns + hisItem->channelClockValueStr = QString::fromStdString(std::to_string(hisItem->channelClockValue)); emit successDataCalculate(hisItem); delete hisItem; @@ -170,7 +184,8 @@ { // 在参考基准中能找到 qlonglong currentBench = bench.channelData; - counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps - ns + counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps to ns + counterData->channelClockValueStr = QString::fromStdString(std::to_string(counterData->channelClockValue)); emit successDataCalculate(counterData); } else diff --git a/CounterAcqBM/CounterWindow.cpp b/CounterAcqBM/CounterWindow.cpp index 8166d47..f14f587 100644 --- a/CounterAcqBM/CounterWindow.cpp +++ b/CounterAcqBM/CounterWindow.cpp @@ -130,7 +130,7 @@ dataLabel->setStyleSheet("margin-left:20;"); vbox->addWidget(dataLabel); QLineEdit * dataValue = new QLineEdit(); - dataValue->setFixedWidth(75); + dataValue->setFixedWidth(200); dataValue->setFont(labelFont); vbox->addWidget(dataValue); @@ -209,7 +209,7 @@ // 赋值,对应的lineEdit/label ((QLineEdit *)channelBox->children().at(2))->setText(counterData->timestamp); - ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValue)); + ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValueStr)); ((QLineEdit *)channelBox->children().at(6))->setText(counterData->frameId); ((QLineEdit *)channelBox->children().at(8))->setText(QString("%1").arg(counterData->channelRefId)); ((QLineEdit *)channelBox->children().at(10))->setText(QString("%1 Ω").arg(counterData->load == 1 ? "1M" : "50")); diff --git a/CounterAcqBM/common/utils/QSerialPortUtil.cpp b/CounterAcqBM/common/utils/QSerialPortUtil.cpp index 051aeb0..aa8e2c4 100644 --- a/CounterAcqBM/common/utils/QSerialPortUtil.cpp +++ b/CounterAcqBM/common/utils/QSerialPortUtil.cpp @@ -8,7 +8,7 @@ { // 其他默认配置 serial.setDataBits(QSerialPort::Data8); - serial.setParity(QSerialPort::NoParity); + serial.setParity(QSerialPort::EvenParity); serial.setStopBits(QSerialPort::OneStop); serial.setFlowControl(QSerialPort::NoFlowControl); } @@ -20,18 +20,20 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + std::cout << QString("%1, %2, %3").arg(portName).arg(baudRate).arg(open).toStdString() << std::endl; + + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) @@ -46,8 +48,12 @@ void QSerialPortUtil::readData() { QByteArray buffer = serial.readAll(); - - emit dataRecieved(buffer); + recvBuff.append(buffer); + if (recvBuff.endsWith("\r\n")) + { + emit dataRecieved(recvBuff); + recvBuff.clear(); + } } bool QSerialPortUtil::isOpen() @@ -97,21 +103,38 @@ emit dataRecieved(buffer); */ - for (int i = 1; i <= 8; i++) - { - QByteArray buffer; + QByteArray buffer; +// for (int i = 1; i <= 8; i++) +// { +// 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); - 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"); +// } - 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); - } + buffer.append("$GL,0,1,1,1,10304181796,0,1.0,59354*1D").append("\r\n"); + buffer.append("$GL,0,2,1,1,10304180924,0,1.0,59341*1C").append("\r\n"); + buffer.append("$GL,0,3,1,1,10304181782,0,1.0,59371*1D").append("\r\n"); + buffer.append("$GL,0,4,1,1,10304182288,0,1.0,59874*18").append("\r\n"); + buffer.append("$GL,0,5,1,1,10304182136,0,1.0,59695*1E").append("\r\n"); + buffer.append("$GL,0,6,1,1,10304182466,0,1.0,60015*19").append("\r\n"); + buffer.append("$GL,0,7,1,1,10304175641,0,1.0,41447*17").append("\r\n"); + buffer.append("$GL,0,8,1,1,10304175969,0,1.0,32686*16").append("\r\n"); + buffer.append("$GL,0,9,1,1,25393441727,0,1.0,32979*16").append("\r\n"); + buffer.append("$GL,0,10,1,1,59027139401,0,1.0,64835*2E").append("\r\n"); + buffer.append("$GL,0,11,1,1,70478437959,0,1.0,54457*2A").append("\r\n"); + buffer.append("$GL,0,12,1,1,10304168666,0,1.0,41512*2B").append("\r\n"); + buffer.append("$GL,0,13,1,1,4194443548,0,1.0,31190*1E").append("\r\n"); + buffer.append("$GL,0,14,1,1,58426511854,0,1.0,31289*21").append("\r\n"); + buffer.append("$GL,0,15,0,1,0,0,1.0,0*21").append("\r\n"); + buffer.append("$GL,0,16,0,1,0,0,1.0,0*22").append("\r\n"); + buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,2000,3000,3001*74").append("\r\n"); + buffer.append("$GL,1,2,2,211123,210930*1D").append("\r\n"); + emit dataRecieved(buffer); } diff --git a/CounterAcqBM/common/utils/QSerialPortUtil.h b/CounterAcqBM/common/utils/QSerialPortUtil.h index accf403..9af813a 100644 --- a/CounterAcqBM/common/utils/QSerialPortUtil.h +++ b/CounterAcqBM/common/utils/QSerialPortUtil.h @@ -20,6 +20,7 @@ QSerialPort serial; bool open; + QByteArray recvBuff; void mockReceivData(); diff --git a/CounterAcqBM/common/utils/SettingConfig.cpp b/CounterAcqBM/common/utils/SettingConfig.cpp index c95ff2a..9a84a43 100644 --- a/CounterAcqBM/common/utils/SettingConfig.cpp +++ b/CounterAcqBM/common/utils/SettingConfig.cpp @@ -11,8 +11,8 @@ KAFKA_BROKERS = getProperty("kafka", "brokers").toString(); KAFKA_DATA_TOPIC = getProperty("kafka", "dataTopic").toString(); NEED_SASL = getProperty("kafka", "needSasl").toInt(); - SASL_USERNAME = getProperty("kafka", "sasl_username").toString(); - SASL_PASSWORD = getProperty("kafka", "sasl_password").toString(); + SASL_USERNAME = getProperty("kafka", "saslUsername").toString(); + SASL_PASSWORD = getProperty("kafka", "saslPassword").toString(); CLIENT_ID = getProperty("client", "clientId").toString(); APP_KEY = getProperty("client", "appKey").toString(); diff --git a/CounterAcqBM/conf/config.ini b/CounterAcqBM/conf/config.ini index 3eedbc6..4bff694 100644 --- a/CounterAcqBM/conf/config.ini +++ b/CounterAcqBM/conf/config.ini @@ -6,8 +6,8 @@ brokers="111.198.10.15:12502" dataTopic="cppTest" needSasl=0 -sasl.username="admin" -sasl.password="casicss" +saslUsername="admin" +saslPassword="casicss" [client] clientId="clock" diff --git a/CounterAcqBM/protocol/CounterProtocolBM.cpp b/CounterAcqBM/protocol/CounterProtocolBM.cpp index 2aca849..26cf70c 100644 --- a/CounterAcqBM/protocol/CounterProtocolBM.cpp +++ b/CounterAcqBM/protocol/CounterProtocolBM.cpp @@ -24,7 +24,7 @@ counterData->channelId = subList.at(1).toUInt(); counterData->channelActive = subList.at(2).toUInt(); counterData->channelRefId = subList.at(3).toUInt(); - counterData->channelData = subList.at(4).toLongLong(); + counterData->channelData = subList.at(4).toLongLong(); // counterData->load = subList.at(5); counterData->level = subList.at(6).toDouble(); counterData->frameId = subList.at(7); @@ -32,6 +32,49 @@ return true; } +QList CounterProtocolBM::extractFrameList(QByteArray rawData) +{ + QList resultList; + int head = rawData.indexOf(COUNTER_FRAME_HEAD); + if (head < 0) + { + return resultList; + } + int tail = rawData.lastIndexOf(COUNTER_FRAME_TAIL); + if (tail < 0) + { + return resultList; + } + rawData = rawData.mid(head, tail - head + 2); + std::cout << rawData.toStdString() << std::endl; + + if (rawData.endsWith(QByteArray("\r\n")) == true && rawData.startsWith("$GL") == true) + { + QByteArray ba; + for (int i = 0; i < rawData.size() - 1; i++) + { + if (rawData.at(i) != '\r') + { + ba.append(rawData.at(i)); + } else + { + if (rawData.at(i + 1) == '\n') + { + ba.append("\r\n"); + resultList.append(ba); + ba.clear(); + i++; + } else + { + ba.append(rawData.at(i)); + } + } + } + } + + return resultList; +} + bool CounterProtocolBM::checkFrame(QByteArray rawData) { // 帧长度小于最小的长度 @@ -41,7 +84,7 @@ } // 帧头不是$GL - if (COUNTER_FRAME_HEAD.toLocal8Bit() != rawData.mid(0, COUNTER_FRAME_HEAD.size())) + if ("$GL,0" != rawData.mid(0, 5)) { return false; } diff --git a/CounterAcqBM/protocol/CounterProtocolBM.h b/CounterAcqBM/protocol/CounterProtocolBM.h index a6a9180..b694c8d 100644 --- a/CounterAcqBM/protocol/CounterProtocolBM.h +++ b/CounterAcqBM/protocol/CounterProtocolBM.h @@ -27,6 +27,8 @@ // 解析计数器测量数据 static bool parseMessureData(QByteArray rawData, CounterDataDto * counterData); + static QList extractFrameList(QByteArray rawData); + // 检测帧格式,帧头帧尾 static bool checkFrame(QByteArray rawData); }; diff --git a/CounterAcq/common/utils/QSerialPortUtil.cpp b/CounterAcq/common/utils/QSerialPortUtil.cpp index 5c800ce..22b6ad2 100644 --- a/CounterAcq/common/utils/QSerialPortUtil.cpp +++ b/CounterAcq/common/utils/QSerialPortUtil.cpp @@ -20,18 +20,18 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + if (open == true) + { // 绑定信号与槽 -// connect(&serial, &QSerialPort::readyRead, -// this, &QSerialPortUtil::readData); + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) diff --git a/CounterAcqBM/CounterDevice.cpp b/CounterAcqBM/CounterDevice.cpp index 6ba2a5d..88eca67 100644 --- a/CounterAcqBM/CounterDevice.cpp +++ b/CounterAcqBM/CounterDevice.cpp @@ -57,39 +57,51 @@ void CounterDevice::dataReceivedHandler(QByteArray data) { - this->dataBuff.append(data); + QList frameList = CounterProtocolBM::extractFrameList(data); - CounterDataDto * counterData = new CounterDataDto(this); - if (CounterProtocolBM::checkFrame(this->dataBuff) == true) + if (frameList.size() > 0) { - counterData->rawFrame = this->dataBuff; -// std::cout << counterData->rawFrame.toStdString() << std::endl; - - // ★解析成数据对象 - bool parse = CounterProtocolBM::parseMessureData(this->dataBuff, counterData); - - // 解析成功 - if (parse == true) + std::cout << QDateTime::currentDateTime().toString("MMddHHmmss").toStdString() << ": " << QString::number(frameList.size()).toStdString() << std::endl; + for (int i = 0; i < frameList.size(); i++) { - // 1. 清空dataBuff,等待下一帧的数据 - this->dataBuff.clear(); + QByteArray frameByte = frameList.at(i); + if (CounterProtocolBM::checkFrame(frameByte) == true) + { + std::cout << frameByte.toStdString() << std::endl; + CounterDataDto * counterData = new CounterDataDto(this); + counterData->rawFrame = frameByte; + // ★解析成数据对象 + bool parse = CounterProtocolBM::parseMessureData(frameByte, counterData); - // 2. 补充其他字段 - QDateTime now = QDateTime::currentDateTime(); - counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); - counterData->milisecond = now.toMSecsSinceEpoch(); - counterData->devCode = devCode; + // 解析成功 + if (parse == true) + { + // 1. 清空dataBuff,等待下一帧的数据 +// this->dataBuff.clear(); - this->afterFramePhase(counterData); + if (counterData->channelActive == 0) + { + continue; + } - // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 - this->pushChannelRawFrame(counterData); + // 2. 补充其他字段 + QDateTime now = QDateTime::currentDateTime(); + counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); + counterData->milisecond = now.toMSecsSinceEpoch(); + counterData->devCode = devCode; + +// this->afterFramePhase(counterData); + + // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 + this->pushChannelRawFrame(counterData); + + // 在此处释放内存,不影响后续显示 + // 不在此处释放内存则会导致内存持续增加 + delete counterData; + } + } } } - - // 在此处释放内存,不影响后续显示 - // 不在此处释放内存则会导致内存持续增加 - delete counterData; } void CounterDevice::afterFramePhase(CounterDataDto * counterData) @@ -116,7 +128,7 @@ .arg(counterData->timestamp) .arg(counterData->frameId) .arg(counterData->channelData) - .arg(counterData->channelClockValue); + .arg(counterData->channelClockValueStr); QLogUtil::writeChannelDataLogByDate(date, chFilename, channelDataStr); // 3. 输出到中间件,执行后续处理过程 @@ -142,6 +154,7 @@ // 自身是参考通道 counterData->clone(&bench); counterData->channelClockValue = 0; + counterData->channelClockValueStr = "0"; emit successDataCalculate(counterData); @@ -154,7 +167,8 @@ CounterDataDto * hisItem = hisList.at(i); if (qAbs(hisItem->milisecond - bench.milisecond) < 500) { - hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // ns + hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // 10ps to ns + hisItem->channelClockValueStr = QString::fromStdString(std::to_string(hisItem->channelClockValue)); emit successDataCalculate(hisItem); delete hisItem; @@ -170,7 +184,8 @@ { // 在参考基准中能找到 qlonglong currentBench = bench.channelData; - counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps - ns + counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps to ns + counterData->channelClockValueStr = QString::fromStdString(std::to_string(counterData->channelClockValue)); emit successDataCalculate(counterData); } else diff --git a/CounterAcqBM/CounterWindow.cpp b/CounterAcqBM/CounterWindow.cpp index 8166d47..f14f587 100644 --- a/CounterAcqBM/CounterWindow.cpp +++ b/CounterAcqBM/CounterWindow.cpp @@ -130,7 +130,7 @@ dataLabel->setStyleSheet("margin-left:20;"); vbox->addWidget(dataLabel); QLineEdit * dataValue = new QLineEdit(); - dataValue->setFixedWidth(75); + dataValue->setFixedWidth(200); dataValue->setFont(labelFont); vbox->addWidget(dataValue); @@ -209,7 +209,7 @@ // 赋值,对应的lineEdit/label ((QLineEdit *)channelBox->children().at(2))->setText(counterData->timestamp); - ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValue)); + ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValueStr)); ((QLineEdit *)channelBox->children().at(6))->setText(counterData->frameId); ((QLineEdit *)channelBox->children().at(8))->setText(QString("%1").arg(counterData->channelRefId)); ((QLineEdit *)channelBox->children().at(10))->setText(QString("%1 Ω").arg(counterData->load == 1 ? "1M" : "50")); diff --git a/CounterAcqBM/common/utils/QSerialPortUtil.cpp b/CounterAcqBM/common/utils/QSerialPortUtil.cpp index 051aeb0..aa8e2c4 100644 --- a/CounterAcqBM/common/utils/QSerialPortUtil.cpp +++ b/CounterAcqBM/common/utils/QSerialPortUtil.cpp @@ -8,7 +8,7 @@ { // 其他默认配置 serial.setDataBits(QSerialPort::Data8); - serial.setParity(QSerialPort::NoParity); + serial.setParity(QSerialPort::EvenParity); serial.setStopBits(QSerialPort::OneStop); serial.setFlowControl(QSerialPort::NoFlowControl); } @@ -20,18 +20,20 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + std::cout << QString("%1, %2, %3").arg(portName).arg(baudRate).arg(open).toStdString() << std::endl; + + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) @@ -46,8 +48,12 @@ void QSerialPortUtil::readData() { QByteArray buffer = serial.readAll(); - - emit dataRecieved(buffer); + recvBuff.append(buffer); + if (recvBuff.endsWith("\r\n")) + { + emit dataRecieved(recvBuff); + recvBuff.clear(); + } } bool QSerialPortUtil::isOpen() @@ -97,21 +103,38 @@ emit dataRecieved(buffer); */ - for (int i = 1; i <= 8; i++) - { - QByteArray buffer; + QByteArray buffer; +// for (int i = 1; i <= 8; i++) +// { +// 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); - 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"); +// } - 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); - } + buffer.append("$GL,0,1,1,1,10304181796,0,1.0,59354*1D").append("\r\n"); + buffer.append("$GL,0,2,1,1,10304180924,0,1.0,59341*1C").append("\r\n"); + buffer.append("$GL,0,3,1,1,10304181782,0,1.0,59371*1D").append("\r\n"); + buffer.append("$GL,0,4,1,1,10304182288,0,1.0,59874*18").append("\r\n"); + buffer.append("$GL,0,5,1,1,10304182136,0,1.0,59695*1E").append("\r\n"); + buffer.append("$GL,0,6,1,1,10304182466,0,1.0,60015*19").append("\r\n"); + buffer.append("$GL,0,7,1,1,10304175641,0,1.0,41447*17").append("\r\n"); + buffer.append("$GL,0,8,1,1,10304175969,0,1.0,32686*16").append("\r\n"); + buffer.append("$GL,0,9,1,1,25393441727,0,1.0,32979*16").append("\r\n"); + buffer.append("$GL,0,10,1,1,59027139401,0,1.0,64835*2E").append("\r\n"); + buffer.append("$GL,0,11,1,1,70478437959,0,1.0,54457*2A").append("\r\n"); + buffer.append("$GL,0,12,1,1,10304168666,0,1.0,41512*2B").append("\r\n"); + buffer.append("$GL,0,13,1,1,4194443548,0,1.0,31190*1E").append("\r\n"); + buffer.append("$GL,0,14,1,1,58426511854,0,1.0,31289*21").append("\r\n"); + buffer.append("$GL,0,15,0,1,0,0,1.0,0*21").append("\r\n"); + buffer.append("$GL,0,16,0,1,0,0,1.0,0*22").append("\r\n"); + buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,2000,3000,3001*74").append("\r\n"); + buffer.append("$GL,1,2,2,211123,210930*1D").append("\r\n"); + emit dataRecieved(buffer); } diff --git a/CounterAcqBM/common/utils/QSerialPortUtil.h b/CounterAcqBM/common/utils/QSerialPortUtil.h index accf403..9af813a 100644 --- a/CounterAcqBM/common/utils/QSerialPortUtil.h +++ b/CounterAcqBM/common/utils/QSerialPortUtil.h @@ -20,6 +20,7 @@ QSerialPort serial; bool open; + QByteArray recvBuff; void mockReceivData(); diff --git a/CounterAcqBM/common/utils/SettingConfig.cpp b/CounterAcqBM/common/utils/SettingConfig.cpp index c95ff2a..9a84a43 100644 --- a/CounterAcqBM/common/utils/SettingConfig.cpp +++ b/CounterAcqBM/common/utils/SettingConfig.cpp @@ -11,8 +11,8 @@ KAFKA_BROKERS = getProperty("kafka", "brokers").toString(); KAFKA_DATA_TOPIC = getProperty("kafka", "dataTopic").toString(); NEED_SASL = getProperty("kafka", "needSasl").toInt(); - SASL_USERNAME = getProperty("kafka", "sasl_username").toString(); - SASL_PASSWORD = getProperty("kafka", "sasl_password").toString(); + SASL_USERNAME = getProperty("kafka", "saslUsername").toString(); + SASL_PASSWORD = getProperty("kafka", "saslPassword").toString(); CLIENT_ID = getProperty("client", "clientId").toString(); APP_KEY = getProperty("client", "appKey").toString(); diff --git a/CounterAcqBM/conf/config.ini b/CounterAcqBM/conf/config.ini index 3eedbc6..4bff694 100644 --- a/CounterAcqBM/conf/config.ini +++ b/CounterAcqBM/conf/config.ini @@ -6,8 +6,8 @@ brokers="111.198.10.15:12502" dataTopic="cppTest" needSasl=0 -sasl.username="admin" -sasl.password="casicss" +saslUsername="admin" +saslPassword="casicss" [client] clientId="clock" diff --git a/CounterAcqBM/protocol/CounterProtocolBM.cpp b/CounterAcqBM/protocol/CounterProtocolBM.cpp index 2aca849..26cf70c 100644 --- a/CounterAcqBM/protocol/CounterProtocolBM.cpp +++ b/CounterAcqBM/protocol/CounterProtocolBM.cpp @@ -24,7 +24,7 @@ counterData->channelId = subList.at(1).toUInt(); counterData->channelActive = subList.at(2).toUInt(); counterData->channelRefId = subList.at(3).toUInt(); - counterData->channelData = subList.at(4).toLongLong(); + counterData->channelData = subList.at(4).toLongLong(); // counterData->load = subList.at(5); counterData->level = subList.at(6).toDouble(); counterData->frameId = subList.at(7); @@ -32,6 +32,49 @@ return true; } +QList CounterProtocolBM::extractFrameList(QByteArray rawData) +{ + QList resultList; + int head = rawData.indexOf(COUNTER_FRAME_HEAD); + if (head < 0) + { + return resultList; + } + int tail = rawData.lastIndexOf(COUNTER_FRAME_TAIL); + if (tail < 0) + { + return resultList; + } + rawData = rawData.mid(head, tail - head + 2); + std::cout << rawData.toStdString() << std::endl; + + if (rawData.endsWith(QByteArray("\r\n")) == true && rawData.startsWith("$GL") == true) + { + QByteArray ba; + for (int i = 0; i < rawData.size() - 1; i++) + { + if (rawData.at(i) != '\r') + { + ba.append(rawData.at(i)); + } else + { + if (rawData.at(i + 1) == '\n') + { + ba.append("\r\n"); + resultList.append(ba); + ba.clear(); + i++; + } else + { + ba.append(rawData.at(i)); + } + } + } + } + + return resultList; +} + bool CounterProtocolBM::checkFrame(QByteArray rawData) { // 帧长度小于最小的长度 @@ -41,7 +84,7 @@ } // 帧头不是$GL - if (COUNTER_FRAME_HEAD.toLocal8Bit() != rawData.mid(0, COUNTER_FRAME_HEAD.size())) + if ("$GL,0" != rawData.mid(0, 5)) { return false; } diff --git a/CounterAcqBM/protocol/CounterProtocolBM.h b/CounterAcqBM/protocol/CounterProtocolBM.h index a6a9180..b694c8d 100644 --- a/CounterAcqBM/protocol/CounterProtocolBM.h +++ b/CounterAcqBM/protocol/CounterProtocolBM.h @@ -27,6 +27,8 @@ // 解析计数器测量数据 static bool parseMessureData(QByteArray rawData, CounterDataDto * counterData); + static QList extractFrameList(QByteArray rawData); + // 检测帧格式,帧头帧尾 static bool checkFrame(QByteArray rawData); }; diff --git a/CounterAcqBM/protocol/dto/CounterDataDto.cpp b/CounterAcqBM/protocol/dto/CounterDataDto.cpp index 711911f..04401d7 100644 --- a/CounterAcqBM/protocol/dto/CounterDataDto.cpp +++ b/CounterAcqBM/protocol/dto/CounterDataDto.cpp @@ -12,7 +12,7 @@ QJsonObject dataObj; dataObj.insert("channelRefNo", this->channelRefId); - dataObj.insert("dataValue", QString("%1").arg(this->channelClockValue * 1E-12)); + dataObj.insert("dataValue", QString("%1").arg(this->channelClockValueStr)); dataObj.insert("rawValue", QString("%1").arg(this->channelData)); dataObj.insert("frameId", this->frameId); @@ -52,6 +52,7 @@ copy->type = 0; copy->channelClockValue = this->channelClockValue; + copy->channelClockValueStr = this->channelClockValueStr; copy->rawFrame = this->rawFrame; diff --git a/CounterAcq/common/utils/QSerialPortUtil.cpp b/CounterAcq/common/utils/QSerialPortUtil.cpp index 5c800ce..22b6ad2 100644 --- a/CounterAcq/common/utils/QSerialPortUtil.cpp +++ b/CounterAcq/common/utils/QSerialPortUtil.cpp @@ -20,18 +20,18 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + if (open == true) + { // 绑定信号与槽 -// connect(&serial, &QSerialPort::readyRead, -// this, &QSerialPortUtil::readData); + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) diff --git a/CounterAcqBM/CounterDevice.cpp b/CounterAcqBM/CounterDevice.cpp index 6ba2a5d..88eca67 100644 --- a/CounterAcqBM/CounterDevice.cpp +++ b/CounterAcqBM/CounterDevice.cpp @@ -57,39 +57,51 @@ void CounterDevice::dataReceivedHandler(QByteArray data) { - this->dataBuff.append(data); + QList frameList = CounterProtocolBM::extractFrameList(data); - CounterDataDto * counterData = new CounterDataDto(this); - if (CounterProtocolBM::checkFrame(this->dataBuff) == true) + if (frameList.size() > 0) { - counterData->rawFrame = this->dataBuff; -// std::cout << counterData->rawFrame.toStdString() << std::endl; - - // ★解析成数据对象 - bool parse = CounterProtocolBM::parseMessureData(this->dataBuff, counterData); - - // 解析成功 - if (parse == true) + std::cout << QDateTime::currentDateTime().toString("MMddHHmmss").toStdString() << ": " << QString::number(frameList.size()).toStdString() << std::endl; + for (int i = 0; i < frameList.size(); i++) { - // 1. 清空dataBuff,等待下一帧的数据 - this->dataBuff.clear(); + QByteArray frameByte = frameList.at(i); + if (CounterProtocolBM::checkFrame(frameByte) == true) + { + std::cout << frameByte.toStdString() << std::endl; + CounterDataDto * counterData = new CounterDataDto(this); + counterData->rawFrame = frameByte; + // ★解析成数据对象 + bool parse = CounterProtocolBM::parseMessureData(frameByte, counterData); - // 2. 补充其他字段 - QDateTime now = QDateTime::currentDateTime(); - counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); - counterData->milisecond = now.toMSecsSinceEpoch(); - counterData->devCode = devCode; + // 解析成功 + if (parse == true) + { + // 1. 清空dataBuff,等待下一帧的数据 +// this->dataBuff.clear(); - this->afterFramePhase(counterData); + if (counterData->channelActive == 0) + { + continue; + } - // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 - this->pushChannelRawFrame(counterData); + // 2. 补充其他字段 + QDateTime now = QDateTime::currentDateTime(); + counterData->timestamp = now.toString("yyyy-MM-dd HH:mm:ss.zzz"); + counterData->milisecond = now.toMSecsSinceEpoch(); + counterData->devCode = devCode; + +// this->afterFramePhase(counterData); + + // 3 计算数据ID一样的测量数据的时差值,通道值-参考通道值 + this->pushChannelRawFrame(counterData); + + // 在此处释放内存,不影响后续显示 + // 不在此处释放内存则会导致内存持续增加 + delete counterData; + } + } } } - - // 在此处释放内存,不影响后续显示 - // 不在此处释放内存则会导致内存持续增加 - delete counterData; } void CounterDevice::afterFramePhase(CounterDataDto * counterData) @@ -116,7 +128,7 @@ .arg(counterData->timestamp) .arg(counterData->frameId) .arg(counterData->channelData) - .arg(counterData->channelClockValue); + .arg(counterData->channelClockValueStr); QLogUtil::writeChannelDataLogByDate(date, chFilename, channelDataStr); // 3. 输出到中间件,执行后续处理过程 @@ -142,6 +154,7 @@ // 自身是参考通道 counterData->clone(&bench); counterData->channelClockValue = 0; + counterData->channelClockValueStr = "0"; emit successDataCalculate(counterData); @@ -154,7 +167,8 @@ CounterDataDto * hisItem = hisList.at(i); if (qAbs(hisItem->milisecond - bench.milisecond) < 500) { - hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // ns + hisItem->channelClockValue = (hisItem->channelData - thisBench) * 10 * 0.001; // 10ps to ns + hisItem->channelClockValueStr = QString::fromStdString(std::to_string(hisItem->channelClockValue)); emit successDataCalculate(hisItem); delete hisItem; @@ -170,7 +184,8 @@ { // 在参考基准中能找到 qlonglong currentBench = bench.channelData; - counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps - ns + counterData->channelClockValue = (counterData->channelData - currentBench) * 10 * 0.001; // 10ps to ns + counterData->channelClockValueStr = QString::fromStdString(std::to_string(counterData->channelClockValue)); emit successDataCalculate(counterData); } else diff --git a/CounterAcqBM/CounterWindow.cpp b/CounterAcqBM/CounterWindow.cpp index 8166d47..f14f587 100644 --- a/CounterAcqBM/CounterWindow.cpp +++ b/CounterAcqBM/CounterWindow.cpp @@ -130,7 +130,7 @@ dataLabel->setStyleSheet("margin-left:20;"); vbox->addWidget(dataLabel); QLineEdit * dataValue = new QLineEdit(); - dataValue->setFixedWidth(75); + dataValue->setFixedWidth(200); dataValue->setFont(labelFont); vbox->addWidget(dataValue); @@ -209,7 +209,7 @@ // 赋值,对应的lineEdit/label ((QLineEdit *)channelBox->children().at(2))->setText(counterData->timestamp); - ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValue)); + ((QLineEdit *)channelBox->children().at(4))->setText(QString("%1 ns").arg(counterData->channelClockValueStr)); ((QLineEdit *)channelBox->children().at(6))->setText(counterData->frameId); ((QLineEdit *)channelBox->children().at(8))->setText(QString("%1").arg(counterData->channelRefId)); ((QLineEdit *)channelBox->children().at(10))->setText(QString("%1 Ω").arg(counterData->load == 1 ? "1M" : "50")); diff --git a/CounterAcqBM/common/utils/QSerialPortUtil.cpp b/CounterAcqBM/common/utils/QSerialPortUtil.cpp index 051aeb0..aa8e2c4 100644 --- a/CounterAcqBM/common/utils/QSerialPortUtil.cpp +++ b/CounterAcqBM/common/utils/QSerialPortUtil.cpp @@ -8,7 +8,7 @@ { // 其他默认配置 serial.setDataBits(QSerialPort::Data8); - serial.setParity(QSerialPort::NoParity); + serial.setParity(QSerialPort::EvenParity); serial.setStopBits(QSerialPort::OneStop); serial.setFlowControl(QSerialPort::NoFlowControl); } @@ -20,18 +20,20 @@ open = serial.open(QIODevice::ReadWrite); -// if (open == true) -// { + std::cout << QString("%1, %2, %3").arg(portName).arg(baudRate).arg(open).toStdString() << std::endl; + + 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); -// } +// QTimer * timer = new QTimer(this); +// connect(timer, &QTimer::timeout, +// this, &QSerialPortUtil::mockReceivData); +// timer->start(1000); + } } void QSerialPortUtil::sendData(QByteArray data) @@ -46,8 +48,12 @@ void QSerialPortUtil::readData() { QByteArray buffer = serial.readAll(); - - emit dataRecieved(buffer); + recvBuff.append(buffer); + if (recvBuff.endsWith("\r\n")) + { + emit dataRecieved(recvBuff); + recvBuff.clear(); + } } bool QSerialPortUtil::isOpen() @@ -97,21 +103,38 @@ emit dataRecieved(buffer); */ - for (int i = 1; i <= 8; i++) - { - QByteArray buffer; + QByteArray buffer; +// for (int i = 1; i <= 8; i++) +// { +// 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); - 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"); +// } - 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); - } + buffer.append("$GL,0,1,1,1,10304181796,0,1.0,59354*1D").append("\r\n"); + buffer.append("$GL,0,2,1,1,10304180924,0,1.0,59341*1C").append("\r\n"); + buffer.append("$GL,0,3,1,1,10304181782,0,1.0,59371*1D").append("\r\n"); + buffer.append("$GL,0,4,1,1,10304182288,0,1.0,59874*18").append("\r\n"); + buffer.append("$GL,0,5,1,1,10304182136,0,1.0,59695*1E").append("\r\n"); + buffer.append("$GL,0,6,1,1,10304182466,0,1.0,60015*19").append("\r\n"); + buffer.append("$GL,0,7,1,1,10304175641,0,1.0,41447*17").append("\r\n"); + buffer.append("$GL,0,8,1,1,10304175969,0,1.0,32686*16").append("\r\n"); + buffer.append("$GL,0,9,1,1,25393441727,0,1.0,32979*16").append("\r\n"); + buffer.append("$GL,0,10,1,1,59027139401,0,1.0,64835*2E").append("\r\n"); + buffer.append("$GL,0,11,1,1,70478437959,0,1.0,54457*2A").append("\r\n"); + buffer.append("$GL,0,12,1,1,10304168666,0,1.0,41512*2B").append("\r\n"); + buffer.append("$GL,0,13,1,1,4194443548,0,1.0,31190*1E").append("\r\n"); + buffer.append("$GL,0,14,1,1,58426511854,0,1.0,31289*21").append("\r\n"); + buffer.append("$GL,0,15,0,1,0,0,1.0,0*21").append("\r\n"); + buffer.append("$GL,0,16,0,1,0,0,1.0,0*22").append("\r\n"); + buffer.append("$GLN,0,192.168.000.126,255.255.255.000,192.168.000.001,192.168.001.126,255.255.255.000,192.168.001.001,255.255.255.255,2000,3000,3001*74").append("\r\n"); + buffer.append("$GL,1,2,2,211123,210930*1D").append("\r\n"); + emit dataRecieved(buffer); } diff --git a/CounterAcqBM/common/utils/QSerialPortUtil.h b/CounterAcqBM/common/utils/QSerialPortUtil.h index accf403..9af813a 100644 --- a/CounterAcqBM/common/utils/QSerialPortUtil.h +++ b/CounterAcqBM/common/utils/QSerialPortUtil.h @@ -20,6 +20,7 @@ QSerialPort serial; bool open; + QByteArray recvBuff; void mockReceivData(); diff --git a/CounterAcqBM/common/utils/SettingConfig.cpp b/CounterAcqBM/common/utils/SettingConfig.cpp index c95ff2a..9a84a43 100644 --- a/CounterAcqBM/common/utils/SettingConfig.cpp +++ b/CounterAcqBM/common/utils/SettingConfig.cpp @@ -11,8 +11,8 @@ KAFKA_BROKERS = getProperty("kafka", "brokers").toString(); KAFKA_DATA_TOPIC = getProperty("kafka", "dataTopic").toString(); NEED_SASL = getProperty("kafka", "needSasl").toInt(); - SASL_USERNAME = getProperty("kafka", "sasl_username").toString(); - SASL_PASSWORD = getProperty("kafka", "sasl_password").toString(); + SASL_USERNAME = getProperty("kafka", "saslUsername").toString(); + SASL_PASSWORD = getProperty("kafka", "saslPassword").toString(); CLIENT_ID = getProperty("client", "clientId").toString(); APP_KEY = getProperty("client", "appKey").toString(); diff --git a/CounterAcqBM/conf/config.ini b/CounterAcqBM/conf/config.ini index 3eedbc6..4bff694 100644 --- a/CounterAcqBM/conf/config.ini +++ b/CounterAcqBM/conf/config.ini @@ -6,8 +6,8 @@ brokers="111.198.10.15:12502" dataTopic="cppTest" needSasl=0 -sasl.username="admin" -sasl.password="casicss" +saslUsername="admin" +saslPassword="casicss" [client] clientId="clock" diff --git a/CounterAcqBM/protocol/CounterProtocolBM.cpp b/CounterAcqBM/protocol/CounterProtocolBM.cpp index 2aca849..26cf70c 100644 --- a/CounterAcqBM/protocol/CounterProtocolBM.cpp +++ b/CounterAcqBM/protocol/CounterProtocolBM.cpp @@ -24,7 +24,7 @@ counterData->channelId = subList.at(1).toUInt(); counterData->channelActive = subList.at(2).toUInt(); counterData->channelRefId = subList.at(3).toUInt(); - counterData->channelData = subList.at(4).toLongLong(); + counterData->channelData = subList.at(4).toLongLong(); // counterData->load = subList.at(5); counterData->level = subList.at(6).toDouble(); counterData->frameId = subList.at(7); @@ -32,6 +32,49 @@ return true; } +QList CounterProtocolBM::extractFrameList(QByteArray rawData) +{ + QList resultList; + int head = rawData.indexOf(COUNTER_FRAME_HEAD); + if (head < 0) + { + return resultList; + } + int tail = rawData.lastIndexOf(COUNTER_FRAME_TAIL); + if (tail < 0) + { + return resultList; + } + rawData = rawData.mid(head, tail - head + 2); + std::cout << rawData.toStdString() << std::endl; + + if (rawData.endsWith(QByteArray("\r\n")) == true && rawData.startsWith("$GL") == true) + { + QByteArray ba; + for (int i = 0; i < rawData.size() - 1; i++) + { + if (rawData.at(i) != '\r') + { + ba.append(rawData.at(i)); + } else + { + if (rawData.at(i + 1) == '\n') + { + ba.append("\r\n"); + resultList.append(ba); + ba.clear(); + i++; + } else + { + ba.append(rawData.at(i)); + } + } + } + } + + return resultList; +} + bool CounterProtocolBM::checkFrame(QByteArray rawData) { // 帧长度小于最小的长度 @@ -41,7 +84,7 @@ } // 帧头不是$GL - if (COUNTER_FRAME_HEAD.toLocal8Bit() != rawData.mid(0, COUNTER_FRAME_HEAD.size())) + if ("$GL,0" != rawData.mid(0, 5)) { return false; } diff --git a/CounterAcqBM/protocol/CounterProtocolBM.h b/CounterAcqBM/protocol/CounterProtocolBM.h index a6a9180..b694c8d 100644 --- a/CounterAcqBM/protocol/CounterProtocolBM.h +++ b/CounterAcqBM/protocol/CounterProtocolBM.h @@ -27,6 +27,8 @@ // 解析计数器测量数据 static bool parseMessureData(QByteArray rawData, CounterDataDto * counterData); + static QList extractFrameList(QByteArray rawData); + // 检测帧格式,帧头帧尾 static bool checkFrame(QByteArray rawData); }; diff --git a/CounterAcqBM/protocol/dto/CounterDataDto.cpp b/CounterAcqBM/protocol/dto/CounterDataDto.cpp index 711911f..04401d7 100644 --- a/CounterAcqBM/protocol/dto/CounterDataDto.cpp +++ b/CounterAcqBM/protocol/dto/CounterDataDto.cpp @@ -12,7 +12,7 @@ QJsonObject dataObj; dataObj.insert("channelRefNo", this->channelRefId); - dataObj.insert("dataValue", QString("%1").arg(this->channelClockValue * 1E-12)); + dataObj.insert("dataValue", QString("%1").arg(this->channelClockValueStr)); dataObj.insert("rawValue", QString("%1").arg(this->channelData)); dataObj.insert("frameId", this->frameId); @@ -52,6 +52,7 @@ copy->type = 0; copy->channelClockValue = this->channelClockValue; + copy->channelClockValueStr = this->channelClockValueStr; copy->rawFrame = this->rawFrame; diff --git a/CounterAcqBM/protocol/dto/CounterDataDto.h b/CounterAcqBM/protocol/dto/CounterDataDto.h index ff19375..1deab95 100644 --- a/CounterAcqBM/protocol/dto/CounterDataDto.h +++ b/CounterAcqBM/protocol/dto/CounterDataDto.h @@ -21,6 +21,7 @@ qint8 type = 0; // 测量状态 -- <1> double channelClockValue; // + QString channelClockValueStr; QList channelActiveArray; // xhts QList channelDataArray; // xhts