/*******************************************************************************
* 版权所有： 
* 文件版本： V1.00
* 文件名称： bzt.h
* 生成日期： 2008年11月27日
* 作   者： 保护部
* 功   能： 备自投逻辑头文件
* 修改日志：  
* 日志1：           
* 修改者：
* 修改日期：
* 修改内容：
* 修改原因：
********************************************************************************/
#ifndef __BZT_H
#define __BZT_H

enum DL_KG
{
	DL_NULL	=	0,
	DL_1,	
	DL_2,	
	DL_3,	
};

enum BZT_TYPE
{
	BZT_ZT	=	0,		//备自投自投
	BZT_ZF,				//备自投自复
	BZT_HT,				//备自投互投
};


struct BZT_DLX
{
	BYTE fz_dlx;
	BYTE hz_dlx;
	
};
	





/**********************************************************************
备自投标志
***********************************************************************/
typedef union UBZTUI
{
	DWORD  wBZTUI;
	struct
 	{
		WORD    b1MYY :1;    		//I母有压           
        WORD    b2MYY:1;    		//II母有压              
        WORD    b1MWY:1;    		//I母无压              
        WORD    b2MWY:1;    		//II母无压                                                         		
        WORD    b1MCY:1;    		//I母残压              
        WORD    b2MCY:1;    		//II母残压 


		WORD    Ux1WY :1;    		//Ux1无压          
        WORD    Ux2WY:1;    		//Ux2无压 
        WORD    Ix1WL :1;    		//Ix1无流           
        WORD    Ix2WL:1;    		//Ix2无流 

		WORD    Ux1YY :1;    		//Ux1有压
        WORD    Ux2YY :1;    		//Ux2有压   

        
        WORD    KRBS:1;    			//开入闭锁备投 
        WORD    DZBS:1;    			//备投动作闭锁
        WORD    ZBS:1;    			//备投总闭锁				
        WORD    bCD:1;    			//充电标志
        
        WORD	bFDZTCD:1;			//分段自投充电标志		


		WORD	bJX1ZTCD:1;			//进线1自投充电标志
		WORD	bJX2ZTCD:1;			//进线2自投充电标志

		WORD	bJXHTCD:1;			//进线互投充电标志
		WORD	bZFCD:1;			//自复充电标志
        	 
	}bBZT;
}UBZTUI;   


/**********************************************************************
备自投标志
***********************************************************************/
typedef union UBZT
{
    uint64_t   wBZT;
    struct
    {	
    	WORD    FDZTQD:1;    		//分段方式自投启动 
        WORD    CJQD:1;    			//曾经启动 
        WORD    bQDFH:1;    		//备投启动后返回

		WORD	bZTTZ:1; 			//自投跳
		WORD	bZTHZ:1; 			//自投合	
	
		WORD	bHTTZ:1; 			//互投跳
		WORD	bHTHZ:1; 			//互投合	

		WORD	bSYFZ:1; 			//失压分闸	

        	
        WORD    bHFAIL:1;    		//备投合失败
        WORD    bTFAIL:1;    		//备投跳失败
       
        WORD    bHOK:1;    			//备投合成功
        WORD    bTOK:1;    			//备投跳成功
        		
        WORD    bOK:1;    			//备投动作成功   
        WORD    bFAIL:1;    		//备投动作失败  		    
        WORD    bBZTFG:1;    		//备自投复归
        WORD    JXHTQD:1;    		//进线互投启动 
        WORD    JX1HTQD:1;    		//进线互投启动 
        WORD    JX2HTQD:1;    		//进线互投启动 
        WORD    ZFHTQD:1;    		//自复互投启动 

		WORD	CMDZTT:1;			//自投跳命令 
		WORD	auto_tz:1;			//自跳
		WORD	CMDZTH:1;			//自投合命令 

		WORD	dl1_tz:1;			//DL1跳位

		WORD	CMDJX1GZT:1;		//进线1方式跳工作电源命令
		WORD	CMDJX1GZH:1;		//进线1方式合工作电源命令
		WORD	CMDJX1BYT:1;		//进线1方式跳备用电源命令
		WORD	CMDJX1BYH:1;		//进线1方式合备用电源命令

		WORD	CMDJX2GZT:1;		//进线2方式跳工作电源命令
		WORD	CMDJX2GZH:1;		//进线2方式合工作电源命令
		WORD	CMDJX2BYT:1;		//进线2方式跳备用电源命令
		WORD	CMDJX2BYH:1;		//进线2方式合备用电源命令
		
		WORD	CMDJXHTT:1;			//进线互投跳命令
		WORD	CMDJXHTH:1;			//进线互投合命令

		WORD	CMDDJXHTT:1;		//单进线跳命令
		WORD	CMDDJXHTH:1;		//单进线互投合命令

		WORD	CMDZFHTH:1;		//自复合命令
		WORD	CMDZFHTT:1;		//自复跳命令

		WORD	CMDZF_STEP_H:1;
		WORD	CMDZF_STEP_T:1;

		WORD	CMDZFHT_DCSY_H:1;		//自复对侧失压合命令

		WORD	JX_CD_BH:1;			//进线差动保护

		WORD	bCZCG:1;				//备投动作成功   

		WORD  	bFD:1;					//分段方式投退
		WORD 	bJX:1;					//进线方式投退
		WORD 	bDJX:1;					//单进线方式投退
		WORD 	bZF:1;					//自复投退
    }bBZT;
}UBZT;  

typedef struct TBZT_T
{
	TIMERELAY tTFdZtCd;		  		//分段备自投充电时间
	TIMERELAY tTJxZtCd;				//进线备自投充电
	TIMERELAY tTJx1ZtCd;			//进线1备自投充电
	TIMERELAY tTJx2ZtCd;			//进线2备自投充电
	TIMERELAY tTZfZCd;				//自复充电

	TIMERELAY tTbttsb;				//非只投加速启动时判失败时间
	TIMERELAY tTbthsb;  			//合失败判别时间

	TIMERELAY tTb_JXFS_T;			//跳进线开关工作电源延时继电器
	TIMERELAY tTb_JXFS_H;  			//备自投合备用电源延时时间继电器

	TIMERELAY tTb_FDFS_H;			//备自投合分段开关延时时间继电器
	TIMERELAY tTb_FDFS_T;			//备自投分分段开关延时时间继电器

	TIMERELAY tTb_DJXFS_T;			//跳进线开关工作电源延时继电器
	TIMERELAY tTb_DJXFS_H;  		//备自投合备用电源延时时间继电器	

	TIMERELAY tTb_ZF_T;			//自复开关工作电源延时继电器
	TIMERELAY tTb_ZF_H;  		//自复合备用电源延时时间继电器	


	TIMERELAY tTb_FD_delay_fd;		//分段延时放电计时
	TIMERELAY tTb_JX_delay_fd;		//进线延时放电计时
	TIMERELAY tTb_DJX_delay_fd;		//单进线延时放电计时

	TIMERELAY tDL1_HZ_BW_Timer;			
	TIMERELAY tDL1_TZ_BW_Timer;		
	TIMERELAY tDL2_HZ_BW_Timer;			
	TIMERELAY tDL2_TZ_BW_Timer;	
	TIMERELAY tDL3_HZ_BW_Timer;			
	TIMERELAY tDL3_TZ_BW_Timer;	
	TIMERELAY tDL3_TZ_BW_500ms_Timer;	

	TIMERELAY tDL1_CD_RESET_Timer;	

	TIMERELAY	tDL1_YY_25ms;
	TIMERELAY	tDL1_WY_25ms;

	TIMERELAY	tDL2_YY_25ms;
	TIMERELAY	tDL2_WY_25ms;

	TIMERELAY	tDL1_WL_25ms;
	TIMERELAY	tDL2_WL_25ms;

	TIMERELAY	tDL3_PT1_YY_25ms;
	TIMERELAY	tDL3_PT1_WY_25ms;
	TIMERELAY	tDL3_PT2_YY_25ms;
	TIMERELAY	tDL3_PT2_WY_25ms;


	struct BZT_DLX tBZT_dlx;		//备自投当前操作的开关
	TIMERELAY tTb_js;				//备自投加速延时时间继电器
	UBZT	uBZT;    				//备自投标志
	UBZTUI   uBZTUI;    			//备自投电压电流标志,上电时初始化，永不清除
}TBZT_T;




/**********************************************************************
函数定义:
***********************************************************************/
void Bzt_ModeSwitch(int sw);
void OC_FaultEventClear(int sw);

void Bzt_Dataset(int sw, DWORD	dStep);

void Bzt_RunStatus(int sw, DWORD  dStep);

int BZT_ManualOnOffHandle(int sw, u32 index);

int BZT_ManualOnEnableCheck(int sw, u32 index);
void bzt_oc_sw_off(int sw);

void BztQdLogic(int sw, DWORD Step);		//备自投启动逻辑

void BztFdZtQdLogic(int sw, DWORD Step);

void BztJxHtQdLogic(int sw, DWORD Step);
void BztDJxHtQdLogic(int sw, DWORD Step);
void BztZFQdLogic(int sw, DWORD Step);

void Out_BZTCFD(int sw, bool bState);;	//充放电出口逻辑	

void BztProcess(int sw, DWORD Step);    	//备自投逻辑    

void BztFGpb(int sw, DWORD Step);   		//备自投复归判别

void BZTSBFGPB(int sw, bool bCMDT, bool bCMDH,bool bGZDL,bool bBYDL,
					bool dlx, DWORD Step);	//备自投方式1动作失败复归判别

void BZTCGFGPB(int sw, bool bCMDT, bool bCMDH,bool bGZDL,bool bBYDL,DWORD Step);

void Out_BZT_ZTTZ(int sw, bool bState,BYTE dl_x);

void Out_BZT_ZTHZ(int sw, bool bState,BYTE dl_x);

void fz_dl(int sw, BYTE dl_x);

void hz_dl(int sw, BYTE dl_x);

void BztProcessFdZt(int sw, DWORD Step);
void BztProcessJXHt(int sw, DWORD Step);
void BztProcessDJXHt(int sw, DWORD Step);
void BztDL1_ZFHt(int sw, DWORD Step);
void BztDL2_ZFHt(int sw, DWORD Step);

void BztFdZtCdLogic(int sw, DWORD Step);

//void BztFdZfCdLogic(DWORD Step);


void BztJxHtCdLogic(int sw, DWORD Step);
void BztDJxHtCdLogic(int sw, DWORD Step);
void BztZFCdLogic(int sw, DWORD Step);
void BztCdLogic(int sw, DWORD Step);

void Bsbtpb(int sw, DWORD Step);

void BztTimerInit(int sw);
void BztTimerChange(int sw);
void bzt_process(int sw, DWORD Step);


#endif

