/*******************************************************************************
版权所有：	
版本号：  1.00 
文件名：  vol.h
生成日期：2010-04-25
作者：    电力产品开发部   
功能说明：电压控制文件
****************************************************************************/

/*------------------------------- 头文件 --------------------------------------
*/
#ifndef __VOL_LS_H
#define __VOL_LS_H

/*------------------------------- 宏定义 --------------------------------------
*/
enum
{
	FA_TYPE_S=0,		//分段开关
	FA_TYPE_L,		//联络开关
};

enum
{
	S_INIT=1,		//初始状态
	S_TEMP,			//临时状态，用于检测瞬时电压
	S_BSFLASH,		//瞬时电压闭锁状态
	S_XTIME,		//X时限计数状态

	S_X_ZTIME,		//X时限计数中发生的Z时限计数状态
	S_BSXTIME,		//X时限闭锁状态
	S_YTIME,		//Y时限计数状态
	S_Y_ZTIME,		//Y时限计数中发生的Z时限计数状态

	S_BSYTIME,		//Y时限闭锁状态
	S_USUAL,		//正常运行状态
	S_BSDOUBLE,		//双电源闭锁状态
	S_BSHHGZ, 		//合后故障闭锁状态
	S_BSFZ,			//合后闭锁分闸状态
	S_BSDL,			//大电流闭锁分闸状态

	//S_D_ZTIME,		//双电源闭锁状态中发生的Z时限计数状态	
	S_BS_SW,        //
};

enum
{
	L_INIT=1,		//初始状态
	L_BS_STATE,		//联络闭锁，待双侧YL有压解锁
	L_Y_ZTIME,		//Y时限计数状态中发生的Z时限计数状态
	L_USUAL,		//正常运行状态

	L_XLTIME,		//X时限计数状态
	L_XL_ZTIME,		//X时限计数中发生的Z时限计数状态
	L_RELAYON,		//开关合运行状态	
	L_YL_TIME,		//合闸成功Y计时
};

struct vol_stu
{
	u32	status;						//当前状态
	u32	shangdiance;				//当前上电侧
	u32  S_lockstatus;				//分段模式合闸闭锁状态
	u32  L_lockstatus;				//联络模式合闸闭锁状态
	u32 L_status;					//联络模式当前状态
};


/*------------------------------ 类型结构 -------------------------------------
*/

typedef union UVOT_U
{
	WORD  wfFlag;
	struct
	{
		WORD    bQD:1;				//失压启动 
		WORD    bQD1:1;				//失压启动 
		WORD    bTz:1;   			//动作   
		WORD	bHz:1;

		WORD    bLock:1;			//合后故障闭锁失压分闸标志
		WORD    bGL:1;			//合后故障闭锁失压分闸标志
		WORD    bJD:1;			//合后接地故障闭锁失压分闸标志

		WORD    bGLQD:1;
		WORD    bStartLock:1;			//
		WORD	bDISENDZ:1;		// 保护退出
		WORD	bDISENBS:1;		// 保护退出

		WORD    bEvent:1;
		WORD 	bFault:1;		//计数完成
		WORD 	bTz1:1;		//计数完成
		WORD	bSHWY:1;	//手合无压标志
		
	}bFlag;
}UVOT_U;

typedef struct TLOSTVOT_T
{
	UVOT_U 		uLostVot;		//失压标志
	TIMERELAY 	tLostVotTime; 		//失压跳闸时间继电器
	TIMERELAY 	tCYY25ms0ms; 		//曾有压标志 
	TIMERELAY 	tLostVLockTime;
	bool 		bLostVotLed;
	WORD            losttimes; 			//失压次数
	WORD            wfFlagsave;
}TLOSTVOT_T;

typedef struct TTQHZ_T
{
	UVOT_U		uTQHz;		//同期合闸
	TIMERELAY 	tTQTime; 	//同期合闸时间继电器
	TIMERELAY 	tTQQDTime; 	//同期合闸时间继电器	
	bool		bBSTQLed;
}TTQHZ_T;

typedef union UU0_U
{
	WORD  wfFlag;
	struct
	{
		WORD    bQD:1;				//失压启动 
		WORD    bTz:1;   				//告警动作   
		WORD    bEvent:1;
		WORD    bLock:1;				//合后故障闭锁失压分闸标志
		WORD    bGJQD:1;				//失压启动 
		WORD    bGJ:1;   				//告警动作   
		WORD    bU0Ov:1;				//合后故障闭锁失压分闸标志
		WORD    bGJEvent:1;	
		WORD	bDISENGJ:1;		// 保护退出
		WORD	bDISENDZ:1;
	}bFlag;
}UU0_U;

typedef struct TU0_T		//定义零序过压保护处理结构体
{
	UU0_U  		uZOV;   	//零序过压标志
	TIMERELAY 	tZOVTime; 	//零序过压跳闸时间继电器
	TIMERELAY 	tU0TzTime; 	//零序过压跳闸时间继电器
	bool 		bU0Led;
	bool 		bU0GjLed;
}TU0_T;

typedef union USDHZ_U
{
    DDWORD  wfFlag;
	struct
	{
		DDWORD   bUABYY:1;					//UAB有压标志
		DDWORD   bUBCYY:1;					//UBC有压标志
		DDWORD	bUABFlash:1;
		DDWORD	bUBCFlash:1;
		
		DDWORD	bPower:1;				//上电记录标志 Uab1侧，电源侧
		DDWORD	bYY:1;						//有压标志
		DDWORD	bCYY:1;						//FA曾有压
		DDWORD	bDBYY:1;					//两侧有压标志
		DDWORD	bOneLostV:1;				//一侧失压标志
		
		DDWORD	bOppositeYY:1;				//对侧有压标志
		DDWORD	bPowerYY:1;					//电源侧有压标志
		DDWORD	bPowerZ:1;					//停电时间		DWORD	bLockX:1;					//X时间闭锁
		
		DDWORD	bLockY:1;					//Y时间闭锁
		DDWORD   bLockUFlash:1;				//瞬时加压闭锁			
		DDWORD	bRLONFLAG:1;				//开关合命令标志
		
		DDWORD   bHz:1;   					//告警动作   		
		DDWORD   bHZEvent:1;					//合闸事件
		DDWORD   bX_HZEvent:1;					//x合闸事件
		DDWORD	bGL2:1;					//故障记忆	xj 2016.08.25
		DDWORD	bJD2:1;					//接地记忆
		DDWORD	bGL_II:1;
		DDWORD	bGL:1;					//故障记忆	xj 2016.08.25
		DDWORD	bJD:1;					//接地记忆

		DDWORD	bOverU0:1;					//零序过压标志
		DDWORD    bXOverUo:1;                     // X 时间有U0
		DDWORD    bUabflashDI;					// 失电过程中的Uab瞬压标志
		DDWORD    bUbcflashDI;					// 失电过程中的Uab瞬压标志
		
		//DDWORD   bGjEvent:1;					//合闸事件
		DDWORD	bSaveStatus:1;				//状态保护标志
		DDWORD	bSNChange:1;				//上电记录标志
		DDWORD	bTempJS:1;					//临时解锁标志//		DWORD	bxdljd:1;					//暂态判断小电流接地
		DDWORD	bOCing:1;					//FA过流状态
		DDWORD	bJS:1;						//满足解锁条件已解锁状态
#if defined GD_AREA_ECZD_2020 && !defined GD_AREA_ZHONGSHAN_2020
		DDWORD	bHhgz:1;			//合后故障
#endif
#ifdef GD_AREA_ECZD_CHAOZHOU_2022
		DDWORD	bHzEnable_P:1;			//电源侧允许合闸标志
		DDWORD	bBsXtime_P:1;			//电源侧闭锁X-TIME
		DDWORD	bHzEnable_L:1;			//负荷侧允许合闸标志
		DDWORD	bBsXtime_L:1;			//负荷侧闭锁X-TIME
		DDWORD	bPtErr_P:1; 		//电源侧PT曾断线
		DDWORD	bPtErr_L:1; 		//负荷侧PT曾断线
#endif
	#ifdef FUNC_NYY_NWY
		DDWORD   bUAB_NYY_NWY:1;					//UAB非有压非无压态
		DDWORD   bUBC_NYY_NWY:1;					//UBC非有压非无压态
	#endif
	#ifdef GD_AREA_HEYUAN_2021
		DDWORD   bYtOn:1;					//进入过Y计时标志
	#endif
    }bFlag;
}USDHZ_U;

typedef struct TSDHZ_T
{
	USDHZ_U uSdhz_S;		//分段开关上电合闸标志
	USDHZ_U uSdhz_L;		//联络开关上电合闸标志
	

	WORD S_Status;		//分段开关运行中的状态标志
	WORD L_Status;		//联络开关运行中的状态标志

	DWORD s_flag_save;
	DWORD l_flag_save;

	WORD S_Status_save;		//分段开关运行中的状态标志
	WORD L_Status_save;		//联络开关运行中的状态标志
#ifdef	FA_OC_COUNT
	WORD fa_oc_count;				//过流次数
	TIMERELAY	tFaOcCountTime;		//过流脉冲复归继电器
#endif	
	bool    bDL_Tz;
	bool    bDL_Hz;
	bool    bInitUF;

	bool    bSDHZinit;              //上电合闸初始化:无压后启动S上电合闸 1--初始化,0--未初始化 

	TIMERELAY	tOnXSTime;			//X时间继电器
	TIMERELAY	tOnYSTime;			//Y时间继电器
	TIMERELAY	tOnZSTime;			//Z时间继电器

	TIMERELAY	tOnXLTime;			//XL时间继电器
	TIMERELAY	tOnYLTime;			//YL时间继电器
	TIMERELAY	tOnLLCDYLTime;		//联络充电时间继电器
	TIMERELAY	tOnZLTime;			//ZL时间继电器
	TIMERELAY	tOnOCingTime;		//FA过流状态继电器
	TIMERELAY	tOnLXingTime;		//FA零序状态继电器
	TIMERELAY	tOnJSTime;			//单侧来电解锁时间继电器
	TIMERELAY	tOnY_JSTime;		//正向闭锁后，反向来电合闸双侧有压时间继电器，中山局要求3S
	TIMERELAY	tOnBSTZTime;		//合闸成功闭锁跳闸时间
	TIMERELAY	tOnHW_FA_JSTime;	//合位直接解锁时间 默认1s
	TIMERELAY	tUABS25ms;
	TIMERELAY	tUBCS25ms;
#ifdef FUNC_NYY_NWY
	TIMERELAY	tUABS_NYY_NWY_50ms;
	TIMERELAY	tUBCS_NYY_NWY_50ms;
	TIMERELAY	tUABL_NYY_NWY_50ms;
	TIMERELAY	tUBCL_NYY_NWY_50ms;
#endif

	TIMERELAY	tUDBS100ms;	

	TIMERELAY	tUFABL80ms;
	TIMERELAY	tUFBCL80ms;
	TIMERELAY	tUFDBTime;  // 瞬压判断时间

	TIMERELAY	tUABL25ms;
	TIMERELAY	tUBCL25ms;

	TIMERELAY	tUFABS80ms;
	TIMERELAY	tUFBCS80ms;

	TIMERELAY	tUFABS25ms;
	TIMERELAY	tUFBCS25ms;

	TIMERELAY	tUFABL25ms;
	TIMERELAY	tUFBCL25ms;

	TIMERELAY	tFREQAB25ms_SCY;		//用于S模式电源侧残压的频率判断
	TIMERELAY	tFREQBC25ms_SCY;		//用于S模式线路侧残压的频率判断
	TIMERELAY	tFREQAB25ms_LCY;		//用于L模式电源侧残压的频率判断
	TIMERELAY	tFREQBC25ms_LCY;		//用于L模式线路侧残压的频率判断
	TIMERELAY	tFREQSAB25ms;			//用于S模式电源侧得电合闸的频率判断
	TIMERELAY	tFREQSBC25ms;			//用于S模式线路侧得电合闸的频率判断
	TIMERELAY	tFREQLAB25ms;			//用于L模式电源侧得电合闸的频率判断
	TIMERELAY	tFREQLBC25ms;			//用于L模式线路侧得电合闸的频率判断

	TIMERELAY	tL_RELAYONL3s;
	TIMERELAY	tHzS100ms;	
	TIMERELAY 	tTSDHzHJS;                        // 上电合闸后加速延时

	TIMERELAY	tOpsiteYY100ms;
	TIMERELAY	tPowerYY100ms;

	TIMERELAY	tGZJYRstGL_II_Time; 		//故障记忆复归时间

	TIMERELAY 	tGZJYRstGLTime;			//故障记忆复归时间
	TIMERELAY 	tGZJYRstJDTime;			//故障记忆复归时间 

	TIMERELAY	tGZJYRstGL2Time; 		//故障记忆复归时间
	TIMERELAY	tGZJYRstJD2Time; 		//故障记忆复归时间 


	TIMERELAY	tHw100ms100ms;
	TIMERELAY	tTw100ms100ms;	
	TIMERELAY	tHz0ms1s;
	TIMERELAY	tTz0ms1s;
	TIMERELAY	tHz0ms2s;
	TIMERELAY	tTz0ms2s;
	bool 		bS_BSLed;
	bool 		bL_BSLed;
#ifdef FUNC_REBOOT_BS_HA_JS_3S
	TIMERELAY	tHW_JS_HA_3STime;	//合位解锁手分/遥分闭锁时间 默认3S
#endif

}TSDHZ_T;

typedef struct _bRTCSAVE
{
	WORD	bSig;							//存储签名
	BYTE	bStatus;						//当前状态
	BYTE	bShangDianCe;					//当前上电侧
	WORD	bCrc;							//crc校验码
}bRTCSAVE;
typedef struct THZBS_T
{
	TIMERELAY 	tBSHZTime; 	//同期合闸时间继电器
	TIMERELAY	tTw100ms100ms;	
	WORD            fztimes;
}THZBS_T;

/*------------------------------ 函数声明 -------------------------------------
*/
extern TLOSTVOT_T	tLostVot[SWITCH_NUM_MAX];   	//失压标志
extern TTQHZ_T	tTQHz[SWITCH_NUM_MAX];			//同期合闸标志
extern TSDHZ_T	tSDHZ[SWITCH_NUM_MAX];			//上电合闸标志
extern u8 g_volfile_open;
extern bool gb_wake_soe;

void FA_Run(DWORD  dStep);
void FA_Init(void);
void FA_lostvotTz(int sw,DWORD  dStep);    		//失压跳闸判断
void FA_OverU0Tz(int sw,DWORD  dStep);
int vol_stu_printf(void);
int FA_status_write(void);
int FA_exit(void);
void Pro_hzbs(int sw,DWORD  dStep);
bool fa_bs_hz(int sw);
bool fa_bs_fz(int sw);
void fa_s_state_change(int sw,int state);
#ifdef FUN_JDXX
	bool get_power_on_dir(int sw);
#endif
#endif//


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