/******************************************************************************
版权所有：	
文件名称：	oc.h
文件版本：	01.01
创建作者：	xxxxxx
创建日期：	2012-03-28
功能说明：	过流保护头文件
其它说明：
修改记录：
*/
#ifndef _OC_H
#define _OC_H
/*------------------------------- 头文件 --------------------------------------
*/


/*------------------------------- 宏定义 --------------------------------------
*/


/*------------------------------ 类型结构 -------------------------------------
*/
//电流保护标志
typedef union UOCFLAG
{
	DWORD  wfFlag;
	struct
	{
		DWORD    bIaQD:1;     	// 启动      
		DWORD    bIbQD:1;     	// 启动      
		DWORD    bIcQD:1;     	// 启动  
		DWORD    bIaxb:1;     	// 启动      
		DWORD    bIbxb:1;     	// 启动      
		DWORD    bIcxb:1;     	// 启动  
		
		DWORD    bQD:1;     	// 启动      
		DWORD    bGj:1;   	// 告警     
		DWORD    bTz:1;       	// 跳闸    
		DWORD    bXBbs:1;	// 谐波闭锁
		DWORD    bBSCH:1;	// 闭锁重合
		DWORD    bCYL:1;		// 曾有流
		DWORD    bTripBak:1; // 跳闸动作备份    
		DWORD    bTzhold:1;
		DWORD    bJSBC:1;       // 加速保持
		DWORD    bDzLed:1; 	// 动作灯
		DWORD    bGjLed:1;  //告警灯
		DWORD    bQDWave:1; // 幅值启动时，启动录波标志
		DWORD    bddyQD:1;      //低电压启动
		DWORD    bGjEvent:1;
	#ifdef YX_RESET_TIME
		DWORD    bTzEvent:1;	//
	#endif
	}bFlag;
}UOCFLAG;

/*------------------------------ 变量声明 -------------------------------------
*/

enum
{
	BH_GL1=0, 	// 过流1段
	BH_GL2,		// 过流2段
	BH_GL3,		// 过流3段
	BH_LX1,		// 零序1段
	BH_LX2,		// 零序2段
#ifdef DISP_SET_LX3
	BH_LX3,     // 零序3段
#endif
	BH_GLJS,	// 过流加速段
	BH_LXJS,	// 零序加速段
	FA_GL,
	FA_GL_II,	//FA相间故障II段
	FA_LX,      //FA零序故障
	FA_GL2,		//FA相间告警

	FA_LX2,     //FA零序告警
	FA_DLBS,	//大电流闭锁
	BH_DLBS,	//常规保护大电流闭锁
#ifdef DISP_SET_DLYX
	BH_OVI_ZZ,     //电流重载
	BH_OVI_GZ,     //电流过载
#endif
	BH_OVI,      // 电流越限
	BH_OVI0,	 // 零序电流越限
	BHOC_NUMBER
};


typedef struct  TOC_T
{
	UOCFLAG        sta;			// 动作标志字
	TIMERELAY	tFz25ms;  		// 幅值启动25ms
	TIMERELAY 	tQDTime; 		// 时间继电器
	TIMERELAY	tXBTime;//dXB_T;				// 谐波动作时间				
	TIMERELAY	tXBQD25ms;
	TIMERELAY 	tQD25ms; // 启动25ms,防干扰时间继电器,用于速断和零序加速，防止误出口
#ifdef YX_RESET_TIME
	TIMERELAY	tGjEvRstTime;	// 故障遥信保持时间
	TIMERELAY	tTzEvRstTime;	// 告警遥信保持时间
#endif
}TOC_T;

typedef struct  YC_REFRESH_EN
{
	DWORD	 bAGl:1;		// A相过流
	DWORD	 bBGl:1;	// B相过流	  
	DWORD	 bCGl:1;		// C相过流	 
	DWORD	 bABGl:1;		// AB相过流
	DWORD	 bBCGl:1;	// BC相过流	  
	DWORD	 bACGl:1;		// AC相过流	 
	DWORD	 bABCGl:1;		// ABC相过流
	DWORD	 bLx:1; // 零流
	DWORD	 bFAGl:1;	// FA过流	  
	DWORD	 bFALx:1;		// FA零序过流	 
}YC_REFRESH_EN;

/*------------------------------ 函数声明 -------------------------------------
*/

void Pro_OC(int sw,u32  dStep,int oc,int soe_no);
void Pro_LX(int sw,u32  dStep,int oc,int soe_no);
void Pro_Accheck(int sw,u32  dStep,int oc,int soe_no);
void Pro_BSTZ(int sw,u32  dStep,int oc,int soe_no);
void Pro_over_i(int sw,u32  dStep,int oc,int soe_no);
void Pro_over_i2(int sw,u32  dStep); //  二次谐波
void  Pro_over_i0(int sw,u32  dStep,int oc,int soe_no);

bool XBCalc(int sw,int index,DWORD xBcoe,bool bQD);
int gl_soe_set_clr(u8 set_clr, int sw, u16 soe_no, u32 i_set,bool bfault);
int gz_soe_set_clr(u8 set_clr, int sw, u16 soe_no, u32 i_set);
#ifdef EV_GL_STATR
void gl_start_soe_set(u8 set_clr, int sw,u16 soe_no);
void lx_start_soe_set(u8 set_clr, int sw,u16 soe_no);
#endif
bool pro_check_bh_all(int sw);
bool pro_check_gl_all(int sw);
void pro_rst_event(int sw,int soe_no);
bool CalDir_A(int sw,bool bQD,bool bInv);
bool CalDir_B(int sw,bool bQD,bool bInv);
bool CalDir_C(int sw,bool bQD,bool bInv);
extern void xb_bs_soe(int sw,u32  dStep);

#endif //_OC_H

/*------------------------------ 文件结束 -------------------------------------
*/

