/****************************************************************************** 版权所有: 文件名称: protect.h 文件版本: 01.01 创建作者: xxxxxx 创建日期: 2012-03-28 功能说明: 保护整组处理过程 其它说明: 修改记录: */ #ifndef _PROTECT_H #define _PROTECT_H /*------------------------------- 头文件 -------------------------------------- */ /*------------------------------- 宏定义 -------------------------------------- */ // 控制出口总压板 #define JZS_ALL_EN(sw) (g_tRelay[sw].run_stu.jzs_tt && pRunSet->tSwSet[sw].btt_gnyb_jzs) #define KZ_OUT_ALL_EN(sw) (pRunSet->tSwSet[sw].btt_yxyb_gnzck && !JZS_ALL_EN(sw)) // 保护总投退 #if defined YB_AUTO_SELECT && !defined GD_AREA_ECZD_2020 #define FUN_ALL_EN(sw) (pRunSet->tSwSet[sw].btt_yxyb_gnztt && fa_fun_true(sw)) #elif defined GD_AREA_ZHONGSHAN_2020 #define FUN_ALL_EN(sw) (g_run_stu.bhall && pRunSet->tSwSet[sw].btt_yxyb_gnztt && g_tRelay[sw].run_stu.bhztt && fa_fun_true(sw)) #else #define FUN_ALL_EN(sw) (g_run_stu.bhall && pRunSet->tSwSet[sw].btt_yxyb_gnztt && g_tRelay[sw].run_stu.bhztt) #endif #if defined GD_AREA_ZHONGSHAN || defined GD_AREA_ZHONGSHAN_2020 // 中山要求通信异常,全系统均异常 // 分布式 FA总投退 #define BH_GOOSE_EN_YB(sw) (FUN_ALL_EN(sw) && g_tRelay[sw].run_stu.fa_g_tt && pRunSet->tSwSet[sw].btt_gnyb_dfa && pRunSet->tSwSet[sw].tGocSet.bTT_gooseFA) #define BH_GOOSE_EN(sw) (BH_GOOSE_EN_YB(sw) && (!tFAg.bComErr)) #define BH_GOOSE_COMMERR(sw) (BH_GOOSE_EN_YB(sw) && (tFAg.bComErr)) #define BH_ALL_EN(sw) (FUN_ALL_EN(sw) && pRunSet->tSwSet[sw].btt_gnyb_cg && ((g_tRelay[sw].run_stu.cgbhtt && (!BH_GOOSE_EN_YB(sw))) || (BH_GOOSE_EN_YB(sw) && pRunSet->tSwSet[sw].tGocSet.bsw_fz))) #define FA_ALL_EN(sw) (FUN_ALL_EN(sw) && pRunSet->tSwSet[sw].btt_gnyb_fa && ((g_tRelay[sw].run_stu.fatt && (!BH_GOOSE_EN_YB(sw))) || (BH_GOOSE_COMMERR(sw) && !pRunSet->tSwSet[sw].tGocSet.bsw_fz))) #else #ifdef YB_AUTO_SELECT #define BH_GOOSE_EN_YB(sw) (FUN_ALL_EN(sw) && goose_yb_enable(sw) && pRunSet->tSwSet[sw].tGocSet.bTT_gooseFA) #define BH_GOOSE_EN(sw) (BH_GOOSE_EN_YB(sw)) #define BH_GOOSE_COMMERR(sw) (false) #define BH_ALL_2(sw) (FUN_ALL_EN(sw) && bh_yb_enable(sw) && (!BH_GOOSE_EN(sw))) #define BH_ALL_EN(sw) (BH_ALL_2(sw) || JZS_ALL_EN(sw)) #define FA_ALL_EN(sw) (FUN_ALL_EN(sw) && fa_yb_enable(sw) && (!BH_GOOSE_EN(sw))) #else #define BH_GOOSE_EN_YB(sw) (FUN_ALL_EN(sw) && g_tRelay[sw].run_stu.fa_g_tt && pRunSet->tSwSet[sw].btt_gnyb_dfa && pRunSet->tSwSet[sw].tGocSet.bTT_gooseFA) #define BH_GOOSE_EN(sw) (BH_GOOSE_EN_YB(sw)) #define BH_GOOSE_COMMERR(sw) (false) #define BH_ALL_2(sw) (FUN_ALL_EN(sw) && pRunSet->tSwSet[sw].btt_gnyb_cg && g_tRelay[sw].run_stu.cgbhtt && (!BH_GOOSE_EN(sw))) #define BH_ALL_EN(sw) (BH_ALL_2(sw) || JZS_ALL_EN(sw)) #define FA_ALL_EN(sw) (FUN_ALL_EN(sw) && pRunSet->tSwSet[sw].btt_gnyb_fa && g_tRelay[sw].run_stu.fatt && (!BH_GOOSE_EN(sw))) #endif #endif // 重合闸压板 #define CHZ_ALL_EN(sw) (pRunSet->tSwSet[sw].btt_gnyb_zdchz && g_tRelay[sw].run_stu.chzyb && !g_tRelay[sw].run_stu.bsch) // 同期合闸软压板 #define TYTQ_ALL_EN(sw) (!FUN_ALL_EN(sw) || !pRunSet->tSwSet[sw].btt_gnyb_tqhz) // 解列压板 #define JL_ALL_EN(sw) (FUN_ALL_EN(sw) && pRunSet->tSwSet[sw].btt_gnyb_zdjl) // 定值时间判断 #define BH_WAVETIME_EN(dSetTime) ((dSetTime >= (T_10ms * 10)) ? 1 : 0) // 取相量模值 #define SQR(a,b) (a*a + b*b) // 采样区存储采样点数 #define SAMLENGTH (CFG_ADC_DOTS_PER_CHANNEL-1) #define ANGLE_P180 ( 11796480) #define ANGLE_N180 (-11796480) #define ANGLE_P360 ( 23592960) #define ANGLE_N40 (-2621440) #define ANGLE_P130 ( 8519680) #define ANGLE_P140 ( 9175040) #define ANGLE_N50 (-3276800) #define ANGLE_P20 ( 1310720) #define ANGLE_P10 ( 655360) #define ANGLE_N170 (-11141120) #define ANGLE_N160 (-10485760) #define ANGF180 (180*65535) //180度 #define ANGN180 ((-180)*65535) //-180度 #define ANG360 (360 << 16) //360度 #define ANG225 (225 << 16) //225度 #define ANG315 (315 << 16) //315度 #define ANG120 (120 << 16) //120度 #define TAN5 375760949 //tan5度*2^32 #define TAN10 757308616 //tan10度*2^32 #define TAN25 2002776141 //tan25度*2^32 #define TAN30 2479700525 //tan30度*2^32 #define TAN35 3007368477 //tan35度*2^32 /*------------------------------ 类型结构 ------------------------------------- */ // 保护整组处理标志结构定义 struct protect_stu { u32 sw; // 保护当前处理的开关 u32 t_rcd_bh; // 用于5ms巡检,记录上一次轮巡时刻 u8 update; // 上电 bool bARSTFLT; //整组自动复归事故总202004 }; // 保护启动标志状态标志 typedef union UBHQD { DWORD dfBHQDLogic; struct { DWORD bZQD :1; // 总启动 DWORD bQD25ms:1; // 启动一个周波 DWORD bTBQD:1; // 突变量电流启动 DWORD bFZQD:1; // 幅值启动 DWORD bBHQD:1; // 保护启动 DWORD bZZFG:1; // 整组复归 #ifdef CUSTOMIZE_BZT //备自投 WORD bBZTQD:1; //备自投启动 #endif }bFlag; }UBHQD; // 保护动作跳闸标志 typedef union UBHDZ { WORD dfBHDZLogic; struct { WORD bBHDZ:1; // 保护动作总标志 WORD bBHTZ:1; // 保护动作总标志 WORD bSYTz:1; // 失压跳闸 WORD bBHTrip:1; // 保护跳闸总标志 WORD bTZOut:1; // 跳闸出口 WORD bTZSB:1; // 跳闸失败 WORD bHZOut:1; // 合闸出口 WORD bBHT:1; // 保护跳 WORD bBHH:1; // 保护合 #ifdef SELF_OPEN_RELEASE WORD bBHTKeep:1; // 保护跳保持标志 #endif }bFlag; }UBHDZ; // 保护启动标志状态标志 typedef union UOCDIR { WORD wfFlag; struct { WORD Iazx:1; // Ia正向 WORD Ibzx:1; // Ib正向 WORD Iczx:1; // Ic正向 }bFlag; }UOCDIR; // 遥控、手动分合闸 typedef struct URMTSW { bool bYTExecute; // 遥控跳闸 bool bYHExecute; // 遥控合闸 bool bHandHz; // 手动合闸 bool bHandTz; // 手动分闸 #ifdef SELF_OPEN_RELEASE bool bSwTz; // 开关本体分闸 #endif bool bTQHz; // 同期合闸标志 bool bYHExecute_fa; bool bYTExecute_fa; bool bHandHz_fa; // 手动合闸 bool bHandTz_fa; // 手动分闸 bool bYH_fajs_flag; // 遥控合闸解锁标志 bool bTz_Doing; // 合闸 bool bHz_Doing; // 分闸 #ifdef FUNC_REBOOT_BS_HA_JS_3S bool b_bsha; // 重新上电后的手分/遥分闭锁合闸标志 #endif }URMTSW; typedef struct TRELAY_T // 开关逻辑结构体定义 { u8 zqd; // 总启动标志,可由突变量或幅值启动置位 u8 fzqd; // 幅值启动标志 u8 fzdz; // 幅值动作标志 u8 fzzzdz; // 幅值整组动作标志 u8 tblqd; // 突变时启动标志 u8 tbldz; // 突变量动作标志 u8 tblzzdz; // 突变量整组动作标志 u16 gz_process; // 故障处理流程 u32 t_rcd_qd; // 记录启动时刻,因为每个开关的启动时刻不同,所以跟开关对接 dTfault u32 t_rcd_gz; // 用于故障处理过程,记录上一次轮巡时刻 dTRcd0 u32 us_tbl; // 突变量统计初始时间 u32 us_fz; // 幅值统计初始时间 bool bBSHZ; //短时间内分闸次数到,闭锁合闸 bool bBSTZ; // 闭锁跳闸 bool bARSTFLT; //开关自动复归事故总202004 TFDL_T tFdl[6]; TOC_T tOC[BHOC_NUMBER]; // 过流保护相关 TCH_T tCHZ; // 重合闸 UGLFSX uGLFSX; //过流反时限标志字 FSXCS FsxcsGL; //过流反时限继电器人口参数 #ifdef CUSTOMIZE_BZT //备自投 TBZT_T tBzt; #endif // TVOL_T tU0GZ; // 零压故障 TLOSTVOT_T tLostVot; //失压标志 TU0_T tU0TZ; //合后零压跳闸 TU0_T tXXTZ; //选线跳闸 TU0_T tOVER_U0TZ; //过零序电压跳闸 TJL_T tDYJL; //电压解列 TJL_T tPLJL; //频率解列 TTQHZ_T tTQHz; //同期合闸标志 TSDHZ_T tSDHZ; //上电合闸标志 TGOC_T tgoc; //方向过流goose TSWST tSWST; // 开关运行状态识别 RUN_STU_SW run_stu; UBHQD uBHQD; // 保护启动标志字 UBHDZ uBHDZ; // 保护动作标志字 URMTSW uRmtSW; // 遥控分、合闸 THZBS_T thzbs; TIMERELAY tMb_yuk_time; TIMERELAY tTZZFG_5S0ms; // 无故障延时5s TIMERELAY tTrip_BHT40MS; // 跳闸脉冲计时器,跳闸开出最短时间40MS TIMERELAY tTripfail_2s; // 跳闸脉冲计时器,跳闸开出最短时间100MS TIMERELAY tTripfail_hz; // 跳闸脉冲计时器,跳闸开出最短时间100MS #ifdef SELF_OPEN_RELEASE TIMERELAY tTripBHTKeep; // 保护跳保持继电器 #endif struct rt_stat tbl_stat; // 用于突变量启动统计 struct rt_stat tbldz_stat; // 用于突变量动作统计 struct rt_stat tblzzdz_stat; // 用于突变量整组动作统计 struct rt_stat fz_stat; // 用于幅值启动统计 struct rt_stat fzdz_stat; // 用于幅值动作统计 struct rt_stat fzzzdz_stat; // 用于幅值整组动作统计 #ifdef FUN_JDXX JDXX_DEF tJD; //小电流接地 #endif YC_REFRESH_EN bYcRefresh; }TRELAY_T; extern TRELAY_T g_tRelay[]; /*------------------------------ 变量声明 ------------------------------------- */ extern struct protect_stu g_protect; // 保护整组处理过程 /*------------------------------ 函数声明 ------------------------------------- */ int protect_init(void); int protect_polling(void); int protect_tbl_qd(void); int protect_amp_qd_js(int sw); int protect_amp_lx_js(int sw); int protect_stat_reset(void); int protect_printf_process(void); int protect_amp_lx_js(int sw); void sw_op_fail(DWORD dStep); #ifdef YB_AUTO_SELECT bool fa_yb_enable(int sw); bool goose_yb_enable(int sw); bool bh_yb_enable(int sw); #endif //#ifdef GD_AREA_ZHONGSHAN_2020 //中山要求硬压板和软压板要一一对应 #if defined GD_AREA_ZHONGSHAN_2020 || defined YB_AUTO_SELECT bool fa_fun_true(int sw); #endif #ifdef FUNC_DRIVE void quit_drive(void); #endif #endif //_APP_H /*------------------------------ 文件结束 ------------------------------------- */