UnitsLib.c 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
  1. /*************************************************************************
  2. * 版权所有:
  3. * 文件版本: V1.00
  4. * 文件名称: DILogic.c
  5. * 生成日期: 2008年11月15日
  6. * 作 者:
  7. * 功 能: 开入逻辑功能
  8. * 更新信息:
  9. * 更新日志1:
  10. * 日期:
  11. * 修改者:
  12. * 修改内容:
  13. * 修改原因:
  14. * 更新日志2:
  15. **************************************************************************/
  16. #include "head.h"
  17. /******************************************************************************
  18. 函数名称: ProtectRelayInit
  19. 函数版本: 01.01
  20. 创建作者:
  21. 创建日期: 2013-08-08
  22. 函数说明: 上电时初始化保护相关的定时器,包括定值设置的、固定的
  23. 参数说明:
  24. 返回值:
  25. 修改记录:
  26. */
  27. void ProtectRelayInit(void)
  28. {
  29. int sw, i;
  30. for (sw = 0; sw < g_sw_num; sw++)
  31. {
  32. TRELAY_T *pR = &g_tRelay[sw];
  33. TSETSW *pSet = &pRunSet->tSwSet[sw];
  34. int i;
  35. #ifdef CUSTOMIZE_BZT // 备自投
  36. BztTimerInit(sw);
  37. #endif
  38. for (i = 0; i < BHOC_NUMBER; i++)
  39. {
  40. TOC_T *poc = &pR->tOC[i];
  41. #ifdef YX_RESET_TIME
  42. InitTR(&poc->tTzEvRstTime, tRunPara.dTEventRst, 0); // 遥信复归时间
  43. InitTR(&poc->tGjEvRstTime, tRunPara.dTEventRst, 0); // 遥信复归时间
  44. #endif
  45. InitTR(&poc->tQDTime, pSet->toc[i].dT, PRO_RET_TIME); // CorrectTR(&poc->tQDTime);
  46. InitTR(&poc->tXBTime, T_20ms, 0);
  47. InitTR(&poc->tXBQD25ms, T_25ms * 2, 0);
  48. InitTR(&poc->tFz25ms, T_25ms, 0);
  49. if (i >= BH_OVI)
  50. {
  51. InitTR(&poc->tQDTime, pSet->toc[i].dT, WRN_RET_TIME); // 过载及重载,返回时间为1秒
  52. }
  53. }
  54. {
  55. TGOC_T *poc = &pR->tgoc;
  56. GOC_SET *pgset = &pSet->tGocSet;
  57. DWORD dTsytime;
  58. dTsytime = ((pgset->dTgzgl > pgset->dTsdlost) ? pgset->dTgzgl : pgset->dTsdlost) + T_300ms;
  59. if (pRunSet->bTT_goose_send_after)
  60. {
  61. InitTR(&poc->tTZX_300ms, pgset->dTgl, pRunSet->dT_sendext); //
  62. InitTR(&poc->tTFX_300ms, pgset->dTgl, pRunSet->dT_sendext); //
  63. InitTR(&poc->tTWX_300ms, pgset->dTgl, pRunSet->dT_sendext); //
  64. InitTR(&poc->tTLX_300ms, pgset->dTlx, pRunSet->dT_sendext); //
  65. }
  66. else
  67. {
  68. InitTR(&poc->tTZX_300ms, T_5ms, pRunSet->dT_sendext); //
  69. InitTR(&poc->tTFX_300ms, T_5ms, pRunSet->dT_sendext); //
  70. InitTR(&poc->tTWX_300ms, T_5ms, pRunSet->dT_sendext); //
  71. InitTR(&poc->tTLX_300ms, T_5ms, pRunSet->dT_sendext); //
  72. }
  73. InitTR(&poc->tTGLBS_300ms, T_5ms, pRunSet->dT_sendext); //
  74. InitTR(&poc->tglFz25ms, T_25ms, 0);
  75. InitTR(&poc->tlxFz25ms, T_25ms, 0);
  76. InitTR(&poc->tglQD25ms, T_25ms, 0);
  77. InitTR(&poc->tlxQD25ms, T_25ms, 0);
  78. InitTR(&poc->tTHz1s, T_1s, 0);
  79. InitTR(&poc->tgoose15ms_gzgl, pRunSet->dT_goosecheck, 0); //
  80. InitTR(&poc->tqccd.tCDTime, pRunSet->dT_cd, 0);
  81. InitTR(&poc->tqccd.tWYTime, pRunSet->dT_glfd, 0);
  82. InitTR(&poc->tglcd.tCDTime, pRunSet->dT_cd, 0);
  83. InitTR(&poc->tglcd.tWYTime, pRunSet->dT_glfd, 0);
  84. if (pRunSet->dT_cd == 0)
  85. {
  86. InitTR(&poc->tllcd.tCDTime, T_1s * 15, 0);
  87. }
  88. else
  89. {
  90. InitTR(&poc->tllcd.tCDTime, pRunSet->dT_cd, 0);
  91. }
  92. InitTR(&poc->tllcd.tWYTime, pRunSet->dT_llfd, 0);
  93. if (pRunSet->bTT_goose_send_after)
  94. {
  95. InitTR(&poc->tglQDTime, pgset->dTgl + pRunSet->dT_goosecheck, PRO_RET_TIME); //
  96. InitTR(&poc->tlxQDTime, pgset->dTlx + pRunSet->dT_goosecheck, PRO_RET_TIME); //
  97. }
  98. else
  99. {
  100. InitTR(&poc->tglQDTime, ((pgset->dTgl > pRunSet->dT_goosecheck) ? pgset->dTgl : pRunSet->dT_goosecheck), PRO_RET_TIME); //
  101. InitTR(&poc->tlxQDTime, ((pgset->dTlx > pRunSet->dT_goosecheck) ? pgset->dTlx : pRunSet->dT_goosecheck), PRO_RET_TIME); //
  102. }
  103. InitTR(&poc->tgzglTime, pgset->dTgzgl, 0); //
  104. InitTR(&poc->tsdlostTime, pgset->dTsdlost, 0); //
  105. InitTR(&poc->terrlostTime, pgset->dTgzgl, 0); //
  106. InitTR(&poc->tllhzTime, pgset->dTll, 0); //
  107. InitTR(&poc->tllQdTime, pgset->dTll + ((pgset->dTgzgl > pgset->dTsdlost) ? pgset->dTgzgl : pgset->dTsdlost) + T_1s, 0); //
  108. InitTR(&poc->tglslowTime, 0, pgset->dTgl + T_1s); //
  109. InitTR(&poc->tlxslowTime, 0, pgset->dTlx + T_1s); //
  110. #if defined GD_AREA_ZHONGSHAN || defined GD_AREA_ZHONGSHAN_2020
  111. InitTR(&poc->tgl2Fz25ms, T_25ms, 0);
  112. InitTR(&poc->tgl2QD25ms, T_25ms, 0);
  113. InitTR(&poc->tgl2slowTime, 0, pgset->dTgl2 + T_1s); // #ifdef GD_AREA_GDDKY_TEST
  114. if (pRunSet->bTT_goose_send_after)
  115. {
  116. InitTR(&poc->tgl2QDTime, pgset->dTgl2 + pRunSet->dT_goosecheck, PRO_RET_TIME); //
  117. InitTR(&poc->tTZX2_300ms, pgset->dTgl2, pRunSet->dT_sendext); //
  118. InitTR(&poc->tTFX2_300ms, pgset->dTgl2, pRunSet->dT_sendext); //
  119. InitTR(&poc->tTWX2_300ms, pgset->dTgl2, pRunSet->dT_sendext); //
  120. }
  121. else
  122. {
  123. InitTR(&poc->tgl2QDTime, ((pgset->dTgl2 > pRunSet->dT_goosecheck) ? pgset->dTgl2 : pRunSet->dT_goosecheck), PRO_RET_TIME); //
  124. InitTR(&poc->tTZX2_300ms, T_5ms, pRunSet->dT_sendext); //
  125. InitTR(&poc->tTFX2_300ms, T_5ms, pRunSet->dT_sendext); //
  126. InitTR(&poc->tTWX2_300ms, T_5ms, pRunSet->dT_sendext); //
  127. }
  128. #endif
  129. InitTR(&poc->tTzcheckTime, pRunSet->dT_TZSB, 0); // 开关失灵判断时间
  130. InitTR(&poc->tHzcheckTime, pRunSet->dT_HZSB, 0); // 开关失灵判断时间
  131. InitTR(&poc->ttzsbextTime, 0, pRunSet->dT_sendext); // 跳闸失败(开关失灵)展宽时间
  132. InitTR(&poc->tgzglokextTime, 0, pRunSet->dT_sendext); // 发送展宽 300毫秒
  133. InitTR(&poc->tgzglokForbitTime, 0, pRunSet->dT_frobit); // 发送故障隔离成功后闭锁时间
  134. InitTR(&poc->tCYY3sdelayms, T_1s * 3, dTsytime);
  135. InitTR(&poc->tgoosedelayms_ll, dTsytime + pRunSet->dT_TZSB * 2, 0);
  136. InitTR(&poc->tllWY1Time, T_100ms, T_100ms);
  137. InitTR(&poc->tllWY2Time, T_100ms, T_100ms);
  138. InitTR(&poc->tllYY1Time, T_100ms, T_100ms + T_20ms);
  139. InitTR(&poc->tllYY2Time, T_100ms, T_100ms + T_20ms);
  140. InitTR(&poc->textbsTime, 0, pRunSet->dT_sendext + T_100ms);
  141. }
  142. // 重合闸
  143. InitTR(&pR->tCHZ.tTCHQDHW0ms50ms, 0, T_10ms * 5); // 合闸位置下降沿展宽
  144. InitTR(&pR->tCHZ.tTCHQD0ms50ms, 0, T_10ms * 5); // 跳闸开出下降沿展宽
  145. InitTR(&pR->tCHZ.tTCHJD_0ms30ms, 0, T_10ms * 3); // 弹簧未储能下降沿展宽
  146. InitTR(&pR->tCHZ.tTCHJD_200ms0ms, T_200ms, 0); // 重合开出宽度
  147. InitTR(&pR->tCHZ.tTCHCD15s0s, pSet->dT_chz_cd, 0); // 重合充电
  148. InitTR(&pR->tCHZ.tTCHJD_ARDelay, pSet->dT_chz[0], 0); // 重合闸延时
  149. InitTR(&pR->tCHZ.tTCHFAIL_TW, pSet->dT_chz[0] + T_1s, 0); // 三相跳位延时: 重合失败返回时间
  150. InitTR(&pR->tCHZ.tTCHBSDelay, pSet->dT_chz_bs, 0); // 重合闭锁延时
  151. InitTR(&pR->tCHZ.tTCHOKTime, pSet->dT_chz_ok, 0); // 重合成功
  152. InitTR(&pR->tCHZ.tTCHJD_HJS, 0, pSet->dT_SpeedUp_Open); // 后加速开放时间
  153. InitTR(&pR->tCHZ.tTCHJBSTime, 0, pSet->dT_chz_ok); // 重合闭锁时间
  154. InitTR(&pR->tCHZ.tTCHJBSHw, T_100ms, 0); // 开关合位100ms确认
  155. #ifdef PRO_UZ_START_REC
  156. InitTR(&pR->tCHZ.tTCH_UO_BS, T_100ms, 0); // 零序电压重合闭锁延时
  157. #endif
  158. InitTR(&pR->tCHZ.tTCHOPENTime, pSet->dT_chz_Topen, 0); // 重合开放时间
  159. #ifdef SELF_OPEN_RELEASE
  160. InitTR(&pR->tTripBHTKeep, 0, tRunPara.wYXFD * T_5ms / 5 + T_40ms);
  161. #endif
  162. // 保护跳闸脉宽
  163. InitTR(&pR->tTrip_BHT40MS, 0, T_40ms); // 跳闸脉冲最短时间40ms ,以前为100ms,在做多次重合闸是,若时间整定为100ms左右,会有异常
  164. // 配网功能定值
  165. InitTR(&pR->tSDHZ.tOnXSTime, pSet->dT_X, 0);
  166. InitTR(&pR->tSDHZ.tOnYSTime, pSet->dT_Y, 0);
  167. InitTR(&pR->tSDHZ.tOnZSTime, T_100ms * 35, 0); // 3.5秒
  168. InitTR(&pR->tSDHZ.tOnXLTime, pSet->dT_XL, 0);
  169. InitTR(&pR->tSDHZ.tOnYLTime, pSet->dT_Y, 0);
  170. #ifdef GD_AREA_ZHONGSHAN_2020
  171. InitTR(&pR->tSDHZ.tOnLLCDYLTime, pSet->dT_LL_CD, 0);
  172. #endif
  173. InitTR(&pR->tSDHZ.tOnBSTZTime, pSet->dT_fa_bsTz, 0);
  174. InitTR(&pR->tSDHZ.tOnZLTime, T_100ms * 35, 0); // 3.5秒
  175. InitTR(&pR->tSDHZ.tOnOCingTime, pSet->dT_fa_ocing, pSet->dT_Y);
  176. InitTR(&pR->tSDHZ.tOnLXingTime, pSet->dT_fa_lxing, pSet->dT_Y);
  177. InitTR(&pR->tSDHZ.tOnJSTime, pRunSet->dT_ldjs, 0); ////初始化单侧来电解锁计时器
  178. #ifdef GD_AREA_ZHONGSHAN_2020
  179. InitTR(&pR->tSDHZ.tOnY_JSTime, 0, 0);
  180. #elif defined GD_AREA_ECZD_2020 || defined GD_AREA_ZHONGSHAN
  181. InitTR(&pR->tSDHZ.tOnY_JSTime, T_1s * 6, 0);
  182. #else
  183. InitTR(&pR->tSDHZ.tOnY_JSTime, T_1s * 3, 0);
  184. #endif
  185. #if defined GD_AREA_ZHONGSHAN_2020 || defined GD_AREA_ECZD_2020 || defined GD_AREA_ZHONGSHAN
  186. #if defined GD_AREA_ECZD_2020
  187. #if defined FUNC_SET_FA_JS
  188. InitTR(&pR->tSDHZ.tOnHW_FA_JSTime, pRunSet->dT_FA_JS, 0);
  189. #else
  190. InitTR(&pR->tSDHZ.tOnHW_FA_JSTime, 5 * T_10ms, 0);
  191. #endif
  192. #else
  193. InitTR(&pR->tSDHZ.tOnHW_FA_JSTime, T_1s * 6, 0);
  194. #endif
  195. #else
  196. InitTR(&pR->tSDHZ.tOnHW_FA_JSTime, T_1s, 0);
  197. #endif
  198. #ifdef FA_OC_COUNT
  199. InitTR(&pR->tSDHZ.tFaOcCountTime, pSet->fa_oc_conut_time, 0);
  200. #endif
  201. if (pSet->toc[FA_GL].dT > T_FA_TZ_MIN_TIME)
  202. {
  203. InitTR(&pR->tSDHZ.tGZJYRstGLTime, pSet->toc[FA_GL].dT, pSet->dT_Y);
  204. }
  205. else
  206. {
  207. InitTR(&pR->tSDHZ.tGZJYRstGLTime, T_FA_TZ_MIN_TIME, pSet->dT_Y);
  208. }
  209. if (pSet->toc[FA_GL_II].dT > T_FA_TZ_MIN_TIME)
  210. {
  211. InitTR(&pR->tSDHZ.tGZJYRstGL_II_Time, pSet->toc[FA_GL_II].dT, pSet->dT_Y);
  212. }
  213. else
  214. {
  215. InitTR(&pR->tSDHZ.tGZJYRstGL_II_Time, T_FA_TZ_MIN_TIME, pSet->dT_Y);
  216. }
  217. if (pSet->toc[FA_GL2].dT > T_FA_TZ_MIN_TIME)
  218. InitTR(&pR->tSDHZ.tGZJYRstGL2Time, pSet->toc[FA_GL2].dT, T_20ms);
  219. else
  220. InitTR(&pR->tSDHZ.tGZJYRstGL2Time, T_FA_TZ_MIN_TIME, T_20ms);
  221. if (pSet->toc[FA_LX].dT > T_FA_TZ_MIN_TIME)
  222. {
  223. InitTR(&pR->tSDHZ.tGZJYRstJDTime, pSet->toc[FA_LX].dT, pSet->dT_Y);
  224. }
  225. else
  226. {
  227. InitTR(&pR->tSDHZ.tGZJYRstJDTime, T_FA_TZ_MIN_TIME, pSet->dT_Y);
  228. }
  229. if (pSet->toc[FA_LX2].dT > T_FA_TZ_MIN_TIME)
  230. InitTR(&pR->tSDHZ.tGZJYRstJD2Time, pSet->toc[FA_LX2].dT, pSet->dT_Y);
  231. else
  232. InitTR(&pR->tSDHZ.tGZJYRstJD2Time, T_FA_TZ_MIN_TIME, pSet->dT_Y);
  233. InitTR(&pR->tSDHZ.tL_RELAYONL3s, pSet->dT_Y, 0);
  234. InitTR(&pR->tSDHZ.tHzS100ms, 0, T_200ms);
  235. InitTR(&pR->tSDHZ.tUDBS100ms, T_100ms, 0);
  236. InitTR(&pR->tSDHZ.tUABS25ms, pSet->dT_fa_YY, T_25ms * 2);
  237. InitTR(&pR->tSDHZ.tUBCS25ms, pSet->dT_fa_YY, T_25ms * 2);
  238. #ifdef FUNC_NYY_NWY
  239. InitTR(&pR->tSDHZ.tUABS_NYY_NWY_50ms, T_25ms * 2, T_25ms * 2);
  240. InitTR(&pR->tSDHZ.tUBCS_NYY_NWY_50ms, T_25ms * 2, T_25ms * 2);
  241. InitTR(&pR->tSDHZ.tUABL_NYY_NWY_50ms, T_25ms * 2, T_25ms * 2);
  242. InitTR(&pR->tSDHZ.tUBCL_NYY_NWY_50ms, T_25ms * 2, T_25ms * 2);
  243. #endif
  244. InitTR(&pR->tSDHZ.tUFABL80ms, pRunSet->dT_XCY, pSet->dT_Y - T_1s);
  245. InitTR(&pR->tSDHZ.tUFBCL80ms, pRunSet->dT_XCY, pSet->dT_Y - T_1s);
  246. InitTR(&pR->tSDHZ.tUFDBTime, pRunSet->dT_XCY, 0);
  247. InitTR(&pR->tSDHZ.tUABL25ms, pSet->dT_fa_YY, T_25ms * 2);
  248. InitTR(&pR->tSDHZ.tUBCL25ms, pSet->dT_fa_YY, T_25ms * 2);
  249. InitTR(&pR->tSDHZ.tUFABS80ms, pRunSet->dT_XCY, pSet->dT_Y - T_1s);
  250. InitTR(&pR->tSDHZ.tUFBCS80ms, pRunSet->dT_XCY, pSet->dT_Y - T_1s);
  251. InitTR(&pR->tSDHZ.tUFABS25ms, T_25ms, pRunSet->dT_XCY + T_1s);
  252. InitTR(&pR->tSDHZ.tUFBCS25ms, T_25ms, pRunSet->dT_XCY + T_1s);
  253. InitTR(&pR->tSDHZ.tUFABL25ms, T_25ms, pRunSet->dT_XCY + T_1s);
  254. InitTR(&pR->tSDHZ.tUFBCL25ms, T_25ms, pRunSet->dT_XCY + T_1s);
  255. #ifdef FA_PL_PJ
  256. InitTR(&pR->tSDHZ.tFREQAB25ms_SCY, T_25ms * 2, T_25ms * 2);
  257. InitTR(&pR->tSDHZ.tFREQBC25ms_SCY, T_25ms * 2, T_25ms * 2);
  258. InitTR(&pR->tSDHZ.tFREQAB25ms_LCY, T_25ms * 2, T_25ms * 2);
  259. InitTR(&pR->tSDHZ.tFREQBC25ms_LCY, T_25ms * 2, T_25ms * 2);
  260. InitTR(&pR->tSDHZ.tFREQSAB25ms, T_25ms, T_25ms * 2);
  261. InitTR(&pR->tSDHZ.tFREQSBC25ms, T_25ms, T_25ms * 2);
  262. InitTR(&pR->tSDHZ.tFREQLAB25ms, T_25ms, T_25ms * 2);
  263. InitTR(&pR->tSDHZ.tFREQLBC25ms, T_25ms, T_25ms * 2);
  264. #endif
  265. InitTR(&pR->tSDHZ.tOpsiteYY100ms, 0, 0);
  266. InitTR(&pR->tSDHZ.tPowerYY100ms, 0, 0);
  267. InitTR(&pR->tSDHZ.tHw100ms100ms, T_100ms, T_100ms);
  268. InitTR(&pR->tSDHZ.tTw100ms100ms, T_100ms, T_100ms);
  269. InitTR(&pR->tSDHZ.tHz0ms1s, 0, tRunPara.wFAHZT * T_5ms / 5 + T_1s);
  270. InitTR(&pR->tSDHZ.tTz0ms1s, 0, tRunPara.wFAFZT * T_5ms / 5 + T_1s);
  271. InitTR(&pR->tSDHZ.tHz0ms2s, pRunSet->dT_HZSB, 0);
  272. InitTR(&pR->tSDHZ.tTz0ms2s, pRunSet->dT_TZSB, 0);
  273. InitTR(&pR->tSDHZ.tTSDHzHJS, 0, pSet->dT_Y); // 上电合闸加速判断
  274. InitTR(&pR->tU0TZ.tZOVTime, pSet->dT_OverU0, T_20ms);
  275. InitTR(&pR->tOVER_U0TZ.tZOVTime, pSet->dBHTOverU0, T_20ms);
  276. // InitTR(&pR->tGdy.tQDTime, pSet->dT_gy, T_20ms);
  277. InitTR(&pR->tLostVot.tCYY25ms0ms, T_25ms, 0);
  278. InitTR(&pR->tLostVot.tLostVotTime, pSet->dT_Z, T_20ms);
  279. InitTR(&pR->tLostVot.tLostVLockTime, 0, pSet->dT_fa_bsTz);
  280. InitTR(&pR->tTQHz.tTQTime, pSet->dT_tq, 0); // 同期
  281. InitTR(&pR->tTQHz.tTQQDTime, 0, pRunSet->dT_tq_fh);
  282. // 解列
  283. InitTR(&pR->tDYJL.tDdyTime, pSet->dT_jl_ddy, T_20ms); // CorrectTR(&pR->tDYJL.tDdyTime); CorrectTR(&pR->tDYJL.tDdyTime);
  284. InitTR(&pR->tDYJL.tGdyTime, pSet->dT_jl_gdy, T_20ms); // CorrectTR(&pR->tDYJL.tGdyTime); CorrectTR(&pR->tDYJL.tGdyTime);
  285. InitTR(&pR->tDYJL.tHighTime, pSet->dT_jl_ggdy, T_20ms); // CorrectTR(&pR->tDYJL.tHighTime); CorrectTR(&pR->tDYJL.tHighTime);
  286. InitTR(&pR->tDYJL.tLowTime, pSet->dT_jl_gddy, T_20ms);
  287. InitTR(&pR->tPLJL.tDhzTime, pSet->dT_jl_dhz, T_40ms); // CorrectTR(&pR->tPLJL.tDhzTime); CorrectTR(&pR->tPLJL.tDhzTime);
  288. InitTR(&pR->tPLJL.tHighTime, pSet->dT_jl_ghz, T_40ms); // CorrectTR(&pR->tPLJL.tHighTime); CorrectTR(&pR->tPLJL.tHighTime);
  289. InitTR(&pR->tPLJL.tLowTime, pSet->dT_jl_lowhz, T_40ms); // CorrectTR(&pR->tPLJL.tLowTime); CorrectTR(&pR->tPLJL.tLowTime);
  290. InitTR(&pR->tDYJL.thcbs1_0ms_100ms, 0, T_100ms); // 滑差闭锁延迟返回继电器
  291. InitTR(&pR->tDYJL.thcbs2_0ms_100ms, 0, T_100ms);
  292. InitTR(&pR->tPLJL.thcbs1_0ms_100ms, 0, T_100ms);
  293. InitTR(&pR->tPLJL.thcbs2_0ms_100ms, 0, T_100ms);
  294. // 手合加速
  295. InitTR(&pR->tSWST.tTRunST_20s1s, T_1s, T_300ms); // 2020-07-23 分位持续检测时间改为1s,按照广东标准2020 手合开放检测时间,将3s时间改为0.3s,即分闸持续1S以上,手合0.3秒内可启动后加速
  296. #if defined GD_AREA_ECZD_2020
  297. InitTR(&pR->tSWST.tSHz3s10ms, T_1s, T_10ms);
  298. #else
  299. InitTR(&pR->tSWST.tSHz3s10ms, T_1s * 3, T_10ms);
  300. #endif
  301. InitTR(&pR->tSWST.tSTz3s10ms, T_1s * 3, T_10ms);
  302. InitTR(&pR->tSWST.tSf3s, T_1s * 3, 0);
  303. InitTR(&pR->tSWST.tTTWYL_10S1S, T_1s * 10, T_1s);
  304. InitTR(&pR->tSWST.tTWCNGJ1s, pRunSet->dWCN_T, WRN_RET_TIME);
  305. InitTR(&pR->tSWST.tTKZHLGJ1s, T_1s * 10, WRN_RET_TIME);
  306. InitTR(&pR->tSWST.tIBSCHZ, T_25ms, WRN_RET_TIME); // T_1s
  307. InitTR(&pR->tTripfail_2s, pRunSet->dT_TZSB, 0); // 跳闸失败时间继电器
  308. InitTR(&pR->tTripfail_hz, 0, pRunSet->dT_TZSB); // 跳闸失败时间继电器
  309. InitTR(&pR->tSWST.tCTXXYC, T_1s * 3, WRN_RET_TIME); // CT相序异常
  310. InitTR(&pR->tSWST.tCTYC, T_1s * 10, WRN_RET_TIME); // CT断线
  311. InitTR(&pR->tSWST.tBatChk, T_1s * 3, WRN_RET_TIME); // 电池电压低
  312. InitTR(&pR->tSWST.tBatOver, T_1s * 3, WRN_RET_TIME);
  313. InitTR(&pR->tMb_yuk_time, T_1s * 5, 0);
  314. InitTR(&pR->tTZZFG_5S0ms, pRunSet->dT_ZZFG, 0); // 无故障延时5s
  315. InitTR(&pR->thzbs.tBSHZTime, pSet->dT_hzbs, T_20ms); // 分闸次数过多,闭锁合闸
  316. InitTR(&pR->thzbs.tTw100ms100ms, T_100ms, T_100ms);
  317. for (i = 0; i < 8; i++)
  318. {
  319. if (pRunSet->bTT_FDLTz[i])
  320. {
  321. InitTR(&pR->tFdl[i].tFdlTime, pRunSet->dTFDL[i], PRO_RET_TIME);
  322. }
  323. else
  324. {
  325. InitTR(&pR->tFdl[i].tFdlTime, pRunSet->dTFDL[i], WRN_RET_TIME);
  326. }
  327. }
  328. fresh_set_soe(EV_TYPE_S, !g_tRelay[sw].run_stu.fa_ls, true, sw);
  329. fresh_set_soe(EV_TYPE_L, g_tRelay[sw].run_stu.fa_ls, true, sw);
  330. fresh_set_soe(EV_BH_YB, FUN_ALL_EN(sw), true, sw);
  331. fresh_set_soe(EV_BH_YBTT, BH_ALL_EN(sw), true, sw);
  332. fresh_set_soe(EV_CHZ_YB, CHZ_ALL_EN(sw), true, sw);
  333. fresh_set_soe(EV_FA_YBTT, FA_ALL_EN(sw), true, sw);
  334. fresh_set_soe(EV_GOOSE_YBTT, BH_GOOSE_EN(sw), true, sw);
  335. fresh_set_soe(EV_JZS_YBTT, JZS_ALL_EN(sw), true, sw);
  336. fresh_set_soe(EV_TQ_YBTT, TYTQ_ALL_EN(sw), true, sw);
  337. fresh_set_soe(EV_JL_YBTT, JL_ALL_EN(sw), true, sw);
  338. fresh_set_soe(EV_XDLJD_YBTT, pRunSet->tSwSet[sw].btt_gnyb_xdljd, true, sw);
  339. fresh_set_soe(EV_XLDXGJ_YBTT, pRunSet->tSwSet[sw].btt_gnyb_xldxgj, true, sw);
  340. fresh_set_soe(EV_BTDCD_YBTT, pRunSet->tSwSet[sw].btt_gnyb_btdcd, true, sw);
  341. fresh_set_soe(EV_KZ_YB, pRunSet->tSwSet[sw].btt_yxyb_gnzck, true, sw);
  342. fresh_set_soe(EV_EDIT_YB, pRunSet->bTT_EDIT_YB, true, sw);
  343. #ifdef FUNC_DRIVE_JY
  344. InitTR(&gb_drive.tDriveUa1Time, pSet->dT_drive_ua1, 0);
  345. InitTR(&gb_drive.tDriveUa2Time, pSet->dT_drive_ua2, 0);
  346. InitTR(&gb_drive.tDriveU0Time, pSet->dT_drive_u0, 0);
  347. InitTR(&gb_drive.tDriveITime, pSet->dT_drive_i, 0);
  348. InitTR(&gb_drive.tDriveI0Time, pSet->dT_drive_i0, 0);
  349. InitTR(&gb_drive.tDriveAgainTime, pSet->dT_drive_again, 0);
  350. InitTR(&gb_drive.tDriveFaBSTime, T_25ms * 2, 0);
  351. #endif
  352. #ifdef FUNC_DRIVE
  353. InitTR(&gb_drive.tQDTime_hz, pRunSet->tSwSet[sw].dT_Drive_hz, 0);
  354. InitTR(&gb_drive.tQDTime_fz, pRunSet->tSwSet[sw].dT_Drive_fz, 0);
  355. InitTR(&gb_drive.tQDTime_fz_end, pRunSet->tSwSet[sw].dT_fz_end, 0);
  356. InitTR(&gb_drive.tQDTime_hz_end, pRunSet->tSwSet[sw].dT_hz_end, 0);
  357. #endif
  358. #ifdef FUNC_REBOOT_BS_HA_JS_3S
  359. InitTR(&pR->tSDHZ.tHW_JS_HA_3STime, T_1s * 3, 0);
  360. #endif
  361. }
  362. for (i = 0; i < VOL_NUMBER; i++)
  363. {
  364. InitTR(&g_tVol[i].tQDTime, pRunSet->tVolSet[i].dTVol, WRN_RET_TIME);
  365. InitTR(&g_tVol[i].tCYYTime, T_40ms, 0);
  366. InitTR(&g_tVol[i].tWaveYYTime, T_40ms, 0);
  367. }
  368. InitTR(&g_rmt_op.tTULK3STime, T_1s * 3, 0);
  369. InitTR(&g_tJLSDTime, pRunSet->dSDYX_T, T_1s * 5);
  370. InitTR(&tPT.tTPT1DXTime, T_1s * 10, WRN_RET_TIME);
  371. InitTR(&tPT.tTPT2DXTime, T_1s * 10, WRN_RET_TIME);
  372. SetTR_TRTT(&tPT.tTPT1DXTime, WRN_RET_TIME);
  373. SetTR_TRTT(&tPT.tTPT2DXTime, WRN_RET_TIME);
  374. InitTR(&tPT.tBatOnTime, T_1s * 2, WRN_RET_TIME);
  375. InitTR(&tPT.tTPT1XXYC, T_1s * 3, WRN_RET_TIME);
  376. InitTR(&tPT.tTPT2XXYC, T_1s * 3, WRN_RET_TIME);
  377. #ifdef IEC_NOLINK_NO_CALLYX
  378. InitTR(&g_link_comm.tLinkBreak, T_1s * 60 * 3, 0);
  379. #endif
  380. #ifdef FUN_JDXX
  381. jdxx_relayinit();
  382. #endif
  383. }
  384. /******************************************************************************
  385. 函数名称: ProtectRelayInit1
  386. 函数版本: 01.01
  387. 创建作者:
  388. 创建日期: 2013-08-08
  389. 函数说明: 在保护巡检时有定值修改,重新初始化与保护相关的定时器,使修改后的延时有效
  390. 参数说明:
  391. 返回值:
  392. 修改记录:
  393. */
  394. void ProtectRelayInit1(void)
  395. {
  396. int sw, i;
  397. for (sw = 0; sw < g_sw_num; sw++)
  398. {
  399. TRELAY_T *pR = &g_tRelay[sw];
  400. TSETSW *pSet = &pRunSet->tSwSet[sw];
  401. int i;
  402. #ifdef CUSTOMIZE_BZT // 备自投
  403. BztTimerChange(sw);
  404. #endif
  405. for (i = 0; i < BHOC_NUMBER; i++)
  406. {
  407. TOC_T *poc = &pR->tOC[i];
  408. #ifdef YX_RESET_TIME
  409. InitTR(&poc->tTzEvRstTime, tRunPara.dTEventRst, 0); // 遥信复归时间
  410. InitTR(&poc->tGjEvRstTime, tRunPara.dTEventRst, 0); // 遥信复归时间
  411. #endif
  412. InitTR_Time(&poc->tQDTime, pSet->toc[i].dT, PRO_RET_TIME);
  413. InitTR_Time(&poc->tXBTime, pSet->toc[i].dT, PRO_RET_TIME);
  414. InitTR(&poc->tXBQD25ms, T_25ms * 2, 0);
  415. if (i >= BH_OVI)
  416. {
  417. InitTR_Time(&poc->tQDTime, pSet->toc[i].dT, WRN_RET_TIME); // 过载及重载,返回时间为1秒
  418. }
  419. }
  420. {
  421. TGOC_T *poc = &pR->tgoc;
  422. GOC_SET *pgset = &pSet->tGocSet;
  423. DWORD dTsytime;
  424. dTsytime = ((pgset->dTgzgl > pgset->dTsdlost) ? pgset->dTgzgl : pgset->dTsdlost) + T_300ms;
  425. if (pRunSet->bTT_goose_send_after)
  426. {
  427. InitTR_Time(&poc->tTZX_300ms, pgset->dTgl, pRunSet->dT_sendext); //
  428. InitTR_Time(&poc->tTFX_300ms, pgset->dTgl, pRunSet->dT_sendext); //
  429. InitTR_Time(&poc->tTWX_300ms, pgset->dTgl, pRunSet->dT_sendext); //
  430. InitTR_Time(&poc->tTLX_300ms, pgset->dTlx, pRunSet->dT_sendext); //
  431. }
  432. else
  433. {
  434. InitTR_Time(&poc->tTZX_300ms, T_5ms, pRunSet->dT_sendext); //
  435. InitTR_Time(&poc->tTFX_300ms, T_5ms, pRunSet->dT_sendext); //
  436. InitTR_Time(&poc->tTWX_300ms, T_5ms, pRunSet->dT_sendext); //
  437. InitTR_Time(&poc->tTLX_300ms, T_5ms, pRunSet->dT_sendext); //
  438. }
  439. InitTR_Time(&poc->tTGLBS_300ms, T_5ms, pRunSet->dT_sendext); //
  440. InitTR_Time(&poc->tgoose15ms_gzgl, pRunSet->dT_goosecheck, 0); //
  441. InitTR_Time(&poc->tqccd.tCDTime, pRunSet->dT_cd, 0);
  442. InitTR_Time(&poc->tqccd.tWYTime, pRunSet->dT_glfd, 0);
  443. InitTR_Time(&poc->tglcd.tCDTime, pRunSet->dT_cd, 0);
  444. InitTR_Time(&poc->tglcd.tWYTime, pRunSet->dT_glfd, 0);
  445. if (pRunSet->dT_cd == 0)
  446. {
  447. InitTR_Time(&poc->tllcd.tCDTime, T_1s * 15, 0);
  448. }
  449. else
  450. {
  451. InitTR_Time(&poc->tllcd.tCDTime, pRunSet->dT_cd, 0);
  452. }
  453. InitTR_Time(&poc->tllcd.tWYTime, pRunSet->dT_llfd, 0);
  454. if (pRunSet->bTT_goose_send_after)
  455. {
  456. InitTR_Time(&poc->tglQDTime, pgset->dTgl + pRunSet->dT_goosecheck, PRO_RET_TIME); //
  457. InitTR_Time(&poc->tlxQDTime, pgset->dTlx + pRunSet->dT_goosecheck, PRO_RET_TIME); //
  458. }
  459. else
  460. {
  461. InitTR_Time(&poc->tglQDTime, ((pgset->dTgl > pRunSet->dT_goosecheck) ? pgset->dTgl : pRunSet->dT_goosecheck), PRO_RET_TIME); //
  462. InitTR_Time(&poc->tlxQDTime, ((pgset->dTlx > pRunSet->dT_goosecheck) ? pgset->dTlx : pRunSet->dT_goosecheck), PRO_RET_TIME); //
  463. }
  464. InitTR_Time(&poc->tgzglTime, pgset->dTgzgl, 0); //
  465. InitTR_Time(&poc->tsdlostTime, pgset->dTsdlost, 0); //
  466. InitTR_Time(&poc->terrlostTime, pgset->dTgzgl, 0); //
  467. InitTR_Time(&poc->tllhzTime, pgset->dTll, 0); //
  468. InitTR_Time(&poc->tllQdTime, pgset->dTll + ((pgset->dTgzgl > pgset->dTsdlost) ? pgset->dTgzgl : pgset->dTsdlost) + T_1s, 0); //
  469. InitTR_Time(&poc->tglslowTime, 0, pgset->dTgl + T_1s); //
  470. InitTR_Time(&poc->tlxslowTime, 0, pgset->dTlx + T_1s); //
  471. #if defined GD_AREA_ZHONGSHAN || defined GD_AREA_ZHONGSHAN_2020
  472. if (pRunSet->bTT_goose_send_after)
  473. {
  474. InitTR_Time(&poc->tgl2QDTime, pgset->dTgl2 + pRunSet->dT_goosecheck, PRO_RET_TIME); //
  475. InitTR_Time(&poc->tTZX2_300ms, pgset->dTgl2, pRunSet->dT_sendext); //
  476. InitTR_Time(&poc->tTFX2_300ms, pgset->dTgl2, pRunSet->dT_sendext); //
  477. InitTR_Time(&poc->tTWX2_300ms, pgset->dTgl2, pRunSet->dT_sendext); //
  478. }
  479. else
  480. {
  481. InitTR_Time(&poc->tgl2QDTime, ((pgset->dTgl2 > pRunSet->dT_goosecheck) ? pgset->dTgl2 : pRunSet->dT_goosecheck), PRO_RET_TIME); //
  482. InitTR_Time(&poc->tTZX2_300ms, T_5ms, pRunSet->dT_sendext); //
  483. InitTR_Time(&poc->tTFX2_300ms, T_5ms, pRunSet->dT_sendext); //
  484. InitTR_Time(&poc->tTWX2_300ms, T_5ms, pRunSet->dT_sendext); //
  485. }
  486. InitTR_Time(&poc->tglslowTime, 0, pgset->dTgl2 + T_1s); //
  487. #endif
  488. InitTR_Time(&poc->tTzcheckTime, pRunSet->dT_TZSB, 0); // 开关失灵判断时间
  489. InitTR_Time(&poc->tHzcheckTime, pRunSet->dT_HZSB, 0); // 开关失灵判断时间
  490. InitTR_Time(&poc->ttzsbextTime, 0, pRunSet->dT_sendext); // 跳闸失败(开关失灵)展宽时间
  491. InitTR_Time(&poc->tgzglokextTime, 0, pRunSet->dT_sendext); // 发送展宽 300毫秒
  492. InitTR_Time(&poc->tgzglokForbitTime, 0, pRunSet->dT_frobit); // 发送故障隔离成功后闭锁时间
  493. InitTR_Time(&poc->tCYY3sdelayms, T_1s * 3, dTsytime);
  494. InitTR_Time(&poc->tgoosedelayms_ll, dTsytime + pRunSet->dT_TZSB * 2, 0);
  495. InitTR_Time(&poc->textbsTime, 0, pRunSet->dT_sendext + T_100ms);
  496. }
  497. // 重合闸
  498. InitTR_Time(&pR->tCHZ.tTCHCD15s0s, pSet->dT_chz_cd, 0); // 充电15秒
  499. InitTR_Time(&pR->tCHZ.tTCHJD_ARDelay, pSet->dT_chz[0], 0); // 重合闸延时
  500. InitTR_Time(&pR->tCHZ.tTCHFAIL_TW, pSet->dT_chz[0] + T_1s, 0); // 三相跳位延时: 重合失败返回时间
  501. InitTR_Time(&pR->tCHZ.tTCHBSDelay, pSet->dT_chz_bs, 0); // 重合闭锁延时
  502. InitTR_Time(&pR->tCHZ.tTCHOKTime, pSet->dT_chz_ok, 0); // 重合成功
  503. InitTR_Time(&pR->tCHZ.tTCHJBSTime, 0, pSet->dT_chz_ok); // 重合闭锁时间
  504. #ifdef PRO_UZ_START_REC
  505. InitTR(&pR->tCHZ.tTCH_UO_BS, T_100ms, 0); // 零序电压重合闭锁延时
  506. #endif
  507. InitTR(&pR->tCHZ.tTCHOPENTime, pSet->dT_chz_Topen, 0); // 重合开放时间
  508. // 配网功能定值
  509. InitTR_Time(&pR->tSDHZ.tOnXSTime, pSet->dT_X, 0);
  510. InitTR_Time(&pR->tSDHZ.tOnYSTime, pSet->dT_Y, 0);
  511. InitTR_Time(&pR->tSDHZ.tOnXLTime, pSet->dT_XL, 0);
  512. InitTR_Time(&pR->tSDHZ.tOnYLTime, pSet->dT_Y, 0);
  513. #ifdef GD_AREA_ZHONGSHAN_2020
  514. InitTR_Time(&pR->tSDHZ.tOnLLCDYLTime, pSet->dT_LL_CD, 0);
  515. #endif
  516. InitTR_Time(&pR->tSDHZ.tOnBSTZTime, pSet->dT_fa_bsTz, 0);
  517. InitTR_Time(&pR->tSDHZ.tOnJSTime, pRunSet->dT_ldjs, 0); ////初始化单侧来电解锁计时器
  518. #if defined GD_AREA_ZHONGSHAN_2020 || defined GD_AREA_ECZD_2020 || defined GD_AREA_ZHONGSHAN
  519. #if defined GD_AREA_ECZD_2020
  520. #if defined FUNC_SET_FA_JS
  521. InitTR_Time(&pR->tSDHZ.tOnHW_FA_JSTime, pRunSet->dT_FA_JS, 0);
  522. #else
  523. InitTR_Time(&pR->tSDHZ.tOnHW_FA_JSTime, 5 * T_10ms, 0);
  524. #endif
  525. #else
  526. InitTR_Time(&pR->tSDHZ.tOnHW_FA_JSTime, T_1s * 6, 0);
  527. #endif
  528. #else
  529. InitTR_Time(&pR->tSDHZ.tOnHW_FA_JSTime, T_1s, 0);
  530. #endif
  531. InitTR_Time(&pR->tSDHZ.tOnOCingTime, pSet->dT_fa_ocing, pSet->dT_Y);
  532. InitTR_Time(&pR->tSDHZ.tOnLXingTime, pSet->dT_fa_lxing, pSet->dT_Y);
  533. #ifdef GD_AREA_ZHONGSHAN_2020
  534. InitTR_Time(&pR->tSDHZ.tOnY_JSTime, 0, 0);
  535. #elif defined GD_AREA_ECZD_2020 || defined GD_AREA_ZHONGSHAN
  536. InitTR_Time(&pR->tSDHZ.tOnY_JSTime, T_1s * 6, 0);
  537. #else
  538. InitTR_Time(&pR->tSDHZ.tOnY_JSTime, T_1s * 3, 0);
  539. #endif
  540. #ifdef FA_OC_COUNT
  541. InitTR_Time(&pR->tSDHZ.tFaOcCountTime, pSet->fa_oc_conut_time, 0);
  542. #endif
  543. #if 0
  544. if(pSet->toc[FA_GL].dT>T_10ms*3)
  545. {
  546. InitTR_Time(&pR->tSDHZ.tGZJYRstGLTime,pSet->toc[FA_GL].dT-T_10ms*3,pSet->dT_Y);
  547. }
  548. else
  549. {
  550. InitTR_Time(&pR->tSDHZ.tGZJYRstGLTime,0,pSet->dT_Y);
  551. }
  552. if(pSet->toc[FA_GL2].dT>T_10ms*3)
  553. InitTR_Time(&pR->tSDHZ.tGZJYRstGL2Time,pSet->toc[FA_GL2].dT-T_10ms*3,pSet->dT_Y);
  554. else
  555. InitTR_Time(&pR->tSDHZ.tGZJYRstGL2Time,0,pSet->dT_Y);
  556. if(pSet->toc[FA_LX].dT>T_10ms*3)
  557. {
  558. InitTR_Time(&pR->tSDHZ.tGZJYRstJDTime,pSet->toc[FA_LX].dT-T_10ms*3,pSet->dT_Y);
  559. }
  560. else
  561. {
  562. InitTR_Time(&pR->tSDHZ.tGZJYRstJDTime,0,pSet->dT_Y);
  563. }
  564. if(pSet->toc[FA_LX2].dT>T_10ms*3)
  565. InitTR_Time(&pR->tSDHZ.tGZJYRstJD2Time,pSet->toc[FA_LX2].dT-T_10ms*3,pSet->dT_Y);
  566. else
  567. InitTR_Time(&pR->tSDHZ.tGZJYRstJD2Time,0,pSet->dT_Y);
  568. #else
  569. if (pSet->toc[FA_GL].dT > T_FA_TZ_MIN_TIME)
  570. InitTR_Time(&pR->tSDHZ.tGZJYRstGLTime, pSet->toc[FA_GL].dT, pSet->dT_Y);
  571. else
  572. InitTR_Time(&pR->tSDHZ.tGZJYRstGLTime, T_FA_TZ_MIN_TIME, pSet->dT_Y);
  573. if (pSet->toc[FA_GL_II].dT > T_FA_TZ_MIN_TIME)
  574. InitTR_Time(&pR->tSDHZ.tGZJYRstGL_II_Time, pSet->toc[FA_GL_II].dT, pSet->dT_Y);
  575. else
  576. InitTR_Time(&pR->tSDHZ.tGZJYRstGL_II_Time, T_FA_TZ_MIN_TIME, pSet->dT_Y);
  577. if (pSet->toc[FA_GL2].dT > T_FA_TZ_MIN_TIME)
  578. InitTR_Time(&pR->tSDHZ.tGZJYRstGL2Time, pSet->toc[FA_GL2].dT, T_20ms);
  579. else
  580. InitTR_Time(&pR->tSDHZ.tGZJYRstGL2Time, T_FA_TZ_MIN_TIME, T_20ms);
  581. if (pSet->toc[FA_LX].dT > T_FA_TZ_MIN_TIME)
  582. InitTR_Time(&pR->tSDHZ.tGZJYRstJDTime, pSet->toc[FA_LX].dT, pSet->dT_Y);
  583. else
  584. InitTR_Time(&pR->tSDHZ.tGZJYRstJDTime, T_FA_TZ_MIN_TIME, pSet->dT_Y);
  585. if (pSet->toc[FA_LX2].dT > T_FA_TZ_MIN_TIME)
  586. InitTR_Time(&pR->tSDHZ.tGZJYRstJD2Time, pSet->toc[FA_LX2].dT, pSet->dT_Y);
  587. else
  588. InitTR_Time(&pR->tSDHZ.tGZJYRstJD2Time, T_FA_TZ_MIN_TIME, pSet->dT_Y);
  589. #endif
  590. InitTR_Time(&pR->tSDHZ.tUABS25ms, pSet->dT_fa_YY, T_25ms * 2);
  591. InitTR_Time(&pR->tSDHZ.tUBCS25ms, pSet->dT_fa_YY, T_25ms * 2);
  592. InitTR_Time(&pR->tSDHZ.tUABL25ms, pSet->dT_fa_YY, T_25ms * 2);
  593. InitTR_Time(&pR->tSDHZ.tUBCL25ms, pSet->dT_fa_YY, T_25ms * 2);
  594. InitTR_Time(&pR->tSDHZ.tL_RELAYONL3s, pSet->dT_Y, 0);
  595. InitTR_Time(&pR->tSDHZ.tUFABL80ms, pRunSet->dT_XCY, pSet->dT_Y - T_1s);
  596. InitTR_Time(&pR->tSDHZ.tUFBCL80ms, pRunSet->dT_XCY, pSet->dT_Y - T_1s);
  597. InitTR_Time(&pR->tSDHZ.tUFDBTime, pRunSet->dT_XCY, 0);
  598. InitTR_Time(&pR->tSDHZ.tUFABS80ms, pRunSet->dT_XCY, pSet->dT_X);
  599. InitTR_Time(&pR->tSDHZ.tUFBCS80ms, pRunSet->dT_XCY, pSet->dT_X);
  600. InitTR_Time(&pR->tSDHZ.tUFABS25ms, T_25ms, pRunSet->dT_XCY + T_1s);
  601. InitTR_Time(&pR->tSDHZ.tUFBCS25ms, T_25ms, pRunSet->dT_XCY + T_1s);
  602. InitTR_Time(&pR->tSDHZ.tUFABL25ms, T_25ms, pRunSet->dT_XCY + T_1s);
  603. InitTR_Time(&pR->tSDHZ.tUFBCL25ms, T_25ms, pRunSet->dT_XCY + T_1s);
  604. #ifdef FA_PL_PJ
  605. InitTR(&pR->tSDHZ.tFREQAB25ms_SCY, T_25ms * 2, T_25ms * 2);
  606. InitTR(&pR->tSDHZ.tFREQBC25ms_SCY, T_25ms * 2, T_25ms * 2);
  607. InitTR(&pR->tSDHZ.tFREQAB25ms_LCY, T_25ms * 2, T_25ms * 2);
  608. InitTR(&pR->tSDHZ.tFREQBC25ms_LCY, T_25ms * 2, T_25ms * 2);
  609. InitTR(&pR->tSDHZ.tFREQSAB25ms, T_25ms, T_25ms * 2);
  610. InitTR(&pR->tSDHZ.tFREQSBC25ms, T_25ms, T_25ms * 2);
  611. InitTR(&pR->tSDHZ.tFREQLAB25ms, T_25ms, T_25ms * 2);
  612. InitTR(&pR->tSDHZ.tFREQLBC25ms, T_25ms, T_25ms * 2);
  613. #endif
  614. InitTR_Time(&pR->tSDHZ.tHz0ms1s, 0, tRunPara.wFAHZT * T_5ms / 5 + T_1s);
  615. InitTR_Time(&pR->tSDHZ.tTz0ms1s, 0, tRunPara.wFAFZT * T_5ms / 5 + T_1s);
  616. InitTR_Time(&pR->tSDHZ.tHz0ms2s, pRunSet->dT_HZSB, 0);
  617. InitTR_Time(&pR->tSDHZ.tTz0ms2s, pRunSet->dT_TZSB, 0);
  618. InitTR_Time(&pR->tSDHZ.tTSDHzHJS, 0, pSet->dT_Y); // 上电合闸加速判断
  619. InitTR_Time(&pR->tU0TZ.tZOVTime, pSet->dT_OverU0, T_20ms);
  620. InitTR_Time(&pR->tOVER_U0TZ.tZOVTime, pSet->dBHTOverU0, T_20ms);
  621. // 解列
  622. InitTR_Time(&pR->tDYJL.tDdyTime, pSet->dT_jl_ddy, T_20ms);
  623. InitTR_Time(&pR->tDYJL.tGdyTime, pSet->dT_jl_gdy, T_20ms);
  624. InitTR_Time(&pR->tDYJL.tHighTime, pSet->dT_jl_ggdy, T_20ms);
  625. InitTR_Time(&pR->tDYJL.tLowTime, pSet->dT_jl_gddy, T_20ms);
  626. InitTR_Time(&pR->tPLJL.tDhzTime, pSet->dT_jl_dhz, T_40ms);
  627. InitTR_Time(&pR->tPLJL.tHighTime, pSet->dT_jl_ghz, T_40ms);
  628. InitTR_Time(&pR->tPLJL.tLowTime, pSet->dT_jl_lowhz, T_40ms);
  629. InitTR_Time(&pR->tLostVot.tLostVotTime, pSet->dT_Z, T_20ms);
  630. InitTR_Time(&pR->tLostVot.tLostVLockTime, 0, pSet->dT_fa_bsTz);
  631. InitTR_Time(&pR->tTQHz.tTQTime, pSet->dT_tq, 0); // 同期
  632. InitTR_Time(&pR->tSWST.tTWCNGJ1s, pRunSet->dWCN_T, WRN_RET_TIME);
  633. InitTR_Time(&pR->tSWST.tTKZHLGJ1s, T_1s * 10, WRN_RET_TIME);
  634. InitTR_Time(&pR->tTripfail_2s, pRunSet->dT_TZSB, 0); // 跳闸失败时间继电器
  635. InitTR_Time(&pR->tTripfail_hz, 0, pRunSet->dT_TZSB); // 跳闸失败时间继电器
  636. InitTR_Time(&pR->tSWST.tCTXXYC, T_1s * 3, WRN_RET_TIME); // CT相序异常
  637. InitTR_Time(&pR->tSWST.tCTYC, T_1s * 10, WRN_RET_TIME); // CT断线
  638. InitTR_Time(&pR->tTZZFG_5S0ms, pRunSet->dT_ZZFG, 0); // 无故障延时5s
  639. for (i = 0; i < 8; i++)
  640. {
  641. if (pRunSet->bTT_FDLTz[i])
  642. {
  643. InitTR_Time(&pR->tFdl[i].tFdlTime, pRunSet->dTFDL[i], PRO_RET_TIME);
  644. }
  645. else
  646. {
  647. InitTR_Time(&pR->tFdl[i].tFdlTime, pRunSet->dTFDL[i], WRN_RET_TIME);
  648. }
  649. }
  650. #ifdef FUNC_DRIVE_JY
  651. InitTR(&gb_drive.tDriveUa1Time, pSet->dT_drive_ua1, 0);
  652. InitTR(&gb_drive.tDriveUa2Time, pSet->dT_drive_ua2, 0);
  653. InitTR(&gb_drive.tDriveU0Time, pSet->dT_drive_u0, 0);
  654. InitTR(&gb_drive.tDriveITime, pSet->dT_drive_i, 0);
  655. InitTR(&gb_drive.tDriveI0Time, pSet->dT_drive_i0, 0);
  656. InitTR(&gb_drive.tDriveAgainTime, pSet->dT_drive_again, 0);
  657. InitTR(&gb_drive.tDriveFaBSTime, T_25ms * 2, 0);
  658. #endif
  659. #ifdef FUNC_DRIVE
  660. InitTR(&gb_drive.tQDTime_hz, pRunSet->tSwSet[sw].dT_Drive_hz, 0);
  661. InitTR(&gb_drive.tQDTime_fz, pRunSet->tSwSet[sw].dT_Drive_fz, 0);
  662. InitTR(&gb_drive.tQDTime_fz_end, pRunSet->tSwSet[sw].dT_fz_end, 0);
  663. InitTR(&gb_drive.tQDTime_hz_end, pRunSet->tSwSet[sw].dT_hz_end, 0);
  664. #endif
  665. }
  666. for (i = 0; i < VOL_NUMBER; i++)
  667. {
  668. InitTR_Time(&g_tVol[i].tQDTime, pRunSet->tVolSet[i].dTVol, WRN_RET_TIME);
  669. }
  670. InitTR_Time(&g_tJLSDTime, pRunSet->dSDYX_T, T_1s * 5);
  671. InitTR_Time(&tFAg.tRstTime, pRunSet->dT_sendext * 10, 0);
  672. #ifdef FUN_JDXX
  673. jdxx_relayinit();
  674. #endif
  675. }
  676. /**************************************************************************
  677. 函数名称:ValueOverRelay
  678. 函数版本:1.00
  679. 作者: mwd
  680. 创建日期:2007.9.29
  681. 函数功能说明:过量继电器
  682. 输入参数:dI、dIdz 相比较
  683. CONST_FHXISHU: 返回系数,常数
  684. bEN: 1--返回系数有效,0-返回系数无效
  685. 其他输入:
  686. 输出参数?
  687. 返回值:?I>dIdz,返回true ,否则,返回false
  688. ***************************************************************************/
  689. bool OverRelay(DWORD dI, DWORD dIdz, DWORD dfhdz, bool bEN)
  690. {
  691. if (bEN)
  692. {
  693. if (dI > dfhdz)
  694. {
  695. return (true);
  696. }
  697. else
  698. {
  699. return (false);
  700. }
  701. }
  702. else
  703. {
  704. if (dI > dIdz)
  705. {
  706. return (true);
  707. }
  708. else
  709. {
  710. return (false);
  711. }
  712. }
  713. }
  714. /**************************************************************************
  715. 函数名称:ValueLowRelay
  716. 函数版本:1.00
  717. 作者:
  718. 创建日期:2007.9.29
  719. 函数功能说明:欠量继电器
  720. 输入参数:dI、dIdz 相比较
  721. CONST_FHXISHU: 返回系数,常数
  722. bEN: 1--返回系数有效,0-返回系数无效
  723. 其他输入:
  724. 输出参数?
  725. 返回值:?I>dIdz,返回true ,否则,返回false
  726. ***************************************************************************/
  727. bool LowRelay(DWORD dI, DWORD dIdz, DWORD dfhdz, bool bEN)
  728. {
  729. if (bEN)
  730. {
  731. if (dI < dfhdz)
  732. {
  733. return (true);
  734. }
  735. else
  736. {
  737. return (false);
  738. }
  739. }
  740. else
  741. {
  742. if (dI < dIdz)
  743. {
  744. return (true);
  745. }
  746. else
  747. {
  748. return (false);
  749. }
  750. }
  751. }
  752. /**************************************************************************
  753. 函数名称:SelectFrom
  754. 函数版本:1.00
  755. 作者: MWD
  756. 创建日期:2007.9.29
  757. 函数功能说明:二选一函数
  758. 输入参数:DWORD A: 待选数
  759. DWORD B: 待选数
  760. bool bSelect
  761. 输出参数:
  762. 返回值: bSelect=0 时,返回 A; bSelect=1 时,返回 B;
  763. **************************************************************************/
  764. DWORD SelectMax(DWORD A, DWORD B, DWORD C)
  765. {
  766. DWORD max;
  767. max = A;
  768. if (B > max)
  769. {
  770. max = B;
  771. }
  772. if (C > max)
  773. {
  774. max = C;
  775. }
  776. return (max);
  777. }
  778. /**************************************************************************
  779. 函数名称:CalcAngSub
  780. 函数版本:1.00
  781. 作者: MWD
  782. 创建日期:2007.9.29
  783. 函数功能说明:计算向量角差,并转换至 0~360之间
  784. 输入参数:long Real1,
  785. long Imag1,
  786. long Imag2,
  787. long Imag2
  788. 输出参数:
  789. 返回值: long 角差;
  790. **************************************************************************/
  791. long CalcAngSub(long Real1, long Imag1, long Real2, long Imag2)
  792. {
  793. long lTmp;
  794. lTmp = _AngPQ(Real1, Imag1) - _AngPQ(Real2, Imag2);
  795. // 规格化在0 ~ 360之间
  796. if (lTmp < 0)
  797. {
  798. lTmp += ANGLE_P360;
  799. }
  800. if (lTmp > ANGLE_P180) // 转换为-180 ~180
  801. {
  802. lTmp -= ANGLE_P360;
  803. }
  804. return (lTmp);
  805. }
  806. /**************************************************************************
  807. 函数名称:SynJudge
  808. 函数版本:1.00
  809. 作者: 保护组 MWD
  810. 创建日期:2007.10.13
  811. 函数功能说明:同期判别
  812. 输入参数:long ANG1: UX与UA角差
  813. long ANG2: UX与UA角差记忆值
  814. DWORD ANGSET: 同期角度定值
  815. 输出参数:
  816. 返回值: TRUE---同期满足,
  817. FALSE--同期不满足
  818. **************************************************************************/
  819. bool SynJudge(long lANG1, long lANG2, DWORD dANGSET) // 同期判别
  820. {
  821. bool bStatus;
  822. long lTemp;
  823. lTemp = lAbs(lANG1 - lANG2);
  824. if (((long)dANGSET > lTemp) || (lTemp > (ANGLE_P360 - (long)dANGSET)))
  825. {
  826. bStatus = 1;
  827. }
  828. else
  829. {
  830. bStatus = 0;
  831. }
  832. return (bStatus);
  833. }
  834. /**************************************************************************
  835. 函数名称:PowerDirectionalRelay
  836. 函数版本:1.00
  837. 作者: Chenlei
  838. 创建日期:2007.11.4
  839. 函数功能说明:输入电压、电流和阻抗角定值以及电压门槛定值,判断测量阻抗是否
  840. 落在动作特性区内,并输出动作标志。
  841. 输入参数:Ur -- 电压实部
  842. Ui -- 电压虚部
  843. U -- 电压幅值
  844.      Ir -- 电流实部
  845. Ii -- 电流虚部
  846. I -- 电流幅值
  847. Umk -- 电压门槛
  848. Imk -- 电流门槛
  849. Ang1 -- 灵敏角1
  850. Ang2 -- 灵敏角2
  851. 输出参数:管脚10_动作标志
  852. 返回值: false-不动作;true-动作
  853. **************************************************************************/
  854. bool PowerDirectionalRelay(long Ur, long Ui, DWORD U, long Ir, long Ii, DWORD I, DWORD Umk, DWORD Imk, long sina1, long cosa1, long sina2, long cosa2)
  855. {
  856. bool bDIRB;
  857. long lTemp; // 中间变量
  858. long lTemp1; // 中间变量
  859. long lTemp2; // 中间变量
  860. bDIRB = false;
  861. if ((U > Umk) && (I > Imk)) // 电压、电流均大于门槛,进行方向判断;否则,返回
  862. {
  863. lTemp1 = _MulFac_S(Ur, (Ir * cosa1 - Ii * sina1));
  864. lTemp2 = _MulFac_S(Ui, (Ii * cosa1 + Ir * sina1));
  865. lTemp = lTemp1 + lTemp2;
  866. if (lTemp > 0)
  867. {
  868. lTemp1 = _MulFac_S(Ur, (Ir * cosa2 - Ii * sina2));
  869. lTemp2 = _MulFac_S(Ui, (Ii * cosa2 + Ir * sina2));
  870. lTemp = lTemp1 + lTemp2;
  871. if (lTemp > 0)
  872. {
  873. bDIRB = true;
  874. }
  875. }
  876. }
  877. return (bDIRB);
  878. }
  879. /******************************end*****************************************/