Files
front_linux/LFtid1056/pqdif_thread_processor.h

84 lines
2.3 KiB
C++

#pragma once
#pragma once
#include <ctime>
#include <cstddef>
#include <map>
#include <string>
#include <vector>
#include "pqdif/include/pqdif_ph.h"
// ============================
// 通道级标签
// ============================
struct RawChannelTagMeta
{
std::string raw_channel_name; // 原始 tagChannelName
std::string normalized_channel_name; // 程序内部用的规范化 key
long phase_id = -1; // tagPhaseID
GUID quantity_type_id{}; // tagQuantityTypeID
long quantity_measured_id = -1; // tagQuantityMeasuredID
double channel_frequency = 0.0; // 辅助后续识别谐波次序
int group_id = 0; // 辅助后续识别谐波组
};
// ============================
// 系列级标签
// ============================
struct RawSeriesTagMeta
{
long quantity_units_id = -1; // tagQuantityUnitsID
GUID quantity_characteristic_id{}; // tagQuantityCharacteristicID
GUID value_type_id{}; // tagValueTypeID
long series_base_type = -1; // 当前库额外提供的信息
double series_scale = 1.0; // 缩放系数
double series_offset = 0.0; // 偏移
};
// ============================
// 单个通道的一组原始统计序列
// 当前阶段只保存标签 + 原始值
// ============================
struct RawChannelSeries
{
RawChannelTagMeta channel_tag;
RawSeriesTagMeta time_meta;
RawSeriesTagMeta max_meta;
RawSeriesTagMeta min_meta;
RawSeriesTagMeta avg_meta;
RawSeriesTagMeta cp95_meta;
RawSeriesTagMeta val_meta;
std::vector<time_t> times;
std::vector<double> max_values;
std::vector<double> min_values;
std::vector<double> avg_values;
std::vector<double> cp95_values;
std::vector<double> val_values;
};
// 整个文件解析后的通道集合
using RawChannelMap = std::map<std::string, RawChannelSeries>;
// 一个 PQDIF 文件的暂存对象
struct ParsedPqdifFile
{
std::string mac; // 设备目录名
std::string source_file; // 原始文件路径
time_t parsed_at = 0; // 解析完成时间
RawChannelMap channels; // 通道集合
};
// 启动 PQDIF 扫描线程
void RunPqdifScanLoop();
// 缓存访问接口
bool PopOldestParsedPqdifFile(ParsedPqdifFile& out);
bool PeekOldestParsedPqdifFile(ParsedPqdifFile& out);
size_t GetParsedPqdifCacheSize();
void ClearParsedPqdifCache();