qvvr has bug
This commit is contained in:
@@ -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$stVal,QVVR_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=1,1号中为QVVR_DATA_RECEIVED,QVVR_start=1,跳过记录,
|
||||
//第二次的第二个事件qvvr_idx=1,QVVR_start=0,记录到0中,0为QVVR_DATA_PAIRED
|
||||
//第二次的第三个事件qvvr_idx=2,2号中为QVVR_DATA_RECEIVED,QVVR_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);
|
||||
|
||||
Reference in New Issue
Block a user