RTU/release/inc/lib60870_inc/lib60870_common.h

2430 lines
73 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/******************************************************************************
版权所有 (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 cbGetDdCountcbGetDdValue
*/
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 cbReadIECParamcbWriteIECParam
*/
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_ */