UnitsLib.c 37 KB

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