优化波形文件匹配逻辑和日志提示

This commit is contained in:
lnk
2026-06-12 15:26:19 +08:00
parent d3579a2aa7
commit c221102a5a
2 changed files with 84 additions and 26 deletions

View File

@@ -760,10 +760,10 @@ void processQVVR_end(LD_info_t* LD_info)
//mq日志
if(strcmp(cfg.UnitOfTimeUnit, "1") == 0){//持续时间上送的是秒1还是毫秒0
DIY_WARNLOG_CODE(LD_info->mp_id,2,LOG_CODE_TRANSIENT,"【WARN】监测点:%s - id:%s记录了一个暂态事件但是没有匹配到事件的发生时间,装置型号:%s 配置的暂态持续时间单位是",LD_info->name,LD_info->mp_id,ied_usr->dev_type);
DIY_WARNLOG_CODE(LD_info->mp_id,2,LOG_CODE_TRANSIENT,"【WARN】监测点:%s - id:%s发生了暂态事件但是没有记录,可能是配置的暂态持续时间不匹配,当前装置型号:%s ,当前使用的配置的暂态持续时间单位是s",LD_info->name,LD_info->mp_id,ied_usr->dev_type);
}
else{
DIY_WARNLOG_CODE(LD_info->mp_id,2,LOG_CODE_TRANSIENT,"【WARN】监测点:%s - id:%s记录了一个暂态事件但是没有匹配到事件的发生时间,装置型号:%s 配置的暂态持续时间单位是毫秒",LD_info->name,LD_info->mp_id,ied_usr->dev_type);
DIY_WARNLOG_CODE(LD_info->mp_id,2,LOG_CODE_TRANSIENT,"【WARN】监测点:%s - id:%s发生了暂态事件但是没有记录,可能是配置的暂态持续时间不匹配,当前装置型号:%s ,当前使用的配置的暂态持续时间单位是ms",LD_info->name,LD_info->mp_id,ied_usr->dev_type);
}
}
@@ -782,27 +782,45 @@ void processQVVR_end(LD_info_t* LD_info)
// - 如果没有找到符合条件的 QVVR 数据,返回 NULL。
QVVR_t* find_qvvr_by_trig_tm(LD_info_t* LD_info, long long trig_tm)
{
long long diff; // 用于计算时间戳差异
int i; // 循环计数器
const long long EIGHT_HOURS_MS = 8LL * 60 * 60 * 1000;
// 遍历 LD_info 中的 QVVR 数据数组
for (i = 0; i < QVVR_NUM; i++) {
// 计算当前 QVVR 数据的时间戳与触发时间戳之间的差异
diff = abs(LD_info->qvvr[i].QVVR_time - trig_tm);
long long candidates[3] = {
trig_tm,
trig_tm - EIGHT_HOURS_MS,
trig_tm + EIGHT_HOURS_MS
};
//调试用
printf("QVVRTIME:%lld >>>>> COMTRADE trig_tm:%lld >>>>> diff:%lld\n",LD_info->qvvr[i].QVVR_time,trig_tm,diff);
for (int c = 0; c < 3; ++c) {
// 如果该 QVVR 数据的状态是 "已配对"QVVR_DATA_PAIRED并且时间差小于等于 1单位毫秒
if ((LD_info->qvvr[i].used_status == QVVR_DATA_PAIRED) && (diff <= 1)) {
// 如果匹配,返回该 QVVR 数据的指针
printf(">>>>> pair QVVR success>>>>>> \n");
return &(LD_info->qvvr[i]);
long long cmp_tm = candidates[c];
printf("===== try trig_tm:%lld offset:%lld =====\n",
cmp_tm,
cmp_tm - trig_tm);
for (int i = 0; i < QVVR_NUM; i++) {
long long diff =
llabs(LD_info->qvvr[i].QVVR_time - cmp_tm);
printf("QVVRTIME:%lld >>>>> COMTRADE trig_tm:%lld >>>>> diff:%lld\n",
LD_info->qvvr[i].QVVR_time,
cmp_tm,
diff);
if ((LD_info->qvvr[i].used_status == QVVR_DATA_PAIRED)
&& (diff <= 1))
{
printf(">>>>> pair QVVR success>>>>>> offset=%lld\n",
cmp_tm - trig_tm);
return &(LD_info->qvvr[i]);
}
}
}
printf(">>>>> pair QVVR fail>>>>>> \n");
// 如果没有找到匹配的 QVVR 数据,返回 NULL
printf(">>>>> pair QVVR fail>>>>>>\n");
return NULL;
}
#if 0