protect.h 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. /******************************************************************************
  2. 版权所有:
  3. 文件名称: protect.h
  4. 文件版本: 01.01
  5. 创建作者: xxxxxx
  6. 创建日期: 2012-03-28
  7. 功能说明: 保护整组处理过程
  8. 其它说明:
  9. 修改记录:
  10. */
  11. #ifndef _PROTECT_H
  12. #define _PROTECT_H
  13. /*------------------------------- 头文件 --------------------------------------
  14. */
  15. /*------------------------------- 宏定义 --------------------------------------
  16. */
  17. //控制出口总压板
  18. #define JZS_ALL_EN(sw) (g_tRelay[sw].run_stu.jzs_tt && pRunSet->bTT_SOFT_JZS_YB)
  19. #define KZ_OUT_ALL_EN(sw) (pRunSet->bTT_KZ_YB && !JZS_ALL_EN(sw))
  20. // 保护总投退
  21. #if defined YB_AUTO_SELECT && !defined GD_AREA_ECZD_2020
  22. #define FUN_ALL_EN(sw) (pRunSet->bTT_BH_YB&&fa_fun_true(sw))
  23. #elif defined GD_AREA_ZHONGSHAN_FTU
  24. #define FUN_ALL_EN(sw) (g_run_stu.bhall&&pRunSet->bTT_BH_YB&&(!g_tRelay[sw].run_stu.bs_bhz))
  25. //#elif defined GD_AREA_ZHONGSHAN_2020
  26. #elif defined GD_AREA_ZHONGSHAN_2020 || defined GD_AREA_MAIN_2020
  27. #define FUN_ALL_EN(sw) (g_run_stu.bhall&&pRunSet->bTT_BH_YB&&g_tRelay[sw].run_stu.bhztt&&fa_fun_true(sw))
  28. #else
  29. #define FUN_ALL_EN(sw) (g_run_stu.bhall&&pRunSet->bTT_BH_YB&&g_tRelay[sw].run_stu.bhztt)
  30. #endif
  31. #if defined GD_AREA_ZHONGSHAN || defined GD_AREA_ZHONGSHAN_2020 //中山要求通信异常,全系统均异常
  32. // 分布式 FA总投退
  33. #define BH_GOOSE_EN_YB(sw) (FUN_ALL_EN(sw)&&g_tRelay[sw].run_stu.fa_g_tt&&pRunSet->bTT_SOFT_GOOSE_YB&&pRunSet->tSwSet[sw].tGocSet.bTT_gooseFA)
  34. #define BH_GOOSE_EN(sw) (BH_GOOSE_EN_YB(sw)&&(!tFAg.bComErr))
  35. #define BH_GOOSE_COMMERR(sw) (BH_GOOSE_EN_YB(sw)&&(tFAg.bComErr))
  36. #define BH_ALL_EN(sw) (FUN_ALL_EN(sw) && pRunSet->bTT_SOFT_BH_YB && ((g_tRelay[sw].run_stu.bhtt&&(!BH_GOOSE_EN_YB(sw)))||(BH_GOOSE_EN_YB(sw)&&pRunSet->tSwSet[sw].tGocSet.bsw_fz)))
  37. #define FA_ALL_EN(sw) (FUN_ALL_EN(sw) && pRunSet->bTT_SOFT_FA_YB && ((g_tRelay[sw].run_stu.fatt&&(!BH_GOOSE_EN_YB(sw)))||(BH_GOOSE_COMMERR(sw)&&!pRunSet->tSwSet[sw].tGocSet.bsw_fz)))
  38. #else
  39. #ifdef YB_AUTO_SELECT
  40. #define BH_GOOSE_EN_YB(sw) (FUN_ALL_EN(sw)&&goose_yb_enable(sw)&&pRunSet->tSwSet[sw].tGocSet.bTT_gooseFA)
  41. #define BH_GOOSE_EN(sw) (BH_GOOSE_EN_YB(sw))
  42. #define BH_GOOSE_COMMERR(sw) (false)
  43. #define BH_ALL_2(sw) (FUN_ALL_EN(sw) && bh_yb_enable(sw) && (!BH_GOOSE_EN(sw)))
  44. #define BH_ALL_EN(sw) (BH_ALL_2(sw)||JZS_ALL_EN(sw))
  45. #define FA_ALL_EN(sw) (FUN_ALL_EN(sw) && fa_yb_enable(sw) &&(!BH_GOOSE_EN(sw)))
  46. #else
  47. #define BH_GOOSE_EN_YB(sw) (FUN_ALL_EN(sw)&&g_tRelay[sw].run_stu.fa_g_tt&&pRunSet->bTT_SOFT_GOOSE_YB&&pRunSet->tSwSet[sw].tGocSet.bTT_gooseFA)
  48. #define BH_GOOSE_EN(sw) (BH_GOOSE_EN_YB(sw))
  49. #define BH_GOOSE_COMMERR(sw) (false)
  50. #define BH_ALL_2(sw) (FUN_ALL_EN(sw) && pRunSet->bTT_SOFT_BH_YB && g_tRelay[sw].run_stu.bhtt && (!BH_GOOSE_EN(sw)))
  51. #define BH_ALL_EN(sw) (BH_ALL_2(sw)||JZS_ALL_EN(sw))
  52. #define FA_ALL_EN(sw) (FUN_ALL_EN(sw) && pRunSet->bTT_SOFT_FA_YB && g_tRelay[sw].run_stu.fatt&&(!BH_GOOSE_EN(sw)))
  53. #endif
  54. #endif
  55. //重合闸压板
  56. #define CHZ_ALL_EN(sw) (pRunSet->bTT_CHZ_YB && g_tRelay[sw].run_stu.chzyb && !g_tRelay[sw].run_stu.bsch)//BH_ALL_EN(sw) &&
  57. //同期压板
  58. #define TQ_ALL_EN(sw) (FUN_ALL_EN(sw) && pRunSet->bTT_TQ_YB)
  59. //解列压板
  60. #define JL_ALL_EN(sw) (FUN_ALL_EN(sw) && pRunSet->bTT_JL_YB)
  61. //同期合闸软压板
  62. #define TYTQ_ALL_EN(sw) (!FUN_ALL_EN(sw) || !pRunSet->bTT_TQ_YB)
  63. //定值时间判断
  64. #define BH_WAVETIME_EN(dSetTime) ((dSetTime>=(T_10ms*10))?1:0)
  65. // 取相量模值
  66. #define SQR(a,b) (a*a + b*b)
  67. // 采样区存储采样点数
  68. #define SAMLENGTH (CFG_ADC_DOTS_PER_CHANNEL-1)
  69. #define ANGLE_P180 ( 11796480)
  70. #define ANGLE_N180 (-11796480)
  71. #define ANGLE_P360 ( 23592960)
  72. #define ANGLE_N40 (-2621440)
  73. #define ANGLE_P130 ( 8519680)
  74. #define ANGLE_P140 ( 9175040)
  75. #define ANGLE_N50 (-3276800)
  76. #define ANGLE_P20 ( 1310720)
  77. #define ANGLE_P10 ( 655360)
  78. #define ANGLE_N170 (-11141120)
  79. #define ANGLE_N160 (-10485760)
  80. #define ANGF180 (180*65535) //180度
  81. #define ANGN180 ((-180)*65535) //-180度
  82. #define ANG360 (360 << 16) //360度
  83. #define ANG225 (225 << 16) //225度
  84. #define ANG315 (315 << 16) //315度
  85. #define ANG120 (120 << 16) //120度
  86. #define TAN5 375760949 //tan5度*2^32
  87. #define TAN10 757308616 //tan10度*2^32
  88. #define TAN25 2002776141 //tan25度*2^32
  89. #define TAN30 2479700525 //tan30度*2^32
  90. #define TAN35 3007368477 //tan35度*2^32
  91. /*------------------------------ 类型结构 -------------------------------------
  92. */
  93. // 保护整组处理标志结构定义
  94. struct protect_stu
  95. {
  96. u32 sw; // 保护当前处理的开关
  97. u32 t_rcd_bh; // 用于5ms巡检,记录上一次轮巡时刻
  98. u8 update; // 上电
  99. bool bARSTFLT; //整组自动复归事故总202004
  100. };
  101. // 保护启动标志状态标志
  102. typedef union UBHQD
  103. {
  104. DWORD dfBHQDLogic;
  105. struct
  106. {
  107. DWORD bZQD :1; // 总启动
  108. DWORD bQD25ms:1; // 启动一个周波
  109. DWORD bTBQD:1; // 突变量电流启动
  110. DWORD bFZQD:1; // 幅值启动
  111. DWORD bBHQD:1; // 保护启动
  112. DWORD bZZFG:1; // 整组复归
  113. #ifdef CUSTOMIZE_BZT //备自投
  114. WORD bBZTQD:1; //备自投启动
  115. #endif
  116. }bFlag;
  117. }UBHQD;
  118. // 保护动作跳闸标志
  119. typedef union UBHDZ
  120. {
  121. WORD dfBHDZLogic;
  122. struct
  123. {
  124. WORD bBHDZ:1; // 保护动作总标志
  125. WORD bBHTZ:1; // 保护动作总标志
  126. WORD bSYTz:1; // 失压跳闸
  127. WORD bBHTrip:1; // 保护跳闸总标志
  128. WORD bTZOut:1; // 跳闸出口
  129. WORD bTZSB:1; // 跳闸失败
  130. WORD bHZOut:1; // 合闸出口
  131. WORD bBHT:1; // 保护跳
  132. WORD bBHH:1; // 保护合
  133. #ifdef SELF_OPEN_RELEASE
  134. WORD bBHTKeep:1; // 保护跳保持标志
  135. #endif
  136. }bFlag;
  137. }UBHDZ;
  138. // 保护启动标志状态标志
  139. typedef union UOCDIR
  140. {
  141. WORD wfFlag;
  142. struct
  143. {
  144. WORD Iazx:1; // Ia正向
  145. WORD Ibzx:1; // Ib正向
  146. WORD Iczx:1; // Ic正向
  147. }bFlag;
  148. }UOCDIR;
  149. // 遥控、手动分合闸
  150. typedef struct URMTSW
  151. {
  152. bool bYTExecute; // 遥控跳闸
  153. bool bYHExecute; // 遥控合闸
  154. bool bHandHz; // 手动合闸
  155. bool bHandTz; // 手动分闸
  156. #ifdef SELF_OPEN_RELEASE
  157. bool bSwTz; // 开关本体分闸
  158. #endif
  159. bool bTQHz; // 同期合闸标志
  160. bool bYHExecute_fa;
  161. bool bYTExecute_fa;
  162. bool bHandHz_fa; // 手动合闸
  163. bool bHandTz_fa; // 手动分闸
  164. bool bYH_fajs_flag; // 遥控合闸解锁标志
  165. bool bTz_Doing; // 合闸
  166. bool bHz_Doing; // 分闸
  167. #ifdef FUNC_REBOOT_BS_HA_JS_3S
  168. bool b_bsha; // 重新上电后的手分/遥分闭锁合闸标志
  169. #endif
  170. }URMTSW;
  171. typedef struct TRELAY_T // 开关逻辑结构体定义
  172. {
  173. u8 zqd; // 总启动标志,可由突变量或幅值启动置位
  174. u8 fzqd; // 幅值启动标志
  175. u8 fzdz; // 幅值动作标志
  176. u8 fzzzdz; // 幅值整组动作标志
  177. u8 tblqd; // 突变时启动标志
  178. u8 tbldz; // 突变量动作标志
  179. u8 tblzzdz; // 突变量整组动作标志
  180. u16 gz_process; // 故障处理流程
  181. u32 t_rcd_qd; // 记录启动时刻,因为每个开关的启动时刻不同,所以跟开关对接 dTfault
  182. u32 t_rcd_gz; // 用于故障处理过程,记录上一次轮巡时刻 dTRcd0
  183. u32 us_tbl; // 突变量统计初始时间
  184. u32 us_fz; // 幅值统计初始时间
  185. bool bBSHZ; //短时间内分闸次数到,闭锁合闸
  186. bool bBSTZ; // 闭锁跳闸
  187. bool bARSTFLT; //开关自动复归事故总202004
  188. TFDL_T tFdl[8];
  189. TOC_T tOC[BHOC_NUMBER]; // 过流保护相关
  190. TCH_T tCHZ; // 重合闸
  191. UGLFSX uGLFSX; //过流反时限标志字
  192. FSXCS FsxcsGL; //过流反时限继电器人口参数
  193. #ifdef CUSTOMIZE_BZT //备自投
  194. TBZT_T tBzt;
  195. #endif
  196. // TVOL_T tU0GZ; // 零压故障
  197. TLOSTVOT_T tLostVot; //失压标志
  198. TU0_T tU0TZ; //合后零压跳闸
  199. TU0_T tXXTZ; //选线跳闸
  200. TU0_T tOVER_U0TZ; //过零序电压跳闸
  201. TJL_T tDYJL; //电压解列
  202. TJL_T tPLJL; //频率解列
  203. TTQHZ_T tTQHz; //同期合闸标志
  204. TSDHZ_T tSDHZ; //上电合闸标志
  205. TGOC_T tgoc; //方向过流goose
  206. TSWST tSWST; // 开关运行状态识别
  207. RUN_STU_SW run_stu;
  208. UBHQD uBHQD; // 保护启动标志字
  209. UBHDZ uBHDZ; // 保护动作标志字
  210. URMTSW uRmtSW; // 遥控分、合闸
  211. THZBS_T thzbs;
  212. TIMERELAY tMb_yuk_time;
  213. TIMERELAY tTZZFG_5S0ms; // 无故障延时5s
  214. TIMERELAY tTrip_BHT40MS; // 跳闸脉冲计时器,跳闸开出最短时间40MS
  215. TIMERELAY tTripfail_2s; // 跳闸脉冲计时器,跳闸开出最短时间100MS
  216. TIMERELAY tTripfail_hz; // 跳闸脉冲计时器,跳闸开出最短时间100MS
  217. #ifdef SELF_OPEN_RELEASE
  218. TIMERELAY tTripBHTKeep; // 保护跳保持继电器
  219. #endif
  220. struct rt_stat tbl_stat; // 用于突变量启动统计
  221. struct rt_stat tbldz_stat; // 用于突变量动作统计
  222. struct rt_stat tblzzdz_stat; // 用于突变量整组动作统计
  223. struct rt_stat fz_stat; // 用于幅值启动统计
  224. struct rt_stat fzdz_stat; // 用于幅值动作统计
  225. struct rt_stat fzzzdz_stat; // 用于幅值整组动作统计
  226. #ifdef FUN_JDXX
  227. JDXX_DEF tJD; //小电流接地
  228. #endif
  229. YC_REFRESH_EN bYcRefresh;
  230. }TRELAY_T;
  231. extern TRELAY_T g_tRelay[];
  232. /*------------------------------ 变量声明 -------------------------------------
  233. */
  234. extern struct protect_stu g_protect; // 保护整组处理过程
  235. /*------------------------------ 函数声明 -------------------------------------
  236. */
  237. int protect_init(void);
  238. int protect_polling(void);
  239. int protect_tbl_qd(void);
  240. int protect_amp_qd_js(int sw);
  241. int protect_amp_lx_js(int sw);
  242. int protect_stat_reset(void);
  243. int protect_printf_process(void);
  244. int protect_amp_lx_js(int sw);
  245. void sw_op_fail(DWORD dStep);
  246. #ifdef YB_AUTO_SELECT
  247. bool fa_yb_enable(int sw);
  248. bool goose_yb_enable(int sw);
  249. bool bh_yb_enable(int sw);
  250. #endif
  251. //#ifdef GD_AREA_ZHONGSHAN_2020 //中山要求硬压板和软压板要一一对应
  252. #if defined GD_AREA_ZHONGSHAN_2020 || defined GD_AREA_MAIN_2020 || defined YB_AUTO_SELECT
  253. bool fa_fun_true(int sw);
  254. #endif
  255. #ifdef FUNC_DRIVE
  256. void quit_drive(void);
  257. #endif
  258. #endif //_APP_H
  259. /*------------------------------ 文件结束 -------------------------------------
  260. */