fix realdata in different icd

This commit is contained in:
lnk
2025-06-24 17:15:18 +08:00
parent aabc9c4063
commit 7c190cb658
5 changed files with 43 additions and 16 deletions

View File

@@ -82,7 +82,7 @@ void del_mvl_type_ctrl();
#define DB_INTERFACE_H
// 前向声明 LD_info_t
typedef struct LD_info_t LD_info_t;
int urcbRealDataHasReceived(int dev_index, LD_info_t* LD_info, long long Time); //lnk20241223
int urcbRealDataHasReceived(int dev_index,int rptNo, LD_info_t* LD_info, long long Time); //lnk20241223 20250624
#endif
apr_status_t app_get_private_config(const char *myfilename);

View File

@@ -1085,12 +1085,12 @@ ST_VOID u_iec_rpt_ind_data_by_devtype(MVL_VAR_ASSOC** info_va,
json_block_create_time(LD_info->mp_id, t / 1000, rptinfo->flickerflag);
printf("rcb_info->RptID=%s ,LineId=%d , Timestamp= %lld \n", rcb_info->RptID, LD_info->line_id, t / 1000);
not_set_rpt_TimeID_this = FALSE;
if (strstr(rcb_info->RptID, "LLN0$RP$urcbRealData")) {
/*if (strstr(rcb_info->RptID, "LLN0$RP$urcbRealData")) {//lnk 20250624
//20241223lnk添加终端号参数
ied_usr_t *ied_usr = GET_IEDEXT_ADDR(ied);
if (urcbRealDataHasReceived(ied_usr->dev_idx,LD_info, t / 1000))
return;
}
}*/
}
}
}
@@ -1196,6 +1196,20 @@ ST_VOID u_iec_rpt_ind_data_by_devtype(MVL_VAR_ASSOC** info_va,
echo_err5("va_num!=va_total! Report From %s %s %s , %d!=%d !!!",
APR_EGENERAL, chnl_usr->ip_str, LD_info->LD_name, rcb_info->RptID, va_num, va_total);
}
//lnk 20250624匹配不同的实时控制块
const char* extractAfterUrCb(const char* rptID) {
if (!rptID) return NULL;
// 查找 "urcb"(区分大小写)
const char* pos = strstr(rptID, "urcb");
if (!pos) return rptID; // 如果没有 urcb就退而求其次返回整个字符串
return pos + 4; // 返回 "urcb" 后面的部分指针
}
//lnk
ST_VOID u_iec_rpt_ind_data(MVL_VAR_ASSOC** info_va,
ST_UINT8* OptFldsData, /* ptr to data part of OptFlds bvstring */
ST_UINT8* InclusionData, /* ptr to Inclusion bstring */
@@ -1380,6 +1394,7 @@ ST_VOID u_iec_rpt_ind_data(MVL_VAR_ASSOC** info_va,
if (LD_info->rptPstRecvCheckFlag == 0)
json_block_create_start(LD_info->voltage_level, LD_info->mp_id, rptinfo->flickerflag, ied_usr->dev_type, LD_info->line_id);
LD_info->rptPstRecvCheckFlag |= 0x01 << rptinfo->rptNo;
printf("LD_info->rptPstRecvCheckFlag=%d",LD_info->rptPstRecvCheckFlag);
}
}
}
@@ -1478,11 +1493,20 @@ ST_VOID u_iec_rpt_ind_data(MVL_VAR_ASSOC** info_va,
json_block_create_time(LD_info->mp_id, t / 1000, rptinfo->flickerflag);
printf("rcb_info->RptID=%s ,LineId=%d , Timestamp= %lld \n", rcb_info->RptID, LD_info->line_id, t / 1000);
not_set_rpt_TimeID_this = FALSE;
if (strstr(rcb_info->RptID, "LLN0$RP$urcbRealData")) {
//20241223lnk添加终端号参数
ied_usr_t *ied_usr = GET_IEDEXT_ADDR(ied);
if (urcbRealDataHasReceived(ied_usr->dev_idx,LD_info, t / 1000))//判断时间重复
return;
//if (strstr(rcb_info->RptID, "LLN0$RP$urcbRealData")) {
int rpt_no;
//20241223lnk添加终端号参数
ied_usr_t *ied_usr = GET_IEDEXT_ADDR(ied);
for(rpt_no=0 ; rpt_no<LD_info->rptcount; rpt_no++) {//实时数据的每份报告都进行时间判断lnk20250624
printf("LD_info->rptinfo[%d]->rptID=%s ",rpt_no,LD_info->rptinfo[rpt_no]->rptID);
if(strstr(rcb_info->RptID,extractAfterUrCb(LD_info->rptinfo[rpt_no]->rptID ))){
printf("rtdata RptID match");
if (urcbRealDataHasReceived(ied_usr->dev_idx,rpt_no,LD_info, t / 1000)){//判断时间重复
printf("this rt report Time repeats");
return;
}
}
}
}
}
@@ -1542,6 +1566,7 @@ ST_VOID u_iec_rpt_ind_data(MVL_VAR_ASSOC** info_va,
}
else if (rptinfo->flickerflag == 0) {//CZY 2023-08-17 WW 2022-11-14 增加多个报告判断
if (LD_info->rptRecvFlag == LD_info->rptRecvCheckFlag) {
//LD_info->rptRecvFlag是报告初始化时报告序号左移之和固定于报告初始化
//ied_usr_t* ied_usr = ied->usr_ext;//CZY 2023-08-17 WW 2022年12月6日14:09:08 增加多个ICD支持
//int devkind = ied_usr->dev_flag;
json_block_create_end(LD_info->v_wiring_type, LD_info->mp_id, rptinfo->flickerflag);//lnk角形处理