diff --git a/mms/mms_process.c b/mms/mms_process.c index 7f1f167..e58e487 100644 --- a/mms/mms_process.c +++ b/mms/mms_process.c @@ -302,10 +302,21 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr) continue; for(rpt_no=0 ; rpt_norptcount; rpt_no++) { //遍历报告(映射文件中读取的报告控制) + + //监测点日志的key,lnk20250526 + char full_key_m_c[256]; // 分配足够空间 + char full_key_m_d[256]; // 分配足够空间 + snprintf(full_key_m_c, sizeof(full_key_m_c), "monitor.%s.COM", LD_info->mp_id); + snprintf(full_key_m_d, sizeof(full_key_m_d), "monitor.%s.DATA", LD_info->mp_id); + //监测点日志的key,lnk20250526 + rptinfo = LD_info->rptinfo[rpt_no] ; if (judge_rpt_next_should_do(rptinfo)==SHOULD_DO_NOTHING)//检查是否触发 + { + DIY_DEBUGLOG(full_key_m_c,"【DEBUG】监测点:%s - id:%s不注册报告", LD_info->name,LD_info->mp_id); continue; + } if(rptinfo->m_curRptSuffix==-1) rptinfo->m_curRptSuffix = g_pt61850app->rptSuffix[g_client_id][0] ; @@ -318,6 +329,9 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr) RCB_INFO *rcb_info; printf("start mms_register_iec_rpt................................\n"); + //mq日志 + DIY_INFOLOG(full_key_m_c,"【NORMAL】监测点:%s - id:%s开始注册报告,报告名:%s", LD_info->name,LD_info->mp_id,rpt_inst_name); + if ( strstr(rptinfo->rptID,"LLN0$BR$brcbFlickerData") ) rptinfo->IntgPd = 600; //10分钟 @@ -338,6 +352,9 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr) APR_EGENERAL, LD_info->ied->id,LD_info->cpuno,LD_info->LD_name,rpt_inst_name,chnl_usr->ip_str,chnl_usr->chnl->port, chnl_usr->chnl_id, rptinfo->IntgPd,rptinfo->TrgOpt ); + //mq日志 + DIY_WARNLOG(full_key_m_c,"【WARN】监测点:%s - id:%s注册报告失败,报告名:%s", LD_info->name,LD_info->mp_id,rpt_inst_name); + } else { @@ -352,12 +369,17 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr) echo_msg11("\nRegister iec_rpt succeed, IED_ID=%d ,CPU=%d ,domain: %s ,rpt_inst_name: %s ,ip: %s:%d,chnl_id: %d ,IntgPd=%d ,TrgOpt=0x%x ,OptFlds=0x%x%x \n", LD_info->ied->id,LD_info->cpuno,LD_info->LD_name,rpt_inst_name,chnl_usr->ip_str,chnl_usr->chnl->port,chnl_usr->chnl_id, rptinfo->IntgPd,rptinfo->TrgOpt,rptinfo->OptFlds[0],rptinfo->OptFlds[1] ); + + //mq日志 + DIY_INFOLOG(full_key_m_c,"【NORMAL】监测点:%s - id:%s注册报告成功,报告名:%s", LD_info->name,LD_info->mp_id,rpt_inst_name); // add here to GI not the same time GIoffset = 0.5 * g_pt61850app->giTime; rptinfo->m_LastGITime = sGetMsTime() - GIoffset*1000; } printf("end mms_register_iec_rpt................................\n"); + //mq日志 + DIY_INFOLOG(full_key_m_c,"【NORMAL】监测点:%s - id:%s注册报告结束,报告名:%s", LD_info->name,LD_info->mp_id,rpt_inst_name); } } else { //rpt_registered ==TRUE @@ -365,6 +387,9 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr) //取消注册失败后间隔 20秒 再取消注册一次 printf("start mms_unregister_iec_rpt................................\n"); + //mq日志 + DIY_INFOLOG(full_key_m_c,"【NORMAL】监测点:%s - id:%s开始注销报告,报告名:%s", LD_info->name,LD_info->mp_id,rpt_inst_name); + ret = mms_unregister_iec_rpt (chnl_usr->net_info, &g_rpt_typeids, LD_info->LD_name,rpt_inst_name,g_pt61850app->mmsOpTimeout); @@ -372,13 +397,22 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr) rptinfo->m_LastUnRegisterFailedTime = sGetMsTime() ; echo_err6("\n取消注册报告失败!UnRregister iec_rpt failed !!! IED_ID=%d ,CPU=%d , domain: %s ,rpt_inst_name: %s ,ip: %s,chnl_id: %d \n", APR_EGENERAL, LD_info->ied->id,LD_info->cpuno,LD_info->LD_name,rpt_inst_name,chnl_usr->ip_str,chnl_usr->chnl_id); + + //mq日志 + DIY_WARNLOG(full_key_m_c,"【WARN】监测点:%s - id:%s注销报告失败,报告名:%s", LD_info->name,LD_info->mp_id,rpt_inst_name); + } else { rptinfo->rpt_registered = FALSE; echo_msg7("\nUnRegister iec_rpt succeed, IED_ID=%d ,CPU=%d ,domain: %s ,rpt_inst_name: %s ,ip: %s:%d,chnl_id: %d \n", - LD_info->ied->id,LD_info->cpuno,LD_info->LD_name,rpt_inst_name,chnl_usr->ip_str,chnl_usr->chnl->port,chnl_usr->chnl_id ); + LD_info->ied->id,LD_info->cpuno,LD_info->LD_name,rpt_inst_name,chnl_usr->ip_str,chnl_usr->chnl->port,chnl_usr->chnl_id ); + + //mq日志 + DIY_INFOLOG(full_key_m_c,"【NORMAL】监测点:%s - id:%s注销报告成功,报告名:%s", LD_info->name,LD_info->mp_id,rpt_inst_name); } printf("end mms_unregister_iec_rpt................................\n"); + //mq日志 + DIY_INFOLOG(full_key_m_c,"【NORMAL】监测点:%s - id:%s注销报告结束,报告名:%s", LD_info->name,LD_info->mp_id,rpt_inst_name); } } @@ -418,6 +452,7 @@ void ChannelCheckIECLogs(chnl_usr_t *chnl_usr) ied = chnl_usr->chnl->ied; ied_usr = GET_IEDEXT_ADDR(ied); + for(cpuno=0 ; cpunocpucount; cpuno++) { LD_info = &(ied_usr->LD_info[cpuno]); @@ -427,6 +462,13 @@ void ChannelCheckIECLogs(chnl_usr_t *chnl_usr) apr_sleep(apr_time_from_sec(1) / 10); + //监测点日志的key,lnk20250526 + char full_key_m_c[256]; // 分配足够空间 + char full_key_m_d[256]; // 分配足够空间 + snprintf(full_key_m_c, sizeof(full_key_m_c), "monitor.%s.COM", LD_info->mp_id); + snprintf(full_key_m_d, sizeof(full_key_m_d), "monitor.%s.DATA", LD_info->mp_id); + //监测点日志的key,lnk20250526 + Check_Recall_Config(LD_info->mp_id);//尝试获取xml结构 if (LD_info->autorecallcount != 0 && LD_info->autorecallflag != 1) { @@ -452,11 +494,18 @@ void ChannelCheckIECLogs(chnl_usr_t *chnl_usr) echo_msg6("\n mms_jread IED_ID=%d ,CPU=%d ,domain: %s ,logName: %s ,ip: %s,chnl_id: %d \n", LD_info->ied->id, LD_info->cpuno, LD_info->LD_name, loginfo->logName, chnl_usr->ip_str, chnl_usr->chnl_id); + //mq日志 + DIY_INFOLOG(full_key_m_c,"【NORMAL】监测点:%s - id:%s开始补招数据", LD_info->name,LD_info->mp_id); + ret = mms_jread(loginfo, chnl_usr->net_info, loginfo->LD_info->LD_name, loginfo->logName, loginfo->start_time, loginfo->end_time, g_pt61850app->mmsOpTimeout, chnl_usr->ip_str); if (ret != SD_SUCCESS) { echo_warn6("\n mms_jread Failed! IED_ID=%d ,CPU=%d ,domain: %s ,logName: %s ,ip: %s,chnl_id: %d \n", LD_info->ied->id, LD_info->cpuno, LD_info->LD_name, loginfo->logName, chnl_usr->ip_str, chnl_usr->chnl_id); + + //mq日志 + DIY_WARNLOG(full_key_m_c,"【WARN】监测点:%s - id:%s补招数据失败", LD_info->name,LD_info->mp_id); + failed_count++; } @@ -1660,14 +1709,26 @@ apr_status_t call_cn_wavelist(LD_info_t *LD_info ) ied_usr_t *ied_usr = GET_IEDEXT_ADDR(ied); int have_new_files = FALSE; + //监测点日志的key,lnk20250526 + char full_key_m_c[256]; // 分配足够空间 + char full_key_m_d[256]; // 分配足够空间 + snprintf(full_key_m_c, sizeof(full_key_m_c), "monitor.%s.COM", LD_info->mp_id); + snprintf(full_key_m_d, sizeof(full_key_m_d), "monitor.%s.DATA", LD_info->mp_id); + //监测点日志的key,lnk20250526 + for (i=0;i<256;i++) { if (LD_info->FltNum[i]<=0) continue; + //LD名称规范四字节:PQMn, 或者PQLDn ,有5个字节, 但也只取4个字符进行匹配 ldstr = LD_info->LD_name+strlen(LD_info->LD_name)-4; apr_snprintf(file_match_str,sizeof(file_match_str),"%s_%06d",ldstr,LD_info->FltNum[i]); printf(">>>>>>>> IED [%d]: %s is calling cn wavefile, !!!!!!!! file_match_str=%s \n",ied->id,ied->name,file_match_str); + + //mq日志 + DIY_INFOLOG(full_key_m_c,"【NORMAL】监测点:%s - id:%s开始召唤录波文件", LD_info->name,LD_info->mp_id); + ret = SD_FAILURE; filenum = 0; assert(ied->chncount); @@ -1687,11 +1748,17 @@ apr_status_t call_cn_wavelist(LD_info_t *LD_info ) char dat_only_filename_ret[256]; int ret2,ret3; + //mq日志 + DIY_INFOLOG(full_key_m_c,"【NORMAL】监测点:%s - id:%s获取录波文件列表成功,开始匹配录波文件", LD_info->name,LD_info->mp_id); + //WW 2023-11-01将录波段号由字符串匹配修改为int的fltnum匹配 ret2 = parse_file_names_by_fltnum(LD_info->FltNum[i], ldstr, filenames, filenum, &cfg_idx, &dat_idx, file_base_name, file_yyyymm); //WW 2023-11-01 end - if (ret2 !=APR_SUCCESS) + if (ret2 !=APR_SUCCESS){ + //mq日志 + DIY_WARNLOG(full_key_m_c,"【WARN】监测点:%s - id:%s匹配录波文件失败", LD_info->name,LD_info->mp_id); return ret2; + } //完成录波文件,记录在文件名dat/cfg_only_filename_ret中,两个后缀不一样的录波文件,要上传两次 ret2 = pt61850_write_cn_file(chnl_usr,ied,filenames[cfg_idx],cfg_only_filename_ret); @@ -1700,6 +1767,10 @@ apr_status_t call_cn_wavelist(LD_info_t *LD_info ) /////////////////////////////////////////////////////////////////////////////////////////////上传文件 if (ret2==SD_SUCCESS && ret3==SD_SUCCESS ) { //两个文件都写好了 + + //mq日志 + DIY_INFOLOG(full_key_m_c,"【NORMAL】监测点:%s - id:%s从终端获取录波文件成功,开始上传录波文件到web并更新暂态事件", LD_info->name,LD_info->mp_id); + QVVR_t *qvvr; //暂态事件 long long start_tm,trig_tm,end_tm; @@ -1921,8 +1992,12 @@ apr_status_t call_cn_wavelist(LD_info_t *LD_info ) } else { - if (ied && chnl_usr) + if (ied && chnl_usr){ echo_warn2("mms_mvla_fdir Failed: IED [%d] %s \n", ied->id , chnl_usr->ip_str) ; + //mq日志 + DIY_WARNLOG(full_key_m_c,"【WARN】监测点:%s - id:%s召唤录波文件失败", LD_info->name,LD_info->mp_id); + } + return APR_EAGAIN; } LD_info->FltNum[i]= -1; diff --git a/mms/mmscli_rpt.c b/mms/mmscli_rpt.c index dc0217e..f555b78 100644 --- a/mms/mmscli_rpt.c +++ b/mms/mmscli_rpt.c @@ -57,6 +57,7 @@ #include "db_interface.h" #include "../json/mms_json_inter.h" #include "../cfg_parse/custom_printf.h"//lnk20250225 +#include "../log4cplus/log4.h"//lnk添加log4 20250526 /************************************************************************/ /* For debug version, use a static pointer to avoid duplication of */ /* __FILE__ strings. */ @@ -853,6 +854,16 @@ ST_VOID u_iec_rpt_ind_data_by_devtype(MVL_VAR_ASSOC** info_va, printf("[BEGIND Process] Received Report From %s:%d %s %s ,va_total = %i ,【count = %i】 \n", chnl_usr->ip_str, chnl_usr->chnl->port, LD_info->LD_name, rcb_info->RptID, va_total, rptinfo->count); + //监测点日志的key,lnk20250526 + char full_key_m_c[256]; // 分配足够空间 + char full_key_m_d[256]; // 分配足够空间 + snprintf(full_key_m_c, sizeof(full_key_m_c), "monitor.%s.COM", LD_info->mp_id); + snprintf(full_key_m_d, sizeof(full_key_m_d), "monitor.%s.DATA", LD_info->mp_id); + //监测点日志的key,lnk20250526 + + //mq日志 + DIY_INFOLOG(full_key_m_d,"【NORMAL】前置收到监测点:%s - id:%s的报告,报告名称:%s,监测点对应终端的ip和端口是: %s:%d,报告总数:%i,当前报告数:%i", LD_info->name,LD_info->mp_id,rcb_info->RptID,chnl_usr->ip_str,chnl_usr->chnl->port,va_total, rptinfo->count); + //apr_time_t previousTime = apr_time_now();// //apr_time_exp_t localTime; //apr_time_exp_gmt(&localTime, previousTime); @@ -1150,10 +1161,16 @@ ST_VOID u_iec_rpt_ind_data_by_devtype(MVL_VAR_ASSOC** info_va, else { echo_err3("Ignore this report due to line_id invalid , Report From %s %s %s !!!", APR_EGENERAL, chnl_usr->ip_str, LD_info->LD_name, rcb_info->RptID); + //mq日志 + DIY_ERRORLOG(full_key_m_d,"【ERROR】前置不处理这个监测点:%s - id:%s的报告,报告名称:%s,原因是监测点的序号非法", LD_info->name,LD_info->mp_id,rcb_info->RptID); + } printf("[END Process] Report From %s:%d %s %s ,va_total = %i ,【count = %i】 \n", chnl_usr->ip_str, chnl_usr->chnl->port, LD_info->LD_name, rcb_info->RptID, va_total, rptinfo->count); + //mq日志 + DIY_INFOLOG(full_key_m_d,"【NORMAL】前置处理监测点:%s - id:%s的报告结束,报告名称:%s,监测点对应终端的ip和端口是: %s:%d,报告总数:%i,当前报告数:%i", LD_info->name,LD_info->mp_id,rcb_info->RptID,chnl_usr->ip_str,chnl_usr->chnl->port,va_total, rptinfo->count); + //apr_time_t previousTimeend = apr_time_now();// //apr_time_exp_t localTimeend; //apr_time_exp_gmt(&localTimeend, previousTimeend);