| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
- /******************************************************************************
- 版权所有:
- 文件名称: 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
- /*------------------------------ 文件结束 -------------------------------------
- */
|