2025-06-13 11:29:59 +08:00
|
|
|
|
#include <vector>
|
|
|
|
|
|
#include <cstdint>
|
|
|
|
|
|
#include <cstring>
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
#include <stdexcept>
|
|
|
|
|
|
#include <algorithm>
|
|
|
|
|
|
#include <cctype>
|
|
|
|
|
|
#include <cstdlib>
|
2025-07-03 11:13:16 +08:00
|
|
|
|
#include <ctime>
|
|
|
|
|
|
#include <arpa/inet.h> // <20>ֽ<EFBFBD><D6BD><EFBFBD>ת<EFBFBD><D7AA>
|
|
|
|
|
|
#include <array>
|
2025-07-25 10:47:50 +08:00
|
|
|
|
#include <cmath>
|
2025-07-03 11:13:16 +08:00
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
|
|
|
|
float IntToFloat(int num);
|
|
|
|
|
|
float ShorToFloat100(short num);
|
|
|
|
|
|
float ShorToFloat1000(short num);
|
|
|
|
|
|
float ShorToFloat10000(short num);
|
|
|
|
|
|
// <20><><EFBFBD>ͱ<EFBFBD><CDB1>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>
|
|
|
|
|
|
enum class MsgRequestType : unsigned char {
|
|
|
|
|
|
//ѯ<><D1AF>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
Request_StatTime = 0x8b,
|
|
|
|
|
|
//ѯ<><D1AF>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-07-09 10:03:37 +08:00
|
|
|
|
Request_Stat = 0x8a,
|
|
|
|
|
|
//ѯ<><D1AF>ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD>
|
2025-07-25 10:47:50 +08:00
|
|
|
|
Request_New_3S = 0x04,
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ļ<EFBFBD>
|
2025-07-30 13:52:52 +08:00
|
|
|
|
Request_File_Download = 0x07,
|
|
|
|
|
|
//ѯ<><D1AF><EFBFBD>ļ<EFBFBD>Ŀ¼
|
2025-08-05 15:41:04 +08:00
|
|
|
|
Request_FileDir = 0x02,
|
|
|
|
|
|
//ѯ<><D1AF>װ<EFBFBD>ö<EFBFBD>ֵ
|
|
|
|
|
|
Request_FixValue = 0x20,
|
|
|
|
|
|
//ѯ<><D1AF>װ<EFBFBD>ö<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|
|
|
|
|
Request_FixDes = 0x21,
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>װ<EFBFBD>ö<EFBFBD>ֵ
|
|
|
|
|
|
Request_Set_Fix = 0x22,
|
|
|
|
|
|
//ѯ<><D1AF><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ
|
|
|
|
|
|
Request_Read_InterFix = 0x23,
|
|
|
|
|
|
//ѯ<><D1AF><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD>ֵor<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
Request_Read_InterFixDes = 0x24,
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ
|
|
|
|
|
|
Request_Set_InterFix = 0x25
|
2025-07-03 11:13:16 +08:00
|
|
|
|
};
|
|
|
|
|
|
// <20><><EFBFBD>ձ<EFBFBD><D5B1>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>
|
|
|
|
|
|
enum class MsgResponseType : unsigned char {
|
|
|
|
|
|
//ѯ<><D1AF>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
Response_StatTime = 0x27,
|
|
|
|
|
|
//ѯ<><D1AF>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-07-09 10:03:37 +08:00
|
|
|
|
Response_Stat = 0x26,
|
|
|
|
|
|
//ѯ<><D1AF>ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD>
|
2025-07-25 10:47:50 +08:00
|
|
|
|
Response_New_3S = 0x84,
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>̬<EFBFBD>¼<EFBFBD>
|
|
|
|
|
|
Response_Event = 0x16,
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵IJ<CDB5><C4B2><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ϣ<EFBFBD>¼<EFBFBD>
|
|
|
|
|
|
Response_ActiveSOEInfo = 0x17,
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ļ<EFBFBD>
|
2025-07-30 13:52:52 +08:00
|
|
|
|
Response_File_Download = 0x87,
|
|
|
|
|
|
//ѯ<><D1AF><EFBFBD>ļ<EFBFBD>Ŀ¼
|
2025-08-05 15:41:04 +08:00
|
|
|
|
Response_FileDir = 0x82,
|
|
|
|
|
|
//ѯ<><D1AF>װ<EFBFBD>ö<EFBFBD>ֵ
|
|
|
|
|
|
Response_FixValue = 0xA0,
|
|
|
|
|
|
//ѯ<><D1AF>װ<EFBFBD>ö<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|
|
|
|
|
Response_FixDes = 0xA1,
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>װ<EFBFBD>ö<EFBFBD>ֵ(δʹ<CEB4><CAB9>,<2C><><EFBFBD><EFBFBD>Ĭ<EFBFBD>Ͽ϶<CFBF><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>)
|
|
|
|
|
|
Response_Set_Fix = 0xA2,
|
|
|
|
|
|
//ѯ<><D1AF><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ
|
|
|
|
|
|
Response_Read_InterFix = 0xA3,
|
|
|
|
|
|
//ѯ<><D1AF><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|
|
|
|
|
Response_Read_InterFixDes = 0xA4,
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ(δʹ<CEB4><CAB9>,<2C><><EFBFBD><EFBFBD>Ĭ<EFBFBD>Ͽ϶<CFBF><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>)
|
|
|
|
|
|
Response_Set_InterFix = 0xA5,
|
|
|
|
|
|
//Ĭ<>Ͽ϶<CFBF>Ӧ<EFBFBD><D3A6>
|
|
|
|
|
|
Response_NewACK = 0x40,
|
|
|
|
|
|
//Ĭ<>Ϸ<EFBFBD><CFB7><EFBFBD>Ӧ<EFBFBD><D3A6>
|
|
|
|
|
|
Response_NewNACK = 0x41
|
2025-07-03 11:13:16 +08:00
|
|
|
|
};
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ
|
|
|
|
|
|
class MessageParser {
|
|
|
|
|
|
public:
|
|
|
|
|
|
// <20><>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint8_t msgType; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::vector<uint8_t> RecvData; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int nMsgLen; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+֡<><D6A1><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int nRecvDataLen; //<2F><><EFBFBD><EFBFBD><EFBFBD>峤<EFBFBD><E5B3A4>
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>bool<6F><6C><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool SetMsg(const uint8_t* udata, size_t data_size) {
|
|
|
|
|
|
// 1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
|
if (udata == nullptr) {
|
|
|
|
|
|
return false; // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>ʧ<EFBFBD><CAA7>
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ȣ<EFBFBD>6<EFBFBD>ֽ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
|
|
|
|
|
|
constexpr size_t MIN_HEADER_SIZE = 6;
|
|
|
|
|
|
if (data_size < MIN_HEADER_SIZE) {
|
|
|
|
|
|
return false; // ͷ<><CDB7><EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 3. <20><>ȡ<EFBFBD><C8A1><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
nMsgLen = (static_cast<uint16_t>(udata[4]) << 8) | udata[5];
|
|
|
|
|
|
|
|
|
|
|
|
// 4. <20><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD> (8 + nMsgLen)
|
|
|
|
|
|
if (data_size < 8 + nMsgLen) {
|
|
|
|
|
|
return false; // <20><><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ɾ<><C9BE><EFBFBD>˹<EFBFBD><CBB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>4<EFBFBD>ֽ<EFBFBD>
|
|
|
|
|
|
nRecvDataLen = nMsgLen - 4;
|
|
|
|
|
|
|
|
|
|
|
|
// 6. CRCУ<43>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>Ҫʵ<D2AA>֣<EFBFBD>
|
|
|
|
|
|
/*
|
|
|
|
|
|
if (!ValidateCRC(udata, 8 + nMsgLen)) {
|
|
|
|
|
|
return false; // CRCУ<43><D0A3>ʧ<EFBFBD><CAA7>
|
|
|
|
|
|
}
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
// 7. <20><>ȡ<EFBFBD><C8A1>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> 6 + 2 = 8)
|
|
|
|
|
|
msgType = udata[8];
|
|
|
|
|
|
|
|
|
|
|
|
// 8. <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>12<31><32>ʼ)
|
|
|
|
|
|
RecvData.clear();
|
|
|
|
|
|
if (nRecvDataLen > 0) {
|
|
|
|
|
|
// ȷ<><C8B7><EFBFBD><EFBFBD>Խ<EFBFBD>磨nRecvDataLen = nMsgLen - 4<><34>
|
|
|
|
|
|
RecvData.assign(udata + 12, udata + 12 + nRecvDataLen);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true; // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
class tagTime {
|
|
|
|
|
|
public:
|
|
|
|
|
|
uint16_t DeviceYear;
|
|
|
|
|
|
uint16_t DeviceMonth;
|
|
|
|
|
|
uint16_t DeviceDay;
|
|
|
|
|
|
uint16_t DeviceHour;
|
|
|
|
|
|
uint16_t DeviceMinute;
|
|
|
|
|
|
uint16_t DeviceSecond;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ؽṹ<D8BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD>С
|
|
|
|
|
|
static constexpr size_t GetSize() {
|
|
|
|
|
|
return 6 * sizeof(uint16_t);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Ĭ<>Ϲ<EFBFBD><CFB9>캯<EFBFBD><ECBAAF>
|
|
|
|
|
|
tagTime() :
|
|
|
|
|
|
DeviceYear(1970),
|
|
|
|
|
|
DeviceMonth(1),
|
|
|
|
|
|
DeviceDay(1),
|
|
|
|
|
|
DeviceHour(0),
|
|
|
|
|
|
DeviceMinute(0),
|
|
|
|
|
|
DeviceSecond(0) {}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>std::tm<74><6D><EFBFBD><EFBFBD>
|
|
|
|
|
|
explicit tagTime(const std::tm& dt) :
|
|
|
|
|
|
DeviceYear(static_cast<uint16_t>(dt.tm_year + 1900)),
|
|
|
|
|
|
DeviceMonth(static_cast<uint16_t>(dt.tm_mon + 1)),
|
|
|
|
|
|
DeviceDay(static_cast<uint16_t>(dt.tm_mday)),
|
|
|
|
|
|
DeviceHour(static_cast<uint16_t>(dt.tm_hour)),
|
|
|
|
|
|
DeviceMinute(static_cast<uint16_t>(dt.tm_min)),
|
|
|
|
|
|
DeviceSecond(static_cast<uint16_t>(dt.tm_sec)) {}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
|
|
|
|
|
|
void Clone(const tagTime& src) {
|
|
|
|
|
|
DeviceYear = src.DeviceYear;
|
|
|
|
|
|
DeviceMonth = src.DeviceMonth;
|
|
|
|
|
|
DeviceDay = src.DeviceDay;
|
|
|
|
|
|
DeviceHour = src.DeviceHour;
|
|
|
|
|
|
DeviceMinute = src.DeviceMinute;
|
|
|
|
|
|
DeviceSecond = src.DeviceSecond;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool SetStructBuf(const uint8_t* bArray, size_t bufSize, size_t offset = 0) {
|
|
|
|
|
|
if (bufSize - offset < GetSize()) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const uint8_t* ptr = bArray + offset;
|
|
|
|
|
|
|
|
|
|
|
|
DeviceYear = ntohs(*reinterpret_cast<const uint16_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(uint16_t);
|
|
|
|
|
|
DeviceMonth = ntohs(*reinterpret_cast<const uint16_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(uint16_t);
|
|
|
|
|
|
DeviceDay = ntohs(*reinterpret_cast<const uint16_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(uint16_t);
|
|
|
|
|
|
DeviceHour = ntohs(*reinterpret_cast<const uint16_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(uint16_t);
|
|
|
|
|
|
DeviceMinute = ntohs(*reinterpret_cast<const uint16_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(uint16_t);
|
|
|
|
|
|
DeviceSecond = ntohs(*reinterpret_cast<const uint16_t*>(ptr));
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>л<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
size_t GetStructBuf(uint8_t* bArray, size_t bufSize, size_t offset = 0) const {
|
|
|
|
|
|
if (bufSize - offset < GetSize()) {
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t* ptr = bArray + offset;
|
|
|
|
|
|
|
|
|
|
|
|
*reinterpret_cast<uint16_t*>(ptr) = htons(DeviceYear);
|
|
|
|
|
|
ptr += sizeof(uint16_t);
|
|
|
|
|
|
*reinterpret_cast<uint16_t*>(ptr) = htons(DeviceMonth);
|
|
|
|
|
|
ptr += sizeof(uint16_t);
|
|
|
|
|
|
*reinterpret_cast<uint16_t*>(ptr) = htons(DeviceDay);
|
|
|
|
|
|
ptr += sizeof(uint16_t);
|
|
|
|
|
|
*reinterpret_cast<uint16_t*>(ptr) = htons(DeviceHour);
|
|
|
|
|
|
ptr += sizeof(uint16_t);
|
|
|
|
|
|
*reinterpret_cast<uint16_t*>(ptr) = htons(DeviceMinute);
|
|
|
|
|
|
ptr += sizeof(uint16_t);
|
|
|
|
|
|
*reinterpret_cast<uint16_t*>(ptr) = htons(DeviceSecond);
|
|
|
|
|
|
|
|
|
|
|
|
return GetSize();
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//г<><D0B3><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD> Ĭ<><C4AC>50
|
|
|
|
|
|
constexpr int HARMNUM = 50;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD>ݽṹ
|
|
|
|
|
|
struct tagInHarmData {
|
|
|
|
|
|
int32_t Val;
|
|
|
|
|
|
int32_t f;
|
|
|
|
|
|
|
|
|
|
|
|
static constexpr size_t GetSize() {
|
|
|
|
|
|
return sizeof(Val) + sizeof(f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool SetStructBuf(const uint8_t* ptr) {
|
|
|
|
|
|
Val = ntohl(*reinterpret_cast<const int32_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int32_t);
|
|
|
|
|
|
f = ntohl(*reinterpret_cast<const int32_t*>(ptr));
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ
|
|
|
|
|
|
struct tagPowerData {
|
|
|
|
|
|
int32_t P;
|
|
|
|
|
|
int32_t Q;
|
|
|
|
|
|
int32_t S;
|
|
|
|
|
|
|
|
|
|
|
|
static constexpr size_t GetSize() {
|
|
|
|
|
|
return sizeof(P) + sizeof(Q) + sizeof(S);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool SetStructBuf(const uint8_t* ptr) {
|
|
|
|
|
|
P = ntohl(*reinterpret_cast<const int32_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int32_t);
|
|
|
|
|
|
Q = ntohl(*reinterpret_cast<const int32_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int32_t);
|
|
|
|
|
|
S = ntohl(*reinterpret_cast<const int32_t*>(ptr));
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ݽṹ (ʹ<><CAB9>1<EFBFBD>ֽڶ<D6BD><DAB6><EFBFBD>)
|
|
|
|
|
|
#pragma pack(push, 1)
|
|
|
|
|
|
class tagPqData {
|
|
|
|
|
|
public:
|
|
|
|
|
|
int16_t name; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int16_t Data_Type; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
tagTime time; // ʱ<><CAB1>
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::array<int32_t, 9> Rms; // <20><>ѹ/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чֵ
|
|
|
|
|
|
std::array<int32_t, 6> UU_Deviation; // <20><>ѹ<EFBFBD><D1B9>ƫ<EFBFBD><C6AB>
|
|
|
|
|
|
std::array<int32_t, 6> UL_Deviation; // <20><>ѹ<EFBFBD><D1B9>ƫ<EFBFBD><C6AB>
|
|
|
|
|
|
std::array<int32_t, 2> F_Deviation; // Ƶ<><C6B5>ƫ<EFBFBD><C6AB>
|
|
|
|
|
|
std::array<std::array<int32_t, 4>, 2> UI_Seq; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::array<std::array<int32_t, HARMNUM>, 6> FuHarm; // <20><><EFBFBD><EFBFBD>г<EFBFBD><D0B3>
|
|
|
|
|
|
std::array<std::array<int32_t, HARMNUM>, 6> FuHarmPhase; // г<><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::array<std::array<tagInHarmData, HARMNUM>, 6> InHarm; // <20><>г<EFBFBD><D0B3>
|
|
|
|
|
|
std::array<std::array<int32_t, 3>, 4> Total_Power; // <20>ܹ<EFBFBD><DCB9><EFBFBD>
|
|
|
|
|
|
std::array<std::array<tagPowerData, HARMNUM>, 4> Harm_Power; // г<><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::array<std::array<int16_t, HARMNUM>, 6> Harm_Contain; // г<><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::array<int16_t, 6> Harm_Aberrance; // г<><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::array<int16_t, 4> Cos_PF; // <20><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::array<int16_t, 4> Cos_DF; // λ<>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::array<int16_t, 3> U_Fluctuation; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::array<int16_t, 3> U_Flicker; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::array<int16_t, 3> UL_Flicker; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|
|
|
|
|
tagPqData() : name(0), Data_Type(0) {
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ϊ0
|
|
|
|
|
|
Rms.fill(0);
|
|
|
|
|
|
UU_Deviation.fill(0);
|
|
|
|
|
|
UL_Deviation.fill(0);
|
|
|
|
|
|
F_Deviation.fill(0);
|
|
|
|
|
|
|
|
|
|
|
|
for (auto& arr : UI_Seq) arr.fill(0);
|
|
|
|
|
|
for (auto& arr : FuHarm) arr.fill(0);
|
|
|
|
|
|
for (auto& arr : FuHarmPhase) arr.fill(0);
|
|
|
|
|
|
for (auto& arr : Harm_Contain) arr.fill(0);
|
|
|
|
|
|
|
|
|
|
|
|
Harm_Aberrance.fill(0);
|
|
|
|
|
|
Cos_PF.fill(0);
|
|
|
|
|
|
Cos_DF.fill(0);
|
|
|
|
|
|
U_Fluctuation.fill(0);
|
|
|
|
|
|
U_Flicker.fill(0);
|
|
|
|
|
|
UL_Flicker.fill(0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>С
|
|
|
|
|
|
static constexpr size_t GetSize() {
|
|
|
|
|
|
return sizeof(name) + sizeof(Data_Type) +
|
|
|
|
|
|
tagTime::GetSize() +
|
|
|
|
|
|
sizeof(Rms) +
|
|
|
|
|
|
sizeof(UU_Deviation) +
|
|
|
|
|
|
sizeof(UL_Deviation) +
|
|
|
|
|
|
sizeof(F_Deviation) +
|
|
|
|
|
|
sizeof(UI_Seq) +
|
|
|
|
|
|
sizeof(FuHarm) +
|
|
|
|
|
|
sizeof(FuHarmPhase) +
|
|
|
|
|
|
sizeof(InHarm) +
|
|
|
|
|
|
sizeof(Total_Power) +
|
|
|
|
|
|
sizeof(Harm_Power) +
|
|
|
|
|
|
sizeof(Harm_Contain) +
|
|
|
|
|
|
sizeof(Harm_Aberrance) +
|
|
|
|
|
|
sizeof(Cos_PF) +
|
|
|
|
|
|
sizeof(Cos_DF) +
|
|
|
|
|
|
sizeof(U_Fluctuation) +
|
|
|
|
|
|
sizeof(U_Flicker) +
|
|
|
|
|
|
sizeof(UL_Flicker);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool SetStructBuf(const uint8_t* bArray, size_t bufSize, size_t offset = 0) {
|
|
|
|
|
|
if (bufSize - offset < GetSize()) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const uint8_t* ptr = bArray + offset;
|
|
|
|
|
|
size_t remaining = bufSize - offset;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
|
|
|
|
|
|
name = ntohs(*reinterpret_cast<const int16_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(name);
|
|
|
|
|
|
remaining -= sizeof(name);
|
|
|
|
|
|
|
|
|
|
|
|
Data_Type = ntohs(*reinterpret_cast<const int16_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(Data_Type);
|
|
|
|
|
|
remaining -= sizeof(Data_Type);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ṹ
|
|
|
|
|
|
if (!time.SetStructBuf(ptr, remaining)) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
ptr += tagTime::GetSize();
|
|
|
|
|
|
remaining -= tagTime::GetSize();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>һάint32<33><32><EFBFBD><EFBFBD> - ʹ<><CAB9><EFBFBD><EFBFBD>ʽѭ<CABD><D1AD>
|
|
|
|
|
|
for (auto& val : Rms) {
|
|
|
|
|
|
if (remaining < sizeof(int32_t)) return false;
|
|
|
|
|
|
val = ntohl(*reinterpret_cast<const int32_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int32_t);
|
|
|
|
|
|
remaining -= sizeof(int32_t);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (auto& val : UU_Deviation) {
|
|
|
|
|
|
if (remaining < sizeof(int32_t)) return false;
|
|
|
|
|
|
val = ntohl(*reinterpret_cast<const int32_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int32_t);
|
|
|
|
|
|
remaining -= sizeof(int32_t);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (auto& val : UL_Deviation) {
|
|
|
|
|
|
if (remaining < sizeof(int32_t)) return false;
|
|
|
|
|
|
val = ntohl(*reinterpret_cast<const int32_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int32_t);
|
|
|
|
|
|
remaining -= sizeof(int32_t);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (auto& val : F_Deviation) {
|
|
|
|
|
|
if (remaining < sizeof(int32_t)) return false;
|
|
|
|
|
|
val = ntohl(*reinterpret_cast<const int32_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int32_t);
|
|
|
|
|
|
remaining -= sizeof(int32_t);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>άint32<33><32><EFBFBD><EFBFBD> - ʹ<><CAB9><EFBFBD><EFBFBD>ʽѭ<CABD><D1AD>
|
|
|
|
|
|
for (auto& arr : UI_Seq) {
|
|
|
|
|
|
for (auto& val : arr) {
|
|
|
|
|
|
if (remaining < sizeof(int32_t)) return false;
|
|
|
|
|
|
val = ntohl(*reinterpret_cast<const int32_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int32_t);
|
|
|
|
|
|
remaining -= sizeof(int32_t);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (auto& arr : FuHarm) {
|
|
|
|
|
|
for (auto& val : arr) {
|
|
|
|
|
|
if (remaining < sizeof(int32_t)) return false;
|
|
|
|
|
|
val = ntohl(*reinterpret_cast<const int32_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int32_t);
|
|
|
|
|
|
remaining -= sizeof(int32_t);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (auto& arr : FuHarmPhase) {
|
|
|
|
|
|
for (auto& val : arr) {
|
|
|
|
|
|
if (remaining < sizeof(int32_t)) return false;
|
|
|
|
|
|
val = ntohl(*reinterpret_cast<const int32_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int32_t);
|
|
|
|
|
|
remaining -= sizeof(int32_t);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (auto& arr : InHarm) {
|
|
|
|
|
|
for (auto& item : arr) {
|
|
|
|
|
|
if (remaining < tagInHarmData::GetSize()) return false;
|
|
|
|
|
|
item.SetStructBuf(ptr);
|
|
|
|
|
|
ptr += tagInHarmData::GetSize();
|
|
|
|
|
|
remaining -= tagInHarmData::GetSize();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD>
|
|
|
|
|
|
for (auto& arr : Total_Power) {
|
|
|
|
|
|
for (auto& val : arr) {
|
|
|
|
|
|
if (remaining < sizeof(int32_t)) return false;
|
|
|
|
|
|
val = ntohl(*reinterpret_cast<const int32_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int32_t);
|
|
|
|
|
|
remaining -= sizeof(int32_t);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (auto& arr : Harm_Power) {
|
|
|
|
|
|
for (auto& item : arr) {
|
|
|
|
|
|
if (remaining < tagPowerData::GetSize()) return false;
|
|
|
|
|
|
item.SetStructBuf(ptr);
|
|
|
|
|
|
ptr += tagPowerData::GetSize();
|
|
|
|
|
|
remaining -= tagPowerData::GetSize();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>άint16<31><36><EFBFBD><EFBFBD> - ʹ<><CAB9><EFBFBD><EFBFBD>ʽѭ<CABD><D1AD>
|
|
|
|
|
|
for (auto& arr : Harm_Contain) {
|
|
|
|
|
|
for (auto& val : arr) {
|
|
|
|
|
|
if (remaining < sizeof(int16_t)) return false;
|
|
|
|
|
|
val = ntohs(*reinterpret_cast<const int16_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int16_t);
|
|
|
|
|
|
remaining -= sizeof(int16_t);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>һάint16<31><36><EFBFBD><EFBFBD> - ʹ<><CAB9><EFBFBD><EFBFBD>ʽѭ<CABD><D1AD>
|
|
|
|
|
|
for (auto& val : Harm_Aberrance) {
|
|
|
|
|
|
if (remaining < sizeof(int16_t)) return false;
|
|
|
|
|
|
val = ntohs(*reinterpret_cast<const int16_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int16_t);
|
|
|
|
|
|
remaining -= sizeof(int16_t);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (auto& val : Cos_PF) {
|
|
|
|
|
|
if (remaining < sizeof(int16_t)) return false;
|
|
|
|
|
|
val = ntohs(*reinterpret_cast<const int16_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int16_t);
|
|
|
|
|
|
remaining -= sizeof(int16_t);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (auto& val : Cos_DF) {
|
|
|
|
|
|
if (remaining < sizeof(int16_t)) return false;
|
|
|
|
|
|
val = ntohs(*reinterpret_cast<const int16_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int16_t);
|
|
|
|
|
|
remaining -= sizeof(int16_t);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (auto& val : U_Fluctuation) {
|
|
|
|
|
|
if (remaining < sizeof(int16_t)) return false;
|
|
|
|
|
|
val = ntohs(*reinterpret_cast<const int16_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int16_t);
|
|
|
|
|
|
remaining -= sizeof(int16_t);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (auto& val : U_Flicker) {
|
|
|
|
|
|
if (remaining < sizeof(int16_t)) return false;
|
|
|
|
|
|
val = ntohs(*reinterpret_cast<const int16_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int16_t);
|
|
|
|
|
|
remaining -= sizeof(int16_t);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (auto& val : UL_Flicker) {
|
|
|
|
|
|
if (remaining < sizeof(int16_t)) return false;
|
|
|
|
|
|
val = ntohs(*reinterpret_cast<const int16_t*>(ptr));
|
|
|
|
|
|
ptr += sizeof(int16_t);
|
|
|
|
|
|
remaining -= sizeof(int16_t);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
#pragma pack(pop)
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ
|
|
|
|
|
|
struct tagInHarmData_float {
|
|
|
|
|
|
float Val;
|
|
|
|
|
|
float f;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD>ṹ
|
|
|
|
|
|
struct tagPowerData_float {
|
|
|
|
|
|
float P;
|
|
|
|
|
|
float Q;
|
|
|
|
|
|
float S;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// PQ<50><51><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD><EFBFBD>ṹ
|
|
|
|
|
|
class tagPqData_Float {
|
|
|
|
|
|
public:
|
|
|
|
|
|
short name; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
short Data_Type; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
tagTime time; // ʱ<><CAB1>
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::array<float, 9> Rms;
|
|
|
|
|
|
std::array<float, 6> UU_Deviation;
|
|
|
|
|
|
std::array<float, 6> UL_Deviation;
|
|
|
|
|
|
std::array<float, 2> F_Deviation;
|
|
|
|
|
|
std::array<std::array<float, 4>, 2> UI_Seq;
|
|
|
|
|
|
std::array<std::array<float, HARMNUM>, 6> FuHarm;
|
|
|
|
|
|
std::array<std::array<float, HARMNUM>, 6> FuHarmPhase;
|
|
|
|
|
|
std::array<std::array<tagInHarmData_float, HARMNUM>, 6> InHarm;
|
|
|
|
|
|
std::array<std::array<float, 3>, 4> Total_Power;
|
|
|
|
|
|
std::array<std::array<tagPowerData_float, HARMNUM>, 4> Harm_Power;
|
|
|
|
|
|
std::array<std::array<float, HARMNUM>, 6> Harm_Contain;
|
|
|
|
|
|
std::array<float, 6> Harm_Aberrance; // ע<>⣺C#<23><><EFBFBD><EFBFBD>8Ԫ<38><D4AA>
|
|
|
|
|
|
std::array<float, 4> Cos_PF;
|
|
|
|
|
|
std::array<float, 4> Cos_DF;
|
|
|
|
|
|
std::array<float, 3> U_Fluctuation;
|
|
|
|
|
|
std::array<float, 3> U_Flicker;
|
|
|
|
|
|
std::array<float, 3> UL_Flicker;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>캯<EFBFBD><ECBAAF><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
tagPqData_Float() {
|
|
|
|
|
|
Rms.fill(0.0f);
|
|
|
|
|
|
UU_Deviation.fill(0.0f);
|
|
|
|
|
|
UL_Deviation.fill(0.0f);
|
|
|
|
|
|
F_Deviation.fill(0.0f);
|
|
|
|
|
|
|
|
|
|
|
|
for (auto& arr : UI_Seq) arr.fill(0.0f);
|
|
|
|
|
|
for (auto& arr : FuHarm) arr.fill(0.0f);
|
|
|
|
|
|
for (auto& arr : FuHarmPhase) arr.fill(0.0f);
|
|
|
|
|
|
for (auto& arr : Harm_Contain) arr.fill(0.0f);
|
|
|
|
|
|
|
|
|
|
|
|
Harm_Aberrance.fill(0.0f);
|
|
|
|
|
|
Cos_PF.fill(0.0f);
|
|
|
|
|
|
Cos_DF.fill(0.0f);
|
|
|
|
|
|
U_Fluctuation.fill(0.0f);
|
|
|
|
|
|
U_Flicker.fill(0.0f);
|
|
|
|
|
|
UL_Flicker.fill(0.0f);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC>Ƕ<EFBFBD>ṹ
|
|
|
|
|
|
for (auto& arr : InHarm) {
|
|
|
|
|
|
for (auto& item : arr) {
|
|
|
|
|
|
item = tagInHarmData_float{ 0.0f, 0.0f };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (auto& arr : Harm_Power) {
|
|
|
|
|
|
for (auto& item : arr) {
|
|
|
|
|
|
item = tagPowerData_float{ 0.0f, 0.0f, 0.0f };
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void SetFloatValue(const tagPqData& SrcData, float fPT, float fCT) {
|
|
|
|
|
|
time.Clone(SrcData.time);
|
|
|
|
|
|
|
|
|
|
|
|
// F_Deviation
|
|
|
|
|
|
for (int i = 0; i < 2; i++) {
|
|
|
|
|
|
F_Deviation[i] = IntToFloat(SrcData.F_Deviation[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// UI_Seq
|
|
|
|
|
|
for (int i = 0; i < 2; i++) {
|
|
|
|
|
|
for (int j = 0; j < 4; j++) {
|
|
|
|
|
|
if (i == 0) { // <20><>ѹ
|
|
|
|
|
|
if (j == 2) { // <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
UI_Seq[i][j] = IntToFloat(SrcData.UI_Seq[i][j]) * fPT;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (j < 3) {
|
|
|
|
|
|
UI_Seq[i][j] = IntToFloat(SrcData.UI_Seq[i][j]) * fPT * 1000.0f;
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
UI_Seq[i][j] = IntToFloat(SrcData.UI_Seq[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else { // <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (j < 3) {
|
|
|
|
|
|
UI_Seq[i][j] = IntToFloat(SrcData.UI_Seq[i][j]) * fCT;
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
UI_Seq[i][j] = IntToFloat(SrcData.UI_Seq[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; i++) {
|
|
|
|
|
|
U_Fluctuation[i] = ShorToFloat1000(SrcData.U_Fluctuation[i]);
|
|
|
|
|
|
U_Flicker[i] = ShorToFloat1000(SrcData.U_Flicker[i]);
|
|
|
|
|
|
UL_Flicker[i] = ShorToFloat1000(SrcData.UL_Flicker[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
|
|
|
|
Cos_PF[i] = ShorToFloat10000(SrcData.Cos_PF[i]);
|
|
|
|
|
|
Cos_DF[i] = ShorToFloat10000(SrcData.Cos_DF[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ܹ<EFBFBD><DCB9><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
|
|
|
|
for (int j = 0; j < 3; j++) {
|
|
|
|
|
|
Total_Power[i][j] = IntToFloat(SrcData.Total_Power[i][j]) * fPT * fCT;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// г<><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
|
|
|
|
for (int j = 0; j < HARMNUM; j++) {
|
|
|
|
|
|
Harm_Power[i][j].P = IntToFloat(SrcData.Harm_Power[i][j].P) * fPT * fCT;
|
|
|
|
|
|
Harm_Power[i][j].Q = IntToFloat(SrcData.Harm_Power[i][j].Q) * fPT * fCT;
|
|
|
|
|
|
Harm_Power[i][j].S = IntToFloat(SrcData.Harm_Power[i][j].S) * fPT * fCT;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// г<><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 6; i++) {
|
|
|
|
|
|
UU_Deviation[i] = IntToFloat(SrcData.UU_Deviation[i]);
|
|
|
|
|
|
UL_Deviation[i] = IntToFloat(SrcData.UL_Deviation[i]);
|
|
|
|
|
|
Harm_Aberrance[i] = ShorToFloat100(SrcData.Harm_Aberrance[i]);
|
|
|
|
|
|
|
|
|
|
|
|
for (int j = 0; j < HARMNUM; j++) {
|
|
|
|
|
|
if (i < 3) { // <20><>ѹг<D1B9><D0B3>
|
|
|
|
|
|
FuHarm[i][j] = IntToFloat(SrcData.FuHarm[i][j]) * fPT;
|
|
|
|
|
|
}
|
|
|
|
|
|
else { // <20><><EFBFBD><EFBFBD>г<EFBFBD><D0B3>
|
|
|
|
|
|
FuHarm[i][j] = IntToFloat(SrcData.FuHarm[i][j]) * fCT;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
FuHarmPhase[i][j] = IntToFloat(SrcData.FuHarmPhase[i][j]);
|
|
|
|
|
|
InHarm[i][j].Val = IntToFloat(SrcData.InHarm[i][j].Val);
|
|
|
|
|
|
Harm_Contain[i][j] = ShorToFloat100(SrcData.Harm_Contain[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// RMSֵ
|
|
|
|
|
|
for (int i = 0; i < 9; i++) {
|
|
|
|
|
|
if (i > 2 && i < 6) { // <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>3,4,5)
|
|
|
|
|
|
Rms[i] = IntToFloat(SrcData.Rms[i]) * fCT;
|
|
|
|
|
|
}
|
|
|
|
|
|
else { // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
Rms[i] = IntToFloat(SrcData.Rms[i]) * fPT;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>ת<EFBFBD><D7AA>ΪBase64<36>ַ<EFBFBD><D6B7><EFBFBD>
|
|
|
|
|
|
std::string ConvertToBase64() const {
|
|
|
|
|
|
// 1. <20><><EFBFBD><EFBFBD><EFBFBD>ܸ<EFBFBD><DCB8><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
const size_t total_floats = CalculateFloatCount();
|
|
|
|
|
|
|
|
|
|
|
|
// 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::vector<float> float_buffer;
|
|
|
|
|
|
float_buffer.reserve(total_floats);
|
|
|
|
|
|
SerializeFloats(float_buffer);
|
|
|
|
|
|
|
|
|
|
|
|
// 3. <20><><EFBFBD><EFBFBD><EFBFBD>㻺<EFBFBD><E3BBBA><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
const size_t byte_size = float_buffer.size() * sizeof(float);
|
|
|
|
|
|
const unsigned char* byte_data =
|
|
|
|
|
|
reinterpret_cast<const unsigned char*>(float_buffer.data());
|
|
|
|
|
|
|
|
|
|
|
|
// 4. Base64<36><34><EFBFBD><EFBFBD>
|
|
|
|
|
|
return base64_encode(byte_data, byte_size);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>㸡<EFBFBD><E3B8A1><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
size_t CalculateFloatCount() const {
|
|
|
|
|
|
size_t count = 0;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
count += Rms.size();
|
|
|
|
|
|
count += UU_Deviation.size();
|
|
|
|
|
|
count += UL_Deviation.size();
|
|
|
|
|
|
count += F_Deviation.size();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (const auto& arr : UI_Seq) count += arr.size();
|
|
|
|
|
|
for (const auto& arr : FuHarm) count += arr.size();
|
|
|
|
|
|
for (const auto& arr : FuHarmPhase) count += arr.size();
|
|
|
|
|
|
|
|
|
|
|
|
// Ƕ<>ṹ<D7BD><E1B9B9><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (const auto& arr : InHarm) {
|
|
|
|
|
|
for (const auto& item : arr) {
|
|
|
|
|
|
count += 2; // ÿ<><C3BF>tagInHarmData_float<61><74><EFBFBD><EFBFBD>2<EFBFBD><32>float
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (const auto& arr : Total_Power) count += arr.size();
|
|
|
|
|
|
|
|
|
|
|
|
for (const auto& arr : Harm_Power) {
|
|
|
|
|
|
for (const auto& item : arr) {
|
|
|
|
|
|
count += 3; // ÿ<><C3BF>tagPowerData_float<61><74><EFBFBD><EFBFBD>3<EFBFBD><33>float
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (const auto& arr : Harm_Contain) count += arr.size();
|
|
|
|
|
|
count += Harm_Aberrance.size();
|
|
|
|
|
|
count += Cos_PF.size();
|
|
|
|
|
|
count += Cos_DF.size();
|
|
|
|
|
|
count += U_Fluctuation.size();
|
|
|
|
|
|
count += U_Flicker.size();
|
|
|
|
|
|
count += UL_Flicker.size();
|
|
|
|
|
|
|
|
|
|
|
|
return count;
|
|
|
|
|
|
}
|
2025-07-25 10:47:50 +08:00
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>ת<EFBFBD><D7AA>
|
|
|
|
|
|
std::string ConvertToBase64_Delta() const {
|
|
|
|
|
|
std::vector<float> float_buffer;
|
|
|
|
|
|
|
|
|
|
|
|
// 0-8λ<38><CEBB>Rmsȡ0-8
|
|
|
|
|
|
for (int i = 0; i < 9; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Rms[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 9-11λ<31><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 12-14λ<34><CEBB>UU_Deviation<6F><6E>UL_Deviation<6F><6E><EFBFBD><EFBFBD>ȡǰ<C8A1><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ϊ0<CEAA><30>ֵ
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float val = (UU_Deviation[i] != 0.0f) ? UU_Deviation[i] : UL_Deviation[i];
|
|
|
|
|
|
float_buffer.push_back(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 15-16λ<36><CEBB>F_Deviation<6F><6E>ȡ0-1
|
|
|
|
|
|
for (int i = 0; i < 2; ++i) {
|
|
|
|
|
|
float_buffer.push_back(F_Deviation[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>8λ<38><CEBB>UI_Seqȡ0-7
|
|
|
|
|
|
for (int i = 0; i < 2; ++i) {
|
|
|
|
|
|
for (int j = 0; j < 4; ++j) {
|
|
|
|
|
|
if (i * 4 + j < 8) { // ֻȡǰ8<C7B0><38>
|
|
|
|
|
|
float_buffer.push_back(UI_Seq[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49*3λ<33><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 49 * 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>FuHarm<72><6D>3<EFBFBD><33>ȡ1-49λ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(FuHarm[3][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>FuHarm<72><6D>4<EFBFBD><34>ȡ1-49λ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(FuHarm[4][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>FuHarm<72><6D>5<EFBFBD><35>ȡ1-49λ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(FuHarm[5][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49*3λ<33><CEBB>FuHarm<72><6D>0-2<><32>ȡ1-49λ
|
|
|
|
|
|
for (int j = 0; j < 3; ++j) {
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(FuHarm[j][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49*3λ<33><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 49 * 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49*3λ<33><CEBB><EFBFBD>δ<EFBFBD>FuHarmPhase<73><65>3-5<><35>ȡ1-49λ
|
|
|
|
|
|
for (int j = 3; j < 6; ++j) {
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(FuHarmPhase[j][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49*3λ<33><CEBB><EFBFBD>δ<EFBFBD>FuHarmPhase<73><65>0-2<><32>ȡ1-49λ
|
|
|
|
|
|
for (int j = 0; j < 3; ++j) {
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(FuHarmPhase[j][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>50*3λ<33><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 50 * 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>50*3λ<33><CEBB><EFBFBD>δ<EFBFBD>InHarm<72><6D>3-5<><35>ȡ0-49λ<39>е<EFBFBD>valָ<6C><D6B8>
|
|
|
|
|
|
for (int j = 3; j < 6; ++j) {
|
|
|
|
|
|
for (int i = 0; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(InHarm[j][i].Val);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>50*3λ<33><CEBB><EFBFBD>δ<EFBFBD>InHarm<72><6D>0-2<><32>ȡ0-49λ<39>е<EFBFBD>valָ<6C><D6B8>
|
|
|
|
|
|
for (int j = 0; j < 3; ++j) {
|
|
|
|
|
|
for (int i = 0; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(InHarm[j][i].Val);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>12λ<32><CEBB><EFBFBD>δ<EFBFBD>Total_Power<65><72>0-3<><33>ȡ0-2λ
|
|
|
|
|
|
for (int j = 0; j < 4; ++j) {
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Total_Power[j][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ0<C8A1><30>1-49<34>е<EFBFBD>Pֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[0][i].P);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ0<C8A1><30>1-49<34>е<EFBFBD>Qֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[0][i].Q);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ0<C8A1><30>1-49<34>е<EFBFBD>Sֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[0][i].S);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ1<C8A1><31>1-49<34>е<EFBFBD>Pֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[1][i].P);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ1<C8A1><31>1-49<34>е<EFBFBD>Qֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[1][i].Q);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ1<C8A1><31>1-49<34>е<EFBFBD>Sֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[1][i].S);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ2<C8A1><32>1-49<34>е<EFBFBD>Pֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[2][i].P);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ2<C8A1><32>1-49<34>е<EFBFBD>Qֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[2][i].Q);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ2<C8A1><32>1-49<34>е<EFBFBD>Sֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[2][i].S);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ3<C8A1><33>1-49<34>е<EFBFBD>Pֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[3][i].P);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ3<C8A1><33>1-49<34>е<EFBFBD>Qֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[3][i].Q);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ3<C8A1><33>1-49<34>е<EFBFBD>Sֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[3][i].S);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49*3λ<33><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 49 * 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49*3λ<33><CEBB>Harm_Contain<69>е<EFBFBD>3-5<><35>ȡ1-49λ
|
|
|
|
|
|
for (int j = 3; j < 6; ++j) {
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Contain[j][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49*3λ<33><CEBB>Harm_Contain<69>е<EFBFBD>0-2<><32>ȡ1-49λ
|
|
|
|
|
|
for (int j = 0; j < 3; ++j) {
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Contain[j][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>3λ<33><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>3λ<33><CEBB>Harm_Aberrance<63>е<EFBFBD>3-5<><35>ȡֵ
|
|
|
|
|
|
for (int i = 3; i < 6; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Aberrance[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>3λ<33><CEBB>Harm_Aberrance<63>е<EFBFBD>0-2<><32>ȡֵ
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Aberrance[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>4λ<34><CEBB>Cos_PF<50><46>ȡ0-3
|
|
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Cos_PF[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>4λ<34><CEBB>Cos_DF<44><46>ȡ0-3
|
|
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Cos_DF[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>3λ<33><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>3λ<33><CEBB>U_Fluctuation<6F><6E>ȡ0-2
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(U_Fluctuation[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>3λ<33><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>3λ<33><CEBB>U_Flicker<65><72>ȡ0-2
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(U_Flicker[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>3λ<33><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>3λ<33><CEBB>UL_Flicker<65><72>ȡ0-2
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(UL_Flicker[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ת<><D7AA>ΪBase64
|
|
|
|
|
|
const size_t byte_size = float_buffer.size() * sizeof(float);
|
|
|
|
|
|
const unsigned char* byte_data = reinterpret_cast<const unsigned char*>(float_buffer.data());
|
|
|
|
|
|
return base64_encode(byte_data, byte_size);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>ת<EFBFBD><D7AA>
|
|
|
|
|
|
std::string ConvertToBase64_Star() const {
|
|
|
|
|
|
std::vector<float> float_buffer;
|
|
|
|
|
|
|
|
|
|
|
|
// 0-8λ<38><CEBB>Rmsȡ0-8
|
|
|
|
|
|
for (int i = 0; i < 9; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Rms[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 9-11λ<31><CEBB>UU_Deviation<6F><6E>UL_Deviation<6F><6E><EFBFBD><EFBFBD>ȡǰ<C8A1><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ϊ0<CEAA><30>ֵ
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float val = (UU_Deviation[i] != 0.0f) ? UU_Deviation[i] : UL_Deviation[i];
|
|
|
|
|
|
float_buffer.push_back(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 12-14λ<34><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 15-16λ<36><CEBB>F_Deviation<6F><6E>ȡ0-1
|
|
|
|
|
|
for (int i = 0; i < 2; ++i) {
|
|
|
|
|
|
float_buffer.push_back(F_Deviation[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>8λ<38><CEBB>UI_Seqȡ0-7
|
|
|
|
|
|
for (int i = 0; i < 2; ++i) {
|
|
|
|
|
|
for (int j = 0; j < 4; ++j) {
|
|
|
|
|
|
if (i * 4 + j < 8) { // ֻȡǰ8<C7B0><38>
|
|
|
|
|
|
float_buffer.push_back(UI_Seq[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>FuHarm<72><6D>0<EFBFBD><30>ȡ1-49λ (ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ʼ)
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(FuHarm[0][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>FuHarm<72><6D>1<EFBFBD><31>ȡ1-49λ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(FuHarm[1][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>FuHarm<72><6D>2<EFBFBD><32>ȡ1-49λ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(FuHarm[2][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>FuHarm<72><6D>3<EFBFBD><33>ȡ1-49λ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(FuHarm[3][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>FuHarm<72><6D>4<EFBFBD><34>ȡ1-49λ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(FuHarm[4][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>FuHarm<72><6D>5<EFBFBD><35>ȡ1-49λ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(FuHarm[5][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49*3λ<33><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 49 * 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49*3λ<33><CEBB><EFBFBD>δ<EFBFBD>FuHarmPhase<73><65>0-2<><32>ȡ1-49λ
|
|
|
|
|
|
for (int j = 0; j < 3; ++j) {
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(FuHarmPhase[j][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49*3λ<33><CEBB><EFBFBD>δ<EFBFBD>FuHarmPhase<73><65>3-5<><35>ȡ1-49λ
|
|
|
|
|
|
for (int j = 3; j < 6; ++j) {
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(FuHarmPhase[j][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49*3λ<33><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 49 * 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>50*6λ<36><CEBB><EFBFBD>δ<EFBFBD>InHarm<72><6D>0-5<><35>ȡ0-49λ<39>е<EFBFBD>valָ<6C><D6B8>
|
|
|
|
|
|
for (int j = 0; j < 6; ++j) {
|
|
|
|
|
|
for (int i = 0; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(InHarm[j][i].Val);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>50*3λ<33><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 50 * 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>12λ<32><CEBB><EFBFBD>δ<EFBFBD>Total_Power<65><72>0-3<><33>ȡ0-2λ
|
|
|
|
|
|
for (int j = 0; j < 4; ++j) {
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Total_Power[j][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ0<C8A1><30>1-49<34>е<EFBFBD>Pֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[0][i].P);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ0<C8A1><30>1-49<34>е<EFBFBD>Qֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[0][i].Q);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ0<C8A1><30>1-49<34>е<EFBFBD>Sֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[0][i].S);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ1<C8A1><31>1-49<34>е<EFBFBD>Pֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[1][i].P);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ1<C8A1><31>1-49<34>е<EFBFBD>Qֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[1][i].Q);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ1<C8A1><31>1-49<34>е<EFBFBD>Sֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[1][i].S);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ2<C8A1><32>1-49<34>е<EFBFBD>Pֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[2][i].P);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ2<C8A1><32>1-49<34>е<EFBFBD>Qֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[2][i].Q);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ2<C8A1><32>1-49<34>е<EFBFBD>Sֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[2][i].S);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ3<C8A1><33>1-49<34>е<EFBFBD>Pֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[3][i].P);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ3<C8A1><33>1-49<34>е<EFBFBD>Qֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[3][i].Q);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49λ<39><CEBB>Harm_Power<65><72>ȡ3<C8A1><33>1-49<34>е<EFBFBD>Sֵ
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Power[3][i].S);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49*6λ<36><CEBB>Harm_Contain<69>е<EFBFBD>0-5<><35>ȡ1-49λ
|
|
|
|
|
|
for (int j = 0; j < 6; ++j) {
|
|
|
|
|
|
for (int i = 1; i < HARMNUM; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Contain[j][i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>49*3λ<33><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 49 * 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>6λ<36><CEBB>Harm_Aberrance<63>е<EFBFBD>0-5<><35>ȡֵ
|
|
|
|
|
|
for (int i = 0; i < 6; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Harm_Aberrance[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>3λ<33><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>4λ<34><CEBB>Cos_PF<50><46>ȡ0-3
|
|
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Cos_PF[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>4λ<34><CEBB>Cos_DF<44><46>ȡ0-3
|
|
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Cos_DF[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>3λ<33><CEBB>U_Fluctuation<6F><6E>ȡ0-2
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(U_Fluctuation[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>3λ<33><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>3λ<33><CEBB>U_Flicker<65><72>ȡ0-2
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(U_Flicker[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>3λ<33><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ٺ<EFBFBD>3λ<33><CEBB>UL_Flicker<65><72>ȡ0-2
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(UL_Flicker[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20>ٺ<EFBFBD>3λ<33><CEBB>λ3.1415<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ת<><D7AA>ΪBase64
|
|
|
|
|
|
const size_t byte_size = float_buffer.size() * sizeof(float);
|
|
|
|
|
|
const unsigned char* byte_data = reinterpret_cast<const unsigned char*>(float_buffer.data());
|
|
|
|
|
|
return base64_encode(byte_data, byte_size);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߷<EFBFBD>ʽѡ<CABD><D1A1>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ʽ
|
|
|
|
|
|
std::string ConvertToBase64(int type) const {
|
|
|
|
|
|
//1Ϊ<31><CEAA><EFBFBD>ͽ<EFBFBD><CDBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (type == 1) {
|
|
|
|
|
|
return ConvertToBase64_Delta();
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
return ConvertToBase64_Star();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-07-03 11:13:16 +08:00
|
|
|
|
private:
|
|
|
|
|
|
// <20><><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void SerializeFloats(std::vector<float>& buffer) const {
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (const auto& val : Rms) buffer.push_back(val);
|
|
|
|
|
|
for (const auto& val : UU_Deviation) buffer.push_back(val);
|
|
|
|
|
|
for (const auto& val : UL_Deviation) buffer.push_back(val);
|
|
|
|
|
|
for (const auto& val : F_Deviation) buffer.push_back(val);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (const auto& arr : UI_Seq) {
|
|
|
|
|
|
for (const auto& val : arr) buffer.push_back(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
for (const auto& arr : FuHarm) {
|
|
|
|
|
|
for (const auto& val : arr) buffer.push_back(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
for (const auto& arr : FuHarmPhase) {
|
|
|
|
|
|
for (const auto& val : arr) buffer.push_back(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Ƕ<>ṹ<D7BD><E1B9B9><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (const auto& arr : InHarm) {
|
|
|
|
|
|
for (const auto& item : arr) {
|
|
|
|
|
|
buffer.push_back(item.Val);
|
|
|
|
|
|
buffer.push_back(item.f);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (const auto& arr : Total_Power) {
|
|
|
|
|
|
for (const auto& val : arr) buffer.push_back(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (const auto& arr : Harm_Power) {
|
|
|
|
|
|
for (const auto& item : arr) {
|
|
|
|
|
|
buffer.push_back(item.P);
|
|
|
|
|
|
buffer.push_back(item.Q);
|
|
|
|
|
|
buffer.push_back(item.S);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (const auto& arr : Harm_Contain) {
|
|
|
|
|
|
for (const auto& val : arr) buffer.push_back(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
for (const auto& val : Harm_Aberrance) buffer.push_back(val);
|
|
|
|
|
|
for (const auto& val : Cos_PF) buffer.push_back(val);
|
|
|
|
|
|
for (const auto& val : Cos_DF) buffer.push_back(val);
|
|
|
|
|
|
for (const auto& val : U_Fluctuation) buffer.push_back(val);
|
|
|
|
|
|
for (const auto& val : U_Flicker) buffer.push_back(val);
|
|
|
|
|
|
for (const auto& val : UL_Flicker) buffer.push_back(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Base64<36><34><EFBFBD>뺯<EFBFBD><EBBAAF>
|
|
|
|
|
|
static std::string base64_encode(const unsigned char* bytes_to_encode, size_t in_len) {
|
|
|
|
|
|
static const char base64_chars[] =
|
|
|
|
|
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
|
|
|
|
"abcdefghijklmnopqrstuvwxyz"
|
|
|
|
|
|
"0123456789+/";
|
|
|
|
|
|
|
|
|
|
|
|
std::string ret;
|
|
|
|
|
|
int i = 0;
|
|
|
|
|
|
int j = 0;
|
|
|
|
|
|
unsigned char char_array_3[3];
|
|
|
|
|
|
unsigned char char_array_4[4];
|
|
|
|
|
|
|
|
|
|
|
|
while (in_len--) {
|
|
|
|
|
|
char_array_3[i++] = *(bytes_to_encode++);
|
|
|
|
|
|
if (i == 3) {
|
|
|
|
|
|
char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
|
|
|
|
|
|
char_array_4[1] = ((char_array_3[0] & 0x03) << 4) +
|
|
|
|
|
|
((char_array_3[1] & 0xf0) >> 4);
|
|
|
|
|
|
char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) +
|
|
|
|
|
|
((char_array_3[2] & 0xc0) >> 6);
|
|
|
|
|
|
char_array_4[3] = char_array_3[2] & 0x3f;
|
|
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
|
|
ret += base64_chars[char_array_4[i]];
|
|
|
|
|
|
i = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (i) {
|
|
|
|
|
|
for (j = i; j < 3; j++)
|
|
|
|
|
|
char_array_3[j] = '\0';
|
|
|
|
|
|
|
|
|
|
|
|
char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
|
|
|
|
|
|
char_array_4[1] = ((char_array_3[0] & 0x03) << 4) +
|
|
|
|
|
|
((char_array_3[1] & 0xf0) >> 4);
|
|
|
|
|
|
char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) +
|
|
|
|
|
|
((char_array_3[2] & 0xc0) >> 6);
|
|
|
|
|
|
char_array_4[3] = char_array_3[2] & 0x3f;
|
|
|
|
|
|
|
|
|
|
|
|
for (j = 0; j < i + 1; j++)
|
|
|
|
|
|
ret += base64_chars[char_array_4[j]];
|
|
|
|
|
|
|
|
|
|
|
|
while (i++ < 3)
|
|
|
|
|
|
ret += '=';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2025-07-10 10:32:29 +08:00
|
|
|
|
//<2F><><EFBFBD>㱨<EFBFBD><E3B1A8>֡<EFBFBD><D6A1><EFBFBD><EFBFBD> 1֡1024Ϊ1K ͳ<><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-07-03 11:13:16 +08:00
|
|
|
|
constexpr int PqDataLen = tagPqData::GetSize();
|
|
|
|
|
|
constexpr int Stat_PacketNum = (PqDataLen / 1024 > 0) ? (PqDataLen / 1024 + 1) : (PqDataLen / 1024);
|
2025-06-13 11:29:59 +08:00
|
|
|
|
|
2025-07-10 10:32:29 +08:00
|
|
|
|
//ʵʱ<CAB5><CAB1><EFBFBD>ݽṹ<DDBD><E1B9B9>1<EFBFBD>ֽڶ<D6BD><DAB6>룩
|
|
|
|
|
|
#pragma pack(push, 1)
|
|
|
|
|
|
class RealtagPqDate_float {
|
|
|
|
|
|
public:
|
|
|
|
|
|
tagTime time; // ʱ<><CAB1>
|
|
|
|
|
|
|
|
|
|
|
|
//ʵʱ<CAB5><CAB1><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::array<float, 9> Rms; //<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ߵ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чֵ
|
|
|
|
|
|
std::array<float, 6> UU_Deviation; //<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ߵ<EFBFBD>ѹ<EFBFBD><D1B9>ƫ<EFBFBD><C6AB>
|
|
|
|
|
|
std::array<float, 6> UL_Deviation; //<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ߵ<EFBFBD>ѹ<EFBFBD><D1B9>ƫ<EFBFBD><C6AB>
|
|
|
|
|
|
std::array<float, 6> THD; //<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::array<float, 2> FREQ; //Ƶ<>ʼ<EFBFBD>Ƶ<EFBFBD><C6B5>ƫ<EFBFBD><C6AB>
|
|
|
|
|
|
std::array<std::array<float, 5>, 2> UI_Seq;//<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::array<std::array<float, 3>, 4> TOTAL_POWER;//<2F><><EFBFBD>༰<EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD>P<EFBFBD><50>Q<EFBFBD><51>S
|
|
|
|
|
|
std::array<float, 4> COS_PF; //<2F><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::array<float, 4> COS_DF; //λ<>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//----------- <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
std::array<std::array<float, HARMNUM>, 3> HARMV;//г<><D0B3><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//----------- <20><><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
std::array<std::array<float, HARMNUM>, 3> HARMI;//г<><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
|
//----------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
std::array<std::array<float, HARMNUM>, 3> HARMVP;//г<><D0B3><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>λ
|
|
|
|
|
|
//----------- <20><><EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD><C4B0><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
std::array<std::array<float, HARMNUM>, 3> HARMIP;//г<><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
|
|
|
|
|
//----------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
std::array<std::array<float, HARMNUM>, 3> INHARMV;//<2F><>г<EFBFBD><D0B3><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>ֵ
|
|
|
|
|
|
//----------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>캯<EFBFBD><ECBAAF> - <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
RealtagPqDate_float() {
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
time = tagTime(); // <20><><EFBFBD><EFBFBD>tagTime<6D><65>Ĭ<EFBFBD>Ϲ<EFBFBD><CFB9>캯<EFBFBD><ECBAAF>
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
Rms.fill(0.0f);
|
|
|
|
|
|
UU_Deviation.fill(0.0f);
|
|
|
|
|
|
UL_Deviation.fill(0.0f);
|
|
|
|
|
|
THD.fill(0.0f);
|
|
|
|
|
|
FREQ.fill(0.0f);
|
|
|
|
|
|
COS_PF.fill(0.0f);
|
|
|
|
|
|
COS_DF.fill(0.0f);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (auto& arr : UI_Seq) {
|
|
|
|
|
|
arr.fill(0.0f);
|
|
|
|
|
|
}
|
|
|
|
|
|
for (auto& arr : TOTAL_POWER) {
|
|
|
|
|
|
arr.fill(0.0f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (auto& arr : HARMV) {
|
|
|
|
|
|
arr.fill(0.0f);
|
|
|
|
|
|
}
|
|
|
|
|
|
for (auto& arr : HARMI) {
|
|
|
|
|
|
arr.fill(0.0f);
|
|
|
|
|
|
}
|
|
|
|
|
|
for (auto& arr : HARMVP) {
|
|
|
|
|
|
arr.fill(0.0f);
|
|
|
|
|
|
}
|
|
|
|
|
|
for (auto& arr : HARMIP) {
|
|
|
|
|
|
arr.fill(0.0f);
|
|
|
|
|
|
}
|
|
|
|
|
|
for (auto& arr : INHARMV) {
|
|
|
|
|
|
arr.fill(0.0f);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>ȡfloat
|
|
|
|
|
|
float read_net_float(const uint8_t* ptr) {
|
|
|
|
|
|
uint32_t temp;
|
|
|
|
|
|
memcpy(&temp, ptr, sizeof(uint32_t));
|
|
|
|
|
|
temp = ntohl(temp);
|
|
|
|
|
|
float result;
|
|
|
|
|
|
memcpy(&result, &temp, sizeof(float));
|
|
|
|
|
|
return result;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ʵʱ<CAB5><CAB1><EFBFBD>ݽṹ<DDBD>ķְ<C4B7><D6B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool ParsePacket1(const uint8_t* data, size_t size) {
|
|
|
|
|
|
// <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD> = ʱ<><CAB1>(12<31>ֽ<EFBFBD>) + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(59<35><39>float * 4 = 236<33>ֽ<EFBFBD>) = 248<34>ֽ<EFBFBD>
|
|
|
|
|
|
const size_t min_size = tagTime::GetSize() + 59 * sizeof(float);
|
|
|
|
|
|
if (size < min_size) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
if (!time.SetStructBuf(data, size)) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
const uint8_t* ptr = data + tagTime::GetSize();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Rms (9<><39>float)
|
|
|
|
|
|
for (int i = 0; i < 9; ++i) {
|
|
|
|
|
|
Rms[i] = read_net_float(ptr);
|
|
|
|
|
|
ptr += sizeof(float);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>UU_Deviation (6<><36>float)
|
|
|
|
|
|
for (int i = 0; i < 6; ++i) {
|
|
|
|
|
|
UU_Deviation[i] = read_net_float(ptr);
|
|
|
|
|
|
ptr += sizeof(float);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>UL_Deviation (6<><36>float)
|
|
|
|
|
|
for (int i = 0; i < 6; ++i) {
|
|
|
|
|
|
UL_Deviation[i] = read_net_float(ptr);
|
|
|
|
|
|
ptr += sizeof(float);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>THD (6<><36>float)
|
|
|
|
|
|
for (int i = 0; i < 6; ++i) {
|
|
|
|
|
|
THD[i] = read_net_float(ptr);
|
|
|
|
|
|
ptr += sizeof(float);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>FREQ (2<><32>float)
|
|
|
|
|
|
for (int i = 0; i < 2; ++i) {
|
|
|
|
|
|
FREQ[i] = read_net_float(ptr);
|
|
|
|
|
|
ptr += sizeof(float);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>UI_Seq (2x5<78><35>float)
|
|
|
|
|
|
for (int i = 0; i < 2; ++i) {
|
|
|
|
|
|
for (int j = 0; j < 5; ++j) {
|
|
|
|
|
|
UI_Seq[i][j] = read_net_float(ptr);
|
|
|
|
|
|
ptr += sizeof(float);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>TOTAL_POWER (4x3<78><33>float)
|
|
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
|
|
|
|
for (int j = 0; j < 3; ++j) {
|
|
|
|
|
|
TOTAL_POWER[i][j] = read_net_float(ptr);
|
|
|
|
|
|
ptr += sizeof(float);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>COS_PF (4<><34>float)
|
|
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
|
|
|
|
COS_PF[i] = read_net_float(ptr);
|
|
|
|
|
|
ptr += sizeof(float);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>COS_DF (4<><34>float)
|
|
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
|
|
|
|
COS_DF[i] = read_net_float(ptr);
|
|
|
|
|
|
ptr += sizeof(float);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool ParsePacket2(const uint8_t* data, size_t size) {
|
|
|
|
|
|
// <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD> = ʱ<><CAB1>(12<31>ֽ<EFBFBD>) + г<><D0B3><EFBFBD><EFBFBD>ѹ(150<35><30>float * 4 = 600<30>ֽ<EFBFBD>) = 612<31>ֽ<EFBFBD>
|
|
|
|
|
|
const size_t min_size = tagTime::GetSize() + 3 * HARMNUM * sizeof(float);
|
|
|
|
|
|
if (size < min_size) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨<EFBFBD><E4A3A8><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0>ʱ<EFBFBD>䣩
|
|
|
|
|
|
if (!time.SetStructBuf(data, size)) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
const uint8_t* ptr = data + tagTime::GetSize();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>HARMV (3xHARMNUM<55><4D>float)
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
for (int j = 0; j < HARMNUM; ++j) {
|
|
|
|
|
|
HARMV[i][j] = read_net_float(ptr);
|
|
|
|
|
|
ptr += sizeof(float);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool ParsePacket3(const uint8_t* data, size_t size) {
|
|
|
|
|
|
// <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD> = ʱ<><CAB1>(12<31>ֽ<EFBFBD>) + г<><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(150<35><30>float * 4 = 600<30>ֽ<EFBFBD>) = 612<31>ֽ<EFBFBD>
|
|
|
|
|
|
const size_t min_size = tagTime::GetSize() + 3 * HARMNUM * sizeof(float);
|
|
|
|
|
|
if (size < min_size) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!time.SetStructBuf(data, size)) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
const uint8_t* ptr = data + tagTime::GetSize();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>HARMI (3xHARMNUM<55><4D>float)
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
for (int j = 0; j < HARMNUM; ++j) {
|
|
|
|
|
|
HARMI[i][j] = read_net_float(ptr);
|
|
|
|
|
|
ptr += sizeof(float);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool ParsePacket4(const uint8_t* data, size_t size) {
|
|
|
|
|
|
// <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD> = ʱ<><CAB1>(12<31>ֽ<EFBFBD>) + г<><D0B3><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>λ(150<35><30>float * 4 = 600<30>ֽ<EFBFBD>) = 612<31>ֽ<EFBFBD>
|
|
|
|
|
|
const size_t min_size = tagTime::GetSize() + 3 * HARMNUM * sizeof(float);
|
|
|
|
|
|
if (size < min_size) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!time.SetStructBuf(data, size)) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
const uint8_t* ptr = data + tagTime::GetSize();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>HARMVP (3xHARMNUM<55><4D>float)
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
for (int j = 0; j < HARMNUM; ++j) {
|
|
|
|
|
|
HARMVP[i][j] = read_net_float(ptr);
|
|
|
|
|
|
ptr += sizeof(float);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool ParsePacket5(const uint8_t* data, size_t size) {
|
|
|
|
|
|
// <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD> = ʱ<><CAB1>(12<31>ֽ<EFBFBD>) + г<><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ(150<35><30>float * 4 = 600<30>ֽ<EFBFBD>) = 612<31>ֽ<EFBFBD>
|
|
|
|
|
|
const size_t min_size = tagTime::GetSize() + 3 * HARMNUM * sizeof(float);
|
|
|
|
|
|
if (size < min_size) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!time.SetStructBuf(data, size)) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
const uint8_t* ptr = data + tagTime::GetSize();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>HARMIP (3xHARMNUM<55><4D>float)
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
for (int j = 0; j < HARMNUM; ++j) {
|
|
|
|
|
|
HARMIP[i][j] = read_net_float(ptr);
|
|
|
|
|
|
ptr += sizeof(float);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool ParsePacket6(const uint8_t* data, size_t size) {
|
|
|
|
|
|
// <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD> = ʱ<><CAB1>(12<31>ֽ<EFBFBD>) + <20><>г<EFBFBD><D0B3><EFBFBD><EFBFBD>ѹ(150<35><30>float * 4 = 600<30>ֽ<EFBFBD>) = 612<31>ֽ<EFBFBD>
|
|
|
|
|
|
const size_t min_size = tagTime::GetSize() + 3 * HARMNUM * sizeof(float);
|
|
|
|
|
|
if (size < min_size) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!time.SetStructBuf(data, size)) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
const uint8_t* ptr = data + tagTime::GetSize();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>INHARMV (3xHARMNUM<55><4D>float)
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
for (int j = 0; j < HARMNUM; ++j) {
|
|
|
|
|
|
INHARMV[i][j] = read_net_float(ptr);
|
|
|
|
|
|
ptr += sizeof(float);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>㸡<EFBFBD><E3B8A1><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
size_t CalculateFloatCount() const {
|
|
|
|
|
|
size_t count = 0;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
count += Rms.size();
|
|
|
|
|
|
count += UU_Deviation.size();
|
|
|
|
|
|
count += UL_Deviation.size();
|
|
|
|
|
|
count += THD.size();
|
|
|
|
|
|
count += FREQ.size();
|
|
|
|
|
|
count += COS_PF.size();
|
|
|
|
|
|
count += COS_DF.size();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (const auto& arr : UI_Seq) count += arr.size();
|
|
|
|
|
|
for (const auto& arr : TOTAL_POWER) count += arr.size();
|
|
|
|
|
|
for (const auto& arr : HARMV) count += arr.size();
|
|
|
|
|
|
for (const auto& arr : HARMI) count += arr.size();
|
|
|
|
|
|
for (const auto& arr : HARMVP) count += arr.size();
|
|
|
|
|
|
for (const auto& arr : HARMIP) count += arr.size();
|
|
|
|
|
|
for (const auto& arr : INHARMV) count += arr.size();
|
|
|
|
|
|
|
|
|
|
|
|
return count;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void SerializeFloats(std::vector<float>& buffer) const {
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (float val : Rms) buffer.push_back(val);
|
|
|
|
|
|
for (float val : UU_Deviation) buffer.push_back(val);
|
|
|
|
|
|
for (float val : UL_Deviation) buffer.push_back(val);
|
|
|
|
|
|
for (float val : THD) buffer.push_back(val);
|
|
|
|
|
|
for (float val : FREQ) buffer.push_back(val);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ά<EFBFBD><CEAC><EFBFBD>飨<EFBFBD><E9A3A8>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (const auto& arr : UI_Seq) {
|
|
|
|
|
|
for (float val : arr) buffer.push_back(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (const auto& arr : TOTAL_POWER) {
|
|
|
|
|
|
for (float val : arr) buffer.push_back(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (float val : COS_PF) buffer.push_back(val);
|
|
|
|
|
|
for (float val : COS_DF) buffer.push_back(val);
|
|
|
|
|
|
|
|
|
|
|
|
// г<><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (const auto& arr : HARMV) {
|
|
|
|
|
|
for (float val : arr) buffer.push_back(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
for (const auto& arr : HARMI) {
|
|
|
|
|
|
for (float val : arr) buffer.push_back(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
for (const auto& arr : HARMVP) {
|
|
|
|
|
|
for (float val : arr) buffer.push_back(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
for (const auto& arr : HARMIP) {
|
|
|
|
|
|
for (float val : arr) buffer.push_back(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
for (const auto& arr : INHARMV) {
|
|
|
|
|
|
for (float val : arr) buffer.push_back(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Base64<36><34><EFBFBD>뺯<EFBFBD><EBBAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tagPqData_Float<61><74>ͬ<EFBFBD><CDAC>
|
|
|
|
|
|
static std::string base64_encode(const unsigned char* bytes_to_encode, size_t in_len) {
|
|
|
|
|
|
static const char base64_chars[] =
|
|
|
|
|
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
|
|
|
|
"abcdefghijklmnopqrstuvwxyz"
|
|
|
|
|
|
"0123456789+/";
|
|
|
|
|
|
|
|
|
|
|
|
std::string ret;
|
|
|
|
|
|
int i = 0;
|
|
|
|
|
|
int j = 0;
|
|
|
|
|
|
unsigned char char_array_3[3];
|
|
|
|
|
|
unsigned char char_array_4[4];
|
|
|
|
|
|
|
|
|
|
|
|
while (in_len--) {
|
|
|
|
|
|
char_array_3[i++] = *(bytes_to_encode++);
|
|
|
|
|
|
if (i == 3) {
|
|
|
|
|
|
char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
|
|
|
|
|
|
char_array_4[1] = ((char_array_3[0] & 0x03) << 4) +
|
|
|
|
|
|
((char_array_3[1] & 0xf0) >> 4);
|
|
|
|
|
|
char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) +
|
|
|
|
|
|
((char_array_3[2] & 0xc0) >> 6);
|
|
|
|
|
|
char_array_4[3] = char_array_3[2] & 0x3f;
|
|
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
|
|
ret += base64_chars[char_array_4[i]];
|
|
|
|
|
|
i = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (i) {
|
|
|
|
|
|
for (j = i; j < 3; j++)
|
|
|
|
|
|
char_array_3[j] = '\0';
|
|
|
|
|
|
|
|
|
|
|
|
char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
|
|
|
|
|
|
char_array_4[1] = ((char_array_3[0] & 0x03) << 4) +
|
|
|
|
|
|
((char_array_3[1] & 0xf0) >> 4);
|
|
|
|
|
|
char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) +
|
|
|
|
|
|
((char_array_3[2] & 0xc0) >> 6);
|
|
|
|
|
|
char_array_4[3] = char_array_3[2] & 0x3f;
|
|
|
|
|
|
|
|
|
|
|
|
for (j = 0; j < i + 1; j++)
|
|
|
|
|
|
ret += base64_chars[char_array_4[j]];
|
|
|
|
|
|
|
|
|
|
|
|
while (i++ < 3)
|
|
|
|
|
|
ret += '=';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Base64ת<34><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::string ConvertToBase64() const {
|
|
|
|
|
|
// 1. <20><><EFBFBD><EFBFBD><EFBFBD>ܸ<EFBFBD><DCB8><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
const size_t total_floats = CalculateFloatCount();
|
|
|
|
|
|
|
|
|
|
|
|
// 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::vector<float> float_buffer;
|
|
|
|
|
|
float_buffer.reserve(total_floats);
|
|
|
|
|
|
SerializeFloats(float_buffer);
|
|
|
|
|
|
|
|
|
|
|
|
// 3. ת<><D7AA>Ϊ<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
const size_t byte_size = float_buffer.size() * sizeof(float);
|
|
|
|
|
|
const unsigned char* byte_data =
|
|
|
|
|
|
reinterpret_cast<const unsigned char*>(float_buffer.data());
|
|
|
|
|
|
|
|
|
|
|
|
return base64_encode(byte_data, byte_size);
|
|
|
|
|
|
}
|
2025-07-25 10:47:50 +08:00
|
|
|
|
|
|
|
|
|
|
std::string floatVectorToBase64(const std::vector<float>& float_buffer) const {
|
|
|
|
|
|
const size_t byte_size = float_buffer.size() * sizeof(float);
|
|
|
|
|
|
const unsigned char* byte_data =
|
|
|
|
|
|
reinterpret_cast<const unsigned char*>(float_buffer.data());
|
|
|
|
|
|
|
|
|
|
|
|
return base64_encode(byte_data, byte_size);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::string ConvertToBase64_Star() const {
|
|
|
|
|
|
std::vector<float> float_buffer;
|
|
|
|
|
|
|
|
|
|
|
|
// 0-8: RMSֵ
|
|
|
|
|
|
for (int i = 0; i < 9; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Rms[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 9-11: <20><>ѹƫ<D1B9>ȡ<EEA3A8><C8A1>Ϊ0<CEAA><30>ֵ<EFBFBD><D6B5>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float val = (UU_Deviation[i] != 0.0f) ? UU_Deviation[i] : UL_Deviation[i];
|
|
|
|
|
|
float_buffer.push_back(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 12-14: <20><><EFBFBD>ã<EFBFBD><C3A3>ߵ<EFBFBD>ѹλ<D1B9>ã<EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 15-20: THD<48>ܻ<EFBFBD><DCBB><EFBFBD><EFBFBD>ʣ<EFBFBD>0-5<><35>
|
|
|
|
|
|
for (int i = 0; i < 6; ++i) {
|
|
|
|
|
|
float_buffer.push_back(THD[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 21-23: <20><><EFBFBD>ã<EFBFBD><C3A3>ߵ<EFBFBD>ѹTHD<48><44>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 24-25: Ƶ<>ʼ<EFBFBD>ƫ<EFBFBD><C6AB>
|
|
|
|
|
|
for (int i = 0; i < 2; ++i) {
|
|
|
|
|
|
float_buffer.push_back(FREQ[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 26-33: <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ8<C7B0><38>Ԫ<EFBFBD>أ<EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 2; ++i) {
|
|
|
|
|
|
for (int j = 0; j < 4; ++j) { // ȡÿ<C8A1>е<EFBFBD>ǰ4<C7B0><34>Ԫ<EFBFBD><D4AA>
|
|
|
|
|
|
if (i == 0 || j < 3) { // ȷ<><C8B7>ֻȡ8<C8A1><38>
|
|
|
|
|
|
float_buffer.push_back(UI_Seq[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 34-45: <20>ܹ<EFBFBD><DCB9><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
|
|
|
|
for (int j = 0; j < 3; ++j) {
|
|
|
|
|
|
float_buffer.push_back(TOTAL_POWER[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 46-49: <20><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
|
|
|
|
float_buffer.push_back(COS_PF[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 50-53: λ<>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
|
|
|
|
float_buffer.push_back(COS_DF[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 54-200: <20><>ѹг<D1B9><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>1-49<34>Σ<EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
for (int j = 1; j < HARMNUM; ++j) {
|
|
|
|
|
|
float_buffer.push_back(HARMV[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 201-347: <20><><EFBFBD>ã<EFBFBD><C3A3>ߵ<EFBFBD>ѹг<D1B9><D0B3><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3 * 49; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 348-494: <20><><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>1-49<34>Σ<EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
for (int j = 1; j < HARMNUM; ++j) {
|
|
|
|
|
|
float_buffer.push_back(HARMI[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 495-641: <20><>ѹг<D1B9><D0B3><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>1-49<34>Σ<EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
for (int j = 1; j < HARMNUM; ++j) {
|
|
|
|
|
|
float_buffer.push_back(HARMVP[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 642-788: <20><><EFBFBD>ã<EFBFBD><C3A3>ߵ<EFBFBD>ѹг<D1B9><D0B3><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
|
for (int i = 0; i < 3 * 49; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 789-935: <20><><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>1-49<34>Σ<EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
for (int j = 1; j < HARMNUM; ++j) {
|
|
|
|
|
|
float_buffer.push_back(HARMIP[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 936-1085: <20><>ѹ<EFBFBD><D1B9>г<EFBFBD><D0B3><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>0-49<34>Σ<EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
for (int j = 0; j < HARMNUM; ++j) {
|
|
|
|
|
|
float_buffer.push_back(INHARMV[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 1086-1235: <20><><EFBFBD>ã<EFBFBD><C3A3>ߵ<EFBFBD>ѹ<EFBFBD><D1B9>г<EFBFBD><D0B3><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3 * 50; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ת<><D7AA>ΪBase64
|
|
|
|
|
|
return floatVectorToBase64(float_buffer);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::string ConvertToBase64_Delta() const {
|
|
|
|
|
|
std::vector<float> float_buffer;
|
|
|
|
|
|
|
|
|
|
|
|
// 0-8: RMSֵ
|
|
|
|
|
|
for (int i = 0; i < 9; ++i) {
|
|
|
|
|
|
float_buffer.push_back(Rms[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 9-11: <20><><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>ѹλ<D1B9>ã<EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 12-14: <20><>ѹƫ<D1B9>ȡ<EEA3A8><C8A1>Ϊ0<CEAA><30>ֵ<EFBFBD><D6B5>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float val = (UU_Deviation[i] != 0.0f) ? UU_Deviation[i] : UL_Deviation[i];
|
|
|
|
|
|
float_buffer.push_back(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 15-17: <20><><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>ѹTHD<48><44>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 18-20: THD<48>ߵ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>3-5<><35>
|
|
|
|
|
|
for (int i = 3; i < 6; ++i) {
|
|
|
|
|
|
float_buffer.push_back(THD[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 21-23: THD<48><44><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>0-2<><32>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
float_buffer.push_back(THD[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 24-25: Ƶ<>ʼ<EFBFBD>ƫ<EFBFBD><C6AB>
|
|
|
|
|
|
for (int i = 0; i < 2; ++i) {
|
|
|
|
|
|
float_buffer.push_back(FREQ[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 26-33: <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ8<C7B0><38>Ԫ<EFBFBD>أ<EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 2; ++i) {
|
|
|
|
|
|
for (int j = 0; j < 4; ++j) {
|
|
|
|
|
|
if (i == 0 || j < 3) {
|
|
|
|
|
|
float_buffer.push_back(UI_Seq[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 34-45: <20>ܹ<EFBFBD><DCB9><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
|
|
|
|
for (int j = 0; j < 3; ++j) {
|
|
|
|
|
|
float_buffer.push_back(TOTAL_POWER[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 46-49: <20><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
|
|
|
|
float_buffer.push_back(COS_PF[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 50-53: λ<>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
|
|
|
|
float_buffer.push_back(COS_DF[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 54-200: <20><><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>ѹг<D1B9><D0B3><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3 * 49; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 201-347: <20><>ѹг<D1B9><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>1-49<34>Σ<EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
for (int j = 1; j < HARMNUM; ++j) {
|
|
|
|
|
|
float_buffer.push_back(HARMV[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 348-494: <20><><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>1-49<34>Σ<EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
for (int j = 1; j < HARMNUM; ++j) {
|
|
|
|
|
|
float_buffer.push_back(HARMI[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 495-641: <20><><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>ѹг<D1B9><D0B3><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
|
for (int i = 0; i < 3 * 49; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 642-788: <20><>ѹг<D1B9><D0B3><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>1-49<34>Σ<EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
for (int j = 1; j < HARMNUM; ++j) {
|
|
|
|
|
|
float_buffer.push_back(HARMVP[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 789-935: <20><><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>1-49<34>Σ<EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
for (int j = 1; j < HARMNUM; ++j) {
|
|
|
|
|
|
float_buffer.push_back(HARMIP[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 936-1085: <20><><EFBFBD>ã<EFBFBD><C3A3>ߵ<EFBFBD>ѹ<EFBFBD><D1B9>г<EFBFBD><D0B3><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3 * 50; ++i) {
|
|
|
|
|
|
float_buffer.push_back(3.1415f);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 1086-1235: <20><>ѹ<EFBFBD><D1B9>г<EFBFBD><D0B3><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>0-49<34>Σ<EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
|
for (int j = 0; j < HARMNUM; ++j) {
|
|
|
|
|
|
float_buffer.push_back(INHARMV[i][j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ת<><D7AA>ΪBase64
|
|
|
|
|
|
return floatVectorToBase64(float_buffer);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ݽ<EFBFBD><DDBD>߷<EFBFBD>ʽѡ<CABD><D1A1>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::string ConvertToBase64(int wiringType) const {
|
|
|
|
|
|
// 1Ϊ<31><CEAA><EFBFBD>ͽ<EFBFBD><CDBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
|
|
|
|
|
|
if (wiringType == 1) {
|
|
|
|
|
|
return ConvertToBase64_Delta();
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
return ConvertToBase64_Star();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
#pragma pack(pop)
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>̬<EFBFBD><CCAC><EFBFBD>ؽṹ------------------------------
|
|
|
|
|
|
#pragma pack(push, 1)
|
|
|
|
|
|
|
|
|
|
|
|
// ʱ<><CAB1><EFBFBD>ṹ<EFBFBD><E1B9B9>
|
|
|
|
|
|
struct TagMsTime {
|
|
|
|
|
|
uint16_t Year;
|
|
|
|
|
|
uint16_t Month;
|
|
|
|
|
|
uint16_t Day;
|
|
|
|
|
|
uint16_t Hour;
|
|
|
|
|
|
uint16_t Min;
|
|
|
|
|
|
uint16_t Sec;
|
|
|
|
|
|
uint16_t Ms;
|
|
|
|
|
|
|
|
|
|
|
|
void convertByteOrder() {
|
|
|
|
|
|
Year = ntohs(Year);
|
|
|
|
|
|
Month = ntohs(Month);
|
|
|
|
|
|
Day = ntohs(Day);
|
|
|
|
|
|
Hour = ntohs(Hour);
|
|
|
|
|
|
Min = ntohs(Min);
|
|
|
|
|
|
Sec = ntohs(Sec);
|
|
|
|
|
|
Ms = ntohs(Ms);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// <20>澯<EFBFBD>¼<EFBFBD>ͷ<EFBFBD>ṹ
|
|
|
|
|
|
struct NewHeadTaglogbuffer {
|
|
|
|
|
|
uint16_t name; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
TagMsTime Devtime; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
uint16_t LogType; // <20><>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint16_t LogCode; // <20><>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint16_t LogLb; // <20><>־¼<D6BE><C2BC>
|
|
|
|
|
|
uint16_t LogBackup; // <20><>־<EFBFBD><D6BE><EFBFBD><EFBFBD>λ
|
|
|
|
|
|
uint32_t LogParaNum; // <20><>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
void convertByteOrder() {
|
|
|
|
|
|
name = ntohs(name);
|
|
|
|
|
|
Devtime.convertByteOrder();
|
|
|
|
|
|
LogType = ntohs(LogType);
|
|
|
|
|
|
LogCode = ntohs(LogCode);
|
|
|
|
|
|
LogLb = ntohs(LogLb);
|
|
|
|
|
|
LogBackup = ntohs(LogBackup);
|
|
|
|
|
|
LogParaNum = ntohl(LogParaNum);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// <20>澯<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ
|
|
|
|
|
|
struct NewBodyTaglogbuffer {
|
|
|
|
|
|
uint32_t ParaCode; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint32_t ParaValue; // <20><><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
|
|
|
|
|
|
|
void convertByteOrder() {
|
|
|
|
|
|
ParaCode = ntohl(ParaCode);
|
|
|
|
|
|
ParaValue = ntohl(ParaValue);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// <20>澯<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ
|
|
|
|
|
|
class NewTaglogbuffer {
|
|
|
|
|
|
public:
|
|
|
|
|
|
NewHeadTaglogbuffer head;
|
|
|
|
|
|
std::vector<NewBodyTaglogbuffer> bodyList;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void parseFromData(const uint8_t* data, size_t data_size) {
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>
|
|
|
|
|
|
if (data_size < sizeof(NewHeadTaglogbuffer)) {
|
|
|
|
|
|
throw std::runtime_error("Insufficient data for header");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
memcpy(&head, data, sizeof(NewHeadTaglogbuffer));
|
|
|
|
|
|
head.convertByteOrder();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>岿<EFBFBD><E5B2BF>
|
|
|
|
|
|
const size_t body_start = sizeof(NewHeadTaglogbuffer);
|
|
|
|
|
|
const size_t body_size = head.LogParaNum * sizeof(NewBodyTaglogbuffer);
|
|
|
|
|
|
|
|
|
|
|
|
if (data_size < body_start + body_size) {
|
|
|
|
|
|
throw std::runtime_error("Insufficient data for body");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bodyList.resize(head.LogParaNum);
|
|
|
|
|
|
const uint8_t* body_data = data + body_start;
|
|
|
|
|
|
|
|
|
|
|
|
for (uint32_t i = 0; i < head.LogParaNum; ++i) {
|
|
|
|
|
|
memcpy(&bodyList[i], body_data, sizeof(NewBodyTaglogbuffer));
|
|
|
|
|
|
bodyList[i].convertByteOrder();
|
|
|
|
|
|
body_data += sizeof(NewBodyTaglogbuffer);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C#<23>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
static NewTaglogbuffer createFromData(const uint8_t* data, size_t data_size) {
|
|
|
|
|
|
NewTaglogbuffer result;
|
|
|
|
|
|
result.parseFromData(data, data_size);
|
|
|
|
|
|
return result;
|
|
|
|
|
|
}
|
2025-07-10 10:32:29 +08:00
|
|
|
|
};
|
2025-07-25 10:47:50 +08:00
|
|
|
|
|
2025-07-10 10:32:29 +08:00
|
|
|
|
#pragma pack(pop)
|
2025-07-25 10:47:50 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>QVVRRecord<72>ṹ<EFBFBD><E1B9B9>
|
|
|
|
|
|
struct QVVRRecord {
|
|
|
|
|
|
uint64_t triggerTimeMs; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UTC<54><43><EFBFBD><EFBFBD>1970-01-01 00:00:00<30><30>ʼ<EFBFBD><CABC>
|
|
|
|
|
|
int nType = 0; // <20>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>ͣ<EFBFBD>0-δ֪ 1-<2D>ݽ<EFBFBD> 2-<2D><><EFBFBD><EFBFBD> 3-<2D>ж<EFBFBD> 4-˲̬
|
|
|
|
|
|
float fPersisstime = 0.0f; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨<EFBFBD>룩
|
|
|
|
|
|
float fMagntitude = 0.0f; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|
|
|
|
|
float phase = 0.0f; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲̬ʹ<CCAC>ã<EFBFBD>0-A 1-B 2-C 3-AB 4-BC 5-CA ?-ABC
|
|
|
|
|
|
float transientValue = 0.0f;// ˲<><CBB2><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>˲̬ʹ<CCAC>ã<EFBFBD>
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// <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);
|
|
|
|
|
|
//<2F><>̬<EFBFBD><CCAC><EFBFBD>ؽṹ-------------------------------
|
|
|
|
|
|
|
2025-07-30 13:52:52 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC>Ϣ<EFBFBD>ṹ<EFBFBD><E1B9B9> (1<>ֽڶ<D6BD><DAB6><EFBFBD>)
|
|
|
|
|
|
#pragma pack(push, 1)
|
|
|
|
|
|
struct tag_dir_info {
|
|
|
|
|
|
int32_t flag; // 0-Ŀ¼<C4BF><C2BC>1-<2D>ļ<EFBFBD>
|
|
|
|
|
|
char name[64]; // <20>ļ<EFBFBD><C4BC><EFBFBD>/Ŀ¼<C4BF><C2BC>
|
|
|
|
|
|
uint32_t size; // <20>ļ<EFBFBD><C4BC><EFBFBD>С
|
|
|
|
|
|
};
|
|
|
|
|
|
#pragma pack(pop)
|
|
|
|
|
|
|
2025-08-05 15:41:04 +08:00
|
|
|
|
// <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|
|
|
|
|
struct DZ_TAB_STRUCT {
|
|
|
|
|
|
short LN_Num; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
short DZ_Num; // <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
char DZ_Name[66]; // <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
short DZ_Type; // <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|
|
|
|
|
float DZ_Min; // <20><>Сֵ
|
|
|
|
|
|
float DZ_Max; // <20><><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
|
float DZ_Default; // ȱʡֵ
|
|
|
|
|
|
char DZ_UNIT[10]; // <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD>嶨<EFBFBD><E5B6A8>
|
|
|
|
|
|
#pragma pack(push, 1) // ȷ<><C8B7><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD>
|
|
|
|
|
|
struct DZ_kzz_bit {
|
|
|
|
|
|
char kzz_bit[40]; // <20><><EFBFBD>ƣ<EFBFBD><C6A3>̶<EFBFBD>40<34>ֽ<EFBFBD>
|
|
|
|
|
|
char bit_enable; // <20>Ƿ<EFBFBD>ʹ<EFBFBD>ñ<EFBFBD>־<EFBFBD><D6BE>1<EFBFBD>ֽڣ<D6BD>
|
|
|
|
|
|
};
|
|
|
|
|
|
#pragma pack(pop) // <20>ָ<EFBFBD>Ĭ<EFBFBD>϶<EFBFBD><CFB6><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>
|
|
|
|
|
|
struct NameFixValue
|
|
|
|
|
|
{
|
|
|
|
|
|
char uNumber; // <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
char sFixValueName[20]; // <20><><EFBFBD><EFBFBD> (<28>̶<EFBFBD>20<32>ֽ<EFBFBD>)
|
|
|
|
|
|
char uBY; // <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint16_t DataType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint16_t MinValue; // <20><>Сֵ
|
|
|
|
|
|
uint16_t MaxValue; // <20><><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
|
uint16_t DefaultValue; // ȱʡֵ
|
|
|
|
|
|
char sDimension[4]; // <20><>λ (<28>̶<EFBFBD>4<EFBFBD>ֽ<EFBFBD>)
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ֽ<EFBFBD><D6BD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void ReversalBuff(uint8_t* buff, int start, int length);
|
|
|
|
|
|
|
2025-06-13 11:29:59 +08:00
|
|
|
|
// <20><><EFBFBD>ɴ<EFBFBD>Э<EFBFBD><D0AD>ͷ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
|
|
|
|
|
|
std::vector<unsigned char> generate_binary_message(
|
|
|
|
|
|
uint16_t msg_type,
|
2025-07-03 11:13:16 +08:00
|
|
|
|
const std::vector<unsigned char>& payload);
|
2025-06-13 11:29:59 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::vector<unsigned char> generate_frontlogin_message(const std::string& strMac);
|
2025-07-03 11:13:16 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䱨<EFBFBD><E4B1A8>
|
|
|
|
|
|
std::vector<unsigned char> generate_statequerytime_message();
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>
|
2025-07-09 10:03:37 +08:00
|
|
|
|
std::vector<unsigned char> generate_statequerystat_message(tagTime time, uint16_t nDeviceNo, uint16_t nDataType);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF>ʵʱ<CAB5><CAB1><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>
|
2025-07-25 10:47:50 +08:00
|
|
|
|
std::vector<unsigned char> generate_realstat_message(unsigned char nCpuNo, unsigned char StaTtype, unsigned char flag);
|
|
|
|
|
|
//<2F><><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>
|
2025-07-30 13:52:52 +08:00
|
|
|
|
std::vector<unsigned char> generate_downloadfile_message(int frameIndex, const std::string& fileName);
|
|
|
|
|
|
//<2F>ļ<EFBFBD>Ŀ¼<C4BF><C2BC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>
|
2025-08-05 15:41:04 +08:00
|
|
|
|
std::vector<unsigned char> generate_getfilemenu_message(const std::string& filedir);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::vector<unsigned char> generate_requestFixValue_message(unsigned char nCpuNo);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::vector<unsigned char> generate_requestFixDes_message();
|
|
|
|
|
|
// <20><><EFBFBD>ö<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<2B>ĵĶ<C4B5>ֵ<EFBFBD><D6B5><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>
|
|
|
|
|
|
std::vector<unsigned char> generate_requestSetFixValue_message(unsigned char nCpuNo, const std::vector<float>& value);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
std::vector<unsigned char> generate_requestinterfixvalue_message();
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param nDesCW <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (1-<EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 2-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|
|
|
|
|
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чʱ<EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
std::vector<unsigned char> generate_requestinterfixdes_message(unsigned char nDesCW);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param values Ҫ<EFBFBD><EFBFBD><EFBFBD>õĶ<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (ushortֵ)
|
|
|
|
|
|
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
std::vector<unsigned char> generate_requestsetinterfixvalue_message(const std::vector<uint16_t>& values);
|
|
|
|
|
|
std::vector<unsigned char> generate_requestsetinterfixvalue_message_new(const std::vector<uint16_t>& value);
|