#ifndef _JDXX_H
#define _JDXX_H

#ifdef FUN_JDXX
////////////////////////////
/*版本说明：
V1.001 增加接地程序功能版本。
*/
#define FUN_JDXX_VERSION 1001	//资源表文件版本 V1.001
/////////////////////////////
typedef struct JDXX_SET// 接地选线定值
{	
	bool bTT_jdxx;	
	bool bTT_jdxx_gj;
	bool bTT_jdxx_tz;	
	bool bTT_jdxx_cph;
	bool bTT_jdxx_p0dir;
	bool bTT_jdxx_fault_all;// 事故总判接地故障
	
	WORD jd_type;
	WORD jd_zero; 			// 零漂值
	WORD jd_qdval;	  		// 启动值
	WORD jd_zero_N; 		// 常规零序
	WORD jd_ov_val;  		// 高精度零序满偏值
	DWORD jd_ov_val2; 		// 高精度满偏模值平方
	//WORD jd_qdIabc;    	// 启动值
	WORD jd_qdval_js;		// 小电流接地重合闸启动值
	WORD jd_qdval_qd;		// 小电流接地启动值
	
	WORD jd_qdPoints;
	WORD jd_surePoints;
	WORD jd_faultPoints;	
	WORD jd_voltype;
	WORD jd_volzero;
	DWORD jd_U0gl;       	// 零序电压定值
	DWORD jd_U0gl_fh;    	// 零序电压返回值
	u32  jd_qdval2;	

	u32  jd_trip_time;		// 出口时间
	u32  jd_alarm_time;     // 告警时间
	
	bool bTT_QD_chz;		   //启动重合闸	
	int i0_chan;   //通道切换

  #ifdef FUN_JDXX_JXJD
	bool bTT_jxjd_stz;   //间歇接地短延时跳闸     
    bool bTT_jxjd_ltz;   //间歇接地长延时跳闸
	WORD jd_sdelay_cnt;
    u32  jd_sdelay_time;		// 出口时间
	WORD jd_ldelay_cnt;
    u32  jd_ldelay_time;		// 出口时间
  #endif 
  #ifdef HJS_XDLJD
	bool jd_js_tt;		// 接地加速投退
	u32  jd_js_time;		// 开放时间
	
	WORD jd_n_qdval;	  	// 正常电流启动值	
	u32  jd_n_qdval2;	
	DWORD jd_n_U0gl;      	// 正常零序电压定值
	DWORD jd_n_U0gl_fh;	    // 零序电压返回值

	WORD jd_js_qdval;	  	// 后加速电流启动值	
	u32  jd_js_qdval2;	
	DWORD jd_js_U0gl;      	// 后加速零序电压定值
	DWORD jd_js_U0gl_fh;	// 零序电压返回值
	
	u32  jd_js_trip_time;	// 后加速出口时间
  #endif
}JDXX_SET;

typedef union uJDXX_T
{
	WORD  wfFlag;
	struct
	{
		WORD    bQD:1;   			//接地选线启动  
		WORD    bTz:1;   			//接地选线动作
		WORD    bGj:1;              //接地选线告警		
		WORD    bTZLed;
		WORD    bGJLed;
	#ifdef HJS_XDLJD
		WORD    bTz_prot:1;			//接地选线动作标志用于保护跳闸
		WORD    bHjsTz:1;			//接地选线后加速动作
		WORD    bJd_qn:1;           //接地区内标识
	#endif
	}bFlag;
}UJDXX_T;

#define     NUM_ANGLE   4
typedef struct JDXX_def
{
    UJDXX_T		sta;	 //断线保护标志
    
	int zeroval;
	WORD jd_qdval;
	WORD jd_U0ov_val;
	
	int jd_u0_12;   //u01或者u02接地
	int jd_step;     //接地状态
	int qdPoints; // 启动后计数值
	int adPoints;  // 采样统计
	int  faultdir;
	u32 dot_qd;
	u32 net_tick_times;  //心跳计数
	int dirNum;
	bool tc_result; //暂态判定:0-界外;1-界内
	uint32_t time_qd;//零压产生时刻
	int con_angle;    //稳态角度计数
	long ui_angle[NUM_ANGLE];  //u0/i0夹角

#ifdef CN_AREA_HUNAN
  	u8 dir_cnt;
  #endif

	TIMERELAY   tJDXXU01Time;  // U01判出时间	
	TIMERELAY   tJDXXU02Time;  // U02判出时间
	TIMERELAY	tJDXXU1yyTime; //US1线电压有压时间	
	TIMERELAY	tJDXXU2yyTime; //US2线电压有压时间
	TIMERELAY   tJDXXIylTime; //相电流有流时间
	TIMERELAY   tJDXXTripTime; // 出口时间
	TIMERELAY   tJDXXAlarmTime;// 告警时间
  #ifdef JDXX_YXEV_RST
	TIMERELAY	tJDGjEvRstTime;  // 接地告警遥信保持时间
	TIMERELAY	tJDTzEvRstTime;  // 接地跳闸遥信保持时间
  #endif
  #ifdef FUN_JDXX_JXJD	
	int cnt_sdelay;
	int cnt_ldelay;
	uint32_t jdxx_sdelay_us0[100];//短延时计时时刻:100--和计数最大值对应
	uint32_t jdxx_ldelay_us0[100];//长延时计时时刻:100--和计数最大值对应
  #endif 
#ifdef HJS_XDLJD
	TIMERELAY   jdxx_jskf_time; //相电流有流时间
#endif
}JDXX_DEF;

extern JDXX_SET tJDXX_val[SWITCH_NUM_MAX];

void jdxx_pro(int sw,DWORD  dStep);  //接地故障判断 5ms中断中处理
void jdxx_init(void);
void jdxx_relayinit(void);
void jdxx_yxev_rst(int sw);
void _getjdxxdz_inf(void);
extern long CalcUIzAng(long Real1, long Imag1, long Real2, long Imag2);
#endif

#endif //_JDXX_H
/*------------------------------ 文件结束 -------------------------------------
*/

