@@ -151,13 +151,6 @@ void CloseIECReports(chnl_usr_t *chnl_usr)
void closeChannel ( chnl_usr_t * chnl_usr )
{
//终端日志的key,lnk20250526
char full_key_t_c [ 256 ] ; // 分配足够空间
char full_key_t_d [ 256 ] ; // 分配足够空间
snprintf ( full_key_t_c , sizeof ( full_key_t_c ) , " terminal.%s.COM " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id ) ;
snprintf ( full_key_t_d , sizeof ( full_key_t_d ) , " terminal.%s.DATA " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id ) ;
//终端日志的key,lnk20250526
char comm_str [ 256 ] ;
memset ( comm_str , 0 , 256 ) ;
apr_snprintf ( comm_str , sizeof ( comm_str ) , " %16s:%d \t \t disconnected !!! " , chnl_usr - > ip_str , chnl_usr - > chnl - > port ) ;
@@ -185,7 +178,7 @@ void closeChannel(chnl_usr_t *chnl_usr)
ret = mms_disconnectFromServer ( chnl_usr - > net_info , & chnl_usr - > m_reqCtrl ) ;
echo_warn ( " ---------end disconnectFromServer! \n " ) ;
DIY_WARNLOG_CODE ( full_key_t_c , LOG_CODE_COMM , " 【WARN】前置与终端%s - ip端口%s:%d 断开连接 " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , chnl_usr - > ip_str , chnl_usr - > chnl - > port ) ;
DIY_WARNLOG_CODE ( ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , 1 , LOG_CODE_COMM , " 【WARN】前置与终端%s - ip端口%s:%d 断开连接 " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , chnl_usr - > ip_str , chnl_usr - > chnl - > port ) ;
if ( ret ! = SD_SUCCESS ) {
echo_warn ( " ---------disconnectFromServer success! \n " ) ;
@@ -309,26 +302,19 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr)
{
LD_info = & ( ied_usr - > LD_info [ cpuno ] ) ; //遍历监测点
//监测点日志的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
if ( LD_info - > cpuno = = 0 ) {
// 仅在还没达到5次上限时打印
if ( ! LD_info - > has_logged_regist ) {
LD_info - > registcount + + ;
if ( LD_info - > registcount < = 5 ) {
DIY_ERRORLOG_CODE ( full_key_m_c , LOG_CODE_REPORT , " 【ERROR】监测点:%s - id:%s报告触发失败,监测点逻辑标识号为0,请检查装置对应的台账信息是否正确 " , LD_info - > name , LD_info - > mp_id ) ;
DIY_ERRORLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_REPORT , " 【ERROR】监测点:%s - id:%s报告触发失败,监测点逻辑标识号为0,请检查装置对应的台账信息是否正确 " , LD_info - > name , LD_info - > mp_id ) ;
}
// 到5次就不再打印, 并标记
if ( LD_info - > registcount > 5 ) {
LD_info - > has_logged_regist = true ;
DIY_WARNLOG_CODE ( full_key_m_c , LOG_CODE_REPORT , " 【WARN】监测点:%s - id:%s监测点逻辑标识号错误日志已达本次记录上限, 不再输出, 请检查装置对应的台账信息是否正确 " ,
DIY_WARNLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_REPORT , " 【WARN】监测点:%s - id:%s监测点逻辑标识号错误日志已达本次记录上限, 不再输出, 请检查装置对应的台账信息是否正确 " ,
LD_info - > name , LD_info - > mp_id ) ;
}
}
@@ -342,7 +328,7 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr)
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);
//DIY_DEBUGLOG_CODE(LD_info->mp_id,2,LOG_CODE_REPORT ,"【DEBUG】监测点:%s - id:%s不注册报告", LD_info->name,LD_info->mp_id);
continue ;
}
@@ -358,7 +344,7 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr)
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 ) ;
DIY_INFOLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_REPORT , " 【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分钟
@@ -386,14 +372,14 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr)
LD_info - > registcount + + ;
if ( LD_info - > registcount < = 5 ) {
DIY_WARNLOG_CODE ( full_key_m_c , LOG_CODE_REPORT , " 【WARN】监测点:%s - id:%s注册报告失败,报告名:%s " ,
DIY_WARNLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_REPORT , " 【WARN】监测点:%s - id:%s注册报告失败,报告名:%s " ,
LD_info - > name , LD_info - > mp_id , rpt_inst_name ) ;
}
// 到5次就不再打印, 并标记
if ( LD_info - > registcount > 5 ) {
LD_info - > has_logged_regist = true ;
DIY_WARNLOG_CODE ( full_key_m_c , LOG_CODE_REPORT , " 【WARN】监测点:%s - id:%s注册报告失败日志已达本次注册上限, 不再输出, 请检查装置icd和映射文件是否匹配或者装置存在过多连接 " ,
DIY_WARNLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_REPORT , " 【WARN】监测点:%s - id:%s注册报告失败日志已达本次注册上限, 不再输出, 请检查装置icd和映射文件是否匹配或者装置存在过多连接 " ,
LD_info - > name , LD_info - > mp_id ) ;
}
}
@@ -416,7 +402,7 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr)
//mq日志
LD_info - > has_logged_regist = FALSE ;
LD_info - > registcount = 0 ;
DIY_WARNLOG_CODE ( full_key_m_c , LOG_CODE_REPORT , " 【WARN】监测点:%s - id:%s注册报告成功,报告名:%s " , LD_info - > name , LD_info - > mp_id , rpt_inst_name ) ;
DIY_WARNLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_REPORT , " 【WARN】监测点:%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 ;
@@ -424,7 +410,7 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr)
}
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 ) ;
DIY_INFOLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_REPORT , " 【NORMAL】监测点:%s - id:%s注册报告结束,报告名:%s " , LD_info - > name , LD_info - > mp_id , rpt_inst_name ) ;
}
}
else { //rpt_registered ==TRUE
@@ -433,7 +419,7 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr)
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 ) ;
DIY_INFOLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_REPORT , " 【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 ) ;
@@ -444,7 +430,7 @@ 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_id ) ;
//mq日志
DIY_WARNLOG_CODE ( full_key_m_c , LOG_CODE_REPORT , " 【WARN】监测点:%s - id:%s注销报告失败,报告名:%s " , LD_info - > name , LD_info - > mp_id , rpt_inst_name ) ;
DIY_WARNLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_REPORT , " 【WARN】监测点:%s - id:%s注销报告失败,报告名:%s " , LD_info - > name , LD_info - > mp_id , rpt_inst_name ) ;
}
else {
@@ -453,11 +439,11 @@ void ChannelCheckIECReports(chnl_usr_t *chnl_usr)
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 ) ;
DIY_INFOLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_REPORT , " 【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 ) ;
DIY_INFOLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_REPORT , " 【NORMAL】监测点:%s - id:%s注销报告结束,报告名:%s " , LD_info - > name , LD_info - > mp_id , rpt_inst_name ) ;
}
}
@@ -510,13 +496,6 @@ void ChannelCheckIECLogs(chnl_usr_t *chnl_usr)
for ( cpuno = 0 ; cpuno < ied - > cpucount ; cpuno + + ) {
LD_info = & ( ied_usr - > LD_info [ cpuno ] ) ;
//监测点日志的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
//日志控制块缺失
if ( LD_info - > logcount < = 0 ) {
// 仅在还没达到5次上限时打印
@@ -524,13 +503,13 @@ void ChannelCheckIECLogs(chnl_usr_t *chnl_usr)
LD_info - > registcount + + ;
if ( LD_info - > registcount < = 5 ) {
DIY_ERRORLOG_CODE ( full_key_m_c , LOG_CODE_RECALL , " 【ERROR】监测点:%s - id:%s补招数据失败,监测点缺少日志控制块,请检查装置对应的装置类型是否有配对的icd模型 " , LD_info - > name , LD_info - > mp_id ) ;
DIY_ERRORLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_RECALL , " 【ERROR】监测点:%s - id:%s补招数据失败,监测点缺少日志控制块,请检查装置对应的装置类型是否有配对的icd模型 " , LD_info - > name , LD_info - > mp_id ) ;
}
// 到5次就不再打印, 并标记
if ( LD_info - > registcount > 5 ) {
LD_info - > has_logged_regist = true ;
DIY_WARNLOG_CODE ( full_key_m_c , LOG_CODE_RECALL , " 【WARN】监测点:%s - id:%s缺少日志控制块日志已达本次记录上限, 不再输出, 请检查装置对应的装置类型是否有配对的icd模型 " ,
DIY_WARNLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_RECALL , " 【WARN】监测点:%s - id:%s缺少日志控制块日志已达本次记录上限, 不再输出, 请检查装置对应的装置类型是否有配对的icd模型 " ,
LD_info - > name , LD_info - > mp_id ) ;
}
}
@@ -561,11 +540,11 @@ void ChannelCheckIECLogs(chnl_usr_t *chnl_usr)
if ( strcmp ( cfg1 . ValueOfTimeUnit , " utc " ) = = 0 ) { //装置时间是utc还是北京
utc_or_beijing = 28800 ; //秒
DIY_WARNLOG_CODE ( full_key_m_c , 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 ( full_key_m_c , 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 ) ;
}
//////////////////////////////////////////////////////////////
@@ -609,7 +588,7 @@ void ChannelCheckIECLogs(chnl_usr_t *chnl_usr)
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);
//DIY_WARNLOG_CODE(LD_info->mp_id,2,LOG_CODE_RECALL ,"【WARN】监测点:%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 ) ;
@@ -618,7 +597,7 @@ void ChannelCheckIECLogs(chnl_usr_t *chnl_usr)
LD_info - > ied - > id , LD_info - > cpuno , LD_info - > LD_name , loginfo - > logName , chnl_usr - > ip_str , chnl_usr - > chnl_id ) ;
//mq日志
DIY_ERRORLOG_CODE ( full_key_m_c , LOG_CODE_RECALL , " 【ERROR】监测点:%s - id:%s补招数据失败 - 失败时间点:%lld 至 %lld " , LD_info - > name , LD_info - > mp_id , loginfo - > start_time , loginfo - > end_time ) ;
DIY_ERRORLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_RECALL , " 【ERROR】监测点:%s - id:%s补招数据失败 - 失败时间点:%lld 至 %lld " , LD_info - > name , LD_info - > mp_id , loginfo - > start_time , loginfo - > end_time ) ;
failed_count + + ;
}
@@ -671,7 +650,7 @@ void ChannelCheckIECLogs(chnl_usr_t *chnl_usr)
// ===== [新增结束] =====
DIY_WARNLOG_CODE ( full_key_m_c , LOG_CODE_RECALL , " 【WARN】监测点:%s - id:%s结束补招数据 " , LD_info - > name , LD_info - > mp_id ) ;
DIY_WARNLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_RECALL , " 【WARN】监测点:%s - id:%s结束补招数据 " , LD_info - > name , LD_info - > mp_id ) ;
//}
}
@@ -1119,9 +1098,9 @@ void process_ledger_update(trigger_update_xml_t *ledger_update_xml)
//关闭这个终端的所有连接//////////////////////////////////////////////////////////////////////
for ( chnl_no = 0 ; chnl_no < ied - > chncount ; chnl_no + + ) {
chnl_usr = ( chnl_usr_t * ) ied - > channel [ chnl_no ] . connect ;
if ( chnl_usr - > m_state ! = CHANNEL_CONNECTED) { //跳过未连接的通道
/*if (chnl_usr->m_state!= CHANNEL_CONNECTED){ //跳过未连接的通道
continue;
}
}*/ //20260416任何状态都关闭连接
closeChannel ( chnl_usr ) ; //关闭更新台账后,任务会自动连接
}
@@ -1232,9 +1211,9 @@ void process_ledger_update(trigger_update_xml_t *ledger_update_xml)
//关闭这个终端的所有连接//////////////////////////////////////////////////////////////////////
for ( chnl_no = 0 ; chnl_no < ied - > chncount ; chnl_no + + ) {
chnl_usr = ( chnl_usr_t * ) ied - > channel [ chnl_no ] . connect ;
if ( chnl_usr - > m_state ! = CHANNEL_CONNECTED) { //跳过没连接的通道,一般一个终端只有一个
/*if (chnl_usr->m_state!= CHANNEL_CONNECTED){ //跳过没连接的通道,一般一个终端只有一个
continue;
}
}*/ //20260416任何状态都关闭连接
closeChannel ( chnl_usr ) ; //关闭更新台账后, 如果是删除则不会再连接, 关闭连接时这个ied的报告会被清除, 报告控制会被注销
}
@@ -1425,7 +1404,7 @@ void check_ledger_update()//lnk20250113
}
else {
printf ( " only process recall config, skip ledger update \n " ) ;
DIY_WARNLOG_CODE ( " process " , LOG_CODE_SPACE_ALARM , " 【WARN】当前配置为仅日志模式,统计数据进程跳过台账更新 " ) ;
DIY_WARNLOG_CODE ( " process " , 0 , LOG_CODE_SPACE_ALARM , " 【WARN】当前配置为仅日志模式,统计数据进程跳过台账更新 " ) ;
}
}
@@ -1481,13 +1460,13 @@ void check_disk_quota()
//printf("Current user disk free size: %dMB ,total size: %dMB \n",freeSizeMB,totalSizeMB);
if ( freeSizeMB < g_min_free_size ) {
echo_warn2 ( " Current user disk free size: %dMB < %dMB, please check! \n " , freeSizeMB , g_min_free_size ) ;
DIY_WARNLOG_CODE ( " process " , LOG_CODE_SPACE_ALARM , " 【WARN】前置磁盘检测: 当前磁盘的可用空间为%dMB,小于最小可用空间%dMB,请检查磁盘 " , freeSizeMB , g_min_free_size ) ;
DIY_WARNLOG_CODE ( " process " , 0 , LOG_CODE_SPACE_ALARM , " 【WARN】前置磁盘检测: 当前磁盘的可用空间为%dMB,小于最小可用空间%dMB,请检查磁盘 " , freeSizeMB , g_min_free_size ) ;
}
if ( ( freeSizeMB / ( totalSizeMB / 100 + 1 ) ) < 10 ) {
echo_warn2 ( " Current user disk free size percent < 10%%, free size: %dMB ,total size: %dMB ,please check! \n " ,
freeSizeMB , totalSizeMB ) ;
DIY_WARNLOG_CODE ( " process " , LOG_CODE_SPACE_ALARM , " 【WARN】前置磁盘检测: 当前磁盘的可用空间的百分比小于10%%,可用空间为%dMB,总空间为%dMB,请检查磁盘 " , freeSizeMB , totalSizeMB ) ;
DIY_WARNLOG_CODE ( " process " , 0 , LOG_CODE_SPACE_ALARM , " 【WARN】前置磁盘检测: 当前磁盘的可用空间的百分比小于10%%,可用空间为%dMB,总空间为%dMB,请检查磁盘 " , freeSizeMB , totalSizeMB ) ;
}
}
@@ -1609,13 +1588,6 @@ void CheckNextNotConnectedChannel()
return ;
}
//终端日志的key,lnk20250526
char full_key_t_c [ 256 ] ; // 分配足够空间
char full_key_t_d [ 256 ] ; // 分配足够空间
snprintf ( full_key_t_c , sizeof ( full_key_t_c ) , " terminal.%s.COM " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id ) ;
snprintf ( full_key_t_d , sizeof ( full_key_t_d ) , " terminal.%s.DATA " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id ) ;
//终端日志的key,lnk20250526
//10-11-01 22:03 beijing
if ( ( ( chnl_total_no + 1 ) = = g_pt61850app - > chnl_counts ) | | ( g_onlyIP [ 0 ] ! = 0 ) ) {
if ( g_pt61850app - > initNum < 255 )
@@ -1641,7 +1613,7 @@ void CheckNextNotConnectedChannel()
//mq日志
( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > lastconnectstat = true ;
( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > has_logged_disconnect = false ;
DIY_WARNLOG_CODE ( full_key_t_c , LOG_CODE_COMM , " 【WARN】终端%s - ip端口:%s:%d连接成功 " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , chnl_usr - > ip_str , chnl_usr - > chnl - > port ) ;
DIY_WARNLOG_CODE ( ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , 1 , LOG_CODE_COMM , " 【WARN】终端%s - ip端口:%s:%d连接成功 " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , chnl_usr - > ip_str , chnl_usr - > chnl - > port ) ;
mvl_free_req_ctrl ( chnl_usr - > m_reqCtrl ) ;
chnl_usr - > m_reqCtrl = NULL ;
@@ -1688,11 +1660,11 @@ void CheckNextNotConnectedChannel()
if ( true = = ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > lastconnectstat ) {
( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > lastconnectstat = false ;
( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > has_logged_disconnect = true ;
DIY_WARNLOG_CODE ( full_key_t_c , LOG_CODE_COMM , " 【WARN】终端%s - ip/端口:%s:%d,从开始连接到目前已经%i秒,连接失败,断开连接! " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , chnl_usr - > ip_str , chnl_usr - > chnl - > port , secsSince ) ;
DIY_WARNLOG_CODE ( ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , 1 , LOG_CODE_COMM , " 【WARN】终端%s - ip/端口:%s:%d,从开始连接到目前已经%i秒,连接失败,断开连接! " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , chnl_usr - > ip_str , chnl_usr - > chnl - > port , secsSince ) ;
}
else if ( false = = ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > lastconnectstat & & false = = ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > has_logged_disconnect ) {
( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > has_logged_disconnect = true ;
DIY_WARNLOG_CODE ( full_key_t_c , LOG_CODE_COMM , " 【WARN】终端%s - ip/端口:%s:%d,从开始连接到目前已经%i秒,连接失败,断开连接! " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , chnl_usr - > ip_str , chnl_usr - > chnl - > port , secsSince ) ;
DIY_WARNLOG_CODE ( ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , 1 , LOG_CODE_COMM , " 【WARN】终端%s - ip/端口:%s:%d,从开始连接到目前已经%i秒,连接失败,断开连接! " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , chnl_usr - > ip_str , chnl_usr - > chnl - > port , secsSince ) ;
}
mvl_free_req_ctrl ( chnl_usr - > m_reqCtrl ) ;
@@ -1723,11 +1695,11 @@ void CheckNextNotConnectedChannel()
if ( true = = ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > lastconnectstat ) {
( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > lastconnectstat = false ;
( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > has_logged_disconnect = true ;
DIY_WARNLOG_CODE ( full_key_t_c , LOG_CODE_COMM , " 【WARN】终端%s - ip端口:%s:%d,从开始连接到目前已经300秒,未能获取连接响应,断开连接! " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , chnl_usr - > ip_str , chnl_usr - > chnl - > port ) ;
DIY_WARNLOG_CODE ( ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , 1 , LOG_CODE_COMM , " 【WARN】终端%s - ip端口:%s:%d,从开始连接到目前已经300秒,未能获取连接响应,断开连接! " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , chnl_usr - > ip_str , chnl_usr - > chnl - > port ) ;
}
else if ( false = = ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > lastconnectstat & & false = = ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > has_logged_disconnect ) {
( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > has_logged_disconnect = true ;
DIY_WARNLOG_CODE ( full_key_t_c , LOG_CODE_COMM , " 【WARN】终端%s - ip端口:%s:%d,从开始连接到目前已经300秒,未能获取连接响应,断开连接! " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , chnl_usr - > ip_str , chnl_usr - > chnl - > port ) ;
DIY_WARNLOG_CODE ( ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , 1 , LOG_CODE_COMM , " 【WARN】终端%s - ip端口:%s:%d,从开始连接到目前已经300秒,未能获取连接响应,断开连接! " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , chnl_usr - > ip_str , chnl_usr - > chnl - > port ) ;
}
@@ -1767,7 +1739,7 @@ void CheckNextNotConnectedChannel()
if ( chnl_usr - > chnl - > ied - > cpucount ! = NULL & & chnl_usr - > chnl - > ied - > cpucount > 0 & & ied_usr - > dev_flag = = ENABLE ) { //2023-09-26 czy 如果line count<0 不需要连接//lnk20250121如果终端无效则不连接
//mq日志
//DIY_WARNLOG(full_key_t_c ,"【WARN】重新连接终端%s - ip端口:%s:%d", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,chnl_usr->ip_str,chnl_usr->chnl->port);
//DIY_WARNLOG_CODE(((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,1,LOG_CODE_COMM ,"【WARN】重新连接终端%s - ip端口:%s:%d", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,chnl_usr->ip_str,chnl_usr->chnl->port);
ret = mms_connectToServer ( ied_usr - > dev_key , ied_usr - > dev_series , serverARName , & ( chnl_usr - > net_info ) , & ( chnl_usr - > m_reqCtrl ) ) ;
@@ -1779,7 +1751,7 @@ void CheckNextNotConnectedChannel()
chnl_usr - > m_StartConnectingTime = sGetMsTime ( ) ;
//mq日志
//DIY_WARNLOG(full_key_t_c ,"【WARN】正在重新连接终端%s - ip端口:%s:%d - 识别码/秘钥:%s/%s", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,chnl_usr->ip_str,chnl_usr->chnl->port,((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->dev_series,((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->dev_key);
//DIY_WARNLOG_CODE(((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,1,LOG_CODE_COMM ,"【WARN】正在重新连接终端%s - ip端口:%s:%d - 识别码/秘钥:%s/%s", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,chnl_usr->ip_str,chnl_usr->chnl->port,((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->dev_series,((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->dev_key);
}
@@ -1791,7 +1763,7 @@ void CheckNextNotConnectedChannel()
echo_warn3 ( " FAILED: mms_connectToServer IP %s:%d ,NetInfo= %x \n " , chnl_usr - > ip_str , chnl_usr - > chnl - > port , chnl_usr - > net_info ) ;
//mq日志
//DIY_WARNLOG(full_key_t_c ,"【WARN】重新连接终端%s - ip端口:%s:%d 失败!", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,chnl_usr->ip_str,chnl_usr->chnl->port);
//DIY_WARNLOG_CODE(((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,1,LOG_CODE_COMM ,"【WARN】重新连接终端%s - ip端口:%s:%d 失败!", ((ied_usr_t*)(chnl_usr->chnl->ied->usr_ext))->terminal_id,chnl_usr->ip_str,chnl_usr->chnl->port);
}
}
@@ -1822,7 +1794,7 @@ void CheckNextNotConnectedChannel()
chnl_usr - > chnl - > status = STATUS_BREAKOFF ;
//mq日志
DIY_WARNLOG_CODE ( full_key_t_c , LOG_CODE_COMM , " 【WARN】终端%s - ip端口:%s:%d 断连完成,关闭连接通道 " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , chnl_usr - > ip_str , chnl_usr - > chnl - > port ) ;
DIY_WARNLOG_CODE ( ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , 1 , LOG_CODE_COMM , " 【WARN】终端%s - ip端口:%s:%d 断连完成,关闭连接通道 " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , chnl_usr - > ip_str , chnl_usr - > chnl - > port ) ;
}
else
@@ -1852,7 +1824,7 @@ void CheckNextNotConnectedChannel()
chnl_usr - > chnl - > status = STATUS_BREAKOFF ;
//mq日志
DIY_WARNLOG_CODE ( full_key_t_c , LOG_CODE_COMM , " 【WARN】终端%s - ip端口:%s:%d 断连未完成,但是已经超时180秒,关闭连接通道 " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , chnl_usr - > ip_str , chnl_usr - > chnl - > port ) ;
DIY_WARNLOG_CODE ( ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , 1 , LOG_CODE_COMM , " 【WARN】终端%s - ip端口:%s:%d 断连未完成,但是已经超时180秒,关闭连接通道 " , ( ( ied_usr_t * ) ( chnl_usr - > chnl - > ied - > usr_ext ) ) - > terminal_id , chnl_usr - > ip_str , chnl_usr - > chnl - > port ) ;
}
}
@@ -2004,13 +1976,6 @@ 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 ;
@@ -2022,7 +1987,7 @@ apr_status_t call_cn_wavelist(LD_info_t *LD_info )
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 ) ;
DIY_INFOLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_COMTRADE_FILE , " 【NORMAL】监测点:%s - id:%s开始召唤录波文件 " , LD_info - > name , LD_info - > mp_id ) ;
ret = SD_FAILURE ;
filenum = 0 ;
@@ -2044,14 +2009,14 @@ apr_status_t call_cn_wavelist(LD_info_t *LD_info )
int ret2 , ret3 ;
//mq日志
DIY_INFOLOG( full_key_m_c , " 【NORMAL】监测点:%s - id:%s获取录波文件列表成功,开始匹配录波文件 " , LD_info - > name , LD_info - > mp_id ) ;
DIY_INFOLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_COMTRADE_FILE , " 【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 ) {
//mq日志
//DIY_WARNLOG_CODE(full_key_m_c ,LOG_CODE_COMTRADE_FILE,"【WARN】监测点:%s - id:%s前置记录的录波事件上传的录波号段%d与从装置获取的录波文件列表匹配失败,装置没有对应的号段的录波文件,清除该记录", LD_info->name,LD_info->mp_id,LD_info->FltNum[i]);
//DIY_WARNLOG_CODE(LD_info->mp_id,2 ,LOG_CODE_COMTRADE_FILE,"【WARN】监测点:%s - id:%s前置记录的录波事件上传的录波号段%d与从装置获取的录波文件列表匹配失败,装置没有对应的号段的录波文件,清除该记录", LD_info->name,LD_info->mp_id,LD_info->FltNum[i]);
//lnk20250819装置没有对应的文件时清除录波号段
printf ( " 监测点:%s - id:%s前置记录的录波事件上传的录波号段%d与从装置获取的录波文件列表匹配失败,装置没有对应的号段的录波文件,清除该记录 " , LD_info - > name , LD_info - > mp_id , LD_info - > FltNum [ i ] ) ;
LD_info - > FltNum [ i ] = - 1 ;
@@ -2067,15 +2032,35 @@ 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从终端获取录波文件成功 " , LD_info - > name , LD_info - > mp_id ) ;
DIY_INFOLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_COMTRADE_FILE , " 【NORMAL】监测点:%s - id:%s从终端获取录波文件成功 " , LD_info - > name , LD_info - > mp_id ) ;
QVVR_t * qvvr ; //暂态事件
long long start_tm , trig_tm , end_tm ;
long long start_tm , trig_tm , end_tm ; //北京时间
ret2 = extract_timestamp_from_cfg_file ( filenames [ cfg_idx ] , & start_tm , & trig_tm ) ; //提取文件的开始时间和触发时间
//添加录波文件时间戳校准20260409
{
XmlConfigC cfg ;
long long utc_or_beijing = 0 ;
if ( get_xml_config_by_dev_type ( ied_usr - > dev_type , & cfg ) ) {
if ( strcmp ( cfg . WaveTimeFlag , " utc " ) = = 0 ) { //装置时间是utc还是北京
utc_or_beijing = 28800000 ; //八小时相差毫秒数
}
else {
utc_or_beijing = 0 ;
}
trig_tm = trig_tm + utc_or_beijing ; //如果是utc时间则转换为北京时间
start_tm = start_tm + utc_or_beijing ; //接口上送没用到
}
else {
printf ( " 读取失败,未找到 dev_type \n " ) ;
}
}
printf ( " >>>>>>>> extract_timestamp_from_cfg_file end \n " ) ;
if ( ret2 = = APR_SUCCESS ) {
DIY_INFOLOG( full_key_m_c , " 【NORMAL】监测点:%s - id:%s提取录波文件时间成功 " , LD_info - > name , LD_info - > mp_id ) ;
DIY_INFOLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_COMTRADE_FILE , " 【NORMAL】监测点:%s - id:%s提取录波文件时间成功 " , LD_info - > name , LD_info - > mp_id ) ;
//to find the paired qvvr by the time of trig_tm
printf ( " >>>>>>>> extract_timestamp_from_cfg_file success \n " ) ;
qvvr = find_qvvr_by_trig_tm ( LD_info , trig_tm ) ; //根据文件的触发时间查找检测点记录的匹配上的暂态事件
@@ -2095,7 +2080,7 @@ apr_status_t call_cn_wavelist(LD_info_t *LD_info )
char loc_file_fullname_cfg [ 256 ] ; //本地文件名
memset ( loc_file_fullname_cfg , 0 , sizeof ( loc_file_fullname_cfg ) ) ;
apr_snprintf ( loc_file_fullname_cfg , sizeof ( loc_file_fullname_cfg ) , " /home/pq/ FeProject/comtrade/%s " , cfg_only_filename_ret ) ;
apr_snprintf ( loc_file_fullname_cfg , sizeof ( loc_file_fullname_cfg ) , " /FeProject/comtrade/%s " , cfg_only_filename_ret ) ;
char oss_file_fullname_cfg [ 256 ] ; //远端文件名
memset ( oss_file_fullname_cfg , 0 , sizeof ( oss_file_fullname_cfg ) ) ;
apr_snprintf ( oss_file_fullname_cfg , sizeof ( oss_file_fullname_cfg ) , " comtrade/wave/%s/%s " , LD_info - > mp_id , cfg_only_filename_ret ) ;
@@ -2133,7 +2118,7 @@ apr_status_t call_cn_wavelist(LD_info_t *LD_info )
char loc_file_fullname_dat [ 256 ] ;
memset ( loc_file_fullname_dat , 0 , sizeof ( loc_file_fullname_dat ) ) ;
apr_snprintf ( loc_file_fullname_dat , sizeof ( loc_file_fullname_dat ) , " /home/pq/ FeProject/comtrade/%s " , dat_only_filename_ret ) ;
apr_snprintf ( loc_file_fullname_dat , sizeof ( loc_file_fullname_dat ) , " /FeProject/comtrade/%s " , dat_only_filename_ret ) ;
char oss_file_fullname_dat [ 256 ] ;
memset ( oss_file_fullname_dat , 0 , sizeof ( oss_file_fullname_dat ) ) ;
apr_snprintf ( oss_file_fullname_dat , sizeof ( oss_file_fullname_dat ) , " comtrade/wave/%s/%s " , LD_info - > mp_id , dat_only_filename_ret ) ;
@@ -2292,22 +2277,24 @@ 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 ) ) {
} else {
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 ) ;
}
}
else {
printf ( " 读取失败,未找到 dev_type \n " ) ;
}
if ( strcmp ( cfg . UnitOfTimeUnit , " 1 " ) = = 0 ) { //持续时间上送的是秒1还是毫秒0
DIY_ERRORLOG_CODE ( full_key_m_c , 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 ) ;
}
else {
DIY_ERRORLOG_CODE ( full_key_m_c , 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 ) ;
}
}
}
}
else {
DIY_ERRORLOG_CODE ( full_key_m_c , LOG_CODE_COMTRADE_FILE , " 【ERROR】监测点:%s - id:%s 下载录波文件%s和%s失败, 录波号段: %d " , LD_info - > name , LD_info - > mp_id , filenames [ cfg_idx ] , filenames [ dat_idx ] , LD_info - > FltNum [ i ] ) ;
DIY_ERRORLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_COMTRADE_FILE , " 【ERROR】监测点:%s - id:%s 下载录波文件%s和%s失败, 录波号段: %d " , LD_info - > name , LD_info - > mp_id , filenames [ cfg_idx ] , filenames [ dat_idx ] , LD_info - > FltNum [ i ] ) ;
}
}
@@ -2315,7 +2302,7 @@ apr_status_t call_cn_wavelist(LD_info_t *LD_info )
if ( ied & & chnl_usr ) {
echo_warn2 ( " mms_mvla_fdir Failed: IED [%d] %s \n " , ied - > id , chnl_usr - > ip_str ) ;
//mq日志
DIY_WARNLOG_CODE ( full_key_m_c , LOG_CODE_COMTRADE_FILE , " 【WARN】监测点:%s - id:%s召唤录波文件列表失败,放弃这个号段 " , LD_info - > name , LD_info - > mp_id ) ;
DIY_WARNLOG_CODE ( LD_info - > mp_id , 2 , LOG_CODE_COMTRADE_FILE , " 【WARN】监测点:%s - id:%s召唤录波文件列表失败,放弃这个号段 " , LD_info - > name , LD_info - > mp_id ) ;
LD_info - > FltNum [ i ] = - 1 ;
}