add log4cplus

This commit is contained in:
lnk
2025-05-09 16:53:07 +08:00
parent 92117de97e
commit 8a2e6ea537
109 changed files with 18240 additions and 4034 deletions

View File

@@ -1,6 +1,6 @@
/**
* @file iec103ttylink.h
* @brief IEC61850 <EFBFBD><EFBFBD>rdb <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ͷ<EFBFBD>ļ<EFBFBD>
* @brief IEC61850 rdb 交互处理 的头文件
*
* @version $Revision: 1.18 $
* @date $Date: 2018/12/29 12:30:29 $
@@ -16,23 +16,23 @@
#include "ied.h"
#include "node.h"
//lnk20250113<EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
//lnk20250113添加包含台账定义的头文件
#include "../json/save2json.h"
#include <stdbool.h>
//<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>Чʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ
//文件有效时间的取值
#define FROM_FILE_NAME (0)
#define FROM_SYSTEM (1)
//ͨ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>Ŀ¼
//通用文件存放的目录
#define GENERAL_PREFIX "0_0"
#define GENERAL_PATH "0_0\\19700101\\00"
//iec report <EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD>״̬
#define VALUE_REACHED (0x01) // ״̬<EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>
#define Q_REACHED (0x02) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>
#define T_REACHED (0x04) // ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>
#define REASON_REACHED (0x08) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>
//iec report 数据到达状态
#define VALUE_REACHED (0x01) // 状态或遥测值已收到
#define Q_REACHED (0x02) // 数据质量已收到
#define T_REACHED (0x04) // 时标已收到
#define REASON_REACHED (0x08) // 发送原因已收到
//CHANNELSTATE macro defines
#define CHANNEL_CONNECTING (0x01) //
@@ -45,19 +45,19 @@
#define RELAY_RUN (0x02) //
#define RELAY_CANCEL (0x03) //
#define MIN_INIT_NUM (10) //<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define NEXT_CONNECT_TIME (10000) //һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10*1000=10s
#define MIN_INIT_NUM (10) //链路层完全初始化最少次数,作为可以进行召唤录波文件的条件。
#define NEXT_CONNECT_TIME (10000) //一次链接失败后,下次链接时间间隔10*1000=10s
#define MAX_SAME_FCDNAME_OBJECTS (500) // for <EFBFBD><EFBFBD><EFBFBD><EFBFBD>PQװ<EFBFBD>ã<EFBFBD><EFBFBD>ij<EFBFBD>64 2016-5-10 //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>FCD<EFBFBD>ֳɶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> ACT<43><54><EFBFBD>󣬷ֳ<F3A3ACB7>general<EFBFBD><EFBFBD>phsa<EFBFBD><EFBFBD>b<EFBFBD><EFBFBD>c<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MAX_SAME_FCDNAME_OBJECTS (500) // for 灿能PQ装置改成64 2016-5-10 //最多一个FCD分成多个对象的个数 ,如一个 ACT对象分成generalphsabc等数个对象
/** ======================<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD>չͬ<EFBFBD>ڹ<EFBFBD><EFBFBD><EFBFBD>============================ */
/** ======================浙江渔都变顺控扩展同期功能============================ */
/*
16:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>բ
17:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>ں<EFBFBD>բ
18:<EFBFBD><EFBFBD>ͬ<EFBFBD>ں<EFBFBD>բ
19:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD>բ
CHECK_BY_SETTING CHECK_U <EFBFBD><EFBFBD>Ӧ˳<EFBFBD><EFBFBD>Ʊͬ<EFBFBD><EFBFBD>ң<EFBFBD>ص<EFBFBD><EFBFBD>ĵ<EFBFBD>һ<EFBFBD><EFBFBD>ң<EFBFBD>ص<EFBFBD>
CHECK_NOTHING CHECK_SYN <EFBFBD><EFBFBD>Ӧ˳<EFBFBD><EFBFBD>Ʊͬ<EFBFBD><EFBFBD>ң<EFBFBD>ص<EFBFBD><EFBFBD>ĵڶ<EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD>ص<EFBFBD>
16:按定值方式合闸
17:不检同期合闸
18:检同期合闸
19:检无压合闸
CHECK_BY_SETTING CHECK_U 对应顺控票同期遥控点的第一个遥控点
CHECK_NOTHING CHECK_SYN 对应顺控票同期遥控点的第二个遥控点
*/
#define CHECK_START_QU 16
#define CHECK_BY_SETTING 0
@@ -65,10 +65,10 @@ CHECK_NOTHING CHECK_SYN
#define CHECK_SYN 2
#define CHECK_U 3
#define DEFAULT_EDIT_FXDAREANO (0x80FE) /**< Ĭ<EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define FIXED_AREA_GRP_DOT2_EDIT_AREA (2) /**< <EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>-><3E><EFBFBD><E0BCAD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
#define DEFAULT_EDIT_FXDAREANO (0x80FE) /**< 默认编辑区定值区号 */
#define FIXED_AREA_GRP_DOT2_EDIT_AREA (2) /**< 定值区组->编辑定值区点 */
//lnk<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ܱ<EFBFBD>־20250121
//lnk添加使能标志20250121
#define ENABLE 1
#define UNUSED 0
@@ -87,7 +87,7 @@ typedef struct ied_info_t ied_info_t;
struct autorecall_t {
long long start;
long long end;
int need_steady; //lnk20241030<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̬<EFBFBD><EFBFBD>̬<EFBFBD><EFBFBD>־
int need_steady; //lnk20241030添加补招稳态暂态标志
int need_voltage;
};
//////////////////////////////////////////////////////////
@@ -96,7 +96,7 @@ struct ied_info_t{
unsigned char name[50][128];
char value[50][20];
};
//lnk20250113<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>˸<EFBFBD><EFBFBD>½ṹ///////////////////////////////
//lnk20250113添加台账更新结构///////////////////////////////
#define MAX_UPDATEA_NUM 10
typedef struct trigger_update_xml_t trigger_update_xml_t;
struct trigger_update_xml_t{
@@ -138,8 +138,8 @@ struct trigger_3s_xml_t{
typedef struct recall_t recall_t;
struct recall_t{
char* line_id;
long long start_time; //<EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>ʼʱ<EFBFBD><EFBFBD>
long long end_time; //<EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
long long start_time; //待召唤日志起始时间
long long end_time; //待召唤日志结束时间
int need_steady;
int need_voltage;
};
@@ -175,30 +175,30 @@ struct element_usr_t{
struct rptinfo_t{
char* rptID;
byte_t instanceNeedSuffix; //ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD>׺
byte_t instanceNeedSuffix; //实例名是否增加后缀
byte_t TrgOpt;
byte_t OptFlds [2]; /* 10 bit bitstring but only allow write of 9 bits*/
uint32_t IntgPd; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
int report_PQ_type; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>ͳ<EFBFBD>ơ<EFBFBD>ʵʱ<EFBFBD><EFBFBD>soe<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>
uint32_t IntgPd; //完整性上送时间(秒)
int report_PQ_type; //报告前置类型统计、实时、soe、事件类型等
LD_info_t* LD_info;
int rpt_registered; //<EFBFBD>Ƿ<EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
byte_t chnl_id; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>δע<EFBFBD><EFBFBD>´<EFBFBD><EFBFBD><EFBFBD>ͼע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int rpt_registered; //是否注册成功
byte_t chnl_id; //如果未注册,下次试图注册报告的通道号
//如果已注册,则是本次注册报告的通道号
RCB_INFO * m_rcb_info;
double m_LastDataTime; //<EFBFBD>ϴ<EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ʱ<EFBFBD><EFBFBD>
double m_LastGITime; //<EFBFBD>ϴ<EFBFBD>GI<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
double m_LastRegisterFailedTime; //<EFBFBD>ϴ<EFBFBD>ע<EFBFBD><EFBFBD>ʧ<EFBFBD>ܵ<EFBFBD>ʱ<EFBFBD><EFBFBD>
double m_LastUnRegisterFailedTime; //<EFBFBD>ϴ<EFBFBD>ȡ<EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>ʧ<EFBFBD>ܵ<EFBFBD>ʱ<EFBFBD><EFBFBD>
double m_LastDataTime; //上次收到数据的时间
double m_LastGITime; //上次GI的时间
double m_LastRegisterFailedTime; //上次注册失败的时间
double m_LastUnRegisterFailedTime; //上次取消注册失败的时间
byte_t m_EntryID[8];
int m_curRptSuffix;
int count; //<EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĴ<EFBFBD><EFBFBD><EFBFBD>
int rptNo;//CZY 2023-08-17 WW 2022-11-14<EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
int flickerflag;//CZY 2023-08-17 WW 2022-11-14<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
int count; //收到报告数据的次数
int rptNo;//CZY 2023-08-17 WW 2022-11-14增加编号用于匹配数据收集
int flickerflag;//CZY 2023-08-17 WW 2022-11-14增加闪变标志
int pstflag;//CZY 2023-08-17 WW 2022-11-14<EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
int pstflag;//CZY 2023-08-17 WW 2022-11-14增加短闪闪变标志
};
@@ -206,14 +206,14 @@ struct loginfo_t{
char* lcbName;
char* datasetName;
char logName[32];
uint32_t IntgPd; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
uint32_t IntgPd; //完整性上送时间(秒)
byte_t reasonCode;
byte_t TrgOpt;
LD_info_t* LD_info;
//LCB_INFO * m_lcb_info;
apr_time_t start_time; //<EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>ʼʱ<EFBFBD><EFBFBD>
apr_time_t end_time; //<EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
apr_time_t start_time; //待召唤日志起始时间
apr_time_t end_time; //待召唤日志结束时间
//double last_checktime;
int need_steady;
@@ -243,107 +243,107 @@ struct LD_info_t{
ied_t *ied;
byte_t cpuno;
char *LD_name;
apr_hash_t *ht_fcd; /**< FCD object hash<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> element */
apr_hash_t *ht_full_fcda; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD>FCDA object hash<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> element */
int rptcount; /**< report <EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
rptinfo_t **rptinfo; /**< rptinfo_t* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
int read_flag ; //CZY 2023-02-28 <EFBFBD>ж<EFBFBD><EFBFBD>Ƿ񽫼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>Ч
apr_hash_t *ht_fcd; /**< FCD object hash索引 到 element */
apr_hash_t *ht_full_fcda; /**< 完整FCDA object hash索引 到 element */
int rptcount; /**< report 个数 */
rptinfo_t **rptinfo; /**< rptinfo_t* 数组 */
int read_flag ; //CZY 2023-02-28 判断是否将监测点是否有效
char mp_id[256];//CZY 2023-08-20 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8afaa
char terminal_code[256];//CZY 2023-08-20 <EFBFBD>ն˱<EFBFBD><EFBFBD><EFBFBD>
//int ld_ins;//CZY 2023-08-20 <EFBFBD>߼<EFBFBD><EFBFBD>豸ʵ<EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
char voltage_level[256];//CZY 2023-08-20 <EFBFBD><EFBFBD>ѹ<EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>30
char v_wiring_type[256];//CZY 2023-08-20 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD>߷<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>01-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>02-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long long time; //CZY 2023-08-20 ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>) ̨<>˸<EFBFBD><CBB8><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3AC><EFBFBD><EFBFBD>1691656669
int update_flag;//CZY 2023-08-20 ̨<EFBFBD>˸<EFBFBD><EFBFBD>±<EFBFBD>־ 0:keep 2:delete 4:update 8:add
char monitor_status[64]; //lnk20241031<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int rptRecvFlag;//CZY 2023-08-17 WW 2022-11-14<EFBFBD>жϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,rptRecvFlag=<3D><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int rptRecvCheckFlag;//CZY 2023-08-17 WW 2022-11-14<EFBFBD>жϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ÿ<><C3BF><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rptRecvFlagһ<67><D2BB><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
int rptPstRecvFlag;//CZY 2023-08-17 WW 2022-11-14<EFBFBD>жϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,rptRecvFlag=<3D><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int rptPstRecvCheckFlag;//CZY 2023-08-17 WW 2022-11-14<EFBFBD>жϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ÿ<><C3BF><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rptRecvFlagһ<67><D2BB><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
int iUnitOfTime;//CZY 2023-08-17 WW 2022<EFBFBD><EFBFBD>12<EFBFBD><EFBFBD>7<EFBFBD><EFBFBD>15:43:34 װ<><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䵥λ<E4B5A5>л<EFBFBD>(0-ms; 1-s)
int iStatOfTime;//CZY 2023-08-17 WW 2022<EFBFBD><EFBFBD>12<EFBFBD><EFBFBD>7<EFBFBD><EFBFBD>15:48:33 ͳ<><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 0-<2D><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 1-UTCʱ<EFBFBD><EFBFBD>
int iJournalTime;//CZY 2023-08-17 WW 2022<EFBFBD><EFBFBD>12<EFBFBD><EFBFBD>7<EFBFBD><EFBFBD>15:52:32 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־ʱ<D6BE><CAB1>(0-UTCʱ<43><CAB1>(<28><>־<EFBFBD><D6BE>¼<EFBFBD><C2BC><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ΪUTCʱ<43><CAB1>); 1-<2D><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>(<28><>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ʱ<EFBFBD>䡢¼<E4A1A2><C2BC><EFBFBD>ļ<EFBFBD>UTCʱ<43><CAB1> ע<><D7A2><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>+8Сʱ<D0A1><CAB1>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־))
//<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
//<EFBFBD><EFBFBD>־
int logcount; /**< log <EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
loginfo_t **loginfo; /**< loginfo_t* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//<EFBFBD><EFBFBD>־
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char mp_id[256];//CZY 2023-08-20 监测点编码,例:8afaa
char terminal_code[256];//CZY 2023-08-20 终端编码
//int ld_ins;//CZY 2023-08-20 逻辑设备实例号,例:1
char voltage_level[256];//CZY 2023-08-20 电压等级,例:30
char v_wiring_type[256];//CZY 2023-08-20 监测点电压接线方式01-三相星型02-三相角型
long long time; //CZY 2023-08-20 时间戳(秒) 台账更新时间,例:1691656669
int update_flag;//CZY 2023-08-20 台账更新标志 0:keep 2:delete 4:update 8:add
char monitor_status[64]; //lnk20241031监测点状态
//报告
int rptRecvFlag;//CZY 2023-08-17 WW 2022-11-14判断报告是否收齐,rptRecvFlag=有效报告序号相加
int rptRecvCheckFlag;//CZY 2023-08-17 WW 2022-11-14判断报告是否收齐,每次收到报告相加与rptRecvFlag一起判断是否收完
int rptPstRecvFlag;//CZY 2023-08-17 WW 2022-11-14判断报告是否收齐,rptRecvFlag=有效报告序号相加
int rptPstRecvCheckFlag;//CZY 2023-08-17 WW 2022-11-14判断报告是否收齐,每次收到报告相加与rptRecvFlag一起判断是否收完
//报告
//不使用
int iUnitOfTime;//CZY 2023-08-17 WW 2022年12月7日15:43:34 装置上送事件持续时间单位切换(0-ms; 1-s)
int iStatOfTime;//CZY 2023-08-17 WW 2022年12月7日15:48:33 统计数据时间 0-北京时间 1-UTC时间
int iJournalTime;//CZY 2023-08-17 WW 2022年12月7日15:52:32 补招日志时间(0-UTC时间(日志、录波文件均为UTC时间); 1-北京时间(日志北京时间、录波文件UTC时间 注:仅四川地区+8小时读取补招日志))
//不使用
//日志
int logcount; /**< log 个数 */
loginfo_t **loginfo; /**< loginfo_t* 数组 */
//日志
//补招
int autorecallflag;
int autorecallcount;
autorecall_t **autorecall;
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
//补招
//不使用
uint32_t group; //add by rzx
//<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
//ʵʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//不使用
//实时数据
int line_id;
//ʵʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//¼<EFBFBD><EFBFBD>
//实时数据
//录波
int FltNum[256];
//¼<EFBFBD><EFBFBD>
//ʵʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//录波
//实时数据
int real_data;
int soe_data;
int limit;
int count;
//ʵʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
//实时数据
//不使用
int SubV_Index;
int Dev_Index;
int Sub_Index;
int GD_Index;
//<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
//不使用
//process QVVR
QVVR_t qvvr[QVVR_NUM];
int qvvr_idx;
//<EFBFBD><EFBFBD>̬
//暂态
//process RDRE
int RDRE_FltNum;
//¼<EFBFBD><EFBFBD>
//录波
};
struct ied_usr_t{
LD_info_t *LD_info; /**< LD<EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
int dev_idx; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
char dev_type[256]; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
char dev_key[256]; /**< <EFBFBD><EFBFBD><EFBFBD>Կ */
char dev_series[256]; /**< <EFBFBD>豸ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
int dev_flag; /**< <EFBFBD><EFBFBD><EFBFBD>־ */
LD_info_t *LD_info; /**< LD数组 */
int dev_idx; /**< 设备序号 */
char dev_type[256]; /**< 设备类型 */
char dev_key[256]; /**< 设备秘钥 */
char dev_series[256]; /**< 设备识别码 */
int dev_flag; /**< 设备标志 */
void *cookie;
double last_call_wavelist_time ; //<EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>ʱ<EFBFBD><EFBFBD>
double last_call_wavelist_time ; //上次召录波列表时间
char terminal_id[256];//CZY 2023-08-20 <EFBFBD>ն<EFBFBD>id<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8afaa9a15707483a0157262f8e78077d
char org_name[256];//CZY 2023-08-20 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˾
char maint_name[256];//CZY 2023-08-20 <EFBFBD><EFBFBD>ά<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˾
char station_name[256];//CZY 2023-08-20 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>220kV<EFBFBD><EFBFBD>̨ɽ<EFBFBD><EFBFBD>
char tmnl_factory[256];//CZY 2023-08-20 <EFBFBD>ն˳<EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͼ<EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>޹<EFBFBD>˾
long long time; //CZY 2023-08-20 ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>) ̨<>˸<EFBFBD><CBB8><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3AC><EFBFBD><EFBFBD>1691656669
char tmnl_status[256];//CZY 2023-08-30 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
char terminal_code[256];//CZY 2023-08-30 <EFBFBD>ն˱<EFBFBD><EFBFBD><EFBFBD>
int update_flag;//CZY 2023-08-20 ̨<EFBFBD>˸<EFBFBD><EFBFBD>±<EFBFBD>־ 0:keep 2:delete 4:update 8:add
char terminal_id[256];//CZY 2023-08-20 终端id8afaa9a15707483a0157262f8e78077d
char org_name[256];//CZY 2023-08-20 所属单位,例:南京供公司
char maint_name[256];//CZY 2023-08-20 运维单位,例:南京供公司
char station_name[256];//CZY 2023-08-20 所属变电站220kV五台山变
char tmnl_factory[256];//CZY 2023-08-20 终端厂家,例:南京自动化股份有限公司
long long time; //CZY 2023-08-20 时间戳(秒) 台账更新时间,例:1691656669
char tmnl_status[256];//CZY 2023-08-30 运行状态
char terminal_code[256];//CZY 2023-08-30 终端编码
int update_flag;//CZY 2023-08-20 台账更新标志 0:keep 2:delete 4:update 8:add
char processNo[64];//̨<EFBFBD>˽<EFBFBD><EFBFBD>̺<EFBFBD>
char processNo[64];//台账进程号
};
struct chnl_usr_t{
byte_t chnl_id;
char ip_str[20];
channel_t *chnl; /**< <EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>channel ָ<EFBFBD><EFBFBD> */
channel_t *chnl; /**< 对应的channel 指针 */
MVL_NET_INFO *net_info;
MVL_REQ_PEND *m_reqCtrl; //MVL_REQ_PEND
int m_state;
double m_StartConnectingTime; //<EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD>ʼ connect <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
double m_StartDisconnectingTime; //<EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD>ʼ disconnect <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
double m_ClosedMsTime; //<EFBFBD>ϴ<EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>ʱ<EFBFBD><EFBFBD>
double m_LastPosRespTime; //<EFBFBD>ϴο϶<EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
int m_NegRespTimes; // <EFBFBD>ۼƷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double m_StartConnectingTime; //这次开始 connect 的时间
double m_StartDisconnectingTime; //这次开始 disconnect 的时间
double m_ClosedMsTime; //上次通道关闭时间
double m_LastPosRespTime; //上次肯定响应的时间
int m_NegRespTimes; // 累计否定响应次数
};
@@ -354,32 +354,32 @@ struct pt61850app_t
// rdb_t *rdb;
node_t *node;
// driver_t *driver;
//byte_t IsMaster; //<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
//byte_t IsMaster; //当前的主备状态
////////////////////////////
uint32_t mmsOpTimeout; //mms<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵĽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<EFBFBD><EFBFBD>
//uint32_t relayTimeout; //ң<EFBFBD>صȴ<EFBFBD>ң<EFBFBD>ŷ<EFBFBD><EFBFBD>صij<EFBFBD>ʱʱ<EFBFBD><EFBFBD>
uint32_t giTime; //<EFBFBD>ܲ<EFBFBD>ѯʱ<EFBFBD><EFBFBD>
int rptSuffix[2][2]; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><EFBFBD><EFBFBD>׺
uint32_t mmsOpTimeout; //mms操作,读写变量等的交互超时时间
//uint32_t relayTimeout; //遥控等待遥信返回的超时时间
uint32_t giTime; //总查询时间
int rptSuffix[2][2]; //报告控制块后缀
//char ftp_srv_ip[16];
//char ftpsrv_path[64];
//char ftp_user[32];
//char ftp_password[32];
char accPath[65]; //װ<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD>
//char RcdMadeAddStr[65]; //¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD>ŵ<EFBFBD>ַ
//uint8_t change_file_name; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>޸<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
char accPath[65]; //装置录波文件路径
//char RcdMadeAddStr[65]; //录波动作遥信地址
//uint8_t change_file_name; //保存时,是否修改文件名
uint32_t chnl_counts;
chnl_usr_t **chnl_usr;
apr_pool_t *tmp_pool; // <EFBFBD><EFBFBD>ʱpool
//<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD>ó<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ٻ<EFBFBD><EFBFBD>ļ<EFBFBD>
apr_pool_t *tmp_pool; // 临时pool
//链路层完全初始化次数,作为可以进行召唤录波文件的条件。即确保所有装置初始化最少一次后才允许开始召唤文件
uint8_t initNum;
//<EFBFBD>ٻ<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>Ϊ0<EFBFBD><EFBFBD>ֻ<EFBFBD>ٻ<EFBFBD><EFBFBD><EFBFBD>ӦĿ¼<EFBFBD>µ<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>Ϊ1<EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><EFBFBD><EFBFBD>ӦĿ¼<EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ
//召唤文件类型为0则只召唤对应目录下的录波文件为1则召唤对应目录下的所有文件其余留待扩展
//uint8_t call_file_type;
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>Ч
uint8_t check_dgtVal;//0<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>
//数字量入库前是否检查值有效
uint8_t check_dgtVal;//0不判非0判
};
//Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//为无锡西径变调档添加
extern uint8_t set_mx_q;
#ifdef _OS_WIN32_
@@ -420,14 +420,14 @@ rptinfo_t* find_rptinfo_from_net_rpt_info_name(MVL_NET_INFO *net_info, RCB_INFO
void get_rpt_inst_name(rptinfo_t *rptinfo, char * rpt_inst_name );
/**
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>rdb<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> APR_SUCCESS
* @brief 初始化rdb库相关内容
* @return 如果创建成功,返回 APR_SUCCESS
*/
apr_status_t init_rdb();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> APR_SUCCESS
* @brief 启动规约处理相关线程
* @return 如果成功,返回 APR_SUCCESS
*/
apr_status_t run_protocol();
@@ -440,7 +440,7 @@ void CheckNextNotConnectedChannel();
//WW 2023-08-22
int HandleReceiveMessage(int socketClient, char buffer[256]);
int ExecuteWebCommand(LD_info_t *LD_info, int iType);
int SendMessageToWeb(int socketClient, int iErrorCode); //<EFBFBD><EFBFBD>Web Socket<EFBFBD>ͻ<EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
int SendMessageToWeb(int socketClient, int iErrorCode); //Web Socket客户端发送消息
//WW 2023-08-22 end
void CheckAllConnectedChannel() ;