detection.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615
  1. /*********************************************************************************************************
  2. * Module : detection
  3. * Abstract :
  4. * Version : 1.0.0
  5. * Author : Leopul(COPYRIGHT 2025 ~ 2027 Leopul. All rights reserved.)
  6. * Complete : 2025-04-08
  7. * Content : None
  8. * Note : None
  9. *********************************************************************************************************/
  10. #include "detection.h"
  11. #include "gd32e23x.h"
  12. #include "common.h"
  13. #include "board_cfg.h"
  14. #include "relay.h"
  15. #define DETECTION_1_RCU RCU_GPIOA
  16. #define DETECTION_1_IO GPIOA
  17. #define DETECTION_1 GPIO_PIN_11
  18. #define DETECIION_1_EXTI_SOURCE EXTI_SOURCE_GPIOA
  19. #define DERECTION_1_EXTI EXTI_11
  20. #define DERECTION_1_EXTI_IO EXTI_SOURCE_PIN11
  21. static board_t *board = 0;
  22. #if SURPPORT_2_PT
  23. #define DETECTION_2_RCU RCU_GPIOB
  24. #define DETECTION_2_IO GPIOB
  25. #define DETECTION_2 GPIO_PIN_3
  26. #define DETECIION_2_EXTI_SOURCE EXTI_SOURCE_GPIOB
  27. #define DERECTION_2_EXTI EXTI_3
  28. #define DERECTION_2_EXTI_IO EXTI_SOURCE_PIN3
  29. #endif
  30. #define KEY_RST_RCU RCU_GPIOC
  31. #define KEY_RST_IO GPIOC
  32. #define KEY_RST GPIO_PIN_14
  33. #define KEY_RST_EXTI_SOURCE EXTI_SOURCE_GPIOC
  34. #define KEY_RST_EXTI EXTI_14
  35. #define KEY_RST_EXTI_IO EXTI_SOURCE_PIN14
  36. #define KEY_TEST_RCU RCU_GPIOB
  37. #define KEY_TEST_IO GPIOB
  38. #define KEY_TEST GPIO_PIN_2
  39. #define KEY_TEST_EXTI_SOURCE EXTI_SOURCE_GPIOB
  40. #define KEY_TEST_EXTI EXTI_2
  41. #define KEY_TEST_EXTI_IO EXTI_SOURCE_PIN2
  42. static void get_detection(void);
  43. static void detection_opt(void);
  44. void detection_init(void)
  45. {
  46. board = get_board();
  47. #if(POWER_TYPE == POWER_DC)
  48. rcu_periph_clock_enable(DETECTION_1_RCU);
  49. gpio_mode_set(DETECTION_1_IO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, DETECTION_1);
  50. rcu_periph_clock_enable(DETECTION_2_RCU);
  51. gpio_mode_set(DETECTION_2_IO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, DETECTION_2);
  52. #else
  53. rcu_periph_clock_enable(RCU_CFGCMP);
  54. rcu_periph_clock_enable(DETECTION_1_RCU);
  55. gpio_mode_set(DETECTION_1_IO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, DETECTION_1);
  56. nvic_irq_enable(EXTI4_15_IRQn,2);
  57. syscfg_exti_line_config(DETECIION_1_EXTI_SOURCE,DERECTION_1_EXTI_IO);
  58. exti_init(DERECTION_1_EXTI,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
  59. exti_interrupt_flag_clear(DERECTION_1_EXTI);
  60. #if SURPPORT_2_PT
  61. rcu_periph_clock_enable(DETECTION_2_RCU);
  62. gpio_mode_set(DETECTION_2_IO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, DETECTION_2);
  63. nvic_irq_enable(EXTI2_3_IRQn,2);
  64. syscfg_exti_line_config(DETECIION_2_EXTI_SOURCE,DERECTION_2_EXTI_IO);
  65. exti_init(DERECTION_2_EXTI,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
  66. exti_interrupt_flag_clear(DERECTION_2_EXTI);
  67. #endif
  68. #endif
  69. board->detection = get_detection;
  70. board->opt_detection = detection_opt;
  71. }
  72. void key_init(void)
  73. {
  74. #if SUPPORT_ALL_ON_OFF
  75. rcu_periph_clock_enable(RCU_CFGCMP);
  76. rcu_periph_clock_enable(KEY_RST_RCU);
  77. gpio_mode_set(KEY_RST_IO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_RST);
  78. nvic_irq_enable(EXTI4_15_IRQn,2);
  79. syscfg_exti_line_config(KEY_RST_EXTI_SOURCE,KEY_RST_EXTI_IO);
  80. exti_init(KEY_RST_EXTI,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
  81. exti_interrupt_flag_clear(KEY_RST_EXTI);
  82. rcu_periph_clock_enable(KEY_TEST_RCU);
  83. gpio_mode_set(KEY_TEST_IO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST);
  84. nvic_irq_enable(EXTI2_3_IRQn,2);
  85. syscfg_exti_line_config(KEY_TEST_EXTI_SOURCE,KEY_TEST_EXTI_IO);
  86. exti_init(KEY_TEST_EXTI,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
  87. exti_interrupt_flag_clear(KEY_TEST_EXTI);
  88. #elif SUPPORT_SELF_LOCK
  89. #endif
  90. }
  91. void EXTI4_15_IRQHandler(void){
  92. #if SUPPORT_ALL_ON_OFF
  93. if(RESET != exti_interrupt_flag_get(KEY_RST_EXTI))
  94. {
  95. exti_interrupt_flag_clear(KEY_RST_EXTI);
  96. if(board)
  97. {
  98. if(gpio_input_bit_get(KEY_TEST_IO,KEY_TEST) != 0)
  99. {
  100. // for(uint8_t k = 0; k < RelaySlaveChaNum;k++)
  101. // {
  102. // async_data da = {0};
  103. // da.channel =k;
  104. // da.fire_or_zero = _FIRE;
  105. // da.method = DELAY_CTRL;
  106. // da.reg = &board->relay_staging_staus[k];
  107. // da.status = RELAY_CLOSE;
  108. // da.w_eep_flag = FLAG_W_EEP;
  109. // set_relay_sta_async(&da);
  110. // }
  111. }
  112. }
  113. }
  114. #endif
  115. if(RESET != exti_interrupt_flag_get(DERECTION_1_EXTI))
  116. {
  117. if(board)
  118. {
  119. board->detection_1_value = 1;
  120. board->detection_1_count = 0;
  121. }
  122. exti_interrupt_flag_clear(DERECTION_1_EXTI);
  123. }
  124. }
  125. void EXTI2_3_IRQHandler(void)
  126. {
  127. #if SUPPORT_ALL_ON_OFF
  128. if(RESET != exti_interrupt_flag_get(KEY_TEST_EXTI))
  129. {
  130. exti_interrupt_flag_clear(KEY_TEST_EXTI);
  131. if(board)
  132. {
  133. if(gpio_input_bit_get(KEY_RST_IO,KEY_RST) != 0)
  134. {
  135. // for(uint8_t k = 0; k < RelaySlaveChaNum;k++)
  136. // {
  137. // async_data da = {0};
  138. // da.channel =k;
  139. // da.fire_or_zero = _FIRE;
  140. // da.method = DELAY_CTRL;
  141. // da.reg = &board->relay_staging_staus[k];
  142. // da.status = RELAY_OPEN;
  143. // da.w_eep_flag = FLAG_W_EEP;
  144. // set_relay_sta_async(&da);
  145. // }
  146. }
  147. }
  148. }
  149. #endif
  150. #if SURPPORT_2_PT
  151. if(RESET != exti_interrupt_flag_get(DERECTION_2_EXTI))
  152. {
  153. if(board)
  154. {
  155. board->detection_2_value = 1;
  156. board->detection_2_count = 0;
  157. }
  158. exti_interrupt_flag_clear(DERECTION_2_EXTI);
  159. }
  160. #endif
  161. }
  162. static void get_detection()
  163. {
  164. if(board)
  165. {
  166. #if (POWER_TYPE == POWER_DC)
  167. uint8_t value = 0;
  168. if(gpio_input_bit_get(GPIOB,GPIO_PIN_3)==0)
  169. value |= 1;
  170. if(gpio_input_bit_get(GPIOA,GPIO_PIN_11)==0)
  171. value |= 2;
  172. board->md_data.r_data.r_d.detection = value;
  173. //return value;
  174. #else
  175. uint16_t data = 0;
  176. if(board->detection_1_value > 0)
  177. {
  178. data |= (1 << 0);
  179. }
  180. #if SURPPORT_2_PT
  181. if(board->detection_2_value > 0)
  182. {
  183. data |= (1 << 1);
  184. }
  185. #endif
  186. board->md_data.r_data.r_d.detection = data;
  187. #endif
  188. }
  189. }
  190. static void detection_opt(void)
  191. {
  192. if(board)
  193. {
  194. #if RELAY_REMENBER
  195. #if ((POWER_TYPE == POWER_AC) || (POWER_TYPE == POWER_DC) || (POWER_TYPE == POWER_AC_3_1))
  196. if(board->md_data.r_data.r_d.detection & 0x1)
  197. {
  198. if(board->handle_input_pt[0] == 0)
  199. {
  200. board->handle_input_pt[0] = 1;
  201. for(uint8_t k = 0; k < PT_SUB_COUNT;k++)
  202. {
  203. if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 2)
  204. continue;
  205. else if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 1)
  206. {
  207. if(board->md_data.rw_data.rw_d.relay_status == RELAY_OPEN)
  208. continue;
  209. }
  210. async_data da = {0};
  211. da.channel =k;
  212. da.fire_or_zero = _FIRE;
  213. da.method = DELAY_CTRL;
  214. da.reg = &board->relay_staging_staus[k];
  215. da.status = board->handle_status[k];
  216. da.w_eep_flag = FLAG_N_W_EEP;
  217. set_relay_sta_async(&da);
  218. // set_relay_status_async(&board->relay_staging_staus[k],DELAY_CTRL,board->handle_status[k]);
  219. }
  220. }
  221. }else
  222. {
  223. if(board->handle_input_pt[0] == 1)
  224. {
  225. for(uint8_t k = 0; k < PT_SUB_COUNT;k++)
  226. {
  227. if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 1)
  228. continue;
  229. else if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 2)
  230. {
  231. if(board->md_data.rw_data.rw_d.relay_status == RELAY_CLOSE)
  232. continue;
  233. }
  234. board->handle_status[k] = board->md_data.rw_data.rw_d.relay_status[k];
  235. async_data da = {0};
  236. da.channel =k;
  237. da.fire_or_zero = _FIRE;
  238. da.method = PROMPT_CTRL;
  239. da.reg = &board->relay_staging_staus[k];
  240. da.status = RELAY_CLOSE;
  241. da.w_eep_flag = FLAG_N_W_EEP;
  242. set_relay_sta_async(&da);
  243. // set_relay_status_async(&board->relay_staging_staus[k],PROMPT_CTRL,RELAY_CLOSE);
  244. }
  245. board->handle_input_pt[0] = 0;
  246. }
  247. }
  248. #if SURPPORT_2_PT
  249. if(board->md_data.r_data.r_d.detection & 0x2)
  250. {
  251. if(board->handle_input_pt[1] == 0)
  252. {
  253. board->handle_input_pt[1] = 1;
  254. for(uint8_t k = PT_SUB_COUNT; k < RelaySlaveChaNum;k++)
  255. {
  256. if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 2)
  257. continue;
  258. else if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 1)
  259. {
  260. if(board->md_data.rw_data.rw_d.relay_status == RELAY_OPEN)
  261. continue;
  262. }
  263. async_data da = {0};
  264. da.channel =k;
  265. da.fire_or_zero = _FIRE;
  266. da.method = DELAY_CTRL;
  267. da.reg = &board->relay_staging_staus[k];
  268. da.status = board->handle_status[k];
  269. da.w_eep_flag = FLAG_N_W_EEP;
  270. set_relay_sta_async(&da);
  271. // set_relay_status_async(&board->relay_staging_staus[k],DELAY_CTRL,board->handle_status[k]);
  272. }
  273. }
  274. }else
  275. {
  276. if(board->handle_input_pt[1] == 1)
  277. {
  278. for(uint8_t k = PT_SUB_COUNT; k < RelaySlaveChaNum;k++)
  279. {
  280. if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 1)
  281. continue;
  282. else if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 2)
  283. {
  284. if(board->md_data.rw_data.rw_d.relay_status == RELAY_CLOSE)
  285. continue;
  286. }
  287. board->handle_status[k] = board->md_data.rw_data.rw_d.relay_status[k];
  288. async_data da = {0};
  289. da.channel = k;
  290. da.fire_or_zero = _FIRE;
  291. da.method = PROMPT_CTRL;
  292. da.reg = &board->relay_staging_staus[k];
  293. da.status = RELAY_CLOSE;
  294. da.w_eep_flag = FLAG_N_W_EEP;
  295. set_relay_sta_async(&da);
  296. //set_relay_status_async(&board->relay_staging_staus[k],PROMPT_CTRL,RELAY_CLOSE);
  297. }
  298. board->handle_input_pt[1] = 0;
  299. }
  300. }
  301. #endif
  302. #elif (POWER_TYPE == POWER_AC_3_2)
  303. uint8_t sync_buff[PT_SUB_COUNT] = {0};
  304. async_data da = {0};
  305. if(board->md_data.r_data.r_d.detection != 0x3)
  306. {
  307. if((board->md_data.r_data.r_d.detection & 0x1) == 0)
  308. {
  309. if(board->handle_input_pt[0] == 1)
  310. {
  311. board->handle_input_pt[0] = 0;
  312. for(uint8_t k = 0; k < PT_SUB_COUNT;k++)
  313. {
  314. if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 0 && board->md_data.rw_data.rw_d.chn_ctrl[k+PT_SUB_COUNT] == 0) //double fire ctrl
  315. {
  316. board->handle_status[k] = board->md_data.rw_data.rw_d.relay_status[k] & 0x1;
  317. board->handle_status[k+PT_SUB_COUNT] = board->md_data.rw_data.rw_d.relay_status[k+PT_SUB_COUNT] & 0x1;
  318. da.channel = k+PT_SUB_COUNT;
  319. da.fire_or_zero = _FIRE;
  320. da.method = PROMPT_CTRL;
  321. da.reg = &board->relay_staging_staus[k+PT_SUB_COUNT];
  322. da.status = RELAY_CLOSE;
  323. da.w_eep_flag = FLAG_N_W_EEP;
  324. set_relay_sta_async(&da);
  325. sync_buff[k] = 1;
  326. }else
  327. {
  328. if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 0)
  329. {
  330. board->handle_status[k] = board->md_data.rw_data.rw_d.relay_status[k] & 0x1;
  331. }else if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 2)
  332. {
  333. if(board->md_data.rw_data.rw_d.relay_status == RELAY_CLOSE)
  334. continue;
  335. }else
  336. {
  337. continue;
  338. }
  339. }
  340. da.channel = k;
  341. da.fire_or_zero = _FIRE;
  342. da.method = PROMPT_CTRL;
  343. da.reg = &board->relay_staging_staus[k];
  344. da.status = RELAY_CLOSE;
  345. da.w_eep_flag = FLAG_N_W_EEP;
  346. set_relay_sta_async(&da);
  347. }
  348. }
  349. }
  350. if((board->md_data.r_data.r_d.detection & 0x2) == 0)
  351. {
  352. if(board->handle_input_pt[1] == 1)
  353. {
  354. board->handle_input_pt[1] = 0;
  355. for(uint8_t k = 0; k < PT_SUB_COUNT;k++)
  356. {
  357. if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 0 && board->md_data.rw_data.rw_d.chn_ctrl[k+PT_SUB_COUNT] == 0)
  358. {
  359. if(sync_buff[k])
  360. continue;
  361. else
  362. {
  363. board->handle_status[k] = board->md_data.rw_data.rw_d.relay_status[k] & 0x1;
  364. board->handle_status[k+PT_SUB_COUNT] = board->md_data.rw_data.rw_d.relay_status[k+PT_SUB_COUNT] & 0x1;
  365. da.channel = k;
  366. da.fire_or_zero = _FIRE;
  367. da.method = PROMPT_CTRL;
  368. da.reg = &board->relay_staging_staus[k];
  369. da.status = RELAY_CLOSE;
  370. da.w_eep_flag = FLAG_N_W_EEP;
  371. set_relay_sta_async(&da);
  372. }
  373. }else
  374. {
  375. if(board->md_data.rw_data.rw_d.chn_ctrl[k+PT_SUB_COUNT] == 0)
  376. {
  377. board->handle_status[k+PT_SUB_COUNT] = board->md_data.rw_data.rw_d.relay_status[k+PT_SUB_COUNT] & 0x1;
  378. }else if(board->md_data.rw_data.rw_d.chn_ctrl[k+PT_SUB_COUNT] == 2)
  379. {
  380. if(board->md_data.rw_data.rw_d.relay_status[k+PT_SUB_COUNT] == RELAY_CLOSE)
  381. continue;
  382. }else
  383. {
  384. continue;
  385. }
  386. }
  387. da.channel = k+PT_SUB_COUNT;
  388. da.fire_or_zero = _FIRE;
  389. da.method = PROMPT_CTRL;
  390. da.reg = &board->relay_staging_staus[k+PT_SUB_COUNT];
  391. da.status = RELAY_CLOSE;
  392. da.w_eep_flag = FLAG_N_W_EEP;
  393. set_relay_sta_async(&da);
  394. }
  395. }
  396. }
  397. }else
  398. {
  399. if(board->handle_input_pt[0] == 0)
  400. {
  401. board->handle_input_pt[0] = 1;
  402. for(uint8_t k = 0; k < PT_SUB_COUNT;k++)
  403. {
  404. if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 0 && board->md_data.rw_data.rw_d.chn_ctrl[k+PT_SUB_COUNT] == 0)
  405. {
  406. da.channel = k+PT_SUB_COUNT;
  407. da.fire_or_zero = _FIRE;
  408. da.method = DELAY_CTRL;
  409. da.reg = &board->relay_staging_staus[k+PT_SUB_COUNT];
  410. da.status = board->handle_status[k+PT_SUB_COUNT];
  411. da.w_eep_flag = FLAG_N_W_EEP;
  412. set_relay_sta_async(&da);
  413. sync_buff[k] = 1;
  414. }else
  415. {
  416. if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 0)
  417. {
  418. }else if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 1)
  419. {
  420. if(board->md_data.rw_data.rw_d.relay_status[k] == RELAY_OPEN)
  421. continue;
  422. }else
  423. {
  424. continue;
  425. }
  426. }
  427. da.channel = k;
  428. da.fire_or_zero = _FIRE;
  429. da.method = DELAY_CTRL;
  430. da.reg = &board->relay_staging_staus[k];
  431. da.status = board->handle_status[k];
  432. da.w_eep_flag = FLAG_N_W_EEP;
  433. set_relay_sta_async(&da);
  434. }
  435. }
  436. if(board->handle_input_pt[1] == 0)
  437. {
  438. board->handle_input_pt[1] = 1;
  439. for(uint8_t k = 0; k < PT_SUB_COUNT;k++)
  440. {
  441. if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 0 && board->md_data.rw_data.rw_d.chn_ctrl[k+PT_SUB_COUNT] == 0)
  442. {
  443. if(sync_buff[k])
  444. continue;
  445. da.channel = k;
  446. da.fire_or_zero = _FIRE;
  447. da.method = DELAY_CTRL;
  448. da.reg = &board->relay_staging_staus[k];
  449. da.status = board->handle_status[k];
  450. da.w_eep_flag = FLAG_N_W_EEP;
  451. set_relay_sta_async(&da);
  452. }else
  453. {
  454. if(board->md_data.rw_data.rw_d.chn_ctrl[k+PT_SUB_COUNT] == 0)
  455. {
  456. }else if(board->md_data.rw_data.rw_d.chn_ctrl[k+PT_SUB_COUNT] == 1)
  457. {
  458. if(board->md_data.rw_data.rw_d.relay_status[k+PT_SUB_COUNT] == RELAY_OPEN)
  459. continue;
  460. }else
  461. {
  462. continue;
  463. }
  464. }
  465. da.channel = k+PT_SUB_COUNT;
  466. da.fire_or_zero = _FIRE;
  467. da.method = DELAY_CTRL;
  468. da.reg = &board->relay_staging_staus[k+PT_SUB_COUNT];
  469. da.status = board->handle_status[k+PT_SUB_COUNT];
  470. da.w_eep_flag = FLAG_N_W_EEP;
  471. set_relay_sta_async(&da);
  472. }
  473. }
  474. }
  475. #elif (POWER_TYPE == POWER_AC_3_3)
  476. if(board->md_data.r_data.r_d.detection)
  477. {
  478. if(board->handle_input_pt[0] == 0)
  479. {
  480. board->handle_input_pt[0] = 1;
  481. for(uint8_t k = 0; k < RelaySlaveChaNum;k++)
  482. {
  483. if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 0)
  484. {
  485. }else if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 1)
  486. {
  487. if(board->md_data.rw_data.rw_d.relay_status[k] == RELAY_OPEN)
  488. continue;
  489. }else if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 2)
  490. {
  491. continue;
  492. }
  493. async_data da = {0};
  494. da.channel =k;
  495. da.fire_or_zero = _FIRE;
  496. da.method = DELAY_CTRL;
  497. da.reg = &board->relay_staging_staus[k];
  498. da.status = board->handle_status[k];
  499. da.w_eep_flag = FLAG_N_W_EEP;
  500. set_relay_sta_async(&da);
  501. }
  502. #if (ZERO_CONTRL == ZERO_LINE_CTRL_YES)
  503. for(uint8_t k = 0; k < ZERO_CTRL_NUM;k++)
  504. {
  505. async_data da = {0};
  506. da.channel =k;
  507. da.fire_or_zero = _ZERO;
  508. da.method = DELAY_CTRL;
  509. da.reg = &board->relay_zero_staging_status[k];
  510. da.status = board->handle_status_N[k];
  511. da.w_eep_flag = FLAG_N_W_EEP;
  512. set_relay_sta_async(&da);
  513. }
  514. #endif
  515. }
  516. }else
  517. {
  518. if(board->handle_input_pt[0] == 1)
  519. {
  520. board->handle_input_pt[0] = 0;
  521. for(uint8_t k = 0; k < RelaySlaveChaNum;k++)
  522. {
  523. if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 0)
  524. {
  525. }else if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 1)
  526. {
  527. continue;
  528. }else if(board->md_data.rw_data.rw_d.chn_ctrl[k] == 2)
  529. {
  530. if(board->md_data.rw_data.rw_d.relay_status[k] == RELAY_CLOSE)
  531. continue;
  532. }
  533. board->handle_status[k] = board->md_data.rw_data.rw_d.relay_status[k];
  534. async_data da = {0};
  535. da.channel =k;
  536. da.fire_or_zero = _FIRE;
  537. da.method = PROMPT_CTRL;
  538. da.reg = &board->relay_staging_staus[k];
  539. da.status = RELAY_CLOSE;
  540. da.w_eep_flag = FLAG_N_W_EEP;
  541. set_relay_sta_async(&da);
  542. // set_relay_status_async(&board->relay_staging_staus[k],PROMPT_CTRL,RELAY_CLOSE);
  543. }
  544. #if (ZERO_CONTRL == ZERO_LINE_CTRL_YES)
  545. for(uint8_t k = 0; k < ZERO_CTRL_NUM;k++)
  546. {
  547. board->handle_status_N[k] = board->md_data.rw_data.rw_d.zero_relay_status[k];
  548. async_data da = {0};
  549. da.channel =k;
  550. da.fire_or_zero = _ZERO;
  551. da.method = PROMPT_CTRL;
  552. da.reg = &board->relay_zero_staging_status[k];
  553. da.status = RELAY_CLOSE;
  554. da.w_eep_flag = FLAG_N_W_EEP;
  555. set_relay_sta_async(&da);
  556. }
  557. #endif
  558. }
  559. }
  560. #endif
  561. #endif
  562. }
  563. }