调整了实时数据与统计数据的转换方式。更新了暂态事件与波形的处理
This commit is contained in:
@@ -76,6 +76,139 @@ unsigned char GetCrcSum(const std::vector<unsigned char>& Check, int nOffset, in
|
||||
return reg_b;
|
||||
}
|
||||
|
||||
// ʱ<><CAB1>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TagMsTime -> <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint64_t convertTagMsTimeToMsTimestamp(const TagMsTime& t) {
|
||||
struct tm tm_time = {};
|
||||
tm_time.tm_year = t.Year - 1900;
|
||||
tm_time.tm_mon = t.Month - 1;
|
||||
tm_time.tm_mday = t.Day;
|
||||
tm_time.tm_hour = t.Hour;
|
||||
tm_time.tm_min = t.Min;
|
||||
tm_time.tm_sec = t.Sec;
|
||||
tm_time.tm_isdst = -1; // <20>Զ<EFBFBD><D4B6>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ʱ
|
||||
|
||||
// ת<><D7AA>Ϊʱ<CEAA><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룩
|
||||
time_t seconds = mktime(&tm_time);
|
||||
if (seconds == -1) return 0;
|
||||
|
||||
// <20><><EFBFBD>Ϻ<EFBFBD><CFBA><EFBFBD>
|
||||
return static_cast<uint64_t>(seconds) * 1000 + t.Ms;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>QVVRRecord
|
||||
QVVRRecord DynamicLog_GetQVVRRecordFromLogBuffer(
|
||||
const std::string& strScale,
|
||||
uint32_t nPTType,
|
||||
float fPT,
|
||||
const NewTaglogbuffer& log) {
|
||||
|
||||
QVVRRecord record;
|
||||
|
||||
try {
|
||||
// ת<><D7AA>ʱ<EFBFBD><CAB1>
|
||||
record.triggerTimeMs = convertTagMsTimeToMsTimestamp(log.head.Devtime);
|
||||
|
||||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
float fParam1 = 0.0f; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
float fParam2 = 0.0f; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
float fParam3 = 0.0f; // <20><><EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD>ֵ
|
||||
|
||||
for (const auto& body : log.bodyList) {
|
||||
switch (body.ParaCode) {
|
||||
case 0: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD>
|
||||
fParam2 = static_cast<float>(body.ParaValue) / 65536.0f;
|
||||
break;
|
||||
case 1: // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>(˲̬<CBB2><CCAC><EFBFBD><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>)
|
||||
fParam1 = static_cast<float>(body.ParaValue) / 65536.0f;
|
||||
break;
|
||||
case 25: // <20><><EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD>ֵ(˲̬<CBB2><CCAC><EFBFBD><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>)
|
||||
fParam3 = static_cast<float>(body.ParaValue) / 65536.0f;
|
||||
break;
|
||||
case 3: //<2F><>ѹ<EFBFBD><D1B9><EFBFBD>ȣ<EFBFBD>˲̬<CBB2><CCAC><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD>
|
||||
record.fMagntitude = (static_cast<float>(body.ParaValue) / 65536.0f) / 100.0f;
|
||||
break;
|
||||
case 5: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲̬<CBB2><CCAC><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD>
|
||||
record.phase = static_cast<float>(body.ParaValue) / 65536.0f;
|
||||
break;
|
||||
case 6: //˲<><CBB2><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>˲̬<CBB2><CCAC><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD>
|
||||
record.transientValue = (static_cast<float>(body.ParaValue) / 65536.0f) / 100.0f;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
record.fPersisstime = fParam1;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵfBase
|
||||
float fBase = 0.0f;
|
||||
if (fParam3 < 50.0f) { // δ<><CEB4><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD>ż<EFBFBD>
|
||||
if (fPT != 1.0f) { // <20><><EFBFBD>Ȳ<EFBFBD>Ϊ1
|
||||
fBase = (nPTType == 0) ? 57.74f : 100.0f;
|
||||
}
|
||||
else {
|
||||
std::string strTemp = strScale;
|
||||
std::transform(strTemp.begin(), strTemp.end(), strTemp.begin(), ::tolower);
|
||||
size_t pos = strTemp.find('k');
|
||||
if (pos != std::string::npos) {
|
||||
std::string numPart = strTemp.substr(0, pos);
|
||||
try {
|
||||
float fTemp = std::stof(numPart) * 1000.0f;
|
||||
fBase = (nPTType == 0) ? (fTemp / std::sqrt(3.0f)) : fTemp;
|
||||
}
|
||||
catch (...) {
|
||||
fBase = (nPTType == 0) ? 57.74f : 100.0f;
|
||||
}
|
||||
}
|
||||
else {
|
||||
fBase = (nPTType == 0) ? 57.74f : 100.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
fBase = fParam3; // ʹ<>ø<EFBFBD><C3B8><EFBFBD><EFBFBD>ż<EFBFBD>ֵ
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
switch (log.head.LogCode) {
|
||||
case 0: case 26: case 40: case 54: case 68: case 82:
|
||||
record.nType = 3;
|
||||
break;
|
||||
case 1: case 27: case 41: case 55: case 69: case 83:
|
||||
record.nType = 1;
|
||||
break;
|
||||
case 13: case 36: case 50: case 64: case 78: case 92:
|
||||
record.nType = 2;
|
||||
break;
|
||||
case 24:
|
||||
// <20>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
break;
|
||||
case 100:
|
||||
record.nType = 1; // ģ<><C4A3><EFBFBD><EFBFBD>ѹ<EFBFBD>ݽ<EFBFBD>
|
||||
break;
|
||||
case 3:
|
||||
record.nType = 4; // ˲̬<CBB2>¼<EFBFBD>
|
||||
default:
|
||||
// δ֪<CEB4><D6AA><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>0
|
||||
break;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><E2B4A6><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>¼<EFBFBD><C2BC>ҷ<EFBFBD>ֵ<EFBFBD>ϴ<EFBFBD>
|
||||
if (record.nType == 3 && fParam2 > fBase * 0.1f) {
|
||||
fParam2 /= 100.0f;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
||||
record.fMagntitude = fParam2 / fBase;
|
||||
}
|
||||
catch (...) {
|
||||
// <20>쳣ʱ<ECB3A3><CAB1><EFBFBD>ؿռ<D8BF>¼
|
||||
record = QVVRRecord{};
|
||||
}
|
||||
|
||||
return record;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
|
||||
std::vector<unsigned char> GetMsg(const std::vector<unsigned char>& SrcData, unsigned char nType) {
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
@@ -237,3 +370,24 @@ std::vector<unsigned char> generate_realstat_message(unsigned char nCpuNo,
|
||||
return GetMsg(DataBuf, static_cast<unsigned char>(MsgRequestType::Request_New_3S));
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǰ֡<C7B0><D6A1><EFBFBD><EFBFBD>+<2B>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
std::vector<unsigned char> generate_downloadfile_message(int frameIndex, const std::string& fileName) {
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С: 3(<28><><EFBFBD><EFBFBD>) + 4(֡<><D6A1><EFBFBD><EFBFBD>) + 128(<28>ļ<EFBFBD><C4BC><EFBFBD>) = 135<33>ֽ<EFBFBD>
|
||||
std::vector<unsigned char> dataBuf(135, 0x00);
|
||||
|
||||
// д<><D0B4>֡<EFBFBD><D6A1><EFBFBD><EFBFBD> (4<>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
//uint32_t netFrameIndex = htonl(static_cast<uint32_t>(frameIndex));
|
||||
//memcpy(dataBuf.data() + 3, &netFrameIndex, sizeof(uint32_t));
|
||||
// <20>Ƴ<EFBFBD>htonlת<6C><D7AA><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>ʹ<EFBFBD><CAB9>ԭʼ֡<CABC><D6A1><EFBFBD><EFBFBD>(С<><D0A1><EFBFBD><EFBFBD>)
|
||||
uint32_t rawFrameIndex = static_cast<uint32_t>(frameIndex);
|
||||
memcpy(dataBuf.data() + 3, &rawFrameIndex, sizeof(uint32_t));
|
||||
|
||||
// д<><D0B4><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> (<28><><EFBFBD><EFBFBD>128<32>ֽ<EFBFBD>)
|
||||
size_t copyLen = std::min(fileName.size(), static_cast<size_t>(128));
|
||||
if (copyLen > 0) {
|
||||
memcpy(dataBuf.data() + 7, fileName.c_str(), copyLen);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>GetMsg<73><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return GetMsg(dataBuf, static_cast<unsigned char>(MsgRequestType::Request_File_Download));
|
||||
}
|
||||
Reference in New Issue
Block a user