UnitsLib.c 35 KB

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