ReadEeprom.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721
  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. extern EE_ACDC_Total_Consumption EE_ACDC_Total_Consum_Read_Reg[RelaySlaveChaNum];
  38. extern uint32_t read_Total_Consumer[RelaySlaveChaNum];
  39. extern uint8_t over_Func_flag[RelaySlaveChaNum];
  40. /*********************************************************************************************************
  41. * 内部函数声明
  42. *********************************************************************************************************/
  43. /*********************************************************************************************************
  44. * 内部函数实现
  45. *********************************************************************************************************/
  46. /*********************************************************************************************************
  47. * 函数名称:ReadEeprom
  48. * 函数功能:读出Eeprom的数据
  49. * 输入参数:void
  50. * 输出参数:void
  51. * 返 回 值:void
  52. * 创建日期:2021年07月01日
  53. * 注 意:
  54. *********************************************************************************************************/
  55. void ReadEeprom(void)
  56. {
  57. AT24CxxRead(Eepr_AC_Sing_Dela_OnSmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_Dela_OnSmaQua); //从eeprom中读出通道开启延时数据
  58. memcpy(&EE_ACDC_Delay_ReadReg_On,&Eeprom_Rbuf,Eepr_AC_Sing_Dela_OnSmaQua); //将数据拷贝到指定的结构体,可能需要注意大小端问题
  59. memcpy(&Sort_Onbuf,&EE_ACDC_Delay_ReadReg_On,Eepr_AC_Sing_Dela_OnSmaQua); //将数据进行排序,然后存入数组中
  60. Bubble_Sort(Sort_Onbuf,RelaySlaveChaNum);
  61. AT24CxxRead(Eepr_AC_Sing_Dela_OffSmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_Dela_OffSmaQua); //从eeprom中读出通道关闭延时数据
  62. memcpy(&EE_ACDC_Delay_ReadReg_Off,&Eeprom_Rbuf,Eepr_AC_Sing_Dela_OffSmaQua); //将数据拷贝到指定的结构体,可能需要注意大小端问题
  63. memcpy(&Sort_Offbuf,&EE_ACDC_Delay_ReadReg_Off,Eepr_AC_Sing_Dela_OffSmaQua); //将数据进行排序,然后存入数组中
  64. Bubble_Sort(Sort_Offbuf,RelaySlaveChaNum);
  65. AT24CxxRead(Eepr_AC_Sing_State_SmaWAddr, Eeprom_Rbuf, Eepr_AC_Sing_State_SmaWQua);//从eeprom中读出通道状态数据
  66. memcpy(&EE_ACDC_State_ReadReg,&Eeprom_Rbuf,Eepr_AC_Sing_State_SmaWQua); //将数据拷贝到指定的结构体,可能需要注意大小端问题
  67. AT24CxxRead(Eepr_AC_Sing_Thr_SmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_Thr_SmaQua); //从eeprom中读出通道阈值数据
  68. memcpy(&EE_ACDC_ThresVal_ReadReg,&Eeprom_Rbuf,Eepr_AC_Sing_Thr_SmaQua); //将数据拷贝到指定的结构体,可能需要注意大小端问题
  69. //check is
  70. for(Chal_Num=0;Chal_Num<RelaySlaveChaNum;Chal_Num++)
  71. {
  72. if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_V_TopThres > Default_Voltage_Max)
  73. {
  74. EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_V_TopThres = 0;
  75. }
  76. if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_V_DownThres > Default_Voltage_Max)
  77. {
  78. EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_V_DownThres = 0;
  79. }
  80. if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_P_TopThres > Default_Power_Max)
  81. {
  82. EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_P_TopThres = 0;
  83. }
  84. if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_I_TopThres > Default_Current_Max)
  85. {
  86. EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_I_TopThres = 0;
  87. }
  88. }
  89. for(Chal_Num=0;Chal_Num<RelaySlaveChaNum;Chal_Num++)
  90. {
  91. if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_V_TopThres < THRESHOULD_JUDGMENT)
  92. {
  93. EE_ACDC_State_ReadReg[Chal_Num].ACDC_Vol_Upthr_En = false;
  94. }
  95. if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_V_DownThres < THRESHOULD_JUDGMENT)
  96. {
  97. EE_ACDC_State_ReadReg[Chal_Num].ACDC_Vol_Downthr_En = false;
  98. }
  99. if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_I_TopThres < THRESHOULD_JUDGMENT)
  100. {
  101. EE_ACDC_State_ReadReg[Chal_Num].ACDC_Cur_Upthr_En = false;
  102. }
  103. if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_P_TopThres < THRESHOULD_JUDGMENT)
  104. {
  105. EE_ACDC_State_ReadReg[Chal_Num].ACDC_Pow_Upthr_En = false;
  106. }
  107. if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_E_TopThres < THRESHOULD_JUDGMENT)
  108. {
  109. EE_ACDC_State_ReadReg[Chal_Num].ACDC_Ele_Upthr_En = false;
  110. }
  111. }
  112. AT24CxxRead(Eepr_AC_Sing_Coef_SmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_Coef_SmaQua); //从eeprom中读出通道的系数
  113. memcpy(&EE_ACDC_Coef_ReadReg,&Eeprom_Rbuf,Eepr_AC_Sing_Coef_SmaQua); //将数据拷贝到指定的结构体,可能需要注意大小端问题
  114. for(Chal_Num=0;Chal_Num<RelaySlaveChaNum;Chal_Num++) //如果eeprom中没有存入数据设置默认值
  115. {
  116. if((EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_V_k)==0xffffffff) //没有写入电压系数则默认K为1000,B为0;放大1000倍存入的
  117. {
  118. EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_V_k = 1000;
  119. }
  120. if((EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_V_b)==0xffffffff)
  121. {
  122. (EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_V_b) = 0;
  123. }
  124. if((EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_I_k)==0xffffffff) //没有写入电流系数则默认K为1000,B为0;放大1000倍存入的
  125. {
  126. EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_I_k = 1000;
  127. }
  128. if((EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_I_b)==0xffffffff)
  129. {
  130. EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_I_b = 0;
  131. }
  132. }
  133. //read total consumer
  134. AT24CxxRead(Eepr_AC_Sing_Total_Consumer_addr, Eeprom_Rbuf, Eepr_AC_Sing_Total_Consumer_SmaQua);
  135. for(int i = 0; i < RelaySlaveChaNum;i++){
  136. int temp = i << 2;
  137. read_Total_Consumer[i] += Eeprom_Rbuf[temp + 0] << 24;
  138. read_Total_Consumer[i] += Eeprom_Rbuf[temp + 1] << 16;
  139. read_Total_Consumer[i] += Eeprom_Rbuf[temp + 2] << 8;
  140. read_Total_Consumer[i] += Eeprom_Rbuf[temp + 3] << 0;
  141. if(read_Total_Consumer[i] > Default_Consum_Max)
  142. {
  143. read_Total_Consumer[i] = 0;
  144. }
  145. }
  146. //read wanning func
  147. AT24CxxRead(Eepr_AC_Sing_Channel_Func_SmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_Channel_Func_SmaQua);
  148. memcmp(ACDC_Over_WriteReg,Eeprom_Rbuf,Eepr_AC_Sing_Channel_Func_SmaQua);
  149. for(int i=0; i < RelaySlaveChaNum;i++)
  150. {
  151. if(ACDC_Over_WriteReg[i].openration > 0x003f)
  152. {
  153. ACDC_Over_WriteReg[i].openration = 0;
  154. }
  155. }
  156. }
  157. #if ACSingPhSmaCurr
  158. /*********************************************************************************************************
  159. * API函数实现
  160. *********************************************************************************************************/
  161. /*********************************************************************************************************
  162. * 函数名称:Relay1State
  163. * 函数功能:Relay1State模块,控制继电器和更新通道状态
  164. * 输入参数:void
  165. * 输出参数:void
  166. * 返 回 值:void
  167. * 创建日期:2021年07月01日
  168. * 注 意:
  169. *********************************************************************************************************/
  170. void Relay1State(void)
  171. {
  172. if(RelaySlaveChaNum>=1)
  173. {
  174. if(EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State==true)
  175. {
  176. RELAY_1_ON; //开继电器1
  177. EE_ACDC_State_ReadRegTrue[0].ACDC_Cha_On_Off_State = true;
  178. }
  179. else
  180. {
  181. RELAY_1_OFF; //关继电器1
  182. EE_ACDC_State_ReadRegTrue[0].ACDC_Cha_On_Off_State = false;
  183. }
  184. }
  185. }
  186. /*********************************************************************************************************
  187. * 函数名称:Relay2State
  188. * 函数功能:Relay2State模块,控制继电器和更新通道状态
  189. * 输入参数:void
  190. * 输出参数:void
  191. * 返 回 值:void
  192. * 创建日期:2021年07月01日
  193. * 注 意:
  194. *********************************************************************************************************/
  195. void Relay2State(void)
  196. {
  197. if(RelaySlaveChaNum>=2)
  198. {
  199. if(EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State==true)
  200. {
  201. RELAY_2_ON; //开继电器2
  202. EE_ACDC_State_ReadRegTrue[1].ACDC_Cha_On_Off_State = true;
  203. }
  204. else
  205. {
  206. RELAY_2_OFF; //关继电器2
  207. EE_ACDC_State_ReadRegTrue[1].ACDC_Cha_On_Off_State = false;
  208. }
  209. }
  210. }
  211. /*********************************************************************************************************
  212. * 函数名称:Relay3State
  213. * 函数功能:Relay3State模块,控制继电器和更新通道状态
  214. * 输入参数:void
  215. * 输出参数:void
  216. * 返 回 值:void
  217. * 创建日期:2021年07月01日
  218. * 注 意:
  219. *********************************************************************************************************/
  220. void Relay3State(void)
  221. {
  222. if(RelaySlaveChaNum>=3)
  223. {
  224. if(EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State==true)
  225. {
  226. RELAY_3_ON; //开继电器3
  227. EE_ACDC_State_ReadRegTrue[2].ACDC_Cha_On_Off_State = true;
  228. }
  229. else
  230. {
  231. RELAY_3_OFF; //关继电器3
  232. EE_ACDC_State_ReadRegTrue[2].ACDC_Cha_On_Off_State = false;
  233. }
  234. }
  235. }
  236. /*********************************************************************************************************
  237. * 函数名称:Relay4State
  238. * 函数功能:Relay4State模块,控制继电器和更新通道状态
  239. * 输入参数:void
  240. * 输出参数:void
  241. * 返 回 值:void
  242. * 创建日期:2021年07月01日
  243. * 注 意:
  244. *********************************************************************************************************/
  245. void Relay4State(void)
  246. {
  247. if(RelaySlaveChaNum>=4)
  248. {
  249. if(EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State==true)
  250. {
  251. RELAY_4_ON; //开继电器4
  252. EE_ACDC_State_ReadRegTrue[3].ACDC_Cha_On_Off_State = true;
  253. }
  254. else
  255. {
  256. RELAY_4_OFF; //关继电器4
  257. EE_ACDC_State_ReadRegTrue[3].ACDC_Cha_On_Off_State = false;
  258. }
  259. }
  260. }
  261. /*********************************************************************************************************
  262. * 函数名称:Relay5State
  263. * 函数功能:Relay5State模块,控制继电器和更新通道状态
  264. * 输入参数:void
  265. * 输出参数:void
  266. * 返 回 值:void
  267. * 创建日期:2021年07月01日
  268. * 注 意:
  269. *********************************************************************************************************/
  270. void Relay5State(void)
  271. {
  272. if(RelaySlaveChaNum>=5)
  273. {
  274. if(EE_ACDC_State_ReadReg[4].ACDC_Cha_On_Off_State==true)
  275. {
  276. RELAY_5_ON; //开继电器5
  277. EE_ACDC_State_ReadRegTrue[4].ACDC_Cha_On_Off_State = true;
  278. }
  279. else
  280. {
  281. RELAY_5_OFF; //关继电器5
  282. EE_ACDC_State_ReadRegTrue[4].ACDC_Cha_On_Off_State = false;
  283. }
  284. }
  285. }
  286. /*********************************************************************************************************
  287. * 函数名称:Relay6State
  288. * 函数功能:Relay6State模块,控制继电器和更新通道状态
  289. * 输入参数:void
  290. * 输出参数:void
  291. * 返 回 值:void
  292. * 创建日期:2021年07月01日
  293. * 注 意:
  294. *********************************************************************************************************/
  295. void Relay6State(void)
  296. {
  297. if(RelaySlaveChaNum>=6)
  298. {
  299. if(EE_ACDC_State_ReadReg[5].ACDC_Cha_On_Off_State==true)
  300. {
  301. RELAY_6_ON; //开继电器6
  302. EE_ACDC_State_ReadRegTrue[5].ACDC_Cha_On_Off_State = true;
  303. }
  304. else
  305. {
  306. RELAY_6_OFF; //关继电器6
  307. EE_ACDC_State_ReadRegTrue[5].ACDC_Cha_On_Off_State = false;
  308. }
  309. }
  310. }
  311. /*********************************************************************************************************
  312. * 函数名称:Relay7State
  313. * 函数功能:Relay7State模块,控制继电器和更新通道状态
  314. * 输入参数:void
  315. * 输出参数:void
  316. * 返 回 值:void
  317. * 创建日期:2021年07月01日
  318. * 注 意:
  319. *********************************************************************************************************/
  320. void Relay7State(void)
  321. {
  322. if(RelaySlaveChaNum>=7)
  323. {
  324. if(EE_ACDC_State_ReadReg[6].ACDC_Cha_On_Off_State==true)
  325. {
  326. RELAY_7_ON; //开继电器7
  327. EE_ACDC_State_ReadRegTrue[6].ACDC_Cha_On_Off_State = true;
  328. }
  329. else
  330. {
  331. RELAY_7_OFF; //关继电器7
  332. EE_ACDC_State_ReadRegTrue[6].ACDC_Cha_On_Off_State = false;
  333. }
  334. }
  335. }
  336. /*********************************************************************************************************
  337. * 函数名称:Relay8State
  338. * 函数功能:Relay8State模块,控制继电器和更新通道状态
  339. * 输入参数:void
  340. * 输出参数:void
  341. * 返 回 值:void
  342. * 创建日期:2021年07月01日
  343. * 注 意:
  344. *********************************************************************************************************/
  345. void Relay8State(void)
  346. {
  347. if(RelaySlaveChaNum>=8)
  348. {
  349. if(EE_ACDC_State_ReadReg[7].ACDC_Cha_On_Off_State==true)
  350. {
  351. RELAY_8_ON; //开继电器8
  352. EE_ACDC_State_ReadRegTrue[7].ACDC_Cha_On_Off_State = true;
  353. }
  354. else
  355. {
  356. RELAY_8_OFF; //关继电器8
  357. EE_ACDC_State_ReadRegTrue[7].ACDC_Cha_On_Off_State = false;
  358. }
  359. }
  360. }
  361. /*********************************************************************************************************
  362. * 函数名称:RelayState
  363. * 函数功能:RelayState模块,控制继电器和更新通道状态
  364. * 输入参数:void
  365. * 输出参数:void
  366. * 返 回 值:void
  367. * 创建日期:2021年07月01日
  368. * 注 意:
  369. *********************************************************************************************************/
  370. void RelayState(void)
  371. {
  372. BUFF;
  373. Relay1State();
  374. Relay2State();
  375. Relay3State();
  376. Relay4State();
  377. Relay5State();
  378. Relay6State();
  379. Relay7State();
  380. Relay8State();
  381. LOCK;
  382. }
  383. #endif
  384. #if ACSingPhHigCurr
  385. /*********************************************************************************************************
  386. * API函数实现
  387. *********************************************************************************************************/
  388. /*********************************************************************************************************
  389. * 函数名称:Relay1State
  390. * 函数功能:Relay1State模块,控制继电器和更新通道状态
  391. * 输入参数:void
  392. * 输出参数:void
  393. * 返 回 值:void
  394. * 创建日期:2021年07月01日
  395. * 注 意:
  396. *********************************************************************************************************/
  397. void Relay1State(void)
  398. {
  399. if(RelaySlaveChaNum>=1)
  400. {
  401. if(EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State==true)
  402. {
  403. RELAY_1_ON; //开继电器1
  404. EE_ACDC_State_ReadRegTrue[0].ACDC_Cha_On_Off_State = true;
  405. }
  406. else
  407. {
  408. RELAY_1_OFF; //关继电器1
  409. EE_ACDC_State_ReadRegTrue[0].ACDC_Cha_On_Off_State = false;
  410. }
  411. }
  412. }
  413. /*********************************************************************************************************
  414. * 函数名称:Relay2State
  415. * 函数功能:Relay2State模块,控制继电器和更新通道状态
  416. * 输入参数:void
  417. * 输出参数:void
  418. * 返 回 值:void
  419. * 创建日期:2021年07月01日
  420. * 注 意:
  421. *********************************************************************************************************/
  422. void Relay2State(void)
  423. {
  424. if(RelaySlaveChaNum>=2)
  425. {
  426. if(EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State==true)
  427. {
  428. RELAY_2_ON; //开继电器2
  429. EE_ACDC_State_ReadRegTrue[1].ACDC_Cha_On_Off_State = true;
  430. }
  431. else
  432. {
  433. RELAY_2_OFF; //关继电器2
  434. EE_ACDC_State_ReadRegTrue[1].ACDC_Cha_On_Off_State = false;
  435. }
  436. }
  437. }
  438. /*********************************************************************************************************
  439. * 函数名称:Relay3State
  440. * 函数功能:Relay3State模块,控制继电器和更新通道状态
  441. * 输入参数:void
  442. * 输出参数:void
  443. * 返 回 值:void
  444. * 创建日期:2021年07月01日
  445. * 注 意:
  446. *********************************************************************************************************/
  447. void Relay3State(void)
  448. {
  449. if(RelaySlaveChaNum>=3)
  450. {
  451. if(EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State==true)
  452. {
  453. RELAY_3_ON; //开继电器3
  454. EE_ACDC_State_ReadRegTrue[2].ACDC_Cha_On_Off_State = true;
  455. }
  456. else
  457. {
  458. RELAY_3_OFF; //关继电器3
  459. EE_ACDC_State_ReadRegTrue[2].ACDC_Cha_On_Off_State = false;
  460. }
  461. }
  462. }
  463. /*********************************************************************************************************
  464. * 函数名称:Relay4State
  465. * 函数功能:Relay4State模块,控制继电器和更新通道状态
  466. * 输入参数:void
  467. * 输出参数:void
  468. * 返 回 值:void
  469. * 创建日期:2021年07月01日
  470. * 注 意:
  471. *********************************************************************************************************/
  472. void Relay4State(void)
  473. {
  474. if(RelaySlaveChaNum>=4)
  475. {
  476. if(EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State==true)
  477. {
  478. RELAY_4_ON; //开继电器4
  479. EE_ACDC_State_ReadRegTrue[3].ACDC_Cha_On_Off_State = true;
  480. }
  481. else
  482. {
  483. RELAY_4_OFF; //关继电器4
  484. EE_ACDC_State_ReadRegTrue[3].ACDC_Cha_On_Off_State = false;
  485. }
  486. }
  487. }
  488. /*********************************************************************************************************
  489. * 函数名称:RelayState
  490. * 函数功能:RelayState模块,控制继电器和更新通道状态
  491. * 输入参数:void
  492. * 输出参数:void
  493. * 返 回 值:void
  494. * 创建日期:2021年07月01日
  495. * 注 意:
  496. *********************************************************************************************************/
  497. void RelayState(void)
  498. {
  499. BUFF;
  500. Relay1State();
  501. Relay2State();
  502. Relay3State();
  503. Relay4State();
  504. LOCK;
  505. }
  506. #endif
  507. /*********************************************************************************************************
  508. * 函数名称:WarnVolUpthrState
  509. * 函数功能:根据读取的数据判断是否触发阈值
  510. * 输入参数:void
  511. * 输出参数:void
  512. * 返 回 值:void
  513. * 创建日期:2021年07月01日
  514. * 注 意:
  515. *
  516. *********************************************************************************************************/
  517. void WarnVolUpthrState(void)
  518. {
  519. uint32_t chn_num = 0;
  520. for(chn_num=0;chn_num<RelaySlaveChaNum;chn_num++)
  521. {
  522. if(EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Upthr_En)
  523. {
  524. if(AC_Ele_ReadReg[chn_num].AC_V>EE_ACDC_ThresVal_ReadReg[chn_num].ACDC_V_TopThres)
  525. {
  526. EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Upthr_Warn = true;
  527. if(ACDC_Over_WriteReg[chn_num].openration & Voltage_Max_Func)
  528. {
  529. over_Func_flag[chn_num] = 1;
  530. }
  531. }
  532. else
  533. EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Upthr_Warn = false;
  534. }
  535. else
  536. EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Upthr_Warn = false;
  537. }
  538. }
  539. /*********************************************************************************************************
  540. * 函数名称:WarnVolDownthrState
  541. * 函数功能:根据读取的数据判断是否触发阈值
  542. * 输入参数:void
  543. * 输出参数:void
  544. * 返 回 值:void
  545. * 创建日期:2021年07月01日
  546. * 注 意:
  547. *
  548. *********************************************************************************************************/
  549. void WarnVolDownthrState(void)
  550. {
  551. uint32_t chn_num = 0;
  552. for(chn_num=0;chn_num<RelaySlaveChaNum;chn_num++)
  553. {
  554. if(EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Downthr_En)
  555. {
  556. if(AC_Ele_ReadReg[chn_num].AC_V < EE_ACDC_ThresVal_ReadReg[chn_num].ACDC_V_DownThres)
  557. {
  558. EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Downthr_Warn = true;
  559. if(ACDC_Over_WriteReg[chn_num].openration & Voltage_Min_Func)
  560. {
  561. over_Func_flag[chn_num] = 1;
  562. }
  563. }
  564. else
  565. EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Downthr_Warn = false;
  566. }
  567. else
  568. EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Downthr_Warn = false;
  569. }
  570. }
  571. /*********************************************************************************************************
  572. * 函数名称:WarnCurUpthrState
  573. * 函数功能:根据读取的数据判断是否触发阈值
  574. * 输入参数:void
  575. * 输出参数:void
  576. * 返 回 值:void
  577. * 创建日期:2021年07月01日
  578. * 注 意:
  579. *
  580. *********************************************************************************************************/
  581. void WarnCurUpthrState(void)
  582. {
  583. uint32_t chn_num = 0;
  584. for(chn_num=0;chn_num<RelaySlaveChaNum;chn_num++)
  585. {
  586. if(EE_ACDC_State_ReadReg[chn_num].ACDC_Cur_Upthr_En)
  587. {
  588. if(AC_Ele_ReadReg[chn_num].AC_I>EE_ACDC_ThresVal_ReadReg[chn_num].ACDC_I_TopThres)
  589. {
  590. EE_ACDC_State_ReadReg[chn_num].ACDC_Cur_Upthr_Warn = true;
  591. if(ACDC_Over_WriteReg[chn_num].openration & Current_Max_Func)
  592. {
  593. over_Func_flag[chn_num] = 1;
  594. }
  595. }
  596. else
  597. EE_ACDC_State_ReadReg[chn_num].ACDC_Cur_Upthr_Warn = false;
  598. }
  599. else
  600. EE_ACDC_State_ReadReg[chn_num].ACDC_Cur_Upthr_Warn = false;
  601. }
  602. }
  603. /*********************************************************************************************************
  604. * 函数名称:WarnPowUpthrState
  605. * 函数功能:根据读取的数据判断是否触发阈值
  606. * 输入参数:void
  607. * 输出参数:void
  608. * 返 回 值:void
  609. * 创建日期:2021年07月01日
  610. * 注 意:
  611. *
  612. *********************************************************************************************************/
  613. void WarnPowUpthrState(void)
  614. {
  615. uint32_t chn_num = 0;
  616. for(chn_num=0;chn_num<RelaySlaveChaNum;chn_num++)
  617. {
  618. if(EE_ACDC_State_ReadReg[chn_num].ACDC_Pow_Upthr_En)
  619. {
  620. if(AC_Ele_ReadReg[chn_num].AC_P>EE_ACDC_ThresVal_ReadReg[chn_num].ACDC_P_TopThres){
  621. EE_ACDC_State_ReadReg[chn_num].ACDC_Pow_Upthr_Warn = true;
  622. if(ACDC_Over_WriteReg[chn_num].openration & Power_Max_Func)
  623. {
  624. over_Func_flag[chn_num] = 1;
  625. }
  626. }
  627. else
  628. EE_ACDC_State_ReadReg[chn_num].ACDC_Pow_Upthr_Warn = false;
  629. }
  630. else
  631. EE_ACDC_State_ReadReg[chn_num].ACDC_Pow_Upthr_Warn = false;
  632. }
  633. }
  634. /*********************************************************************************************************
  635. * 函数名称:WarnEleUpthrState
  636. * 函数功能:根据读取的数据判断是否触发阈值
  637. * 输入参数:void
  638. * 输出参数:void
  639. * 返 回 值:void
  640. * 创建日期:2021年07月01日
  641. * 注 意:
  642. *
  643. *********************************************************************************************************/
  644. void WarnEleUpthrState(void)
  645. {
  646. uint32_t chn_num = 0;
  647. for(chn_num=0;chn_num<RelaySlaveChaNum;chn_num++)
  648. {
  649. if(EE_ACDC_State_ReadReg[chn_num].ACDC_Ele_Upthr_En)
  650. {
  651. if(AC_Ele_ReadReg[chn_num].AC_E>EE_ACDC_ThresVal_ReadReg[chn_num].ACDC_E_TopThres)
  652. {
  653. EE_ACDC_State_ReadReg[chn_num].ACDC_Ele_Upthr_Warn = true;
  654. if(ACDC_Over_WriteReg[chn_num].openration & Consumer_Max_Func)
  655. {
  656. over_Func_flag[chn_num] = 1;
  657. }
  658. }
  659. else
  660. EE_ACDC_State_ReadReg[chn_num].ACDC_Ele_Upthr_Warn = false;
  661. }
  662. else
  663. EE_ACDC_State_ReadReg[chn_num].ACDC_Ele_Upthr_Warn = false;
  664. }
  665. }
  666. /*********************************************************************************************************
  667. * 函数名称:WarnState
  668. * 函数功能:根据读取的数据判断是否触发阈值
  669. * 输入参数:void
  670. * 输出参数:void
  671. * 返 回 值:void
  672. * 创建日期:2021年07月01日
  673. * 注 意:
  674. *
  675. *********************************************************************************************************/
  676. void WarnState(void)
  677. {
  678. WarnVolUpthrState();
  679. WarnVolDownthrState();
  680. WarnCurUpthrState();
  681. WarnPowUpthrState();
  682. WarnEleUpthrState();
  683. }
  684. /*********************************************************************************************************
  685. * 函数名称:Bubble_Sort
  686. * 函数功能:根据读取的数据判断是否触发阈值
  687. * 输入参数:排序数组
  688. * 输出参数:排序数组的长度
  689. * 返 回 值:void
  690. * 创建日期:2021年07月01日
  691. * 注 意:
  692. *
  693. *********************************************************************************************************/
  694. void Bubble_Sort(unsigned short int arr[], unsigned short int len)
  695. {
  696. unsigned short int i, j, temp;
  697. for (i = 0; i < len - 1; i++)
  698. for (j = 0; j < len - 1 - i; j++)
  699. if (arr[j] > arr[j + 1])
  700. {
  701. temp = arr[j];
  702. arr[j] = arr[j + 1];
  703. arr[j + 1] = temp;
  704. }
  705. }