ReadEeprom.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616
  1. /*********************************************************************************************************
  2. * 模块名称:ReadEeprom.c
  3. * 摘 要:ReadEeprom模块,进行独立按键初始化,以及按键扫描函数实现
  4. * 当前版本:1.0.0
  5. * 作 者:Leyutek(COPYRIGHT 2018 - 2021 Leyutek. All rights reserved.)
  6. * 完成日期:2021年07月01日
  7. * 内 容:
  8. * 注 意:
  9. **********************************************************************************************************
  10. * 取代版本:
  11. * 作 者:
  12. * 完成日期:
  13. * 修改内容:
  14. * 修改文件:
  15. *********************************************************************************************************/
  16. /*********************************************************************************************************
  17. * 包含头文件
  18. *********************************************************************************************************/
  19. #include "ReadEeprom.h"
  20. #include "Main.h"
  21. #include "gd32e230x_conf.h"
  22. #include "At24cxx.h"
  23. #include "string.h"
  24. #include "Relay.h"
  25. #include "Sn74lvc573.h"
  26. /*********************************************************************************************************
  27. * 宏定义
  28. *********************************************************************************************************/
  29. /*********************************************************************************************************
  30. * 枚举结构体
  31. *********************************************************************************************************/
  32. /*********************************************************************************************************
  33. * 内部变量定义
  34. *********************************************************************************************************/
  35. unsigned char Eeprom_Rbuf[200]={0};
  36. unsigned char Chal_Num;
  37. /*********************************************************************************************************
  38. * 内部函数声明
  39. *********************************************************************************************************/
  40. /*********************************************************************************************************
  41. * 内部函数实现
  42. *********************************************************************************************************/
  43. /*********************************************************************************************************
  44. * 函数名称:ReadEeprom
  45. * 函数功能:读出Eeprom的数据
  46. * 输入参数:void
  47. * 输出参数:void
  48. * 返 回 值:void
  49. * 创建日期:2021年07月01日
  50. * 注 意:
  51. *********************************************************************************************************/
  52. void ReadEeprom(void)
  53. {
  54. AT24CxxRead(Eepr_AC_Sing_Dela_OnSmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_Dela_OnSmaQua); //从eeprom中读出通道开启延时数据
  55. memcpy(&EE_ACDC_Delay_ReadReg_On,&Eeprom_Rbuf,Eepr_AC_Sing_Dela_OnSmaQua); //将数据拷贝到指定的结构体,可能需要注意大小端问题
  56. memcpy(&Sort_Onbuf,&EE_ACDC_Delay_ReadReg_On,Eepr_AC_Sing_Dela_OnSmaQua); //将数据进行排序,然后存入数组中
  57. Bubble_Sort(Sort_Onbuf,RelaySlaveChaNum);
  58. AT24CxxRead(Eepr_AC_Sing_Dela_OffSmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_Dela_OffSmaQua); //从eeprom中读出通道关闭延时数据
  59. memcpy(&EE_ACDC_Delay_ReadReg_Off,&Eeprom_Rbuf,Eepr_AC_Sing_Dela_OffSmaQua); //将数据拷贝到指定的结构体,可能需要注意大小端问题
  60. memcpy(&Sort_Offbuf,&EE_ACDC_Delay_ReadReg_Off,Eepr_AC_Sing_Dela_OffSmaQua); //将数据进行排序,然后存入数组中
  61. Bubble_Sort(Sort_Offbuf,RelaySlaveChaNum);
  62. AT24CxxRead(Eepr_AC_Sing_State_SmaWAddr, Eeprom_Rbuf, Eepr_AC_Sing_State_SmaWQua);//从eeprom中读出通道状态数据
  63. memcpy(&EE_ACDC_State_ReadReg,&Eeprom_Rbuf,Eepr_AC_Sing_State_SmaWQua); //将数据拷贝到指定的结构体,可能需要注意大小端问题
  64. AT24CxxRead(Eepr_AC_Sing_Thr_SmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_Thr_SmaQua); //从eeprom中读出通道阈值数据
  65. memcpy(&EE_ACDC_ThresVal_ReadReg,&Eeprom_Rbuf,Eepr_AC_Sing_Thr_SmaQua); //将数据拷贝到指定的结构体,可能需要注意大小端问题
  66. AT24CxxRead(Eepr_AC_Sing_Coef_SmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_Coef_SmaQua); //从eeprom中读出通道的系数
  67. memcpy(&EE_ACDC_Coef_ReadReg,&Eeprom_Rbuf,Eepr_AC_Sing_Coef_SmaQua); //将数据拷贝到指定的结构体,可能需要注意大小端问题
  68. for(Chal_Num=0;Chal_Num<RelaySlaveChaNum;Chal_Num++) //如果eeprom中没有存入数据设置默认值
  69. {
  70. if((EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_V_k)==0xffffffff) //没有写入电压系数则默认K为1000,B为0;放大1000倍存入的
  71. {
  72. EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_V_k = 1000;
  73. }
  74. if((EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_V_b)==0xffffffff)
  75. {
  76. (EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_V_b) = 0;
  77. }
  78. if((EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_I_k)==0xffffffff) //没有写入电流系数则默认K为1000,B为0;放大1000倍存入的
  79. {
  80. EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_I_k = 1000;
  81. }
  82. if((EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_I_b)==0xffffffff)
  83. {
  84. EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_I_b = 0;
  85. }
  86. }
  87. }
  88. #if ACSingPhSmaCurr
  89. /*********************************************************************************************************
  90. * API函数实现
  91. *********************************************************************************************************/
  92. /*********************************************************************************************************
  93. * 函数名称:Relay1State
  94. * 函数功能:Relay1State模块,控制继电器和更新通道状态
  95. * 输入参数:void
  96. * 输出参数:void
  97. * 返 回 值:void
  98. * 创建日期:2021年07月01日
  99. * 注 意:
  100. *********************************************************************************************************/
  101. void Relay1State(void)
  102. {
  103. if(RelaySlaveChaNum>=1)
  104. {
  105. if(EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State==true)
  106. {
  107. RELAY_1_ON; //开继电器1
  108. EE_ACDC_State_ReadRegTrue[0].ACDC_Cha_On_Off_State = true;
  109. }
  110. else
  111. {
  112. RELAY_1_OFF; //关继电器1
  113. EE_ACDC_State_ReadRegTrue[0].ACDC_Cha_On_Off_State = false;
  114. }
  115. }
  116. }
  117. /*********************************************************************************************************
  118. * 函数名称:Relay2State
  119. * 函数功能:Relay2State模块,控制继电器和更新通道状态
  120. * 输入参数:void
  121. * 输出参数:void
  122. * 返 回 值:void
  123. * 创建日期:2021年07月01日
  124. * 注 意:
  125. *********************************************************************************************************/
  126. void Relay2State(void)
  127. {
  128. if(RelaySlaveChaNum>=2)
  129. {
  130. if(EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State==true)
  131. {
  132. RELAY_2_ON; //开继电器2
  133. EE_ACDC_State_ReadRegTrue[1].ACDC_Cha_On_Off_State = true;
  134. }
  135. else
  136. {
  137. RELAY_2_OFF; //关继电器2
  138. EE_ACDC_State_ReadRegTrue[1].ACDC_Cha_On_Off_State = false;
  139. }
  140. }
  141. }
  142. /*********************************************************************************************************
  143. * 函数名称:Relay3State
  144. * 函数功能:Relay3State模块,控制继电器和更新通道状态
  145. * 输入参数:void
  146. * 输出参数:void
  147. * 返 回 值:void
  148. * 创建日期:2021年07月01日
  149. * 注 意:
  150. *********************************************************************************************************/
  151. void Relay3State(void)
  152. {
  153. if(RelaySlaveChaNum>=3)
  154. {
  155. if(EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State==true)
  156. {
  157. RELAY_3_ON; //开继电器3
  158. EE_ACDC_State_ReadRegTrue[2].ACDC_Cha_On_Off_State = true;
  159. }
  160. else
  161. {
  162. RELAY_3_OFF; //关继电器3
  163. EE_ACDC_State_ReadRegTrue[2].ACDC_Cha_On_Off_State = false;
  164. }
  165. }
  166. }
  167. /*********************************************************************************************************
  168. * 函数名称:Relay4State
  169. * 函数功能:Relay4State模块,控制继电器和更新通道状态
  170. * 输入参数:void
  171. * 输出参数:void
  172. * 返 回 值:void
  173. * 创建日期:2021年07月01日
  174. * 注 意:
  175. *********************************************************************************************************/
  176. void Relay4State(void)
  177. {
  178. if(RelaySlaveChaNum>=4)
  179. {
  180. if(EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State==true)
  181. {
  182. RELAY_4_ON; //开继电器4
  183. EE_ACDC_State_ReadRegTrue[3].ACDC_Cha_On_Off_State = true;
  184. }
  185. else
  186. {
  187. RELAY_4_OFF; //关继电器4
  188. EE_ACDC_State_ReadRegTrue[3].ACDC_Cha_On_Off_State = false;
  189. }
  190. }
  191. }
  192. /*********************************************************************************************************
  193. * 函数名称:Relay5State
  194. * 函数功能:Relay5State模块,控制继电器和更新通道状态
  195. * 输入参数:void
  196. * 输出参数:void
  197. * 返 回 值:void
  198. * 创建日期:2021年07月01日
  199. * 注 意:
  200. *********************************************************************************************************/
  201. void Relay5State(void)
  202. {
  203. if(RelaySlaveChaNum>=5)
  204. {
  205. if(EE_ACDC_State_ReadReg[4].ACDC_Cha_On_Off_State==true)
  206. {
  207. RELAY_5_ON; //开继电器5
  208. EE_ACDC_State_ReadRegTrue[4].ACDC_Cha_On_Off_State = true;
  209. }
  210. else
  211. {
  212. RELAY_5_OFF; //关继电器5
  213. EE_ACDC_State_ReadRegTrue[4].ACDC_Cha_On_Off_State = false;
  214. }
  215. }
  216. }
  217. /*********************************************************************************************************
  218. * 函数名称:Relay6State
  219. * 函数功能:Relay6State模块,控制继电器和更新通道状态
  220. * 输入参数:void
  221. * 输出参数:void
  222. * 返 回 值:void
  223. * 创建日期:2021年07月01日
  224. * 注 意:
  225. *********************************************************************************************************/
  226. void Relay6State(void)
  227. {
  228. if(RelaySlaveChaNum>=6)
  229. {
  230. if(EE_ACDC_State_ReadReg[5].ACDC_Cha_On_Off_State==true)
  231. {
  232. RELAY_6_ON; //开继电器6
  233. EE_ACDC_State_ReadRegTrue[5].ACDC_Cha_On_Off_State = true;
  234. }
  235. else
  236. {
  237. RELAY_6_OFF; //关继电器6
  238. EE_ACDC_State_ReadRegTrue[5].ACDC_Cha_On_Off_State = false;
  239. }
  240. }
  241. }
  242. /*********************************************************************************************************
  243. * 函数名称:Relay7State
  244. * 函数功能:Relay7State模块,控制继电器和更新通道状态
  245. * 输入参数:void
  246. * 输出参数:void
  247. * 返 回 值:void
  248. * 创建日期:2021年07月01日
  249. * 注 意:
  250. *********************************************************************************************************/
  251. void Relay7State(void)
  252. {
  253. if(RelaySlaveChaNum>=7)
  254. {
  255. if(EE_ACDC_State_ReadReg[6].ACDC_Cha_On_Off_State==true)
  256. {
  257. RELAY_7_ON; //开继电器7
  258. EE_ACDC_State_ReadRegTrue[6].ACDC_Cha_On_Off_State = true;
  259. }
  260. else
  261. {
  262. RELAY_7_OFF; //关继电器7
  263. EE_ACDC_State_ReadRegTrue[6].ACDC_Cha_On_Off_State = false;
  264. }
  265. }
  266. }
  267. /*********************************************************************************************************
  268. * 函数名称:Relay8State
  269. * 函数功能:Relay8State模块,控制继电器和更新通道状态
  270. * 输入参数:void
  271. * 输出参数:void
  272. * 返 回 值:void
  273. * 创建日期:2021年07月01日
  274. * 注 意:
  275. *********************************************************************************************************/
  276. void Relay8State(void)
  277. {
  278. if(RelaySlaveChaNum>=8)
  279. {
  280. if(EE_ACDC_State_ReadReg[7].ACDC_Cha_On_Off_State==true)
  281. {
  282. RELAY_8_ON; //开继电器8
  283. EE_ACDC_State_ReadRegTrue[7].ACDC_Cha_On_Off_State = true;
  284. }
  285. else
  286. {
  287. RELAY_8_OFF; //关继电器8
  288. EE_ACDC_State_ReadRegTrue[7].ACDC_Cha_On_Off_State = false;
  289. }
  290. }
  291. }
  292. /*********************************************************************************************************
  293. * 函数名称:RelayState
  294. * 函数功能:RelayState模块,控制继电器和更新通道状态
  295. * 输入参数:void
  296. * 输出参数:void
  297. * 返 回 值:void
  298. * 创建日期:2021年07月01日
  299. * 注 意:
  300. *********************************************************************************************************/
  301. void RelayState(void)
  302. {
  303. BUFF;
  304. Relay1State();
  305. Relay2State();
  306. Relay3State();
  307. Relay4State();
  308. Relay5State();
  309. Relay6State();
  310. Relay7State();
  311. Relay8State();
  312. LOCK;
  313. }
  314. #endif
  315. #if ACSingPhHigCurr
  316. /*********************************************************************************************************
  317. * API函数实现
  318. *********************************************************************************************************/
  319. /*********************************************************************************************************
  320. * 函数名称:Relay1State
  321. * 函数功能:Relay1State模块,控制继电器和更新通道状态
  322. * 输入参数:void
  323. * 输出参数:void
  324. * 返 回 值:void
  325. * 创建日期:2021年07月01日
  326. * 注 意:
  327. *********************************************************************************************************/
  328. void Relay1State(void)
  329. {
  330. if(RelaySlaveChaNum>=1)
  331. {
  332. if(EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State==true)
  333. {
  334. RELAY_1_ON; //开继电器1
  335. EE_ACDC_State_ReadRegTrue[0].ACDC_Cha_On_Off_State = true;
  336. }
  337. else
  338. {
  339. RELAY_1_OFF; //关继电器1
  340. EE_ACDC_State_ReadRegTrue[0].ACDC_Cha_On_Off_State = false;
  341. }
  342. }
  343. }
  344. /*********************************************************************************************************
  345. * 函数名称:Relay2State
  346. * 函数功能:Relay2State模块,控制继电器和更新通道状态
  347. * 输入参数:void
  348. * 输出参数:void
  349. * 返 回 值:void
  350. * 创建日期:2021年07月01日
  351. * 注 意:
  352. *********************************************************************************************************/
  353. void Relay2State(void)
  354. {
  355. if(RelaySlaveChaNum>=2)
  356. {
  357. if(EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State==true)
  358. {
  359. RELAY_2_ON; //开继电器2
  360. EE_ACDC_State_ReadRegTrue[1].ACDC_Cha_On_Off_State = true;
  361. }
  362. else
  363. {
  364. RELAY_2_OFF; //关继电器2
  365. EE_ACDC_State_ReadRegTrue[1].ACDC_Cha_On_Off_State = false;
  366. }
  367. }
  368. }
  369. /*********************************************************************************************************
  370. * 函数名称:Relay3State
  371. * 函数功能:Relay3State模块,控制继电器和更新通道状态
  372. * 输入参数:void
  373. * 输出参数:void
  374. * 返 回 值:void
  375. * 创建日期:2021年07月01日
  376. * 注 意:
  377. *********************************************************************************************************/
  378. void Relay3State(void)
  379. {
  380. if(RelaySlaveChaNum>=3)
  381. {
  382. if(EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State==true)
  383. {
  384. RELAY_3_ON; //开继电器3
  385. EE_ACDC_State_ReadRegTrue[2].ACDC_Cha_On_Off_State = true;
  386. }
  387. else
  388. {
  389. RELAY_3_OFF; //关继电器3
  390. EE_ACDC_State_ReadRegTrue[2].ACDC_Cha_On_Off_State = false;
  391. }
  392. }
  393. }
  394. /*********************************************************************************************************
  395. * 函数名称:Relay4State
  396. * 函数功能:Relay4State模块,控制继电器和更新通道状态
  397. * 输入参数:void
  398. * 输出参数:void
  399. * 返 回 值:void
  400. * 创建日期:2021年07月01日
  401. * 注 意:
  402. *********************************************************************************************************/
  403. void Relay4State(void)
  404. {
  405. if(RelaySlaveChaNum>=4)
  406. {
  407. if(EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State==true)
  408. {
  409. RELAY_4_ON; //开继电器4
  410. EE_ACDC_State_ReadRegTrue[3].ACDC_Cha_On_Off_State = true;
  411. }
  412. else
  413. {
  414. RELAY_4_OFF; //关继电器4
  415. EE_ACDC_State_ReadRegTrue[3].ACDC_Cha_On_Off_State = false;
  416. }
  417. }
  418. }
  419. /*********************************************************************************************************
  420. * 函数名称:RelayState
  421. * 函数功能:RelayState模块,控制继电器和更新通道状态
  422. * 输入参数:void
  423. * 输出参数:void
  424. * 返 回 值:void
  425. * 创建日期:2021年07月01日
  426. * 注 意:
  427. *********************************************************************************************************/
  428. void RelayState(void)
  429. {
  430. BUFF;
  431. Relay1State();
  432. Relay2State();
  433. Relay3State();
  434. Relay4State();
  435. LOCK;
  436. }
  437. #endif
  438. /*********************************************************************************************************
  439. * 函数名称:WarnVolUpthrState
  440. * 函数功能:根据读取的数据判断是否触发阈值
  441. * 输入参数:void
  442. * 输出参数:void
  443. * 返 回 值:void
  444. * 创建日期:2021年07月01日
  445. * 注 意:
  446. *
  447. *********************************************************************************************************/
  448. void WarnVolUpthrState(void)
  449. {
  450. uint32_t chn_num = 0;
  451. for(chn_num=0;chn_num<RelaySlaveChaNum;chn_num++)
  452. {
  453. if(EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Upthr_En)
  454. {
  455. if(AC_Ele_ReadReg[chn_num].AC_V>EE_ACDC_ThresVal_ReadReg[chn_num].ACDC_V_TopThres)
  456. EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Upthr_Warn = true;
  457. else
  458. EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Upthr_Warn = false;
  459. }
  460. else
  461. EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Upthr_Warn = false;
  462. }
  463. }
  464. /*********************************************************************************************************
  465. * 函数名称:WarnVolDownthrState
  466. * 函数功能:根据读取的数据判断是否触发阈值
  467. * 输入参数:void
  468. * 输出参数:void
  469. * 返 回 值:void
  470. * 创建日期:2021年07月01日
  471. * 注 意:
  472. *
  473. *********************************************************************************************************/
  474. void WarnVolDownthrState(void)
  475. {
  476. uint32_t chn_num = 0;
  477. for(chn_num=0;chn_num<RelaySlaveChaNum;chn_num++)
  478. {
  479. if(EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Downthr_En)
  480. {
  481. if(AC_Ele_ReadReg[chn_num].AC_V<EE_ACDC_ThresVal_ReadReg[chn_num].ACDC_V_DownThres)
  482. EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Downthr_Warn = true;
  483. else
  484. EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Downthr_Warn = false;
  485. }
  486. else
  487. EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Downthr_Warn = false;
  488. }
  489. }
  490. /*********************************************************************************************************
  491. * 函数名称:WarnCurUpthrState
  492. * 函数功能:根据读取的数据判断是否触发阈值
  493. * 输入参数:void
  494. * 输出参数:void
  495. * 返 回 值:void
  496. * 创建日期:2021年07月01日
  497. * 注 意:
  498. *
  499. *********************************************************************************************************/
  500. void WarnCurUpthrState(void)
  501. {
  502. uint32_t chn_num = 0;
  503. for(chn_num=0;chn_num<RelaySlaveChaNum;chn_num++)
  504. {
  505. if(EE_ACDC_State_ReadReg[chn_num].ACDC_Cur_Upthr_En)
  506. {
  507. if(AC_Ele_ReadReg[chn_num].AC_I>EE_ACDC_ThresVal_ReadReg[chn_num].ACDC_I_TopThres)
  508. EE_ACDC_State_ReadReg[chn_num].ACDC_Cur_Upthr_Warn = true;
  509. else
  510. EE_ACDC_State_ReadReg[chn_num].ACDC_Cur_Upthr_Warn = false;
  511. }
  512. else
  513. EE_ACDC_State_ReadReg[chn_num].ACDC_Cur_Upthr_Warn = false;
  514. }
  515. }
  516. /*********************************************************************************************************
  517. * 函数名称:WarnPowUpthrState
  518. * 函数功能:根据读取的数据判断是否触发阈值
  519. * 输入参数:void
  520. * 输出参数:void
  521. * 返 回 值:void
  522. * 创建日期:2021年07月01日
  523. * 注 意:
  524. *
  525. *********************************************************************************************************/
  526. void WarnPowUpthrState(void)
  527. {
  528. uint32_t chn_num = 0;
  529. for(chn_num=0;chn_num<RelaySlaveChaNum;chn_num++)
  530. {
  531. if(EE_ACDC_State_ReadReg[chn_num].ACDC_Pow_Upthr_En)
  532. {
  533. if(AC_Ele_ReadReg[chn_num].AC_E>EE_ACDC_ThresVal_ReadReg[chn_num].ACDC_P_TopThres)
  534. EE_ACDC_State_ReadReg[chn_num].ACDC_Pow_Upthr_Warn = true;
  535. else
  536. EE_ACDC_State_ReadReg[chn_num].ACDC_Pow_Upthr_Warn = false;
  537. }
  538. else
  539. EE_ACDC_State_ReadReg[chn_num].ACDC_Pow_Upthr_Warn = false;
  540. }
  541. }
  542. /*********************************************************************************************************
  543. * 函数名称:WarnEleUpthrState
  544. * 函数功能:根据读取的数据判断是否触发阈值
  545. * 输入参数:void
  546. * 输出参数:void
  547. * 返 回 值:void
  548. * 创建日期:2021年07月01日
  549. * 注 意:
  550. *
  551. *********************************************************************************************************/
  552. void WarnEleUpthrState(void)
  553. {
  554. uint32_t chn_num = 0;
  555. for(chn_num=0;chn_num<RelaySlaveChaNum;chn_num++)
  556. {
  557. if(EE_ACDC_State_ReadReg[chn_num].ACDC_Ele_Upthr_En)
  558. {
  559. if(AC_Ele_ReadReg[chn_num].AC_P>EE_ACDC_ThresVal_ReadReg[chn_num].ACDC_E_TopThres)
  560. EE_ACDC_State_ReadReg[chn_num].ACDC_Ele_Upthr_Warn = true;
  561. else
  562. EE_ACDC_State_ReadReg[chn_num].ACDC_Ele_Upthr_Warn = false;
  563. }
  564. else
  565. EE_ACDC_State_ReadReg[chn_num].ACDC_Ele_Upthr_Warn = false;
  566. }
  567. }
  568. /*********************************************************************************************************
  569. * 函数名称:WarnState
  570. * 函数功能:根据读取的数据判断是否触发阈值
  571. * 输入参数:void
  572. * 输出参数:void
  573. * 返 回 值:void
  574. * 创建日期:2021年07月01日
  575. * 注 意:
  576. *
  577. *********************************************************************************************************/
  578. void WarnState(void)
  579. {
  580. WarnVolUpthrState();
  581. WarnVolDownthrState();
  582. WarnCurUpthrState();
  583. WarnPowUpthrState();
  584. WarnEleUpthrState();
  585. }
  586. /*********************************************************************************************************
  587. * 函数名称:Bubble_Sort
  588. * 函数功能:根据读取的数据判断是否触发阈值
  589. * 输入参数:排序数组
  590. * 输出参数:排序数组的长度
  591. * 返 回 值:void
  592. * 创建日期:2021年07月01日
  593. * 注 意:
  594. *
  595. *********************************************************************************************************/
  596. void Bubble_Sort(unsigned short int arr[], unsigned short int len)
  597. {
  598. unsigned short int i, j, temp;
  599. for (i = 0; i < len - 1; i++)
  600. for (j = 0; j < len - 1 - i; j++)
  601. if (arr[j] > arr[j + 1])
  602. {
  603. temp = arr[j];
  604. arr[j] = arr[j + 1];
  605. arr[j + 1] = temp;
  606. }
  607. }