优化波形文件匹配逻辑和日志提示
This commit is contained in:
@@ -78,6 +78,23 @@ extern int recall_daily;
|
||||
extern char* UDS_UPLOAD_URL;
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
static void format_time_ms(long long ms, char* buf, size_t buf_len){
|
||||
time_t sec = ms / 1000;
|
||||
int milli = ms % 1000;
|
||||
|
||||
struct tm tm_time;
|
||||
localtime_r(&sec, &tm_time); // 线程安全
|
||||
|
||||
snprintf(buf, buf_len,
|
||||
"%04d-%02d-%02d %02d:%02d:%02d.%03d",
|
||||
tm_time.tm_year + 1900,
|
||||
tm_time.tm_mon + 1,
|
||||
tm_time.tm_mday,
|
||||
tm_time.tm_hour,
|
||||
tm_time.tm_min,
|
||||
tm_time.tm_sec,
|
||||
milli);
|
||||
}
|
||||
//lnk20250122start
|
||||
apr_status_t init_rem_dib_table()
|
||||
{
|
||||
@@ -622,11 +639,11 @@ void ChannelCheckIECLogs(chnl_usr_t *chnl_usr)
|
||||
|
||||
if(strcmp(cfg1.ValueOfTimeUnit, "utc") == 0){//装置时间是utc还是北京
|
||||
utc_or_beijing = 28800;//秒
|
||||
DIY_WARNLOG_CODE(LD_info->mp_id,2,LOG_CODE_RECALL,"【WARN】监测点:%s - id:%s开始补招数据,下发补招时间为utc时间,监测点对应装置型号:%s", LD_info->name,LD_info->mp_id,ied_usr->dev_type);
|
||||
DIY_WARNLOG_CODE(LD_info->mp_id,2,LOG_CODE_RECALL,"【WARN】监测点:%s - id:%s开始补招数据,注意!下发补招时间为utc时间,监测点对应装置型号:%s", LD_info->name,LD_info->mp_id,ied_usr->dev_type);
|
||||
}
|
||||
else{
|
||||
utc_or_beijing = 0;
|
||||
DIY_WARNLOG_CODE(LD_info->mp_id,2,LOG_CODE_RECALL,"【WARN】监测点:%s - id:%s开始补招数据,下发补招时间为beijing时间,监测点对应装置型号:%s", LD_info->name,LD_info->mp_id,ied_usr->dev_type);
|
||||
DIY_WARNLOG_CODE(LD_info->mp_id,2,LOG_CODE_RECALL,"【WARN】监测点:%s - id:%s开始补招数据,注意!下发补招时间为beijing时间,监测点对应装置型号:%s", LD_info->name,LD_info->mp_id,ied_usr->dev_type);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
@@ -2363,16 +2380,39 @@ apr_status_t call_cn_wavelist(LD_info_t *LD_info )
|
||||
//获取时间类型lnk20250520
|
||||
XmlConfigC cfg;
|
||||
if (get_xml_config_by_dev_type(ied_usr->dev_type, &cfg)) {
|
||||
if(strcmp(cfg.UnitOfTimeUnit, "1") == 0){//持续时间上送的是秒1还是毫秒0
|
||||
DIY_ERRORLOG_CODE(LD_info->mp_id,2,LOG_CODE_COMTRADE_FILE,"【ERROR】监测点:%s - id:%s 匹配录波文件失败,录波号段:%d,录波文件的开始时间:%lld,触发时间:%lld,映射配置的暂态持续时间单位是s", LD_info->name,LD_info->mp_id,LD_info->FltNum[i],start_tm,trig_tm);
|
||||
}
|
||||
else{
|
||||
DIY_ERRORLOG_CODE(LD_info->mp_id,2,LOG_CODE_COMTRADE_FILE,"【ERROR】监测点:%s - id:%s 匹配录波文件失败,录波号段:%d,录波文件的开始时间:%lld,触发时间:%lld,映射配置的暂态持续时间单位是ms", LD_info->name,LD_info->mp_id,LD_info->FltNum[i],start_tm,trig_tm);
|
||||
|
||||
char trig_time_str[64] = {0};
|
||||
format_time_ms(trig_tm, trig_time_str, sizeof(trig_time_str));
|
||||
|
||||
if(strcmp(cfg.WaveTimeFlag, "utc") == 0) {
|
||||
DIY_ERRORLOG_CODE(
|
||||
LD_info->mp_id,
|
||||
2,
|
||||
LOG_CODE_COMTRADE_FILE,
|
||||
"【ERROR】监测点:%s - id:%s 匹配录波文件失败,录波号段:%d,录波触发时间戳:%lld,录波触发时间:%s,映射配置的暂态持续时间单位是s",
|
||||
LD_info->name,
|
||||
LD_info->mp_id,
|
||||
LD_info->FltNum[i],
|
||||
trig_tm,
|
||||
trig_time_str);
|
||||
|
||||
} else {
|
||||
|
||||
DIY_ERRORLOG_CODE(
|
||||
LD_info->mp_id,
|
||||
2,
|
||||
LOG_CODE_COMTRADE_FILE,
|
||||
"【ERROR】监测点:%s - id:%s 匹配录波文件失败,录波号段:%d,录波触发时间戳:%lld,录波触发时间:%s,映射配置的暂态持续时间单位是ms",
|
||||
LD_info->name,
|
||||
LD_info->mp_id,
|
||||
LD_info->FltNum[i],
|
||||
trig_tm,
|
||||
trig_time_str);
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf("读取失败,未找到 dev_type\n");
|
||||
DIY_ERRORLOG_CODE(LD_info->mp_id,2,LOG_CODE_COMTRADE_FILE,"【ERROR】监测点:%s - id:%s 匹配录波文件失败,录波号段:%d,录波文件的开始时间:%lld,触发时间:%lld,映射配置的暂态持续时间单位未配置", LD_info->name,LD_info->mp_id,LD_info->FltNum[i],start_tm,trig_tm);
|
||||
DIY_ERRORLOG_CODE(LD_info->mp_id,2,LOG_CODE_COMTRADE_FILE,"【ERROR】监测点:%s - id:%s 匹配录波文件失败,录波号段:%d,录波文件的开始时间:%lld,触发时间:%lld,映射配置的录波文件时间单位未配置", LD_info->name,LD_info->mp_id,LD_info->FltNum[i],start_tm,trig_tm);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
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);
|
||||
|
||||
// 如果该 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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
printf(">>>>> pair QVVR fail>>>>>>\n");
|
||||
|
||||
printf(">>>>> pair QVVR fail>>>>>> \n");
|
||||
// 如果没有找到匹配的 QVVR 数据,返回 NULL
|
||||
return NULL;
|
||||
}
|
||||
#if 0
|
||||
|
||||
Reference in New Issue
Block a user