diff --git a/DeviceHub/device/FrequencyTuning.cpp b/DeviceHub/device/FrequencyTuning.cpp index c63bc84..79b9af4 100644 --- a/DeviceHub/device/FrequencyTuning.cpp +++ b/DeviceHub/device/FrequencyTuning.cpp @@ -38,18 +38,38 @@ // buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n"); // buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,1900,2355,0,0,0,0,0,1,1,1*4C").append("\r\n"); // buffer.append("$GLP,0,1000,0,100,20000*45").append("\r\n"); - buffer.append("$1C2BM1304-3021010071204312*$572BM1304-30210100713 -2.52E-10 +3.02E-14 -000000002000 000008000 +0000000027.6007BAF*"); - + buffer.append("000$1C2BM1304-3021010071204312*$572BM1304-30210100713 -2.52E-10 +3.02E-14 -000000002000 00000"); this->dataReceivedHandler(buffer); + + QTimer::singleShot(20, this, [=](){ + QByteArray buffer; + buffer.append("8000 +0000000027.6007BAF*"); + this->dataReceivedHandler(buffer); + }); } void FrequencyTuning::dataReceivedHandler(QByteArray data) { this->dataBuff.append(data); - QList frameList = protocol->extractFrameList(this->dataBuff); + int start = dataBuff.indexOf("$"); + if (start < 0) + { + return; + } + dataBuff = dataBuff.right(dataBuff.size() - start); + + int end = dataBuff.lastIndexOf("*"); + if (end < 0) { + return; + } + QByteArray rawFrame = dataBuff.left(end + 1); + dataBuff = dataBuff.right(dataBuff.size() - end - 1); + + QList frameList = protocol->extractFrameList(rawFrame); +// std::cout << QString("[%1]: ").arg(frameList.size()).toStdString() << dataBuff.toStdString() << std::endl; if (frameList.size() > 0) { - this->dataBuff.clear(); +// this->dataBuff.clear(); frameParse(frameList); } } @@ -77,7 +97,18 @@ frameDto->devCode = devCode; - this->afterFrameParse(frameDto); + if (frameType == FrequencyTuningProtocolTX::FrequencyTuningProtocolTX::STATUS_FRAME || + frameType == FrequencyTuningProtocolTX::FREQUENCY_TUNING_FRAME_TYPE::LOCK_FRAME) + { + this->afterFrameParse(frameDto); + } + + if (frameType == FrequencyTuningProtocolTX::FrequencyTuningProtocolTX::CMDREP_FRAME) + { + frameDto->rawCommand = rawCommandBytes; + frameDto->commandId = commandId; + this->afterCommandReply(frameDto); + } } // 在此处释放内存,不影响后续显示 @@ -97,7 +128,7 @@ // 1. 原始字节数组数据 QString filename = "raw_" + devCode + ".log"; - QString content = frameDto->timestamp + " [recv] " + frameDto->rawFrame.left(frameDto->rawFrame.size() - FRAME_TAIL.size()); + QString content = frameDto->timestamp + " [recv] " + frameDto->rawFrame.left(frameDto->rawFrame.size()); QLogUtil::writeRawDataLogByDate(date, filename, content); // 2. 解析后的json数据 @@ -118,6 +149,29 @@ emit this->sendDataToDraw(frameDto); } +void FrequencyTuning::afterCommandReply(DeviceFrameBaseDto * frameDto) +{ + // 0. 输出到日志文件中 + QString date = frameDto->timestamp.mid(0, 10); + + // 1. 原始字节数组数据 + QString filename = "raw_" + devCode + ".log"; + QString content = frameDto->timestamp + " [recv] " + frameDto->rawFrame.left(frameDto->rawFrame.size()); + QLogUtil::writeRawDataLogByDate(date, filename, content); + + // 2. 解析后的json数据 + QString frameFilename = "frame_" + devCode + ".log"; + QString frameContent = frameDto->timestamp + " [reply] " + QJsonDocument(frameDto->toJSON()).toJson(QJsonDocument::Compact); + QLogUtil::writeChannelDataLogByDate(date, frameFilename, frameContent); + + // 3. 输出到中间件,执行后续处理过程 + if (SettingConfig::getInstance().NEED_KAFKA == 1) + { + QJsonObject jsonObj = frameDto->toJSON(); + kafkaProducer.produceMessage(SettingConfig::getInstance().KAFKA_CMDCB_TOPIC, QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); + } +} + void FrequencyTuning::sendDataToSerial(QByteArray data) { CommandReplyDto replyDto; @@ -125,7 +179,7 @@ replyDto.commandId = commandId; replyDto.rawCommand = rawCommandBytes; - data.append(FRAME_TAIL); +// data.append(FRAME_TAIL); if (SettingConfig::getInstance().WORK_MODE == "real") { if (serialUtil.isOpen() == true) @@ -153,24 +207,9 @@ // 1. 原始字节数组数据 QString filename = "rawCmd_" + devCode + ".log"; - QString content = now.toString("yyyy-MM-dd HH:mm:ss.zzz") + " [send] " + data.left(data.size() - FRAME_TAIL.size()); + QString content = now.toString("yyyy-MM-dd HH:mm:ss.zzz") + " [send] " + data.left(data.size()); QLogUtil::writeRawDataLogByDate(date, filename, content); - // reply success - replyDto.cmdStatus = 1; - - // 2. 解析后的json数据 - QString frameFilename = "frame_" + devCode + ".log"; - QString frameContent = now.toString("yyyy-MM-dd HH:mm:ss.zzz") + " [reply] " + QJsonDocument(replyDto.toJSON()).toJson(QJsonDocument::Compact); - QLogUtil::writeChannelDataLogByDate(date, frameFilename, frameContent); - - // 3. 输出到中间件,执行后续处理过程 - if (SettingConfig::getInstance().NEED_KAFKA == 1) - { - kafkaProducer.produceMessage(SettingConfig::getInstance().KAFKA_CMDCB_TOPIC, - QString(QJsonDocument(replyDto.toJSON()).toJson(QJsonDocument::Compact))); - } - std::cout << content.toStdString() << std::endl; } diff --git a/DeviceHub/device/FrequencyTuning.cpp b/DeviceHub/device/FrequencyTuning.cpp index c63bc84..79b9af4 100644 --- a/DeviceHub/device/FrequencyTuning.cpp +++ b/DeviceHub/device/FrequencyTuning.cpp @@ -38,18 +38,38 @@ // buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n"); // buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,1900,2355,0,0,0,0,0,1,1,1*4C").append("\r\n"); // buffer.append("$GLP,0,1000,0,100,20000*45").append("\r\n"); - buffer.append("$1C2BM1304-3021010071204312*$572BM1304-30210100713 -2.52E-10 +3.02E-14 -000000002000 000008000 +0000000027.6007BAF*"); - + buffer.append("000$1C2BM1304-3021010071204312*$572BM1304-30210100713 -2.52E-10 +3.02E-14 -000000002000 00000"); this->dataReceivedHandler(buffer); + + QTimer::singleShot(20, this, [=](){ + QByteArray buffer; + buffer.append("8000 +0000000027.6007BAF*"); + this->dataReceivedHandler(buffer); + }); } void FrequencyTuning::dataReceivedHandler(QByteArray data) { this->dataBuff.append(data); - QList frameList = protocol->extractFrameList(this->dataBuff); + int start = dataBuff.indexOf("$"); + if (start < 0) + { + return; + } + dataBuff = dataBuff.right(dataBuff.size() - start); + + int end = dataBuff.lastIndexOf("*"); + if (end < 0) { + return; + } + QByteArray rawFrame = dataBuff.left(end + 1); + dataBuff = dataBuff.right(dataBuff.size() - end - 1); + + QList frameList = protocol->extractFrameList(rawFrame); +// std::cout << QString("[%1]: ").arg(frameList.size()).toStdString() << dataBuff.toStdString() << std::endl; if (frameList.size() > 0) { - this->dataBuff.clear(); +// this->dataBuff.clear(); frameParse(frameList); } } @@ -77,7 +97,18 @@ frameDto->devCode = devCode; - this->afterFrameParse(frameDto); + if (frameType == FrequencyTuningProtocolTX::FrequencyTuningProtocolTX::STATUS_FRAME || + frameType == FrequencyTuningProtocolTX::FREQUENCY_TUNING_FRAME_TYPE::LOCK_FRAME) + { + this->afterFrameParse(frameDto); + } + + if (frameType == FrequencyTuningProtocolTX::FrequencyTuningProtocolTX::CMDREP_FRAME) + { + frameDto->rawCommand = rawCommandBytes; + frameDto->commandId = commandId; + this->afterCommandReply(frameDto); + } } // 在此处释放内存,不影响后续显示 @@ -97,7 +128,7 @@ // 1. 原始字节数组数据 QString filename = "raw_" + devCode + ".log"; - QString content = frameDto->timestamp + " [recv] " + frameDto->rawFrame.left(frameDto->rawFrame.size() - FRAME_TAIL.size()); + QString content = frameDto->timestamp + " [recv] " + frameDto->rawFrame.left(frameDto->rawFrame.size()); QLogUtil::writeRawDataLogByDate(date, filename, content); // 2. 解析后的json数据 @@ -118,6 +149,29 @@ emit this->sendDataToDraw(frameDto); } +void FrequencyTuning::afterCommandReply(DeviceFrameBaseDto * frameDto) +{ + // 0. 输出到日志文件中 + QString date = frameDto->timestamp.mid(0, 10); + + // 1. 原始字节数组数据 + QString filename = "raw_" + devCode + ".log"; + QString content = frameDto->timestamp + " [recv] " + frameDto->rawFrame.left(frameDto->rawFrame.size()); + QLogUtil::writeRawDataLogByDate(date, filename, content); + + // 2. 解析后的json数据 + QString frameFilename = "frame_" + devCode + ".log"; + QString frameContent = frameDto->timestamp + " [reply] " + QJsonDocument(frameDto->toJSON()).toJson(QJsonDocument::Compact); + QLogUtil::writeChannelDataLogByDate(date, frameFilename, frameContent); + + // 3. 输出到中间件,执行后续处理过程 + if (SettingConfig::getInstance().NEED_KAFKA == 1) + { + QJsonObject jsonObj = frameDto->toJSON(); + kafkaProducer.produceMessage(SettingConfig::getInstance().KAFKA_CMDCB_TOPIC, QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); + } +} + void FrequencyTuning::sendDataToSerial(QByteArray data) { CommandReplyDto replyDto; @@ -125,7 +179,7 @@ replyDto.commandId = commandId; replyDto.rawCommand = rawCommandBytes; - data.append(FRAME_TAIL); +// data.append(FRAME_TAIL); if (SettingConfig::getInstance().WORK_MODE == "real") { if (serialUtil.isOpen() == true) @@ -153,24 +207,9 @@ // 1. 原始字节数组数据 QString filename = "rawCmd_" + devCode + ".log"; - QString content = now.toString("yyyy-MM-dd HH:mm:ss.zzz") + " [send] " + data.left(data.size() - FRAME_TAIL.size()); + QString content = now.toString("yyyy-MM-dd HH:mm:ss.zzz") + " [send] " + data.left(data.size()); QLogUtil::writeRawDataLogByDate(date, filename, content); - // reply success - replyDto.cmdStatus = 1; - - // 2. 解析后的json数据 - QString frameFilename = "frame_" + devCode + ".log"; - QString frameContent = now.toString("yyyy-MM-dd HH:mm:ss.zzz") + " [reply] " + QJsonDocument(replyDto.toJSON()).toJson(QJsonDocument::Compact); - QLogUtil::writeChannelDataLogByDate(date, frameFilename, frameContent); - - // 3. 输出到中间件,执行后续处理过程 - if (SettingConfig::getInstance().NEED_KAFKA == 1) - { - kafkaProducer.produceMessage(SettingConfig::getInstance().KAFKA_CMDCB_TOPIC, - QString(QJsonDocument(replyDto.toJSON()).toJson(QJsonDocument::Compact))); - } - std::cout << content.toStdString() << std::endl; } diff --git a/DeviceHub/device/FrequencyTuning.h b/DeviceHub/device/FrequencyTuning.h index f65e9f7..0f28a6f 100644 --- a/DeviceHub/device/FrequencyTuning.h +++ b/DeviceHub/device/FrequencyTuning.h @@ -4,6 +4,7 @@ #include #include "device/DeviceBase.h" +#include "protocol/FrequencyTuningProtocolTX.h" #include "protocol/dto/FrequencyTuningStatusFreqDto.h" #include "protocol/dto/FrequencyTuningStatusLockDto.h" @@ -20,7 +21,7 @@ void mockReceivCmdReply(){} void afterFrameParse(DeviceFrameBaseDto * frameDto); - void afterCommandReply(DeviceFrameBaseDto * frameDto){} + void afterCommandReply(DeviceFrameBaseDto * frameDto); void sendDataToSerial(QByteArray data); signals: diff --git a/DeviceHub/device/FrequencyTuning.cpp b/DeviceHub/device/FrequencyTuning.cpp index c63bc84..79b9af4 100644 --- a/DeviceHub/device/FrequencyTuning.cpp +++ b/DeviceHub/device/FrequencyTuning.cpp @@ -38,18 +38,38 @@ // buffer.append("$GLN,0,192.168.1.126,255.255.255.0,192.168.1.1,255.255.255.255,3000,2000,2001*71").append("\r\n"); // buffer.append("$GLF,0,0,0,0,00000,0,0,0,0,0,0,0,0,0,0,0,1900,2355,0,0,0,0,0,1,1,1*4C").append("\r\n"); // buffer.append("$GLP,0,1000,0,100,20000*45").append("\r\n"); - buffer.append("$1C2BM1304-3021010071204312*$572BM1304-30210100713 -2.52E-10 +3.02E-14 -000000002000 000008000 +0000000027.6007BAF*"); - + buffer.append("000$1C2BM1304-3021010071204312*$572BM1304-30210100713 -2.52E-10 +3.02E-14 -000000002000 00000"); this->dataReceivedHandler(buffer); + + QTimer::singleShot(20, this, [=](){ + QByteArray buffer; + buffer.append("8000 +0000000027.6007BAF*"); + this->dataReceivedHandler(buffer); + }); } void FrequencyTuning::dataReceivedHandler(QByteArray data) { this->dataBuff.append(data); - QList frameList = protocol->extractFrameList(this->dataBuff); + int start = dataBuff.indexOf("$"); + if (start < 0) + { + return; + } + dataBuff = dataBuff.right(dataBuff.size() - start); + + int end = dataBuff.lastIndexOf("*"); + if (end < 0) { + return; + } + QByteArray rawFrame = dataBuff.left(end + 1); + dataBuff = dataBuff.right(dataBuff.size() - end - 1); + + QList frameList = protocol->extractFrameList(rawFrame); +// std::cout << QString("[%1]: ").arg(frameList.size()).toStdString() << dataBuff.toStdString() << std::endl; if (frameList.size() > 0) { - this->dataBuff.clear(); +// this->dataBuff.clear(); frameParse(frameList); } } @@ -77,7 +97,18 @@ frameDto->devCode = devCode; - this->afterFrameParse(frameDto); + if (frameType == FrequencyTuningProtocolTX::FrequencyTuningProtocolTX::STATUS_FRAME || + frameType == FrequencyTuningProtocolTX::FREQUENCY_TUNING_FRAME_TYPE::LOCK_FRAME) + { + this->afterFrameParse(frameDto); + } + + if (frameType == FrequencyTuningProtocolTX::FrequencyTuningProtocolTX::CMDREP_FRAME) + { + frameDto->rawCommand = rawCommandBytes; + frameDto->commandId = commandId; + this->afterCommandReply(frameDto); + } } // 在此处释放内存,不影响后续显示 @@ -97,7 +128,7 @@ // 1. 原始字节数组数据 QString filename = "raw_" + devCode + ".log"; - QString content = frameDto->timestamp + " [recv] " + frameDto->rawFrame.left(frameDto->rawFrame.size() - FRAME_TAIL.size()); + QString content = frameDto->timestamp + " [recv] " + frameDto->rawFrame.left(frameDto->rawFrame.size()); QLogUtil::writeRawDataLogByDate(date, filename, content); // 2. 解析后的json数据 @@ -118,6 +149,29 @@ emit this->sendDataToDraw(frameDto); } +void FrequencyTuning::afterCommandReply(DeviceFrameBaseDto * frameDto) +{ + // 0. 输出到日志文件中 + QString date = frameDto->timestamp.mid(0, 10); + + // 1. 原始字节数组数据 + QString filename = "raw_" + devCode + ".log"; + QString content = frameDto->timestamp + " [recv] " + frameDto->rawFrame.left(frameDto->rawFrame.size()); + QLogUtil::writeRawDataLogByDate(date, filename, content); + + // 2. 解析后的json数据 + QString frameFilename = "frame_" + devCode + ".log"; + QString frameContent = frameDto->timestamp + " [reply] " + QJsonDocument(frameDto->toJSON()).toJson(QJsonDocument::Compact); + QLogUtil::writeChannelDataLogByDate(date, frameFilename, frameContent); + + // 3. 输出到中间件,执行后续处理过程 + if (SettingConfig::getInstance().NEED_KAFKA == 1) + { + QJsonObject jsonObj = frameDto->toJSON(); + kafkaProducer.produceMessage(SettingConfig::getInstance().KAFKA_CMDCB_TOPIC, QString(QJsonDocument(jsonObj).toJson(QJsonDocument::Compact))); + } +} + void FrequencyTuning::sendDataToSerial(QByteArray data) { CommandReplyDto replyDto; @@ -125,7 +179,7 @@ replyDto.commandId = commandId; replyDto.rawCommand = rawCommandBytes; - data.append(FRAME_TAIL); +// data.append(FRAME_TAIL); if (SettingConfig::getInstance().WORK_MODE == "real") { if (serialUtil.isOpen() == true) @@ -153,24 +207,9 @@ // 1. 原始字节数组数据 QString filename = "rawCmd_" + devCode + ".log"; - QString content = now.toString("yyyy-MM-dd HH:mm:ss.zzz") + " [send] " + data.left(data.size() - FRAME_TAIL.size()); + QString content = now.toString("yyyy-MM-dd HH:mm:ss.zzz") + " [send] " + data.left(data.size()); QLogUtil::writeRawDataLogByDate(date, filename, content); - // reply success - replyDto.cmdStatus = 1; - - // 2. 解析后的json数据 - QString frameFilename = "frame_" + devCode + ".log"; - QString frameContent = now.toString("yyyy-MM-dd HH:mm:ss.zzz") + " [reply] " + QJsonDocument(replyDto.toJSON()).toJson(QJsonDocument::Compact); - QLogUtil::writeChannelDataLogByDate(date, frameFilename, frameContent); - - // 3. 输出到中间件,执行后续处理过程 - if (SettingConfig::getInstance().NEED_KAFKA == 1) - { - kafkaProducer.produceMessage(SettingConfig::getInstance().KAFKA_CMDCB_TOPIC, - QString(QJsonDocument(replyDto.toJSON()).toJson(QJsonDocument::Compact))); - } - std::cout << content.toStdString() << std::endl; } diff --git a/DeviceHub/device/FrequencyTuning.h b/DeviceHub/device/FrequencyTuning.h index f65e9f7..0f28a6f 100644 --- a/DeviceHub/device/FrequencyTuning.h +++ b/DeviceHub/device/FrequencyTuning.h @@ -4,6 +4,7 @@ #include #include "device/DeviceBase.h" +#include "protocol/FrequencyTuningProtocolTX.h" #include "protocol/dto/FrequencyTuningStatusFreqDto.h" #include "protocol/dto/FrequencyTuningStatusLockDto.h" @@ -20,7 +21,7 @@ void mockReceivCmdReply(){} void afterFrameParse(DeviceFrameBaseDto * frameDto); - void afterCommandReply(DeviceFrameBaseDto * frameDto){} + void afterCommandReply(DeviceFrameBaseDto * frameDto); void sendDataToSerial(QByteArray data); signals: diff --git a/DeviceHub/protocol/FrequencyTuningProtocolTX.cpp b/DeviceHub/protocol/FrequencyTuningProtocolTX.cpp index 501b19e..af4a1f7 100644 --- a/DeviceHub/protocol/FrequencyTuningProtocolTX.cpp +++ b/DeviceHub/protocol/FrequencyTuningProtocolTX.cpp @@ -51,19 +51,24 @@ ((FrequencyTuningStatusFreqDto *)ftFrameData)->pulseWidth = subValues.at(4).toLongLong(); ((FrequencyTuningStatusFreqDto *)ftFrameData)->phaseAdjust = subValues.at(5).toDouble(); ((FrequencyTuningStatusFreqDto *)ftFrameData)->frameType = FREQUENCY_TUNING_FREQ_FRAME_TYPE; - break; + return true; } case FrequencyTuningProtocolTX::FREQUENCY_TUNING_FRAME_TYPE::LOCK_FRAME : { ((FrequencyTuningStatusLockDto *)ftFrameData)->lockStatus = content.at(2); ((FrequencyTuningStatusLockDto *)ftFrameData)->frameType = FREQUENCY_TUNING_LOCK_FRAME_TYPE; - break; + return true; + } + case FrequencyTuningProtocolTX::FREQUENCY_TUNING_FRAME_TYPE::CMDREP_FRAME : + { + ((CommandReplyDto *)ftFrameData)->cmdStatus = content == "1" ? 1 : 0; + return true; } default: break; } - return true; + return false; } QByteArray FrequencyTuningProtocolTX::generateSettingCommand(QString devCode, QString commandType, QString valueSet) @@ -78,10 +83,10 @@ { // 频率偏移设置 or 频率偏移步进量设置 commandBytes.append(0x20); - QString valueStr = QString::number(valueSet.toDouble(), 'g', 3).toUpper(); + QString valueStr = QString::number(valueSet.toDouble(), 'e', 2).toUpper(); if (valueSet.toDouble() >= 0) { - commandBytes.prepend('+'); + valueStr.prepend('+'); } commandBytes.append(valueStr); @@ -93,9 +98,9 @@ QString valueStr = QString("%1").arg(qAbs(valueSet.toLongLong()), 12, 10, QLatin1Char('0')); if (valueSet.toLongLong() >= 0) { - commandBytes.prepend('+'); + valueStr.prepend('+'); } else { - commandBytes.prepend("-"); + valueStr.prepend("-"); } commandBytes.append(valueStr); @@ -103,8 +108,7 @@ { // PPS脉冲宽度设置 commandBytes.append(0x20); - commandBytes.append('+'); - QString valueStr = QString("%1").arg(valueSet.toLongLong(), 8, 10, QLatin1Char('0')); + QString valueStr = QString("%1").arg(valueSet.toLongLong(), 9, 10, QLatin1Char('0')); commandBytes.append(valueStr); } else if (commandType == "7") @@ -114,9 +118,9 @@ QString valueStr = QString("%1").arg(qAbs(valueSet.toDouble()), 14, 'f', 3, QLatin1Char('0')); if (valueSet.toDouble() >= 0) { - commandBytes.prepend('+'); + valueStr.prepend('+'); } else { - commandBytes.prepend('-'); + valueStr.prepend('-'); } commandBytes.append(valueStr); @@ -126,7 +130,7 @@ commandBytes.append(0x20).append("1"); } - commandBytes.append('0'); // + commandBytes.append(0x20); // commandBytes.append(this->buildCRC16(commandBytes)); commandBytes.append("*"); @@ -140,19 +144,6 @@ { QList resultList; - int start = rawData.indexOf("$"); - if (start < 0) - { - return resultList; - } - rawData = rawData.right(rawData.size() - start); - - int end = rawData.lastIndexOf("*"); - if (end < 0) { - return resultList; - } - rawData = rawData.left(end - start + 1); - QByteArray ba; for (int i = 0; i < rawData.size(); i++) { @@ -187,7 +178,7 @@ { return FREQUENCY_TUNING_FRAME_TYPE::STATUS_FRAME; } - } else if (rawData.at(3) == '4') + } else if (rawData.at(3) == '9') { return FREQUENCY_TUNING_FRAME_TYPE::CMDREP_FRAME; } else