ReadEeprom.c 28 KB

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