FA_g.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  1. #ifndef __GOOSE_APP_H
  2. #define __GOOSE_APP_H
  3. #define GOOSE_EQU_SIDE 8 // goose 通信单侧设备数量
  4. #define GOOSE_EQU_SIDE_N 4 // goose 通信负荷侧设备个数
  5. #define GOOSE_EQU_MAX (GOOSE_EQU_SIDE+GOOSE_EQU_SIDE_N) // goose 通信支持的设备总数
  6. #define GOOSE_RECV_GOLBNUM 16
  7. enum
  8. {
  9. GOOSE_CMD_TICK=0x11, //心跳报文 11
  10. GOOSE_CMD_DATA, // 突变报文 12
  11. GOOSE_CMD_GZGLOK, //故障隔离成功
  12. };
  13. enum
  14. {
  15. GOOSE_FIND_LL_NONE=0, // 寻找联络开关
  16. GOOSE_FIND_LL_QD, // 寻找联络开关 启动
  17. GOOSE_FIND_LL_OK, // 联络开关确认
  18. };
  19. #define FA_CMD_BUF_MAX 32
  20. enum
  21. {
  22. GOOSE_SEND_TBL_GZ=0, // 节点故障
  23. GOOSE_SEND_TBL_GL, // 隔离成功
  24. GOOSE_SEND_TBL_JT, // 开关拒跳
  25. GOOSE_SEND_TBL_GLBS, // 过流闭锁
  26. #if defined GD_AREA_ZHONGSHAN || defined GD_AREA_ZHONGSHAN_2020 //中山要求通信异常,全系统均异常
  27. GOOSE_SEND_TBL_STATUS, // 通信状态
  28. GOOSE_SEND_TBL_FG, // 通信复归
  29. #endif
  30. GOOSE_SEND_TBL_NUMBER, // 零序闭锁
  31. };
  32. enum
  33. {
  34. GOOSE_RECV_TBL_M01=0, //M侧节点故障
  35. GOOSE_RECV_TBL_M02, //M侧节点故障
  36. GOOSE_RECV_TBL_M03, //M侧节点故障
  37. GOOSE_RECV_TBL_M04, //M侧节点故障
  38. GOOSE_RECV_TBL_M05, //M侧节点故障
  39. GOOSE_RECV_TBL_M06, //M侧节点故障
  40. GOOSE_RECV_TBL_M07, //M侧节点故障
  41. GOOSE_RECV_TBL_M08, //M侧节点故障
  42. GOOSE_RECV_TBL_N01, //N侧节点故障
  43. GOOSE_RECV_TBL_N02, //N侧节点故障
  44. GOOSE_RECV_TBL_N03, //N侧节点故障
  45. GOOSE_RECV_TBL_N04, //N侧节点故障
  46. GOOSE_RECV_TBL_GL01, //开关隔离成功
  47. GOOSE_RECV_TBL_GL02, //开关隔离成功
  48. GOOSE_RECV_TBL_GL03, //开关隔离成功
  49. GOOSE_RECV_TBL_GL04, //开关隔离成功
  50. GOOSE_RECV_TBL_GL05, //开关隔离成功
  51. GOOSE_RECV_TBL_GL06, //开关隔离成功
  52. GOOSE_RECV_TBL_GL07, //开关隔离成功
  53. GOOSE_RECV_TBL_GL08, //开关隔离成功
  54. GOOSE_RECV_TBL_GL09, //开关隔离成功
  55. GOOSE_RECV_TBL_GL10, //开关隔离成功
  56. GOOSE_RECV_TBL_GL11, //开关隔离成功
  57. GOOSE_RECV_TBL_GL12, //开关隔离成功
  58. GOOSE_RECV_TBL_JT01, //开关拒跳
  59. GOOSE_RECV_TBL_JT02, //开关拒跳
  60. GOOSE_RECV_TBL_JT03, //开关拒跳
  61. GOOSE_RECV_TBL_JT04, //开关拒跳
  62. GOOSE_RECV_TBL_JT05, //开关拒跳
  63. GOOSE_RECV_TBL_JT06, //开关拒跳
  64. GOOSE_RECV_TBL_JT07, //开关拒跳
  65. GOOSE_RECV_TBL_JT08, //开关拒跳
  66. GOOSE_RECV_TBL_JT09, //开关拒跳
  67. GOOSE_RECV_TBL_JT10, //开关拒跳
  68. GOOSE_RECV_TBL_JT11, //开关拒跳
  69. GOOSE_RECV_TBL_JT12, //开关拒跳
  70. GOOSE_RECV_TBL_GLBS01, //过流闭锁01
  71. GOOSE_RECV_TBL_GLBS02, //过流闭锁02
  72. GOOSE_RECV_TBL_GLBS03, //过流闭锁03
  73. GOOSE_RECV_TBL_GLBS04, //过流闭锁04
  74. GOOSE_RECV_TBL_GLBS05, //过流闭锁05
  75. GOOSE_RECV_TBL_GLBS06, //过流闭锁06
  76. GOOSE_RECV_TBL_GLBS07, //过流闭锁07
  77. GOOSE_RECV_TBL_GLBS08, //过流闭锁08
  78. GOOSE_RECV_TBL_GLBS09, //过流闭锁09
  79. GOOSE_RECV_TBL_GLBS10, //过流闭锁10
  80. GOOSE_RECV_TBL_GLBS11, //过流闭锁11
  81. GOOSE_RECV_TBL_GLBS12, //过流闭锁12
  82. #if defined GD_AREA_ZHONGSHAN || defined GD_AREA_ZHONGSHAN_2020 //中山要求通信异常,全系统均异常
  83. GOOSE_RECV_TBL_STATUS01, //节点通信异常状态
  84. GOOSE_RECV_TBL_STATUS02, //节点通信异常状态
  85. GOOSE_RECV_TBL_STATUS03, //节点通信异常状态
  86. GOOSE_RECV_TBL_STATUS04, //节点通信异常状态
  87. GOOSE_RECV_TBL_STATUS05, //节点通信异常状态
  88. GOOSE_RECV_TBL_STATUS06, //节点通信异常状态
  89. GOOSE_RECV_TBL_STATUS07, //节点通信异常状态
  90. GOOSE_RECV_TBL_STATUS08, //节点通信异常状态
  91. GOOSE_RECV_TBL_STATUS09, //节点通信异常状态
  92. GOOSE_RECV_TBL_STATUS10, //节点通信异常状态
  93. GOOSE_RECV_TBL_STATUS11, //节点通信异常状态
  94. GOOSE_RECV_TBL_STATUS12, //节点通信异常状态
  95. GOOSE_RECV_TBL_FG01, //节点通信异常
  96. GOOSE_RECV_TBL_FG02, //节点通信异常
  97. GOOSE_RECV_TBL_FG03, //节点通信异常
  98. GOOSE_RECV_TBL_FG04, //节点通信异常
  99. GOOSE_RECV_TBL_FG05, //节点通信异常
  100. GOOSE_RECV_TBL_FG06, //节点通信异常
  101. GOOSE_RECV_TBL_FG07, //节点通信异常
  102. GOOSE_RECV_TBL_FG08, //节点通信异常
  103. GOOSE_RECV_TBL_FG09, //节点通信异常
  104. GOOSE_RECV_TBL_FG10, //节点通信异常
  105. GOOSE_RECV_TBL_FG11, //节点通信异常
  106. GOOSE_RECV_TBL_FG12, //节点通信异常
  107. #endif
  108. GOOSE_RECV_TBL_NUMBER, // 接收数据个数
  109. };
  110. #define GOOSE_RECV_LOGIC_NUM GOOSE_RECV_TBL_GLBS12 // 参与goose逻辑的虚遥信
  111. struct gse_tbl
  112. {
  113. char * name;
  114. char * sAddr;
  115. };
  116. // 保护动作跳闸标志
  117. typedef union UGOOSE_STU
  118. {
  119. DWORD wfFlag;
  120. struct
  121. {
  122. DWORD blxbs:1; //零序闭锁
  123. DWORD bglbs:1; //过流闭锁
  124. DWORD btw:1; //跳位
  125. DWORD bfx:1; // 节点反方向故障bit 4
  126. DWORD bzx:1; // 节点正方向故障bit 3
  127. DWORD blx:1; // 节点零序故障 bit 5
  128. DWORD btzsb:1; // 开关拒动 bit 2
  129. DWORD bgzglok:1; // 隔离ok bit 1
  130. DWORD bgl:1; // 节点故障 bit 0
  131. DWORD bcomerr:1; //通信异常
  132. DWORD bTstgz:1;
  133. DWORD bTstglok:1;
  134. DWORD bTstjt:1;
  135. DWORD bTstglbs:1;
  136. DWORD bTstcomerr:1;
  137. }bFlag;
  138. }UGOOSE_STU;
  139. typedef struct FA_GOOSE
  140. {
  141. UGOOSE_STU ug;
  142. DWORD ug_save;
  143. UGOOSE_STU ugside[GOOSE_EQU_MAX];
  144. DWORD dTrecv[GOOSE_RECV_GOLBNUM];
  145. int recvgolbnum;
  146. /*同61850模块交互的数据*/
  147. int outval[GOOSE_SEND_TBL_NUMBER];
  148. int inval[GOOSE_RECV_TBL_NUMBER];
  149. bool bSend;
  150. int commstate; //goose 模块发送的通信状态==0 通信正常 ==1 通信异常
  151. int commerr;
  152. int syscomerr;
  153. bool bComErr; //保护用
  154. bool bNside;
  155. TIMERELAY tRstTime; // goose 信息延时复归
  156. TIMERELAY tGooseStillTime; // goose 投入延迟复归
  157. #if defined GD_AREA_ZHONGSHAN || defined GD_AREA_ZHONGSHAN_2020
  158. u32 commerrst; //综合本机后的状态
  159. u32 commerrfg;
  160. u32 commerrstsave; // 和本机状态比较,本机状态大于保存值,需发送,说明有新的中断信息
  161. u32 commerrfgsave;
  162. TIMERELAY tErrfgtime; // 发送复归后,复归值清零时间继电器
  163. #endif
  164. }FA_GOOSE;
  165. typedef union UGOCDIR
  166. {
  167. DWORD wfFlag;
  168. struct
  169. {
  170. DWORD bYY1:1;
  171. DWORD bYY2:1;
  172. DWORD bWY1:1;
  173. DWORD bWY2:1;
  174. DWORD bZXA:1; //A相正方向动作
  175. DWORD bZXB:1; //B相正方向动作
  176. DWORD bZXC:1; //C相正方向动作
  177. DWORD bZX:1; //线路正向故障
  178. DWORD bFXA:1; //A反方向动作
  179. DWORD bFXB:1; //B相反方向动作
  180. DWORD bFXC:1; //C相反方向动作
  181. DWORD bFX:1; //线路反向故障
  182. DWORD bWXA:1; //A相无方向动作
  183. DWORD bWXB:1; //B相无方向动作
  184. DWORD bWXC:1; //C相无方向动作
  185. DWORD bWX:1; //线路无方向故障
  186. DWORD bQDA:1; // A相启动
  187. DWORD bQDB:1; // B相启动
  188. DWORD bQDC:1; // C相启动
  189. DWORD bQDLX:1;
  190. DWORD bLX:1; //线路零序故障
  191. DWORD bGZ:1; //线路有故障
  192. DWORD bGLBS:1;
  193. DWORD bCYY:1;
  194. DWORD bgzglok:1;
  195. DWORD btzsb:1;
  196. DWORD bcomerr:1;
  197. DWORD bcomerrbak:1;
  198. DWORD bllWY1:1;
  199. DWORD bllWY2:1;
  200. }bFlag;
  201. }UGOCDIR;
  202. typedef union UGOCFLAG
  203. {
  204. DWORD wfFlag;
  205. struct
  206. {
  207. DWORD bglQD:1;
  208. DWORD bglTz:1;
  209. DWORD bglTzH:1; //跳闸保持信号
  210. DWORD bglQDWave:1;
  211. #if defined GD_AREA_ZHONGSHAN || defined GD_AREA_ZHONGSHAN_2020 || defined GD_AREA_MAIN_2020
  212. DWORD bgl2QD:1;
  213. DWORD bgl2Tz:1;
  214. DWORD bgl2TzH:1; //跳闸保持信号
  215. DWORD bgl2QDWave:1;
  216. #endif
  217. DWORD blxQD:1;
  218. DWORD blxTz:1;
  219. DWORD blxTzH:1;
  220. DWORD blxQDWave:1;
  221. DWORD bgzglQD:1;
  222. DWORD bgzglTz:1; //故障隔离跳闸
  223. DWORD bgzglTzH:1; //故障隔离跳闸
  224. DWORD bextQD:1;
  225. DWORD bextTz:1;
  226. DWORD bextTzH:1;
  227. DWORD bsdQD:1; //首端失压 故障隔离
  228. DWORD bsdTz:1; // 跳闸
  229. DWORD bsdTzH:1; // 跳闸
  230. DWORD berrQD:1; //通信异常失压 故障隔离
  231. DWORD berrTz:1; // 跳闸
  232. DWORD berrTzH:1; // 跳闸
  233. DWORD bllQD:1 ; // 联络合闸启动
  234. DWORD bllWY_1:1 ; // 联络单侧失压
  235. DWORD bllhz:1; //联络合闸动作
  236. DWORD bllhzH:1; //联络合闸动作
  237. DWORD bExtbs:1;
  238. DWORD bXBbs:1;
  239. DWORD bXBbs2:1; //过流2谐波闭锁
  240. }bFlag;
  241. }UGOCFLAG;
  242. typedef union UCDFLAG
  243. {
  244. WORD wfFlag;
  245. struct
  246. {
  247. WORD bQD:1;
  248. WORD bCD:1;
  249. WORD bFD:1;
  250. }bFlag;
  251. }UCDFLAG;
  252. typedef struct FA_CD
  253. {
  254. UCDFLAG sta;
  255. TIMERELAY tCDTime; // 充电时间
  256. TIMERELAY tWYTime; // 放电失压时间
  257. }FA_CD;
  258. enum
  259. {
  260. FAG_GL1=0, // 过流1段
  261. FAG_GL2, // 过流2段
  262. FAG_LX, // 零序
  263. FAG_BHNUMBER
  264. };
  265. typedef struct TGOC_T
  266. {
  267. UGOCDIR psta; // 公用动作信息
  268. #if defined GD_AREA_ZHONGSHAN || defined GD_AREA_ZHONGSHAN_2020 || defined GD_AREA_MAIN_2020
  269. UGOCDIR psta2; // 过流2段用动作信息
  270. #endif
  271. UGOCFLAG sta; // 故障动作信息
  272. TIMERELAY tTZX_300ms; // 正相方向判断保持2秒
  273. TIMERELAY tTFX_300ms; // 反相方向判断保持2秒
  274. TIMERELAY tTWX_300ms; // 无方向判断报纸2秒
  275. TIMERELAY tTLX_300ms; // 零序故障保持2秒
  276. TIMERELAY tTGLBS_300ms; // 零序故障保持2秒
  277. TIMERELAY tTHz1s; // 合闸位置保持1秒
  278. FA_CD tglcd; //故障隔离充电
  279. FA_CD tllcd; //故障联络充电
  280. FA_CD tqccd; // 故障切除充电
  281. bool b_side_gz;
  282. bool b_side_tzsb;
  283. bool bTzout;
  284. bool bslowEn; //缓动型条件满足
  285. bool bgooseGz;
  286. bool bgooseBsHz;
  287. bool bextTzLed; // 动作灯
  288. bool bglTzLed; // 动作灯
  289. bool blxTzLed; // 动作灯
  290. bool bsdTzLed; // 动作灯
  291. bool berrTzLed; // 动作灯
  292. bool bgzglTzLed; // 故障隔离动作灯
  293. TIMERELAY tglFz25ms; // 幅值启动25ms
  294. TIMERELAY tglQDTime; // 时间继电器
  295. TIMERELAY tglQD25ms; // 启动25ms,防干扰时间继电器,用于速断和零序加速,防止误出口
  296. TIMERELAY tglslowTime; // 时间继电器
  297. TIMERELAY tlxslowTime; // 时间继电器
  298. #if defined GD_AREA_ZHONGSHAN || defined GD_AREA_ZHONGSHAN_2020 || defined GD_AREA_MAIN_2020
  299. TIMERELAY tgl2Fz25ms; // 幅值启动25ms
  300. TIMERELAY tgl2QDTime; // 时间继电器
  301. TIMERELAY tgl2QD25ms; // 启动25ms,防干扰时间继电器,用于速断和零序加速,防止误出口
  302. TIMERELAY tgl2slowTime; // 时间继电器
  303. TIMERELAY tTZX2_300ms; // 正相方向判断保持2秒
  304. TIMERELAY tTFX2_300ms; // 反相方向判断保持2秒
  305. TIMERELAY tTWX2_300ms; // 无方向判断报纸2秒
  306. #endif
  307. #ifdef GD_AREA_ZHONGSHAN_2020
  308. TOC_T tOc[FAG_BHNUMBER]; // 合闸加速跳 过流1
  309. #endif
  310. TIMERELAY tlxFz25ms; // 幅值启动25ms
  311. TIMERELAY tlxQDTime; // 时间继电器
  312. TIMERELAY tlxQD25ms; // 启动25ms,防干扰时间继电器,用于速断和零序加速,防止误出口
  313. TIMERELAY tgzglTime; // 故障隔离时间
  314. TIMERELAY tgoose15ms_gzgl; // 等待10ms goose 通信时间
  315. TIMERELAY tsdlostTime; // 首端失压时间
  316. TIMERELAY terrlostTime; //通信异常失压时间
  317. TIMERELAY tllhzTime; //联络合闸时间
  318. TIMERELAY tllQdTime; //联络合闸时间
  319. TIMERELAY tgoosedelayms_ll; //联络 等待goose 通信时间
  320. TIMERELAY tllWY1Time; //联络合闸时间
  321. TIMERELAY tllWY2Time; //联络合闸时间
  322. TIMERELAY tllYY1Time; //联络有压时间
  323. TIMERELAY tllYY2Time; //联络有压时间
  324. TIMERELAY tTzcheckTime; //跳闸失败检查时间
  325. TIMERELAY tHzcheckTime; //跳闸失败检查时间
  326. TIMERELAY tCYY3sdelayms;
  327. TIMERELAY tgzglokextTime;
  328. TIMERELAY ttzsbextTime;
  329. TIMERELAY tgzglokForbitTime; //故障隔离成功发送后,闭锁再次发送时间
  330. TIMERELAY textbsTime;
  331. }TGOC_T;
  332. extern const struct gse_tbl g_goose_send_tbl[GOOSE_SEND_TBL_NUMBER];
  333. extern const struct gse_tbl g_goose_recv_tbl[GOOSE_RECV_TBL_NUMBER];
  334. extern FA_GOOSE tFAg;
  335. extern int g_bgseEnable;
  336. void fa_g_unpack(void);
  337. void fa_g_packet(bool bfirst);
  338. void fa_g_init(void);
  339. void GOC_dir_check(int sw,u32 dStep);
  340. void fag_oc_gl(int sw,u32 dStep);
  341. void fag_oc_lx(int sw,u32 dStep);
  342. void fa_g_app_time(int sw);
  343. void fag_bh(int sw,DWORD dStep);
  344. // sunxi 20190418 void goose_send_packet(u8 type,u8 *mac,u32 gData,struct timespec *pts,bool btick);
  345. void XBCalc_goc(int sw); // goose 谐波计算:处理标志:谐波闭锁动作
  346. void fa_g_decode(int commstate); //通信异常判断
  347. void fa_g_extinit(int num,int firstaddr); // app_goose.c中调用fa_g.c中的变量初始化
  348. void fa_g_gocbrecvdT(int index); // app_goose.c中接收后调用,用于通信超时处理
  349. #ifdef GD_AREA_ZHONGSHAN_2020
  350. void fag_oc_acc(int sw,u32 dStep); // 分布式合闸加速跳闸
  351. #endif
  352. #endif
  353. //========================== 本文件结束 ===============================