/****************************************************************************** 版权所有 (C), 2013-2023, 科大智能电气有限公司 ****************************************************************************** 文 件 名 : lib60870_common.h 版 本 号 : V1.0 生成日期 : 2022年04月07日 最近修改 : 功能描述 : 101及104规约实现中的公共数据及外部服务接口模块 函数列表 : 修改历史 : 1.日 期 : 2022年04月07日 修改内容 : 创建文件 *******************************************************************************/ #ifndef SRC_INC_IEC60870_COMMON_H_ #define SRC_INC_IEC60870_COMMON_H_ #include "lib60870_inc.h" #include "md5.h" #ifdef __cplusplus extern "C" { #endif #define COMTRADE "COMTRADE" #define SOEPATH "HISTORY/SOE" #define COPATH "HISTORY/CO" #define EXVPATH "HISTORY/EXV" #define FIXPTPATH "HISTORY/FIXPT" #define FRZPATH "HISTORY/FRZ" #define FLOWREVPATH "HISTORY/FLOWREV" #define ULOGPATH "HISTORY/ULOG" #define FAULTPATH "HISTORY/FAULT" #define YC_TYPE_ME_NA 0 /*正常测量值*/ #define YC_TYPE_ME_NB 1 /*标度化值*/ #define YC_TYPE_ME_NC 2 /*浮点遥测*/ #define YX_TYPE_M_SP 0 /*单点遥信*/ #define YX_TYPE_M_DP 1 /*双点遥信*/ #define YK_TYPE_C_SC 0 /*单点遥控*/ #define YK_TYPE_C_DC 1 /*双点遥控*/ #define DD_TYPE_IT_NB 0 /*不带时标*/ #define DD_TYPE_IT_TC 1 /*不带时标*/ #define CONST_NUM_MSG 100 #define WAVE_MAX_TIME 360000 //6min堵塞时间 /** * \brief 协议类型,初始化时幅值 */ typedef enum { CS101_TYPE_S = 0, /*CS101 从*/ CS101_TYPE_M, /*CS101 主*/ CS104_TYPE_S, /*CS104 从*/ CS104_TYPE_M, /*CS104 主*/ } CS10x_Type; /** * \brief 协议类型,初始化时幅值 */ typedef enum { TSKID_ReSend = 0, /*重发标识*/ TSKID_Anomaly, /*异常帧任务标识*/ TSKID_RequestLink, /*101规约请求链路状态*/ TSKID_ResetLink, /*101规约复位链路*/ TSKID_MResponse, /*101规约链路状态响应*/ TSKID_StartLink, /*104规约启动链路*/ TSKID_StopLink, /*104规约断开链路*/ TSKID_UTest, /*104规约测试U帧*/ TSKID_Ack, /*101/104共用确认*/ TSKID_InitFinish, /*初始化完成*/ TSKID_YkProcess, TSKID_SendCOS, /*COS信息*/ TSKID_SendSOE, /*SOE*/ TSKID_SummonYx, /*总招遥信响应*/ TSKID_SummonYc, /*总招遥测响应*/ TSKID_SummonResponse, /*总招响应及总招下发共用*/ TSKID_DdSummon, /*总招电能量及响应*/ TSKID_DdData, /*电能量数据传输*/ TSKID_DdTimeData, /*电能量时标数据传输*/ TSKID_FaultSoe, /*故障事件*/ TSKID_TimeSyn, /*时钟同步*/ TSKID_YcDisturb, /*扰动数据*/ TSKID_ResetProcess, /*复位进程*/ TSKID_HeartBeat, /*心跳*/ TSKID_DataTest, /*长帧测试*/ TSKID_ChgConst, /*修改定值区*/ TSKID_ReadConst, /*读取定值区*/ TSKID_ParamPreread, /*参数读取*/ TSKID_ParamPrewrite, /* * TypeID=120-126方式 目前大部分地区不使用 */ TSKID_DirReqByNode, /*目录读取*/ TSKID_FileReady, /*文件就绪*/ TSKID_NodReady, /*节点就绪*/ TSKID_NodeData, /*节点数据响应*/ TSKID_NodeEnd, /*节点结束*/ TSKID_FileEnd, /*文件结束*/ /* * 细则中按照 210进行文件操作 */ TSKID_FilePro, TSKID_UpdateStart, /*启动升级*/ TSKID_UpdateExe, /*执行升级*/ TSKID_DirReqByFile, /*读目录任务*/ /* * 南网规约 */ TSKID_ObtainDelay, /*延时获得命令-南网规约*/ TSKID_ParamRead_NanWang, /*读参数命令-南网规约*/ TSKID_ParamReadResponse_NanWang,/*读参数回复命令-南网规约*/ TSKID_ParamPreset_NanWang, /*参数预置命令-南网规约*/ TSKID_ParamSolidify_NanWang, /*参数固化命令-南网规约*/ TSKID_ParamWrite_NanWang, /*参数预置/固化命令-南网规约(类型标识 55)*/ } CS10x_TSKID; typedef enum { FILE_ST_IDLE = 0, /*空闲*/ FILE_ST_RD_DIR, /*读取目录*/ FILE_ST_RD_DIR_RESPONE, /*响应目录读取*/ FILE_ST_RD_FILE_ACT, /*读文件激活*/ FILE_ST_RD_FILE_ACT_RESPONE, /*读文件激活确认*/ FILE_ST_RD_FILE_DATA, /*读文件数据响应*/ FILE_ST_RD_FILE_DATA_RESPONE, /*读文件数据传输确认*/ FILE_ST_WR_FILE_ACT, /*写文件激活*/ FILE_ST_WR_FILE_ACT_RESPONE, /*写文件激活确认*/ FILE_ST_WR_FILE_DATA, /*写文件*/ FILE_ST_WR_FILE_DATA_RESPONE, /*写文件响应*/ FILE_ST_WR_FILE_DATA_Wait, /*文件写等待*/ } IEC_FILE_ST; /** * \brief Message type IDs */ #define M_DP_NA 3 //不带时标的双点信息 #define M_SP_NA 1 //不带时标的单点信息 #define M_ST_NA 5 //步位置信息 #define M_BO_NA 7 //子站远动终端状态 #define M_ME_NA 9 //测量值 #define M_ME_NB 11 //标度化测量值 #define M_ME_NC 13 //测量值-短浮点数 #define M_IT_NA 15 //电能脉冲记数量 #define M_PS_NA 20 //具有状态变位检出的成组单点信息 #define M_ME_ND 21 //不带品质描述的测量值 #define M_SP_TB 30 //带长时标的单点信息 #define M_ST_TB 32 //带长时标的步位置信息 #define M_DP_TB 31 //带长时标的双点信息 #define M_BO_TB 33 //带长时标的32位位串 #define M_ME_TD 34 //带长时标的测量值 #define M_FT_NA 42 //故障事件信息 #define C_SC_NA 45 //单点遥控命令 #define C_DC_NA 46 //双点遥控命令 #define C_RC_NA 47 //升降命令 #define C_SE_NA 48 //设定命令 #define C_SP_NA 55 //参数预置-南网(类型标识55) #define M_EI_NA 70 //初始化结束 #define C_IC_NA 100 //召唤命令 #define C_CI_NA 101 //电能脉冲召唤命令 #define C_RD_NA 102 //读数据命令 #define C_CS_NA 103 //时钟同步命令 #define C_TS_NA 104 //测试命令 #define C_RP_NA 105 //复位进程命令 #define C_CD_NA 106 //延时获得命令-南网 #define C_RS_NA_NANWANG 108 //读参数命令-南网 #define P_ME_NC 112 //参数预置-南网 #define P_AC_NA 113 //参数固化-南网 #define C_TS_TA 107 //带时标的测试命令 #define M_FA_NA 142 //FA故障信息 #define C_FA_SIM 143 //FA 模拟 #define C_SR_NA 200 //切换定值区 #define C_RS_NA 202 //读参数和定值 #define C_RR_NA 201 //读定值区号 #define C_WS_NA 203 //写参数和定值 #define M_IT_NB 206 //不带时标的累计量-短浮点 #define M_IT_TC 207 //带时标的累计量-短浮点 #define F_FR_NA 210 //文件升级 #define F_SR_NA 211 //软件升级 #define ANOMALY 255 //扩展为异常帧ID /** * \brief Cause Of Transmission */ #define COT_PN 0x40 /*PN位 0-肯定确认 1-否认确认*/ #define COT_PERCYC 1 //周期/循环 #define COT_BACK 2 //背景扫描 #define COT_SPONT 3 //突发 #define COT_INIT 4 //初始化 #define COT_REQ 5 //请求或被请求 #define COT_ACT 6 //激活 #define COT_ACTCON 7 //激活确认 #define COT_DEACT 8 //停止激活 #define COT_DEACTCON 9 //停止激活确认 #define COT_ACTTERM 10 //激活结束 #define COT_RETREM 11 //远程命令引起的返送信息 #define COT_RETLOC 12 //当地命令引起的返送信息 #define COT_FILE 13 //文件传送 #define COT_INTROGEN 20 //响应总召唤 #define COT_INRO1 21 //响应第1组召唤 #define COT_INRO2 22 //响应第2组召唤 #define COT_INRO3 23 //响应第3组召唤 #define COT_INRO4 24 //响应第4组召唤 #define COT_INRO5 25 //响应第5组召唤 #define COT_INRO6 26 //响应第6组召唤 #define COT_INRO7 27 //响应第7组召唤 #define COT_INRO8 28 //响应第8组召唤 #define COT_INRO9 29 //响应第9组召唤 #define COT_INRO10 30 //响应第10组召唤 #define COT_INRO11 31 //响应第11组召唤 #define COT_INRO12 32 //响应第12组召唤 #define COT_INRO13 33 //响应第13组召唤 #define COT_INRO14 34 //响应第14组召唤 #define COT_INRO15 35 //响应第15组召唤 #define COT_INRO16 36 //响应第16组召唤 #define COT_REQCO1 38 //响应第1组计数量召唤 #define COT_REQCOGCN 37 //响应计数量总召唤 #define COT_REQCO2 39 //响应第2组计数量召唤 #define COT_REQCO3 40 //响应第3组计数量召唤 #define COT_REQCO4 41 //响应第4组计数量召唤 #define COT_E_SBSTA 48 //遥控执行软压板状态错误 #define COT_E_TIME 49 //遥控执行时间戳错误 #define COT_E_SIGN 50 //遥控执行数字签名认证错误 #define COT_E_TYPE 44 /**<未知的类型标识*/ #define COT_E_REASON 45 /**<未知的传送原因*/ #define COT_E_CADDR 46 /**<未知的ASDU公共地址*/ #define COT_E_IADDR 47 /**<未知的信息对象地址*/ #define QOI 20 //总召唤 召唤限定词 #define QCC 5 //总的请求电能量 #define QRP 1 //进程总复位 复位进程命令限定词 #define COI_0 0 //初始化原因 当地电源合上 #define COI_1 1 //初始化原因 当地手动复位 #define COI_2 2 //初始化原因 远方复位 #define FBP 0xAA55 //测试命令限定词 #define YKSELECT_1 0x81 //选择合 双点加1 #define YKSELECT_0 0x80 //选择分 双点加1 #define YKEXCUTE_1 0x01 //执行合 双点加1 #define YKEXCUTE_0 0x00 //执行分 双点加1 #define YKCANCEL_1 0x01 //撤销合 双点加1 #define YKCANCEL_0 0x00 //撤销分 双点加1 #define YKSTOP_1 0x01 //终止合 双点加1 #define YKSTOP_0 0x00 //终止分 双点加1 //#define YK_CLOSE 2 //遥控合 //#define YK_OPEN 1 //遥控分 #define FILE_TRANS 2 //文件传输附加数据包类型 2表示文件传输 #define PARAM_CONT_1 0x01 //参数固化后续状态位1 #define PARAM_CONT_0 0x00 //参数固化后续状态位0 #define PARAM_CR_1 0x40 //取消预置 #define PARAM_SE_1 0x80 //参数预置 #define PARAM_SE_0 0x00 //参数固化 #define PARAM_ST_NONE 0x00 //无任务 #define PARAM_ST_START 0x01 //任务开始 #define PARAM_ST_END 0x02 //任务开始 #define PARAM_ST_OK 0x03 //任务开始 #define PARAM_ST_TIMEOUT 0x10 //超时 #define TSK_PARM_NONE 0 //无任务标识 #define TSK_PARM_USACT 1 //U&S帧激活 101/104共用 #define TSK_PARM_USTCON 2 //U&S帧激活确认 #define CONTINUE 1 //信息体地址连续 #define DISCONTINUE 0 //信息体地址不连续 #define SHORT_TYPE 2 //待发送数据为短帧 #define LONG_TYPE 1 //待发送数据为长帧 #define RESEND_TYPE 3 //待发送数据为重发帧 #define WAVE_TYPE 4 //启动录波任务 #define SETUP_SET_SUMMON 0 //设置初始化总召任务 #define SETUP_WAIT_SUMMON 1 //等待初始化总召 #define SETUP_OK_SUMMON 2 //总召任务结束 #define SETUP_SET_SYN 3 //设置初始化对时 #define SETUP_WAIT_SYN 4 //等待初始化对时 #define SETUP_OK_SYN 5 //对时完成 #define WRITE_FILE_ERR_NONE 0 #define WRITE_FILE_ERR_OTHER 1 #define WRITE_FILE_ERR_CHECK 2 #define WRITE_FILE_ERR_LEN 3 #define WRITE_FILE_ERR_ID 4 #define WRITE_PARAM_YZ 1 #define WRITE_PARAM_YZCON 2 #define WRITE_PARAM_GH 3 #define WRITE_PARAM_GHCON 4 #define WRITE_PARAM_CA 5 #define WRITE_PARAM_CACON 6 #define WRITE_PARAM_NONE 0 // #define WRITE_FILE_ERR_LEN 3 // #define WRITE_FILE_ERR_ID 4 #define PARAM_READ 1 #define PARAM_WRITE 2 #define PARAM_IDLE 0 #define MASTER_TYPE 1 #define DEV_TYPE 0 //标志操作相关定义 #define MAX_FLAGNO 128 //每个模块最多的标志位数 #define MAX_FRAME_LEN 255 #define APCI_LEN 6 #define DATATYPE_YC 1 //遥测 #define DATATYPE_YX 2 //遥信 #define DATATYPE_Yk 3 //遥控 #define DATATYPE_YXT 4 //带时标遥信 #define CURPARAMAREA 0 /*当前定值区*/ #define MINPARAMAREA 1 /*最小定值区*/ #define MAXPARAMAREA 2 /*最大定值区*/ #define IECPARAMRD 0 /*读参数定值区*/ #define IECPARAMWT 1 /*写参数定值区*/ /** * \brief 任务标识 */ typedef struct { unsigned char ucFlag[ MAX_FLAGNO / 8 ]; /*任务数列*/ // unsigned int ucFlag[MAX_FLAGNO]; } VFLAGS; typedef struct { unsigned char byStartCode; unsigned char byAPDULen; unsigned char byControl1; unsigned char byControl2; unsigned char byControl3; unsigned char byControl4; unsigned char byASDU[MAX_FRAME_LEN - APCI_LEN]; } VIec104Frame; /** * @brief 101规约短帧格式 单字节地址 */ typedef struct { unsigned char ucStart; unsigned char ucControl; unsigned char ucAddr; unsigned char ucCS; unsigned char ucTail; } VFrame10_S; /** * @brief 101规约短帧格式 双字节地址 */ typedef struct { unsigned char ucStart; unsigned char ucControl; unsigned char ucAddr_L; unsigned char ucAddr_H; unsigned char ucCS; unsigned char ucTail; } VFrame10; /** * @brief 101规约长帧格式 */ typedef struct { unsigned char ucStart1; unsigned char ucLength1; unsigned char ucLength2; unsigned char ucStart2; unsigned char ucControl; unsigned char ucaData[MAX_FRAME_LEN - 5]; } VFrame68; /** * @brief 101规约帧格式 */ typedef union { VFrame10 stFrame10; VFrame10_S stFrame10_S; VFrame68 stFrame68; } VIec101Frame; /** * \brief 参数 */ typedef struct { unsigned char byTskId; //任务序号 unsigned char byTskSt; //任务状态 unsigned char byTskRe; //任务预留 unsigned int uiTskCot; unsigned short usTskTcn; } ParamTsk_st; /** * \brief Parameters for the CS101/CS104 application layer */ typedef struct CS10x_AppLayerParameters *pCS10x_AppLayerParameters; struct CS10x_AppLayerParameters { int iSzOfLinkAddr; /*链路地址长度 CS101*/ int iSzOfTypeId; /* 类型长度 size of the type id (default = 1 - don't change) */ int iSzOfVSQ; /* VSQ长度 don't change */ int iSzOfCOT; /* 传输原因长度 size of COT (1/2 - default = 2 -> COT includes OA) */ int iSzOfCA; /* 公共地址长度 size of common address (CA) of ASDU (1/2 - default = 2) */ int iSzOfIOA; /* 信息体地址长度 size of information object address (IOA) (1/2/3 - default = 3) */ int iLinkAddr; /*链路地址*/ int iPublicAddr; /*公共地址*/ int iMaxSzOfAsduLen; /* maximum size of the ASDU that is generated - the maximum maximum value is 249 for IEC 104 and 254 for IEC 101 */ }; /** * \brief Parameters for CS104 connections - APCI (application protocol control information) */ typedef struct CS104_APCIParameters *pCS104_APCIParameters; struct CS104_APCIParameters { int iK; int iW; int iT0; int iT1; int iT2; int iT3; }; /** * \brief 任务标识 */ typedef struct { unsigned short usTypeID; /*类型标识符*/ unsigned short usSQ; /*连续、离散标识*/ unsigned short usNum; /*信息对象个数*/ unsigned short usCot; /*传送原因*/ unsigned int uiAddr; /*公共地址*/ unsigned char *pucPayload; /*信息对象起始位置*/ unsigned short usPayloadSize; /*信息对象大小*/ unsigned short usCotH; /*传送原因高字节值*/ } ASDU_Element; /** * \brief 数据缓冲 */ struct VCommBuf { unsigned short usBufSize; /*缓冲区大小*/ unsigned short usReadPtr; /*读指针*/ unsigned short usWritePtr; /*写指针*/ int iFlag; /*控制码(主要用于发送)*/ unsigned char *pBuf; /*缓冲区*/ }; /** * \brief 104时间计数 */ typedef struct { bool bRun; unsigned short usInitVal; unsigned int uiCounter; } VIec104Timer; /** * \brief CP56Time */ typedef struct { unsigned char ucLMs; /*毫秒低位*/ unsigned char ucHMs; /*毫秒低位*/ unsigned char ucMin; /*分钟*/ unsigned char ucHour; /*小时*/ unsigned char ucWeek; /**< week: 0-不用,n-星期n */ unsigned char ucMonth; /*月*/ unsigned char ucYear; /*年*/ } __CP56Time2a; /** * \brief Yx信息 */ typedef struct { unsigned int uiInfoAddr; /*信息体地址*/ unsigned char ucStatus; /*状态信息*/ unsigned char ucStateType; // 单点双点 } Yx_Info; /** * \brief Yc信息 */ typedef struct { unsigned int uiInfoAddr; /*信息体地址*/ float fVal; /*遥测值*/ unsigned char ucQds; } Yc_Info; /** * \brief Yk信息 */ typedef struct { unsigned int uiInfoAddr; /*信息体地址*/ unsigned char ucStatus; /*状态信息*/ unsigned char ucStateType; // 单点遥控/双点遥控 unsigned char ucYkType; // 执行/选择 } Yk_Info; /** * \brief Dd信息 */ typedef struct { unsigned int uiInfoAddr; /*信息体地址*/ float fVal; /*遥测值*/ } Dd_Info; /** * \brief SOE 记录信息 */ typedef struct { unsigned int uiInfoAddr; /*信息体地址*/ unsigned char ucStatus; /*状态位*/ unsigned char ucStateType; // 单点双点 __CP56Time2a stCTime; /*时间*/ } SOE_Info; typedef struct { unsigned int uiInfoAddr; /*信息体地址*/ float fVal; /*遥测值*/ __CP56Time2a stCTime; /*时间*/ } TimeDd_Info; /** * \brief SOE队列信息 */ #define MAX_SOE_QUEUE_SIZE 256 /*SOE缓冲记录最大个数*/ typedef struct { unsigned short usReadPrt; /*确认SOE位置*/ unsigned short usWritePrt; /*未确认SOE位置*/ unsigned short usCosPrt; /*COS发送位置*/ unsigned short usSoePrt; /*SOE发送位置*/ unsigned short usaSeq[MAX_SOE_QUEUE_SIZE]; /*104I帧序列号 用于主站确认*/ SOE_Info staInfo[MAX_SOE_QUEUE_SIZE]; /*SOE事件信息*/ } SOE_Queue; /** * \brief 故障事件信息 */ #define MAX_FAULT_EVENT_SOE_SIZE 16 #define MAX_FAULT_EVENT_YC_SIZE 16 typedef struct { unsigned short usSoeNum; // YX数量 SOE_Info staSoe[MAX_FAULT_EVENT_SOE_SIZE]; /*SOE信息内容*/ unsigned short usYcNum; // YC数量 Yc_Info staYc[MAX_FAULT_EVENT_YC_SIZE]; /*YC信息内容*/ } FAULT_EVENT_Info; /** * \brief 故障事件队列信息 */ #define MAX_FAULT_EVENT_QUEUE_SIZE 20 /*故障事件队列大小*/ typedef struct { unsigned short usReadPrt; /*确认故障事件位置*/ unsigned short usWritePrt; /*未确认故障事件位置*/ unsigned short usSendPrt; /*未确认故障事件位置*/ FAULT_EVENT_Info staFault[MAX_FAULT_EVENT_QUEUE_SIZE]; /*故障事件信息*/ } FAULT_EVENT_Queue; /** * \brief 故障事件队列信息 */ #define MAX_YC_DISTURB_QUEUE_SIZE 200 /*扰动遥测队列大小*/ typedef struct { unsigned short usReadPrt; /*确认故障事件位置*/ unsigned short usWritePrt; /*未确认故障事件位置*/ unsigned short usSendPrt; /*未确认故障事件位置*/ Yc_Info staYc[MAX_YC_DISTURB_QUEUE_SIZE]; /*扰动遥测*/ } YC_DISTURB_Queue; /** * \brief 文件目录信息 */ #define TRANS_NULL -1 //无文件需要传输 #define TRANS_DIR 1 //传输目录 #define TRANS_FILE 2 //传输文件 //文件传输对象 typedef struct { unsigned char ucCallFlag; //召唤标志 unsigned char ucFileNameLen; //目录/文件名字长度 unsigned char ucFileName[64]; //目录/文件名 __CP56Time2a stStartTime; //查询起始时间 __CP56Time2a stEndTime; //查询终止时间 } FileObj_T; //召唤目录结构特点 typedef struct { unsigned char ucFileType; //0:目录, 1:文件 FileObj_T stFileObj; } TRANSFILE_OBJ_T; typedef struct { bool bAll; /*读文件时间条件使能*/ __CP56Time2a stStartTime; /*读取文件起始位置*/ __CP56Time2a stEndTime; /*文件大小*/ } tIEC_FILE_TIME; #define TRANS_TIMEOUT_MAX 60*1000 /*最大超时时间 ms*/ #define TRANS_SCH_GAP 10 /*任务调度执行频率 ms*/ #define FILE_NAME_SIZE 64 #define DIRFILE_SET_NUM 32 //文件传输服务操作码 enum { OR_NULL = 0, OR_DIR_CALL = 1, //召唤目录 OR_DIR_ACK = 2, //召唤目录确认 OR_FILE_ACT = 3, //读文件激活 OR_FILE_ACK = 4, //读文件激活确认 OR_FILE_TRANSUP = 5, //读文件数据传输 OR_FILE_TRANSUP_ACK = 6, //读文件数据响应 OW_FILE_ACT = 7, //写文件激活 OW_FILE_ACK = 8, //写文件激活确认 OW_FILE_TRANS = 9, //写文件数据传输 OW_FILE_TRANS_ACK = 10 //读文件数据响应 }; #define PROT_FILE_OBJ 0 //文件服务, 文件对象 #define PROT_DIR_OBJ 1 //文件服务, 目录对象 typedef struct { unsigned char ucFileLen; char caFileName[FILE_NAME_SIZE]; } tFILE_NAME; typedef struct { tFILE_NAME stFileName; //文件名与文件名长度 unsigned char ucAttri; //属性 保留 unsigned int uiId; //文件ID, 兼容底层接口添加 unsigned int uiFileSize; //文件大小 __CP56Time2a stTimeStamp;//文件时间 } tDIR_FILE_INFO; //读取目录/文件服务 typedef struct { unsigned char ucDirLen; //根据底层读写接口, 将目录和文件分开 char caDirName[FILE_NAME_SIZE]; unsigned char ucFileLen; char caFileName[FILE_NAME_SIZE]; unsigned char ucCallFlag; //召唤标志 0: 目录下所有文件, 1:目录下满足搜索时间段的文件 __CP56Time2a stStartTime; //查询起始时间 __CP56Time2a stEndTime; //查询起始时间 unsigned short usFrmNum; //目录召唤-->本帧文件数量 unsigned short usCurNum; //目录召唤-->当前传输数量, 管理多次发送 unsigned int uiTotalSize; //文件读取-->文件大小 unsigned int uiOffSetSize; //文件读取-->读文件偏移量 //文件 & 目录共性 unsigned int uiId; //目录/文件ID unsigned char ucFollow; //后续标志, 0: 无后续, 1: 有后续 unsigned char ucResult; //结果描述 0:成功, 1:失败 } tFILEDIR_RD_SET; //写文件 typedef struct { unsigned char ucFileLen; char ucFileName[FILE_NAME_SIZE]; unsigned int uiFileId; //文件ID unsigned int uiOffSetSize; //数据段号 unsigned int uiFileSize; //文件大小 unsigned char ucFollow; //后续标志, 0: 无后续, 1: 有后续 unsigned char ucResult; //0:成功 1:未知错误 2.校验和错误 3.文件长度不对应 4.文件ID 与激活 ID 不一致 } tFILE_WD_SET; /********************************************/ typedef struct { unsigned char ucType; /*类型*/ unsigned char ucLen; /*长度*/ union { unsigned char ucVal; //无符号型 char cVal; //有符号型 unsigned short usVal; //无符号型 short sVal; //有符号型 unsigned int ulVal; //无符号型 int lVal; //有符号型 float fVal; //浮点数 unsigned long long ullVal; //无符号型 long long llVal; //有符号型 double dVal; //双精度类型 char caBuf[64]; // } unVal; unsigned int uiInfoAddr; /*信息体地址*/ } IECPARAM_T; struct CS10x_t; typedef struct CS10x_t *CS10xHandle_t; /** * \brief GetLayerSt 获取链路层状态,检测是否满足发送条件 * \param * \return * */ typedef int (*CS10x_SendCb)(unsigned char *buf, unsigned short usLen, void *arg); /** * \brief SearchOneFrame 查找规约指定帧 * \param * \param pBuf 数据缓冲区 * \param usLen 数据长度 * * \return */ typedef char (*CS10x_SearchOneFrame)(CS10xHandle_t pstSelf, unsigned char *pucBuf, unsigned short usLen); /** * \brief Preprocessor 规约预处理 根据指定的规约进行数据解析,提取ASDU数据 * \param * * \return */ typedef int (*CS10x_Preprocessor)(CS10xHandle_t pstSelf); /** * \brief GetLayerSt 获取链路层状态,检测是否满足发送条件 * \param * * \return */ typedef int (*CS10x_Send_Cb)(unsigned char *buf, unsigned short len, void *arg); /** * \brief GetLayerSt 获取链路层状态,检测是否满足发送条件 * \param * * \return */ typedef int (*CS10x_GetLayerSt)(CS10xHandle_t pstSelf); /** * \brief EncodeASDU 打包ASDU数据域 * \param * * \return */ typedef char (*CS10x_EncodeASDU)(CS10xHandle_t pstSelf); /** * \brief EncodeASDU 打包ASDU数据域 * \param * * \return */ typedef char (*CS10x_EncodeOther)(CS10xHandle_t pstSelf); /** * \brief LinkClose 关闭链路接口 * \param * * \return */ typedef int (*CS10x_LinkClose)(void *arg); /** * \brief SetValue 规约更新应用数据 * \param * * \return */ typedef int (*CS10x_GetTime)(__CP56Time2a *pTime); /** * \brief SetValue 规约更新应用数据 * \param * * \return */ typedef int (*CS10x_SetTime)(__CP56Time2a *pTime); /** * \brief SetValue 规约更新应用数据 * \param * * \return */ typedef int (*CS10x_SetValue)(Yc_Info *pstInfo, void *pParam); /** * \brief SetStatus 规约更新应用状态 * \param * * \return */ typedef int (*CS10x_SetStatus)(Yx_Info *pstInfo, void *pParam); /** * \brief SetDdValue 规约更新应用数据 * \param * * \return */ typedef int (*CS10x_SetDdValue)(TimeDd_Info *pstInfo, void *pParam); /** * \brief AddSOE 规约添加SOE信息 * \param * * \return */ typedef int (*CS10x_AddSOE)(SOE_Info *pstInfo, void *pParam); /** * \brief AddDiturbYc 规约添加遥测扰动信息 * \param * * \return */ typedef int (*CS10x_AddDiturbYc)(Yc_Info *pstInfo, void *pParam); /** * \brief GET_DiturbYc_SendNum信息 * \param * * \return */ typedef int (*CS10x_GET_DiturbYc_SendNum)(void *pParam); /** * \brief Get遥测扰动信息 * \param * * \return */ typedef int (*CS10x_GetDiturbYc)(Yc_Info *pstInfo, void *pParam, unsigned int usStPos); /** * \brief 扰动遥测数据主动发送查询窗口 * \param * * \return */ typedef void (*CS10x_SendDiturbYc)(CS10xHandle_t pstSelf); /** * \brief 向下行设备发送确认帧 * \param * * \return */ typedef void (*CS10x_AckFrameNotification)(void); /** * \brief 扰动遥测信息更新 * \param * * \return */ typedef int (*CS10x_Updata_DiturbYc_Pout)(void *pParam, unsigned int Pos); /** * \brief AddFaultEvent 规约添加故障事件信息 * \param * * \return */ typedef int (*CS10x_AddFauleEvent)(FAULT_EVENT_Info *pstInfo, void *pParam); /** * \brief AddTimeDdu 规约添加电度信息 * \param * * \return */ typedef int (*CS10x_AddTimeDdu)(TimeDd_Info *pstInfo, void *pParam); /** * \brief GetSoe获取SOE信息 * \param * * \return */ typedef int (*CS10x_GetSOE)(SOE_Info *pstInfo, void *pParam, unsigned int usStPos); /** * \brief GetSoe获取SOE信息 * \param * * \return */ typedef int (*CS10x_GetTimeDdu)(TimeDd_Info *pstInfo, void *pParam, unsigned int usStPos); /** * \brief GetSoeSendNum信息 * \param * * \return */ typedef int (*CS10x_GET_SOE_SendNum)(void *pParam); /** * \brief GetEventSendNum信息 * \param * * \return */ typedef int (*CS10x_GET_Event_SendNum)(void *pParam); /** * \brief GetTimeDduSendNum信息 * \param * * \return */ typedef int (*CS10x_GetTimeDdu_SendNum)(void *pParam); /** * \brief GetSoe获取SOE信息 * \param * * \return */ typedef int (*CS10x_Updata_SOE_Pout)(void *pParam, unsigned int Pos); /** * \brief GetTimeDdu获取Dd信息 * \param * * \return */ typedef int (*CS10x_Updata_TimeDdu_Pout)(void *pParam, unsigned int Pos); /** * \brief GetFaultEvent 获取故障事件信息 * \param * * \return */ typedef int (*CS10x_GetFaultEvent)(FAULT_EVENT_Info *pstInfo, void *pParam, unsigned int usStPos); /** * \brief GetFaultEvent_Pout 获取故障事件信息 * \param * * \return */ typedef int (*CS10x_GetFaultEvent_Pout)(void *pParam); /** * \brief GetFaultEvent_PStart 获取故障事件信息 * \param * * \return */ typedef int (*CS10x_GetFaultEvent_Pin)(void *pParam); /** * \brief Updata_FaultEvent_Pout 获取故障事件信息 * \param * * \return */ typedef int (*CS10x_Updata_FaultEvent_Pout)(void *pParam, unsigned int Pos); /** * \brief CS10x_SendSoeEnent Soe及Event主动发送查询窗口 * \param * * \return */ typedef void (*CS10x_SendSoeEnent)(CS10xHandle_t pstSelf); /** * \brief GetYcCountByGroup 规约获取组遥测数据个数 * \param ucGroupID 组序号 * \param ucIdx 组内下标 * * \return */ typedef int (*CS10x_GetYcCountByGroup)(unsigned short ucGroupID, void *pParam, unsigned int *StartInf, unsigned int *EndInf); /** * \brief GetYcValueByGroup 规约获取组遥测数据 * \param ucGroupID 组序号 * \param ucIdx 组内下标 * * \return */ typedef int (*CS10x_GetYcValueByGroup)(unsigned short ucGroupID, unsigned short usIdx, Yc_Info *pstInfo, void *pParam); /** * \brief GetYxCountByGroup 规约获取组遥信数据个数 * \param ucGroupID 组序号 * \param ucIdx 组内下标 * * \return */ typedef int (*CS10x_GetYxCountByGroup)(unsigned short ucGroupID, void *pParam, unsigned int *StartInf, unsigned int *EndInf); /** * \brief GetYxStatusByGroup 规约获取组遥信数据 * \param * * \return */ typedef int (*CS10x_GetYxStatusByGroup)(unsigned short ucGroupID, unsigned short usIdx, Yx_Info *pstInfo, void *pParam); /** * \brief CS10x_GetYxPotPro Soe及Event主动发送查询窗口 * \param * * \return */ typedef int (*CS10x_GetYxPotPro)(void *pParam, unsigned short usIdx); /** * \brief GetDdCountByGroup 规约获取组遥测数据个数 * \param ucGroupID 组序号 * \param ucIdx 组内下标 * \param ucTimeEn带时标 * \return */ typedef int (*CS10x_GetDdCountByGroup)(unsigned short ucGroupID, void *pParam, unsigned int *StartInf, unsigned int *EndInf, unsigned char ucTimeEn); /** * \brief GetDdValueByGroup 规约获取组遥测数据 * \param ucGroupID 组序号 * \param ucIdx 组内下标 * \param ucTimeEn带时标 * \return */ typedef int (*CS10x_GetDdValueByGroup)(unsigned short ucGroupID, unsigned short usIdx, TimeDd_Info *pstInfo, void *pParam, unsigned char ucTimeEn); typedef unsigned short (*CS10x_GetParamArea)(unsigned char ucType, void *pParam); typedef unsigned short (*CS10x_SetParamArea)(unsigned short usArea, void *pParam); /** * \brief CS10x_AddIECParam 规约添加定值参数数据 * \param ucAll * \param ucForce * \param ucType * \return */ typedef unsigned char (*CS10x_AddIECParam)(unsigned char ucAll, unsigned char ucForce, unsigned char ucType, IECPARAM_T *pstVal, void *pParam); typedef unsigned char (*CS10x_RunReadIECParam)(void *pParam); typedef unsigned char (*CS10x_RunWriteIECParam)(void *pParam); /** * \brief GetParamCount 规约获取组遥测数据个数 * \param ucIdx 组内下标 * * \return */ typedef unsigned short (*CS10x_GetParamCount)(void *pParam); /** * \brief CS10x_GetParamInfoByIndx 规约获取组遥测数据 * \param ucIdx 组内下标 * * \return */ typedef unsigned char (*CS10x_GetParamInfoByIndx)(unsigned char ucType, unsigned short usIdx, IECPARAM_T *pstVal, void *pParam); /** * \brief CS10x_GetParamInfoByInfo 规约获取组遥测数据 * \param ucIdx 组内下标 * * \return */ //typedef int (*CS10x_GetParamInfoByInfo) (unsigned char byType,unsigned short usIfo, CONSTPARAM_Info *pstInfo, void *pParam); /** * \brief CS10x_UpdateParamPosRwst 规约获取组参数点号状态数据 * \param ucIdx 组内下标 * * \return */ //typedef void(*CS10x_UpdateParamPosRwst) (unsigned char byType,CONSTPARAM_Info *pstInfo, void *pParam); /** * \brief GetNumDirFile 获取目录下文件数量 * \param caDirName 文件名 * \param pstIecFile 条件信息 * \return 目录文件个数 */ typedef int (*CS10x_GetNumDirFile)(tFILEDIR_RD_SET *pstRdSet); /** * \brief ReadFile 获取目录下文件属性 * \param pstIecFile 读取文件条件 * \param pFileSet 文件缓冲区 * \param ucType 获取属性类型 1-通过序号获取,0-名称获取 * \param usItem 文件序号 * \param caDirName 文件夹名称 * \param caFileName 文件名称 * \return true/false */ typedef bool (*CS10x_GetProDirFile)(tFILEDIR_RD_SET *pstRdSet, tDIR_FILE_INFO *pstDirFileInfo, unsigned char ucType, unsigned short usItem, void *pvInfo); /** * \brief ReadFile 读取文件数据 * \param * * \return */ typedef int (*CS10x_ReadFile)(unsigned int uiOffset, unsigned char *pBuf, unsigned short usLen, void *pvParam); /** * \brief WriteFile 读取文件数据 * \param * * \return */ typedef int (*CS10x_WriteFile)(tFILEDIR_RD_SET *pstRdSet, unsigned char *pBuf, unsigned short usLen, void *pUsrData); /** * \brief SearchFileName 比对文件名 * \param * * \return */ typedef bool (*CS10x_SearchFileName)(char *caDirName, char *caFileName, void *pUsrData); /** * \brief CS10x_WriteFileCheck 查询待写入文件 * \param * * \return */ typedef unsigned char (*CS10x_WriteFileCheck)(tFILE_WD_SET *pstWdSet, void *pvFileWrteParam, void *pUsrData); /** * \brief Write 写入文件 * \param * * \return */ typedef int (*CS10x_Write)(unsigned int uiOffset, unsigned char *pBuf, unsigned short usLen, void *pvFile, void *pUsrData); /** * \brief WriteFinish 写入文件完成 * \param * * \return */ typedef int (*CS10x_WriteFinish)(unsigned char *pucMd5, void *pvFile, void *pUsrData); /** * \brief WriteFinish 写入文件完成 * \param * * \return */ typedef int (*CS10x_UpdateProc)(unsigned short usCos, unsigned char ucSe, void *pUsrData); /** * \brief ParamTaskDataProcess 设置读写参数任务 * \param * * \return */ typedef void (*CS10x_ParamTaskDataProcess)(unsigned char byTskId, unsigned int uiParam, void *pUsrData); /** * \brief SetParamTask 设置读写参数任务 * \param * * \return */ typedef void (*CS10x_SetParamTaskst)(void *pUsrData, ParamTsk_st *pTaskst); /** * \brief SetParamTask 设置读写参数任务 * \param * * \return */ typedef bool (*CS10x_GetandClearUlogTskst)(void *pParam); /** * \brief SetParamTask 设置读写参数任务 * \param * * \return */ typedef void (*CS10x_GetParamTaskst)(void *pUsrData, ParamTsk_st *pTaskst); /** * \brief SetParamTask 设置读写参数任务 * \param * * \return */ typedef void (*CS10x_CheckParamRWSt)(CS10xHandle_t pstSelf); /** * \brief SetParamTask 设置读写参数任务 * \param * * \return */ typedef void (*CS10x_CheckUlogReadSt)(CS10xHandle_t pstSelf); /** * \brief SetParamTask 设置读写参数任务 * \param * * \return */ typedef void (*CS10x_ParamConstUpdate)(void); /** * \brief 检查文件传输状态 * \param * * \return */ typedef void (*CS10x_CheckFileTransferSt)(CS10xHandle_t pstSelf); /** * \brief 检查文件传输任务 * \param * * \return */ typedef void (*CS10x_PollFileTransTask)(CS10xHandle_t pstSelf); /** * \brief 注册文件传输任务 * \param * * \return */ typedef int (*CS10x_RegFileTransObj)(void *pUsrData, FileObj_T *FileObj, unsigned char ucFileType); /** * \brief 获取文件传输任务 * \param * * \return */ typedef int (*CS10x_CheckTransFileObj)(tFILEDIR_RD_SET *pstRdSet, void *pUsrData); /** * \brief 检测文件传输任务超时 * \param * * \return */ typedef int (*CS10x_CheckTransTimeOut)(void *pUsrData); /** * \brief 目录接收完成回调处理函数 * \param * * \return */ typedef int (*CS10x_DirRecvFinish)(tDIR_FILE_INFO *pstDirFileSet, unsigned char ucFrmNum, unsigned char ucFollow); /** * \brief GetYcValueByGroup 规约获取组遥测数据 * \param ucGroupID 组序号 * \param ucIdx 组内下标 * * \return */ typedef int (*CS10x_Encrypt)(char *pBuf, unsigned short usLen); /** * \brief GetYcValueByGroup 规约获取组遥测数据 * \param ucGroupID 组序号 * \param ucIdx 组内下标 * * \return */ typedef void (*CS10x_Md5Result)(unsigned char *pBuf); /** * \brief 104Time Out t0~t3时间管理 * \param * * \return */ typedef void (*CS10x_TimeManager)(CS10xHandle_t pstSelf, unsigned short usGap); /** * \brief 写入复位原因 * \param * * \return */ typedef void (*CS10x_Write_ResetCOI)(unsigned char Coi); /** * \brief 读出复位原因标志 * \param * * \return */ typedef unsigned char (*CS10x_Read_ResetCOI)(void); /** * \brief 根据地址及属性获取具体信息 * \param * * \return */ typedef int (*CS10x_GetDdValue)(int infoaddr, TimeDd_Info *DdInfo, unsigned short wType); /** * \brief 遥控校验 * \param * * \return */ typedef unsigned char (*CS10x_YkVerify)(void *pParam); /** * \brief 规约更新遥控应用状态 * \param * * \return */ typedef int (*CS10x_SetYkInfor)(Yk_Info *pstInfo, void *pParam); /** * \brief CS10x */ typedef struct CS10x_t { /********************************************************** *用户自定义数据 ***********************************************************/ void *pUsrData;/*用户自定义数据*/ /********************************************************** *公共配置参数 ***********************************************************/ CS10x_Type eCS10x_Type;/*规约类型 CS101Master CS101Slave CS104Master CS104Slave*/ /*通用参数类*/ struct CS10x_AppLayerParameters stAppParameters; /*规约参数*/ bool bFbpType; /* 长帧测试限定词类型 0表示发什么回什么 1表示回复固定*/ unsigned char ucSenSoeEa; /* 发送SOE 带时标遥信使能*/ //参数关联 unsigned char ucSenCosEa; /* 发送COS 不带时标遥信使能*/ //参数关联 unsigned char ucYKEndFrame; /* 遥控结束帧投退*/ //参数关联 unsigned char ucReadFileVSQ; /* 读文件数据传输VSQ值,部分主站无法识别0,需要投1*/ unsigned char ucPreSetContType; /* 参数预置忽略无后续帧 0=标准规约 1=不校验后续帧,使用超时和固化进行取消*/ unsigned short usAsduPublicAddr; /* ASDU公共地址*/ unsigned short usYcType; /* 遥测类型*/ unsigned short usYxType; /* 遥信类型*/ unsigned short usYkType; /* 遥控类型*/ unsigned short usDdType; /* 电度类型*/ unsigned short usWaveInfoAddr; /* 录波完成点号*/ unsigned short usFaultEnable; /* 故障事件使能*/ unsigned int uiSummon_Gap; /* 总召间隔*/ //参数关联 unsigned int uiESummon_Gap; /* 电能总召间隔*/ //参数关联 unsigned int uiSyn_Gap; /* 同步间隔*/ //参数关联 unsigned int uiHeart_Gap; /* 心跳间隔*/ //参数关联 unsigned int uiSend_Gap; /* 数据发送间隔参数*/ /*运行状态类*/ unsigned char ucSE; /* 遥控选择执行标识 0=执行 1=选择*/ unsigned char ucQu; /* 遥控状态 0=分 1=合*/ unsigned int ulYkAddr; /* 遥控点号*/ unsigned int uiYxConstInfo; /* 遥信起始地址*/ //参数关联 unsigned int uiYcConstInfo; /* 遥测起始地址*/ //参数关联 unsigned int uiDdConstInfo; /* 电度起始地址*/ //参数关联 /********************************************************** *101规约配置参数 ***********************************************************/ bool bDir; /* 方向位*/ bool bSimpleInit; /* 简单初始化*/ unsigned char ucFileAckType; /* 文件传输无应答使能 0-有应答 1-无应答*/ unsigned char ucReSend_Num; /* 重发次数参数*/ unsigned short usReSend_Gap; /* 超时重发间隔参数*/ unsigned short usResetDelay; /* 复位进程延时*/ /********************************************************** *104规约配置参数 ***********************************************************/ unsigned char ucMultiFrameEn; /* 多帧使能*/ struct CS104_APCIParameters stAPCIParameters; /*104规约参数*/ /********************************************************** *函数指针 ***********************************************************/ /*规约区分实现函数*/ CS10x_Send_Cb pfnSendCb; /*数据发送接口*/ CS10x_Encrypt pfnEncrypt; /*数据是否加密*/ CS10x_Md5Result pfnMd5ResultCb; /*更新文件md5接口*/ CS10x_GetLayerSt pfnGetLayerSt; /*链路层状态,是否连接正常,是否可以正常发送数据*/ CS10x_LinkClose pfnLinkClose; /**关闭链路接口*/ CS10x_SearchOneFrame pfnDecodeProcess; /*查找响应规约数据帧函数*/ CS10x_TimeManager pfnTimerManager; /*定时任务接口*/ CS10x_EncodeASDU pfnEncodeFrame; /*ASDU数据打包*/ CS10x_EncodeOther pfnEncodeOther; /*其他短帧数据打包*/ CS10x_GetTime pfnGetTime; /*获取事件*/ CS10x_SetTime pfnSetTime; /*设置事件*/ CS10x_AckFrameNotification pfnAckFrameNotification; /*向下行设备发送确认帧*/ /*对外提供数据*/ CS10x_SetValue pfnSetValue; /*规约更新应用数据*/ CS10x_SetStatus pfnSetStatus; /*规约更新应用状态*/ CS10x_SetDdValue pfnSetDdValue; /*规约更新应用数据*/ CS10x_AddSOE pfnAddSOE; /*添加SOE信息*/ CS10x_AddFauleEvent pfnAddEvent; /*添加故障事件*/ CS10x_AddDiturbYc pfnAddDiYcVal; /*添加扰动遥测信息*/ CS10x_Write_ResetCOI pfnWrite_ResetCOI; /*规约写复位标志*/ CS10x_AddTimeDdu pfnAddTimeDdu; /*添加故障事件*/ CS10x_GetDdValue pfnGetDdValue; CS10x_YkVerify pfnFcYkVerify; /*遥控校验*/ CS10x_SetYkInfor pfnSetYkInfor; /*规约更新遥控应用数据*/ /*向外获取数据*/ CS10x_GetYcCountByGroup pfnGetYcCountByGroup; /*规约获取组遥测数量*/ CS10x_GetYcValueByGroup pfnGetYcValueByGroup; /*规约获取组遥测数据*/ CS10x_GetYxCountByGroup pfnGetYxCountByGroup; /*规约获取组遥信数量*/ CS10x_GetYxStatusByGroup pfnGetYxStatusByGroup; /*规约获取组遥信数据*/ CS10x_GetDdCountByGroup pfnGetDdCountByGroup; CS10x_GetDdValueByGroup pfnGetDdValueByGroup; CS10x_GetParamArea pfnGetParamArea; /*获取参数定值区*/ CS10x_SetParamArea pfnSetParamArea; /*更新参数定值区*/ CS10x_AddIECParam pfnAddIECParam; CS10x_RunReadIECParam pfnRunReadIECParam; CS10x_GetParamCount pfnGetParamCount; CS10x_GetParamInfoByIndx pfnGetParamInfoByIndx; CS10x_RunWriteIECParam pfnRunWriteIECParam; CS10x_GetDiturbYc pfnGetDiturbYc ; /*规约获取扰动遥测数据*/ CS10x_GET_DiturbYc_SendNum pfnGetDiturbYc_SendNum; /*获取待发送的扰动遥测数据数量*/ CS10x_Updata_DiturbYc_Pout pfnUpdata_DiturbYc_Pout; /*扰动数据更新*/ CS10x_GetSOE pfnGetSOE; /*规约获取soe数据*/ CS10x_Updata_SOE_Pout pfnUpdata_SOE_Pout; CS10x_GET_SOE_SendNum pfnGetSOE_SendNum; CS10x_GetFaultEvent pfnGetFaultEvent; CS10x_Updata_FaultEvent_Pout pfnUpdata_FaultEvent_Pout; CS10x_GET_Event_SendNum pfnGetEvent_SendNum; CS10x_GetTimeDdu pfnGetTimeDdu; CS10x_Updata_TimeDdu_Pout pfnUpdata_TimeDdu_Pout; CS10x_GetTimeDdu_SendNum pfnGetTimeDdu_SendNum; /*获取电度扰动数量*/ CS10x_GetYxPotPro pfnGetYxPotPro; CS10x_GetProDirFile pfnGetProDirFile; /*按条件搜索目录*/ CS10x_GetNumDirFile pfnGetNumDirFile; /*按条件搜索目录*/ CS10x_ReadFile pfnReadFile; /*读取文件内容*/ void *pvFileReadParam; /*读文件指针数据*/ CS10x_WriteFile pfnWriteFile; /*读取文件内容*/ CS10x_SearchFileName pfnSearchFileName; /*按名称搜索文件*/ CS10x_Write pfnWrite; /*写入文件内容*/ CS10x_WriteFileCheck pfnWriteFileCheck; /*查询待写入文件*/ CS10x_WriteFinish pfnWriteFinish; /*文件写完成*/ void *pvFileWrteParam; /*写文件指针数据*/ CS10x_UpdateProc pfnUpdateProc; /*升级回调函数*/ CS10x_Read_ResetCOI pfnRead_ResetCOI; /*规约读复位标志*/ /*poll查询文件升级*/ CS10x_PollFileTransTask pfnPollFileTransTask; //查询是否有文件升级任务 CS10x_RegFileTransObj pfnRegFileTransObj; //注册文件传输对象 CS10x_CheckTransFileObj pfnCheckTransFileObj; //获取文件传输对象 CS10x_CheckTransTimeOut pfnCheckTransTimeOut; //检测文件传输超时 CS10x_DirRecvFinish pfnDealDirRecvFinish; //目录接收完成回调函数 tFILEDIR_RD_SET stRdSet; //目录/文件传输服务 tFILE_WD_SET stWdSet; //写文件服务 /********************************************************** *规约公共变量 ***********************************************************/ MD5_CTX stMd5_Ctx; /*加密MD5结果*/ unsigned char ucaMd5_Result[16]; /*文件Md5结果*/ struct VCommBuf stPubBuf; /*公共数据缓冲区 目前仅用做异常帧原报文保存*/ struct VCommBuf stRecvBuf; /*接收数据缓冲区*/ struct VCommBuf stSendBuf; /*发送数据缓冲区*/ struct VCommBuf stSendBakBuf; /*发送数据备份区*/ ASDU_Element stAsduElem; /*ASDU数据域内容*/ unsigned char ucDataBackBuf[MAX_FRAME_LEN];/*数据备份缓冲区,目前用于南网参数镜像回复*/ unsigned char ucBackLen; /********************************************************** *任务管理变量 ***********************************************************/ VFLAGS stTaskFlags; /*任务标识 每一任务控制标志位(目前共有128位)*/ unsigned int uiaTaskParam[MAX_FLAGNO]; // 每个任务是否需要配置任务参数 unsigned char byTaskFlagId; /* * 状态类信息 */ unsigned char ucInitStatus; /*规约初始化状态*/ unsigned char ucFirstAct; /*主站时第一次初始化任务标识*/ unsigned int uiFrameTmCnt; /* 报文发送间隔时间计数 单位ms*/ unsigned int uiHeart_Tcn; /* 心跳累计时间计数 */ unsigned int uiSummon_Tcn; /* 定时总招时间计数 */ unsigned int uiESummon_Tcn; /* 定时总招时间计数 */ unsigned int uiTimeSyn_Tcn; /* 定时对时时间计数 */ unsigned short usYxSendNum; /*遥信发送个数*/ unsigned short usYcSendNum; /*遥测发送个数*/ unsigned short usDisTurbYcSendNum; /*扰动遥测发送个数*/ unsigned short usDdSendNum; /*已发送电度个数*/ unsigned short usSoeSendNum; unsigned short usSoeSendNoAckNum; /*Soe发送未确认数量*/ unsigned short usCosSendNoAckNum; /*Soe发送未确认数量*/ unsigned short usEventSendNoAckNum; /*事件发送未确认数量*/ unsigned short usDduSendNoAckNum; /*时标电度发送未确认数量*/ unsigned short usDiturbYcSendNoAckNum; /*扰动遥测发送未确认数量*/ unsigned short usSoeSendSetup; /*Soe发送步骤*/ unsigned short usDdSummonSetup; /*电度总召回复*/ unsigned char ucParamFlag; /*记录参数设置读取状态标识*/ unsigned short usParamSendNum; /*参数发送个数*/ unsigned char ucPmPresetFlag; /*参数预置*/ unsigned int uiPmPresetTimeout; /*预置超时时间*/ unsigned int uiPreSetContCount; /*参数预置后续帧逻辑判断*/ unsigned char ucPmPresetVsqFlag; unsigned char ucTransStatus; /* 文件传输状态*/ unsigned int uiTransTimerCur; /* 文件传输定时器*/ unsigned int uiTransTimerMax; /* 文件传输定时器*/ bool bContinueSendFlag; /* continue send I Frame flag about K */ /********************************************************** *101规约变量 ***********************************************************/ unsigned char ucInitStep; /* 链路初始化步骤 针对101规约*/ unsigned char ucSelf_FCB; /*我方上次的FCB值*/ unsigned char ucRxAckFlag; /* 收到确认帧标志 针对101规约*/ unsigned char ucRxLinkStatusFlag; /* 收到链路状态响应帧标志 针对101规约*/ unsigned char ucRxLinkRequestFlag; /* 收到链路状态请求帧标志 针对101规约*/ unsigned char ucRxLinkResetFlag; /* 收到链路复位帧标志 针对101规约*/ unsigned char ucRxInitFinishFlag; /* 收到初始化完成标志 针对101规约*/ unsigned char ucHeart_Resend_Flag; /* 心跳重发标志 */ unsigned char ucFileTransFrame; /* 文件传输帧标识 */ unsigned short usFileNoneAckNum; /* 文件传输未确认帧数 */ unsigned short usResend_Ncn; /* 重发次数计数 */ unsigned int uiResend_Tcn; /* 重发间隔时间计数 */ unsigned int uiRelink_Tcn; /* 链路超时间隔时间计数 */ unsigned int uiInit_Tcn; /* 101初始化中等待时间计数 */ unsigned int uiReInit_Tcn; /* 101重新初始化间隔时间计数 */ unsigned int uiInit_Resend_Ncn; /* 101初始化中重发次数计数 */ /********************************************************** *104规约变量 ***********************************************************/ unsigned short usSendNum; /*Send Counter */ unsigned short usRecvNum; /*Receive Counter*/ unsigned short usAckSendNum; /*Receive Ack Counter*/ unsigned short usAckRecvNum; /*Have Ack Receive Counter*/ VIec104Timer stM_vTimer[4]; /*iec104 timer for T0 T1 T2 T3*/ } CS10x; //***************************** 规约废弃接口 ************************************// /** * @brief 获取时间接口(待删除) * * @param pstSelf * @param cb */ void CS10x_GetTimeHandler(CS10xHandle_t pstSelf, CS10x_GetTime cb); /** * @brief 设置时间接口(待删除) * * @param pstSelf * @param cb */ void CS10x_SetTimeHandler(CS10xHandle_t pstSelf, CS10x_SetTime cb); /** * @brief 设置计量模块接收遥测接口(待删除) * * @param pstSelf * @param cb */ void CS10x_SetValueHandler(CS10xHandle_t pstSelf, CS10x_SetValue cb); /** * @brief 设置计量模块电度接口(待删除) * * @param pstSelf * @param cb */ void CS10x_SetDdValueHandler(CS10xHandle_t pstSelf, CS10x_SetDdValue cb); /** * @brief 遥控操作校验(待删除) * * @param pstSelf * @param cb */ void CS10x_YkVerifyHandler(CS10xHandle_t pstSelf, CS10x_YkVerify cb); /** * @brief 设置组遥测数量处理函数(待删除) * * @param pstSelf * @param cb */ void CS10x_GetYcCountByGroupHandler(CS10xHandle_t pstSelf, CS10x_GetYcCountByGroup cb); /** * @brief 设置组遥测值处理函数(待删除) * * @param pstSelf * @param cb */ void CS10x_GetYcValueByGroupHandler(CS10xHandle_t pstSelf, CS10x_GetYcValueByGroup cb); /** * @brief 设置组遥信数量处理函数(待删除) * * @param pstSelf * @param cb */ void CS10x_GetYxCountByGroupHandler(CS10xHandle_t pstSelf, CS10x_GetYxCountByGroup cb); /** * @brief 设置组遥信状态处理函数(待删除) * * @param pstSelf * @param cb */ void CS10x_GetYxStatusByGroupHandler(CS10xHandle_t pstSelf, CS10x_GetYxStatusByGroup cb); /** * @brief 扰动遥测待发送数量处理函数(待删除) * * @param pstSelf * @param cb */ void CS10x_GetDiturbYc_SendNumHandler(CS10xHandle_t pstSelf, CS10x_GET_DiturbYc_SendNum cb); /** * @brief 设置获取扰动遥测数据处理函数(待删除) * * @param pstSelf * @param cb */ void CS10x_GetDiturbYcHandler(CS10xHandle_t pstSelf, CS10x_GetDiturbYc cb); /** * @brief 设置更新遥测扰动指针处理函数(待删除) * * @param[out] pstSelf * @param[in] cb */ void CS10x_Updata_DiturbYc_PoutHandler(CS10xHandle_t pstSelf, CS10x_Updata_DiturbYc_Pout cb); /** * @brief 设置组电度数量处理函数(待删除) * * @param pstSelf * @param cb */ void CS10x_GetDdCountByGroupHandler(CS10xHandle_t pstSelf, CS10x_GetDdCountByGroup cb); /** * @brief 设置组电度数值处理函数(待删除) * * @param pstSelf * @param cb */ void CS10x_GetDdValueByGroupHandler(CS10xHandle_t pstSelf, CS10x_GetDdValueByGroup cb); /** * @brief 设置参数定值区获取函数(待删除) * * @param pstSelf * @param cb */ void CS10x_GetParamAreaHandler(CS10xHandle_t pstSelf, CS10x_GetParamArea cb); /** * @brief 设置参数定值区更新函数(待删除) * * @param pstSelf * @param cb */ void CS10x_SetParamAreaHandler(CS10xHandle_t pstSelf, CS10x_SetParamArea cb); /** * @brief 设置增加参数定值缓存函数(待删除) * * @param pstSelf * @param cb */ void CS10x_AddIECParamHandler(CS10xHandle_t pstSelf, CS10x_AddIECParam cb); /** * @brief 设置参数定值读取函数(待删除) * * @param pstSelf * @param cb */ void CS10x_RunReadIECParamHandler(CS10xHandle_t pstSelf, CS10x_RunReadIECParam cb); /** * @brief 设置参数定值固化函数(待删除) * * @param pstSelf * @param cb */ void CS10x_RunWriteIECParamHandler(CS10xHandle_t pstSelf, CS10x_RunWriteIECParam cb); /** * @brief 参数数量获取处理函数(待删除) * * @param pstSelf * @param cb */ void CS10x_GetParamCountHandler(CS10xHandle_t pstSelf, CS10x_GetParamCount cb); /** * @brief 参数信息获取处理函数(待删除) * * @param pstSelf * @param cb */ void CS10x_GetParamInfoByIndxHandler(CS10xHandle_t pstSelf, CS10x_GetParamInfoByIndx cb); /** * @brief 设置获取soe数据处理函数(待删除) * * @param pstSelf * @param cb */ void CS10x_GetSOEHandler(CS10xHandle_t pstSelf, CS10x_GetSOE cb); /** * @brief 设置更新SOE指针待发数量函数(待删除) * * @param pstSelf * @param cb */ void CS10x_GetSOE_SendNumHandler(CS10xHandle_t pstSelf, CS10x_GET_SOE_SendNum cb); /** * @brief 设置更新SOE指针处理函数(待删除) * * @param pstSelf * @param cb */ void CS10x_Updata_SOE_PoutHandler(CS10xHandle_t pstSelf, CS10x_Updata_SOE_Pout cb); /** * @brief 获取故障事件数量处理函数(待删除) * * @param pstSelf * @param cb */ void CS10x_GetEvent_SendNumHandler(CS10xHandle_t pstSelf, CS10x_GET_Event_SendNum cb); /** * @brief 设置获取故障事件数据处理函数(待删除) * * @param pstSelf * @param cb */ void CS10x_GetFaultEventHandler(CS10xHandle_t pstSelf, CS10x_GetFaultEvent cb); /** * @brief 设置更新故障事件处理函数(待删除) * * @param pstSelf * @param cb */ void CS10x_Updata_FaultEvent_PoutHandler(CS10xHandle_t pstSelf, CS10x_Updata_FaultEvent_Pout cb); /** * @brief 获取电度时间指针待发数量函数(待删除) * * @param pstSelf * @param cb */ void CS10x_GetTimeDdu_SendNumHandler(CS10xHandle_t pstSelf, CS10x_GetTimeDdu_SendNum cb); /** * @brief 更新时标电度处理函数(待删除) * * @param pstSelf * @param cb */ void CS10x_Updata_TimeDdu_PoutHandler(CS10xHandle_t pstSelf, CS10x_Updata_TimeDdu_Pout cb); /** * @brief 获取时标电度数据处理函数(待删除) * * @param pstSelf * @param cb */ void CS10x_GetTimeDduHandler(CS10xHandle_t pstSelf, CS10x_GetTimeDdu cb); /** * @brief 读文件(待删除) * * @param pstSelf * @param cbGetPro * @param cbGetNum * @param cbRead * @param *pvParam */ void CS10x_FileReadOprtHandler(CS10xHandle_t pstSelf, CS10x_GetProDirFile cbGetPro, CS10x_GetNumDirFile cbGetNum, CS10x_ReadFile cbRead, void *pvParam); /** * @brief 写文件(待删除) * * @param pstSelf * @param cbWrite * @param cbCheck * @param cbFinish * @param *pvParam */ void CS10x_FileWriteOprtHandler(CS10xHandle_t pstSelf, CS10x_Write cbWrite, CS10x_WriteFileCheck cbCheck, CS10x_WriteFinish cbFinish, void *pvParam); /** * @brief 升级处理流程(待删除) * * @param pstSelf * @param cb */ void CS10x_UpdateProcHandler(CS10xHandle_t pstSelf, CS10x_UpdateProc cb); //************************************************ 未使用接口*****************************************// /** * @brief 设置遥控类型(未使用) * * @param[out] pstSelf * @param[in] usType */ void CS10x_SetYkType(CS10xHandle_t pstSelf, unsigned short usType); /** * @brief 设置录波完成点号关联(未使用) * * @param[out] pstSelf * @param[in] usAddr */ void CS10x_SetWaveInfoAddr(CS10xHandle_t pstSelf, unsigned short usAddr); /** * @brief 设置接收遥信接口(未使用) * * @param pstSelf * @param cb */ void CS10x_SetStatusHandler(CS10xHandle_t pstSelf, CS10x_SetStatus cb); /** * @brief 设置接收SOE处理函数(未使用) * * @param pstSelf * @param cb */ void CS10x_AddSOEHandler(CS10xHandle_t pstSelf, CS10x_AddSOE cb); /** * @brief 设置故障事件处理函数(未使用) * * @param pstSelf * @param cb */ void CS10x_AddEventHandler(CS10xHandle_t pstSelf, CS10x_AddFauleEvent cb); /** * @brief 设置接收TimeDdu处理函数(未使用) * * @param pstSelf * @param cb */ void CS10x_AddTimeDduHandler(CS10xHandle_t pstSelf, CS10x_AddTimeDdu cb); /** * @brief 设置电度信息接口(未使用) * * @param pstSelf * @param cb */ void CS10x_GetDdValueHandler(CS10xHandle_t pstSelf, CS10x_GetDdValue cb); /** * @brief 设置扰动遥测处理函数(未使用) * * @param pstSelf * @param cb */ void CS10x_AddDiYcValueHandler(CS10xHandle_t pstSelf, CS10x_AddDiturbYc cb); /** * @brief 设置遥信点点号状态处理函数(未使用) * * @param pstSelf * @param cb */ void CS10x_GetYxPotProHandler(CS10xHandle_t pstSelf, CS10x_GetYxPotPro cb); /** * @brief 设置搜索目录获取属性处理函数(未使用) * * @param pstSelf * @param cb */ void CS10x_GetProDirFileHandler(CS10xHandle_t pstSelf, CS10x_GetProDirFile cb); /** * @brief 设置搜索目录获取数量处理函数(未使用) * * @param pstSelf * @param cb */ void CS10x_GetNumDirFileHandler(CS10xHandle_t pstSelf, CS10x_GetNumDirFile cb); /** * @brief 设置读取文件处理函数(未使用) * * @param pstSelf * @param cb */ void CS10x_ReadFileHandler(CS10xHandle_t pstSelf, CS10x_ReadFile cb); /** * @brief 设置写文件处理函数(未使用) * * @param pstSelf * @param cb */ void CS10x_WriteFileHandler(CS10xHandle_t pstSelf, CS10x_WriteFile cb); /** * @brief 设置文件名比对文件函数(未使用) * * @param pstSelf * @param cb */ void CS10x_SearchFileNameHandler(CS10xHandle_t pstSelf, CS10x_SearchFileName cb); /** * @brief 设置待写入文件查询处理函数(未使用) * * @param pstSelf * @param cb */ void CS10x_WriteFileCheckHandler(CS10xHandle_t pstSelf, CS10x_WriteFileCheck cb); /** * @brief 文件写入函数(未使用) * * @param pstSelf * @param cb */ void CS10x_WriteHandler(CS10xHandle_t pstSelf, CS10x_Write cb); /** * @brief 文件写完成(未使用) * * @param pstSelf * @param cb */ void CS10x_WriteFinishHandler(CS10xHandle_t pstSelf, CS10x_WriteFinish cb); /** * @brief 设置注册文件传输任务函数(未使用) * * @param[out] pstSelf * @param[in] cb */ void CS10x_RegFileTransHandler(CS10xHandle_t pstSelf, CS10x_RegFileTransObj cb); /** * @brief 设置获取传输文件对象函数(未使用) * * @param[out] pstSelf * @param[in] cb */ void CS10x_GetTransFileHandler(CS10xHandle_t pstSelf, CS10x_CheckTransFileObj cb); /** * @brief 设置检测文件传输超时函数(未使用) * * @param self * @param cb */ void CS10x_TransTimeOutHandler(CS10xHandle_t pstSelf, CS10x_CheckTransTimeOut cb); /** * @brief 设置目录召唤接收完成处理函数(未使用) * * @param self * @param cb */ void CS10x_DirRecvFinishHandler(CS10xHandle_t pstSelf, CS10x_DirRecvFinish cb); /** * @brief 设置链路关闭接口 * * @param pstSelf * @param cb */ void CS10x_LinkCloseHandler(CS10xHandle_t pstSelf, CS10x_LinkClose cb); /** * @brief 设置向下行设备发送确认帧接口 * * @param pstSelf * @param cb */ void CS10x_AckFrameNotificationHandler(CS10xHandle_t pstSelf, CS10x_AckFrameNotification cb); //*********************************** 规约参数配置函数 *************************************// /** * @brief 设置规约参数 * * @param[out] pstSelf * @param[in] pstParam 规约参数 */ void CS10x_SetAppParameters(CS10xHandle_t pstSelf, struct CS10x_AppLayerParameters *pstParam); /** * @brief 设置104APCI参数 * * @param[out] pstSelf * @param[in] pstParam */ void CS10x_SetAPCIParameters(CS10xHandle_t pstSelf, struct CS104_APCIParameters *pstParam); /** * @brief 设置遥测类型 * * @param[out] pstSelf * @param[in] usType */ void CS10x_SetYcType(CS10xHandle_t pstSelf, unsigned short usType); /** * @brief 设置遥信类型 * * @param[out] pstSelf * @param[in] usType */ void CS10x_SetYxType(CS10xHandle_t pstSelf, unsigned short usType); /** * @brief 设置电度类型 * * @param[out] pstSelf * @param[in] usType */ void CS10x_SetDdType(CS10xHandle_t pstSelf, unsigned short usType); /** * @brief 设置总召定时间隔关联 * * @param[out] pstSelf * @param[in] uiGap */ void CS10x_SetSummonGap(CS10xHandle_t pstSelf, unsigned int uiGap); /** * @brief 设置电能量总召定时间隔关联 * * @param[out] pstSelf * @param[in] uiGap */ void CS10x_SetESummonGap(CS10xHandle_t pstSelf, unsigned int uiGap); /** * @brief 设置心跳间隔时间参数 * * @param[out] pstSelf * @param[in] uiGap */ void CS10x_SetHeartTimeGap(CS10xHandle_t pstSelf, unsigned int uiGap); /** * @brief 设置报文发送间隔关联 * * @param[out] pstSelf * @param[in] uiGap */ void CS10x_FrameGap(CS10xHandle_t pstSelf, unsigned int uiGap); /** * @brief 101规约初始化类型 * @param[out] pstSelf * @param[in] bType */ void CS10x_SetInitType(CS10xHandle_t pstSelf, bool bType); /** * @brief 101规约文件传输是否需要确认帧 * @param[out] pstSelf * @param[in] ucEn */ void CS10x_SetFileAckType(CS10xHandle_t pstSelf, unsigned char ucEn); /** * @brief 101规约重发间隔时间参数输入 * @param[out] pstSelf * @param[in] uiGap */ void CS10x_ResendGap(CS10xHandle_t pstSelf, unsigned int uiGap); /** * @brief 101规约重发次数参数输入 * @param[out] pstSelf * @param[in] uiCnt */ void CS10x_ResendCnt(CS10xHandle_t pstSelf, unsigned int uiCnt); /** * @brief 故障事件接口使能 * @param[out] pstSelf * @param[in] usEnable */ void CS10x_FaultEventEn(CS10xHandle_t pstSelf, unsigned short usEnable); /** * @brief 发送SOE使能 * @param[out] pstSelf * @param[in] usEnable */ void CS10x_SetSendSoe(CS10xHandle_t pstSelf, unsigned char ucEnable); /** * @brief 发送COS使能 * @param[out] pstSelf * @param[in] usEnable */ void CS10x_SetSendCos(CS10xHandle_t pstSelf, unsigned char ucEnable); /** * @brief 遥控-结束帧投退 * @param[out] pstSelf * @param[in] usEnable */ void CS10x_SetYKEendFrame(CS10xHandle_t pstSelf, unsigned char ucEnable); /** * @brief 读文件数据传输 VSQ 值:部分主站无法识别0,需要投1 * @param[out] pstSelf * @param[in] usEnable */ void CS10x_SetReadFileVSQ(CS10xHandle_t pstSelf, unsigned char usEnable); /** * @brief 参数预置忽略后缀帧字段 * @param[out] pstSelf * @param[in] ucType */ void CS10x_SetPresetContType(CS10xHandle_t pstSelf, unsigned char ucType); /** * @brief 104多帧数据传输设置 * @param[out] pstSelf * @param[in] usEnable */ void CS10x_SetMultFrameEn(CS10xHandle_t pstSelf, unsigned char usEnable); /** * @brief 设置对时同步间隔关联 * * @param[out] pstSelf * @param[in] uiGap */ void CS10x_SetSynTimeGap(CS10xHandle_t pstSelf, unsigned int uiGap); /** * @brief 设置101主站方向位 * * @param[out] pstSelf * @param[in] ucMasterDirect */ void CS10x_SetMasterDirect(CS10xHandle_t pstSelf, unsigned char ucMasterDirect); //*********************************************规约接口配置函数******************************// /** * @brief 设置解密接口 * * @param pstSelf * @param cb */ void CS10x_EncryptHandler(CS10xHandle_t pstSelf, CS10x_Encrypt cb); /** * @brief 设置文件MD5接口 * * @param pstSelf * @param cb */ void CS10x_Md5ResultHandler(CS10xHandle_t pstSelf, CS10x_Md5Result cb); /** * @brief 时间设置读取接口 * * @param pstSelf * @param cb */ void CS10x_TimeRWHandler(CS10xHandle_t pstSelf, CS10x_GetTime cbGetTime, CS10x_SetTime cbSetTime); /** * @brief 复位原因限定词,读写函数接口 * @param pstSelf 规约实体 * @param Read_cb 读函数指针 * @param Write_cb 写函数指针 */ void CS10x_WR_ResetHandler(CS10xHandle_t pstSelf, CS10x_Read_ResetCOI Read_cb, CS10x_Write_ResetCOI Write_cb); /** * @brief 设置组遥测数量及数值处理函数 * * @param pstSelf * @param cbGetYcCount,cbGetYcValue */ void CS10x_S_GetYcByGroupHandler(CS10xHandle_t pstSelf, CS10x_GetYcCountByGroup cbGetYcCount, CS10x_GetYcValueByGroup cbGetYcValue); /** * @brief 设置组遥信数量及状态处理函数 * * @param pstSelf * @param cbGetYxCount,cbGetYxStatus */ void CS10x_S_GetYxByGroupHandler(CS10xHandle_t pstSelf, CS10x_GetYxCountByGroup cbGetYxCount, CS10x_GetYxStatusByGroup cbGetYxStatus); /** * @brief 设置获取扰动遥测处理函数 * * @param pstSelf * @param cbGetDiturbYc,cbSendNum,cbUpdataPout */ void CS10x_S_DiturbYcHandler(CS10xHandle_t pstSelf, CS10x_GetDiturbYc cbGetDiturbYc, CS10x_GET_DiturbYc_SendNum cbSendNum, CS10x_Updata_DiturbYc_Pout cbUpdataPout); /** * @brief 设置组电度数量及数值处理函数 * * @param pstSelf * @param cbGetDdCount,cbGetDdValue */ void CS10x_S_GetDdByGroupHandler(CS10xHandle_t pstSelf, CS10x_GetDdCountByGroup cbGetDdCount, CS10x_GetDdValueByGroup cbGetDdValue); /** * @brief 设置soe处理函数 * * @param pstSelf * @param cb */ void CS10x_S_SOEHandler(CS10xHandle_t pstSelf, CS10x_GetSOE cbGetSOE, CS10x_GET_SOE_SendNum cbSendNum, CS10x_Updata_SOE_Pout cbUpdataSOEPout); /** * @brief 扰动电度处理函数 * * @param pstSelf * @param cbGetTimeDdu,cbcbSendNum,cbcbUpdataPout */ void CS10x_S_DiturbDduHandler(CS10xHandle_t pstSelf, CS10x_GetTimeDdu cbGetTimeDdu, CS10x_GetTimeDdu_SendNum cbSendNum, CS10x_Updata_TimeDdu_Pout cbUpdataPout); /** * @brief 设置故障事件处理函数 * * @param pstSelf * @param cbSendNum,cbGetFaultEvent,cbUpdataPout */ void CS10x_S_FaultEventHandler(CS10xHandle_t pstSelf, CS10x_GET_Event_SendNum cbSendNum, CS10x_GetFaultEvent cbGetFaultEvent, CS10x_Updata_FaultEvent_Pout cbUpdataPout); /** * @brief 遥控操作校验 * * @param pstSelf * @param cb */ void CS10x_S_YkVerifyHandler(CS10xHandle_t pstSelf, CS10x_YkVerify cb); /** * @brief 参数定值区获取与设置接口 * * @param pstSelf * @param cbGetParamArea 参数定值区获取 * @param cbSetParamArea 参数定值区设置 */ void CS10x_S_ParamAreaHandler(CS10xHandle_t pstSelf, CS10x_GetParamArea cbGetParamArea, CS10x_SetParamArea cbSetParamArea); /** * @brief 增加/读取/写入参数定值函数 * * @param pstSelf * @param cbAddIECParam, cbReadIECParam,cbWriteIECParam */ void CS10x_S_IECParamHandler(CS10xHandle_t pstSelf, CS10x_AddIECParam cbAddIECParam, CS10x_RunReadIECParam cbReadIECParam, CS10x_RunWriteIECParam cbWriteIECParam); /** * @brief 参数数量及信息获取处理函数 * * @param pstSelf * @param cbGetParamCount, cbGetParamInfo */ void CS10x_S_GetParamInfoHandler(CS10xHandle_t pstSelf, CS10x_GetParamCount cbGetParamCount, CS10x_GetParamInfoByIndx cbGetParamInfo); /** * @brief 读文件 * * @param pstSelf * @param cbGetPro * @param cbGetNum * @param cbRead * @param *pvParam */ void CS10x_S_FileReadOprtHandler(CS10xHandle_t pstSelf, CS10x_GetProDirFile cbGetPro, CS10x_GetNumDirFile cbGetNum, CS10x_ReadFile cbRead, void *pvParam); /** * @brief 写文件 * * @param pstSelf * @param cbWrite * @param cbCheck * @param cbFinish * @param *pvParam */ void CS10x_S_FileWriteOprtHandler(CS10xHandle_t pstSelf, CS10x_Write cbWrite, CS10x_WriteFileCheck cbCheck, CS10x_WriteFinish cbFinish, void *pvParam); /** * @brief 升级 * * @param pstSelf * @param cb */ void CS10x_S_UpdateProcHandler(CS10xHandle_t pstSelf, CS10x_UpdateProc cb); /** * @brief 设置计量接口处理 * * @param pstSelf * @param cbSetValue,cbSetDdValue */ void CS10x_M_SetDdHandler(CS10xHandle_t pstSelf, CS10x_SetValue cbSetValue, CS10x_SetDdValue cbSetDdValue); /** * @brief 设置接收遥控接口 * * @param pstSelf * @param cb */ void CS10x_SetYkInforHandler(CS10xHandle_t pstSelf, CS10x_SetYkInfor cb); //***************************************内部函数*******************************// char *GetIEC60870Version(void); float GetStationDataSendNum(void); //****************************************规约公共接收函数******************************// void CS10x_DoRecv(CS10xHandle_t pstSelf, char *pBuf, unsigned int usLength); //****************************************规约定时任务调度函数******************************// void CS10x_TimerHandle(CS10xHandle_t pstSelf, unsigned short usGap); void GetBakData(CS10xHandle_t pstSelf); void SaveSendData(CS10xHandle_t pstSelf); #ifdef __cplusplus } #endif #endif /* SRC_INC_IEC60870_COMMON_H_ */