qvvr has bug

This commit is contained in:
lnk
2025-05-20 16:31:12 +08:00
parent 093e8e5dd6
commit 3ad2e7c590
12 changed files with 314 additions and 44 deletions

View File

@@ -477,7 +477,7 @@ void processQVVR_start(LD_info_t* LD_info)
void processQVVR_time(LD_info_t* LD_info, long long Time)
{
LD_info->qvvr[LD_info->qvvr_idx].QVVR_time = Time;
printf("\n~~~~~~~~~~~~~~~~~ processQVVR_time: line_id=%d ,Time=%lld \n",LD_info->line_id,Time);
printf("\n~~~~~~~~~~~~~~~~~ processQVVR_time: line_id=%d ,Time=%lld \n",LD_info->line_id,Time);//这里是报告上送的时间
}
@@ -525,21 +525,55 @@ void processQVVR_end(LD_info_t* LD_info)
if (LD_info->qvvr[LD_info->qvvr_idx].QVVR_start)//波动数据处理时FCDA包含VarStr$stValQVVR_start为1退出处理
return;
//获取时间类型lnk20250520
printf("~~~~~~~this dev type is %s~~~~~~~",ied_usr->dev_type);
XmlConfigC cfg;
if (get_xml_config_by_dev_type(ied_usr->dev_type, &cfg)) {
printf("UnitOfTimeUnit = %s\n", cfg.UnitOfTimeUnit);
printf("ValueOfTimeUnit = %s\n", cfg.ValueOfTimeUnit);
} else {
printf("读取失败,未找到 dev_type\n");
}
double s_or_ms;
long long utc_or_beijing;
if(cfg.UnitOfTimeUnit == "1"){//持续时间上送的是秒1还是毫秒0
s_or_ms = 0.001;
}
else{
s_or_ms = 1.0;
}
if(cfg.ValueOfTimeUnit == "utc"){//上送的是utc还是北京
utc_or_beijing = 28800000;
}
else{
utc_or_beijing = 0;
}
for (i=0;i<QVVR_NUM;i++) { //暂降/暂升/中断等进入处理,遍历所有波动位置
if (i==LD_info->qvvr_idx) //跳过监测点当前波动位置,第一次记录波形后第一次的第三个事件会让0号点为QVVR_DATA_RECEIVED
//第二次记录波形第二次的第一个事件qvvr_idx=11号中为QVVR_DATA_RECEIVEDQVVR_start=1跳过记录
//第二次的第二个事件qvvr_idx=1QVVR_start=0记录到0中0为QVVR_DATA_PAIRED
//第二次的第三个事件qvvr_idx=22号中为QVVR_DATA_RECEIVEDQVVR_start=1跳过记录
//第二次录波匹配文件时应该匹配到1号的qvvrtime但是1没有QVVR_DATA_PAIRED所以对不上需要修改逻辑
{
printf("skip this index\n");
continue;
}
if (LD_info->qvvr[i].used_status != QVVR_DATA_RECEIVED)//跳过没有收到波动的位置
{
printf("qvvr %d is not received\n",i);
continue;
//添加时间判断lnk20250311
if (fabs((LD_info->qvvr[LD_info->qvvr_idx].QVVR_time - LD_info->qvvr[i].QVVR_time)/1.0
- LD_info->qvvr[LD_info->qvvr_idx].QVVR_PerTime) > 1.0){
}
//添加时间判断lnk20250311当前的时间减去找到的时间应该等于持续时间
if (fabs((LD_info->qvvr[LD_info->qvvr_idx].QVVR_time - LD_info->qvvr[i].QVVR_time)/1.0 //判断秒还是毫秒
- LD_info->qvvr[LD_info->qvvr_idx].QVVR_PerTime/s_or_ms) > 1.0){
printf("~~~~~~~fail in pair qvvr node %f~~~~~~~~~~ \n",fabs((LD_info->qvvr[LD_info->qvvr_idx].QVVR_time - LD_info->qvvr[i].QVVR_time)/1.0
- LD_info->qvvr[LD_info->qvvr_idx].QVVR_PerTime));
- LD_info->qvvr[LD_info->qvvr_idx].QVVR_PerTime/s_or_ms));
continue;
}
@@ -548,7 +582,8 @@ void processQVVR_end(LD_info_t* LD_info)
//其他某位置的波动也没有定义类型/这个位置的波动类型和当前位置的波动类型一致,暂降事件一次会发三个报告,启动和上值和结束
if ( (LD_info->qvvr[i].QVVR_type==0)||(LD_info->qvvr[i].QVVR_type==LD_info->qvvr[LD_info->qvvr_idx].QVVR_type) ) {
long long end_tm = (long long)(LD_info->qvvr[LD_info->qvvr_idx].QVVR_PerTime*1000) + LD_info->qvvr[i].QVVR_time;//结束时间是持续时间加最初的触发时间,毫秒
//long long end_tm = (long long)(LD_info->qvvr[LD_info->qvvr_idx].QVVR_PerTime*1000) + LD_info->qvvr[i].QVVR_time;//结束时间是持续时间加最初的触发时间,毫秒
long long end_tm = (long long)(LD_info->qvvr[LD_info->qvvr_idx].QVVR_PerTime/s_or_ms) + LD_info->qvvr[i].QVVR_time;//结束时间是持续时间加最初的触发时间,毫秒
printf("\n~~~~~~~now qvvr node type before record is %d~~~~~~~~~~ \n",LD_info->qvvr[LD_info->qvvr_idx].QVVR_type);
printf("~~~~~~~now qvvr node QVVR_PerTime before record is %f~~~~~~~~~~ \n",LD_info->qvvr[LD_info->qvvr_idx].QVVR_PerTime);
@@ -560,7 +595,7 @@ void processQVVR_end(LD_info_t* LD_info)
LD_info->qvvr[i].used_status = QVVR_DATA_PAIRED; //匹配上了
LD_info->qvvr[i].QVVR_type = LD_info->qvvr[LD_info->qvvr_idx].QVVR_type;
LD_info->qvvr[i].QVVR_PerTime = LD_info->qvvr[LD_info->qvvr_idx].QVVR_PerTime;
LD_info->qvvr[i].QVVR_PerTime = LD_info->qvvr[LD_info->qvvr_idx].QVVR_PerTime;//存在内存的还是原始读出的数据
LD_info->qvvr[i].QVVR_Amg = LD_info->qvvr[LD_info->qvvr_idx].QVVR_Amg; //记录当前这个点的波动数据到找到的点位置上,确保记录的是最新的相同类型的事件
LD_info->qvvr[LD_info->qvvr_idx].used_status = QVVR_DATA_NOT_USED; //当前这个点位置释放
@@ -578,12 +613,15 @@ void processQVVR_end(LD_info_t* LD_info)
ret = transfer_json_qvvr_data(g_node_id, //这个参数没有使用
LD_info->line_id, //监测点序号
(double)LD_info->qvvr[LD_info->qvvr_idx].QVVR_Amg,
(double)LD_info->qvvr[LD_info->qvvr_idx].QVVR_PerTime,
LD_info->qvvr[i].QVVR_time,
end_tm,
(double)LD_info->qvvr[LD_info->qvvr_idx].QVVR_PerTime/s_or_ms, //上传转换为ms
LD_info->qvvr[i].QVVR_time + utc_or_beijing, //上传北京时间
end_tm + utc_or_beijing, //上传北京时间
LD_info->qvvr[LD_info->qvvr_idx].QVVR_type, //伏值、持续时间、开始时间、结束时间、暂态类型
"", "", //两个文件路径为空
LD_info->mp_id, LD_info->qvvr[LD_info->qvvr_idx].QVVR_Rptname, ied_usr->dev_type);//监测点号,文件和监测点暂态事件匹配上的暂态报告名,终端类型
"",
"", //两个文件路径为空
LD_info->mp_id,
LD_info->qvvr[LD_info->qvvr_idx].QVVR_Rptname,
ied_usr->dev_type);//监测点号,文件和监测点暂态事件匹配上的暂态报告名,终端类型
if(!ret)//失败
{
printf("\n~~~~~~~~~~~~~~~~~ QVVR_json_data send error: line_id=%d \n",LD_info->line_id);