| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927 |
- /*********************************************************************************************************
- * 模块名称:ReadEeprom.c
- * 摘 要:ReadEeprom模块,进行独立按键初始化,以及按键扫描函数实现
- * 当前版本:1.0.0
- * 作 者:Leyutek(COPYRIGHT 2018 - 2021 Leyutek. All rights reserved.)
- * 完成日期:2021年07月01日
- * 内 容:
- * 注 意:
- **********************************************************************************************************
- * 取代版本:
- * 作 者:
- * 完成日期:
- * 修改内容:
- * 修改文件:
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 包含头文件
- *********************************************************************************************************/
- #include "ReadEeprom.h"
- #include "Main.h"
- #include "gd32e230x_conf.h"
- #include "At24cxx.h"
- #include "string.h"
- #include "Relay.h"
- #include "Sn74lvc573.h"
- /*********************************************************************************************************
- * 宏定义
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 枚举结构体
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 内部变量定义
- *********************************************************************************************************/
- unsigned char Eeprom_Rbuf[200]={0};
- unsigned char Chal_Num;
- extern EE_ACDC_Total_Consumption EE_ACDC_Total_Consum_Read_Reg[RelaySlaveChaNum];
- extern uint32_t read_Total_Consumer[RelaySlaveChaNum];
- extern uint8_t over_Func_flag[RelaySlaveChaNum];
- extern EE_ACDC_ThresVal_struct_ReadReg EE_ACDC_All_ThrVal;
- extern EE_ACDC_State_All_Reg_En_t EE_ACDC_State_All_en;
- extern ACDC_Over_Func_WriteReg ACDC_Over_AllWriteReg;
- extern AC_Ele_struct_ReadReg AC_Ele_ReadReg_All;
- extern ACDC_Wann_Read_Reg_t ACDC_Wann_All ;
- extern uint8_t over_func_all_flag;
- /*********************************************************************************************************
- * 内部函数声明
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 内部函数实现
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 函数名称:ReadEeprom
- * 函数功能:读出Eeprom的数据
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void ReadEeprom(void)
- {
- AT24CxxRead(Eepr_AC_Sing_Dela_OnSmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_Dela_OnSmaQua); //从eeprom中读出通道开启延时数据
- memcpy(&EE_ACDC_Delay_ReadReg_On,&Eeprom_Rbuf,Eepr_AC_Sing_Dela_OnSmaQua); //将数据拷贝到指定的结构体,可能需要注意大小端问题
- memcpy(&Sort_Onbuf,&EE_ACDC_Delay_ReadReg_On,Eepr_AC_Sing_Dela_OnSmaQua); //将数据进行排序,然后存入数组中
- Bubble_Sort(Sort_Onbuf,RelaySlaveChaNum);
-
- AT24CxxRead(Eepr_AC_Sing_Dela_OffSmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_Dela_OffSmaQua); //从eeprom中读出通道关闭延时数据
- memcpy(&EE_ACDC_Delay_ReadReg_Off,&Eeprom_Rbuf,Eepr_AC_Sing_Dela_OffSmaQua); //将数据拷贝到指定的结构体,可能需要注意大小端问题
- memcpy(&Sort_Offbuf,&EE_ACDC_Delay_ReadReg_Off,Eepr_AC_Sing_Dela_OffSmaQua); //将数据进行排序,然后存入数组中
- Bubble_Sort(Sort_Offbuf,RelaySlaveChaNum);
-
- AT24CxxRead(Eepr_AC_Sing_State_SmaWAddr, Eeprom_Rbuf, Eepr_AC_Sing_State_SmaWQua);//从eeprom中读出通道状态数据
- memcpy(&EE_ACDC_State_ReadReg,&Eeprom_Rbuf,Eepr_AC_Sing_State_SmaWQua); //将数据拷贝到指定的结构体,可能需要注意大小端问题
-
- AT24CxxRead(Eepr_AC_Sing_Thr_SmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_Thr_SmaQua); //从eeprom中读出通道阈值数据
- memcpy(&EE_ACDC_ThresVal_ReadReg,&Eeprom_Rbuf,Eepr_AC_Sing_Thr_SmaQua); //将数据拷贝到指定的结构体,可能需要注意大小端问题
-
- AT24CxxRead(Eepr_AC_Sing_All_Thr_SmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_All_Thr_SmaQua); //read thr of all
- memcpy(&EE_ACDC_All_ThrVal,&Eeprom_Rbuf,Eepr_AC_Sing_All_Thr_SmaQua);
-
- // add by liyi
- if(EE_ACDC_All_ThrVal.ACDC_V_TopThres > Default_Voltage_Max)
- {
- EE_ACDC_All_ThrVal.ACDC_V_TopThres = 0;
- }
- if(EE_ACDC_All_ThrVal.ACDC_V_DownThres > Default_Voltage_Max)
- {
- EE_ACDC_All_ThrVal.ACDC_V_DownThres = 0;
- }
- if(EE_ACDC_All_ThrVal.ACDC_P_TopThres > Default_Power_Max)
- {
- EE_ACDC_All_ThrVal.ACDC_P_TopThres = 0;
- }
- if(EE_ACDC_All_ThrVal.ACDC_I_TopThres > Default_Current_Max)
- {
- EE_ACDC_All_ThrVal.ACDC_I_TopThres = 0;
- }
-
-
-
- //check is
- for(Chal_Num=0;Chal_Num<RelaySlaveChaNum;Chal_Num++)
- {
- if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_V_TopThres > Default_Voltage_Max)
- {
- EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_V_TopThres = 0;
- }
- if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_V_DownThres > Default_Voltage_Max)
- {
- EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_V_DownThres = 0;
- }
- if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_P_TopThres > Default_Power_Max)
- {
- EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_P_TopThres = 0;
- }
- if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_I_TopThres > Default_Current_Max)
- {
- EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_I_TopThres = 0;
- }
- }
-
- if(EE_ACDC_All_ThrVal.ACDC_V_TopThres <= THRESHOULD_JUDGMENT)
- {
- EE_ACDC_State_All_en.ACDC_Vol_Upper_En = false;
- }else
- {
- EE_ACDC_State_All_en.ACDC_Vol_Upper_En = true;
- }
- if(EE_ACDC_All_ThrVal.ACDC_V_DownThres <= THRESHOULD_JUDGMENT)
- {
- EE_ACDC_State_All_en.ACDC_Vol_Lower_En= false;
- }else
- {
- EE_ACDC_State_All_en.ACDC_Vol_Lower_En= true;
- }
- if(EE_ACDC_All_ThrVal.ACDC_I_TopThres <= THRESHOULD_JUDGMENT)
- {
- EE_ACDC_State_All_en.ACDC_Current_Upper_En = false;
- }else
- {
- EE_ACDC_State_All_en.ACDC_Current_Upper_En= true;
- }
- if(EE_ACDC_All_ThrVal.ACDC_P_TopThres <= THRESHOULD_JUDGMENT)
- {
- EE_ACDC_State_All_en.ACDC_Power_Upper_En = false;
- }else
- {
- EE_ACDC_State_All_en.ACDC_Power_Upper_En = true;
- }
- if(EE_ACDC_All_ThrVal.ACDC_E_TopThres <= THRESHOULD_JUDGMENT)
- {
- EE_ACDC_State_All_en.ACDC_Consumer_Upper_En = false;
- }else
- {
- EE_ACDC_State_All_en.ACDC_Consumer_Upper_En= true;
- }
-
-
-
- for(Chal_Num=0;Chal_Num<RelaySlaveChaNum;Chal_Num++)
- {
- if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_V_TopThres <= THRESHOULD_JUDGMENT)
- {
- EE_ACDC_State_ReadReg[Chal_Num].ACDC_Vol_Upthr_En = false;
- }else
- {
- EE_ACDC_State_ReadReg[Chal_Num].ACDC_Vol_Upthr_En = true;
- }
- if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_V_DownThres <= THRESHOULD_JUDGMENT)
- {
- EE_ACDC_State_ReadReg[Chal_Num].ACDC_Vol_Downthr_En = false;
- }else
- {
- EE_ACDC_State_ReadReg[Chal_Num].ACDC_Vol_Downthr_En = true;
- }
- if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_I_TopThres <= THRESHOULD_JUDGMENT)
- {
- EE_ACDC_State_ReadReg[Chal_Num].ACDC_Cur_Upthr_En = false;
- }else
- {
- EE_ACDC_State_ReadReg[Chal_Num].ACDC_Cur_Upthr_En = true;
- }
- if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_P_TopThres <= THRESHOULD_JUDGMENT)
- {
- EE_ACDC_State_ReadReg[Chal_Num].ACDC_Pow_Upthr_En = false;
- }else
- {
- EE_ACDC_State_ReadReg[Chal_Num].ACDC_Pow_Upthr_En = true;
- }
- if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_E_TopThres <= THRESHOULD_JUDGMENT)
- {
- EE_ACDC_State_ReadReg[Chal_Num].ACDC_Ele_Upthr_En = false;
- }else
- {
- EE_ACDC_State_ReadReg[Chal_Num].ACDC_Ele_Upthr_En = true;
- }
- }
-
- AT24CxxRead(Eepr_AC_Sing_Coef_SmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_Coef_SmaQua); //从eeprom中读出通道的系数
- memcpy(&EE_ACDC_Coef_ReadReg,&Eeprom_Rbuf,Eepr_AC_Sing_Coef_SmaQua); //将数据拷贝到指定的结构体,可能需要注意大小端问题
- for(Chal_Num=0;Chal_Num<RelaySlaveChaNum;Chal_Num++) //如果eeprom中没有存入数据设置默认值
- {
- if((EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_V_k)==0xffffffff) //没有写入电压系数则默认K为1000,B为0;放大1000倍存入的
- {
- EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_V_k = 1000;
- }
- if((EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_V_b)==0xffffffff)
- {
- (EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_V_b) = 0;
- }
- if((EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_I_k)==0xffffffff) //没有写入电流系数则默认K为1000,B为0;放大1000倍存入的
- {
- EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_I_k = 1000;
- }
- if((EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_I_b)==0xffffffff)
- {
- EE_ACDC_Coef_ReadReg[Chal_Num].ACDC_I_b = 0;
- }
- }
- //read total consumer
- AT24CxxRead(Eepr_AC_Sing_Total_Consumer_addr, Eeprom_Rbuf, Eepr_AC_Sing_Total_Consumer_SmaQua);
- for(int i = 0; i < RelaySlaveChaNum;i++){
- int temp = i << 2;
- read_Total_Consumer[i] += Eeprom_Rbuf[temp + 0] << 24;
- read_Total_Consumer[i] += Eeprom_Rbuf[temp + 1] << 16;
- read_Total_Consumer[i] += Eeprom_Rbuf[temp + 2] << 8;
- read_Total_Consumer[i] += Eeprom_Rbuf[temp + 3] << 0;
-
- if(read_Total_Consumer[i] > Default_Consum_Max)
- {
- read_Total_Consumer[i] = 0;
- }
- }
-
- //read wanning func
- AT24CxxRead(Eepr_AC_Sing_Channel_Func_SmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_Channel_Func_SmaQua);
- memcpy(ACDC_Over_WriteReg,Eeprom_Rbuf,Eepr_AC_Sing_Channel_Func_SmaQua);
- for(int i=0; i < RelaySlaveChaNum;i++)
- {
- if(ACDC_Over_WriteReg[i].openration > 0x003f)
- {
- ACDC_Over_WriteReg[i].openration = 0;
- }
- }
- AT24CxxRead(Eepr_AC_Sing_All_Over_SmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_All_Over_SmaQua);
- memcpy(&ACDC_Over_AllWriteReg,Eeprom_Rbuf,Eepr_AC_Sing_All_Over_SmaQua);
- if(ACDC_Over_AllWriteReg.openration > 0x003f)
- {
- ACDC_Over_AllWriteReg.openration = 0;
- }
- }
- #if ACSingPhSmaCurr
- /*********************************************************************************************************
- * API函数实现
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 函数名称:Relay1State
- * 函数功能:Relay1State模块,控制继电器和更新通道状态
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void Relay1State(void)
- {
- if(RelaySlaveChaNum>=1)
- {
- if(EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State==true)
- {
- RELAY_1_ON; //开继电器1
- EE_ACDC_State_ReadRegTrue[0].ACDC_Cha_On_Off_State = true;
- }
- else
- {
- RELAY_1_OFF; //关继电器1
- EE_ACDC_State_ReadRegTrue[0].ACDC_Cha_On_Off_State = false;
- }
- }
- }
- /*********************************************************************************************************
- * 函数名称:Relay2State
- * 函数功能:Relay2State模块,控制继电器和更新通道状态
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void Relay2State(void)
- {
- if(RelaySlaveChaNum>=2)
- {
- if(EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State==true)
- {
- RELAY_2_ON; //开继电器2
- EE_ACDC_State_ReadRegTrue[1].ACDC_Cha_On_Off_State = true;
- }
- else
- {
- RELAY_2_OFF; //关继电器2
- EE_ACDC_State_ReadRegTrue[1].ACDC_Cha_On_Off_State = false;
- }
- }
- }
- /*********************************************************************************************************
- * 函数名称:Relay3State
- * 函数功能:Relay3State模块,控制继电器和更新通道状态
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void Relay3State(void)
- {
- if(RelaySlaveChaNum>=3)
- {
- if(EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State==true)
- {
- RELAY_3_ON; //开继电器3
- EE_ACDC_State_ReadRegTrue[2].ACDC_Cha_On_Off_State = true;
- }
- else
- {
- RELAY_3_OFF; //关继电器3
- EE_ACDC_State_ReadRegTrue[2].ACDC_Cha_On_Off_State = false;
- }
- }
- }
- /*********************************************************************************************************
- * 函数名称:Relay4State
- * 函数功能:Relay4State模块,控制继电器和更新通道状态
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void Relay4State(void)
- {
- if(RelaySlaveChaNum>=4)
- {
- if(EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State==true)
- {
- RELAY_4_ON; //开继电器4
- EE_ACDC_State_ReadRegTrue[3].ACDC_Cha_On_Off_State = true;
- }
- else
- {
- RELAY_4_OFF; //关继电器4
- EE_ACDC_State_ReadRegTrue[3].ACDC_Cha_On_Off_State = false;
- }
- }
- }
- /*********************************************************************************************************
- * 函数名称:Relay5State
- * 函数功能:Relay5State模块,控制继电器和更新通道状态
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void Relay5State(void)
- {
- if(RelaySlaveChaNum>=5)
- {
- if(EE_ACDC_State_ReadReg[4].ACDC_Cha_On_Off_State==true)
- {
- RELAY_5_ON; //开继电器5
- EE_ACDC_State_ReadRegTrue[4].ACDC_Cha_On_Off_State = true;
- }
- else
- {
- RELAY_5_OFF; //关继电器5
- EE_ACDC_State_ReadRegTrue[4].ACDC_Cha_On_Off_State = false;
- }
- }
- }
- /*********************************************************************************************************
- * 函数名称:Relay6State
- * 函数功能:Relay6State模块,控制继电器和更新通道状态
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void Relay6State(void)
- {
- if(RelaySlaveChaNum>=6)
- {
- if(EE_ACDC_State_ReadReg[5].ACDC_Cha_On_Off_State==true)
- {
- RELAY_6_ON; //开继电器6
- EE_ACDC_State_ReadRegTrue[5].ACDC_Cha_On_Off_State = true;
- }
- else
- {
- RELAY_6_OFF; //关继电器6
- EE_ACDC_State_ReadRegTrue[5].ACDC_Cha_On_Off_State = false;
- }
- }
- }
- #ifndef ACSingPhSmaCurrNew
- /*********************************************************************************************************
- * 函数名称:Relay7State
- * 函数功能:Relay7State模块,控制继电器和更新通道状态
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void Relay7State(void)
- {
- if(RelaySlaveChaNum>=7)
- {
- if(EE_ACDC_State_ReadReg[6].ACDC_Cha_On_Off_State==true)
- {
- RELAY_7_ON; //开继电器7
- EE_ACDC_State_ReadRegTrue[6].ACDC_Cha_On_Off_State = true;
- }
- else
- {
- RELAY_7_OFF; //关继电器7
- EE_ACDC_State_ReadRegTrue[6].ACDC_Cha_On_Off_State = false;
- }
- }
- }
- /*********************************************************************************************************
- * 函数名称:Relay8State
- * 函数功能:Relay8State模块,控制继电器和更新通道状态
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void Relay8State(void)
- {
- if(RelaySlaveChaNum>=8)
- {
- if(EE_ACDC_State_ReadReg[7].ACDC_Cha_On_Off_State==true)
- {
- RELAY_8_ON; //开继电器8
- EE_ACDC_State_ReadRegTrue[7].ACDC_Cha_On_Off_State = true;
- }
- else
- {
- RELAY_8_OFF; //关继电器8
- EE_ACDC_State_ReadRegTrue[7].ACDC_Cha_On_Off_State = false;
- }
- }
- }
- #endif
- /*********************************************************************************************************
- * 函数名称:RelayState
- * 函数功能:RelayState模块,控制继电器和更新通道状态
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void RelayState(void)
- {
- BUFF;
- Relay1State();
- Relay2State();
- Relay3State();
- Relay4State();
- Relay5State();
- Relay6State();
- #ifndef ACSingPhSmaCurrNew
- Relay7State();
- Relay8State();
- #endif
- LOCK;
- }
- #endif
- #if ACSingPhHigCurr
- /*********************************************************************************************************
- * API函数实现
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 函数名称:Relay1State
- * 函数功能:Relay1State模块,控制继电器和更新通道状态
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void Relay1State(void)
- {
- if(RelaySlaveChaNum>=1)
- {
- if(EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State==true)
- {
- RELAY_1_ON; //开继电器1
- EE_ACDC_State_ReadRegTrue[0].ACDC_Cha_On_Off_State = true;
- }
- else
- {
- RELAY_1_OFF; //关继电器1
- EE_ACDC_State_ReadRegTrue[0].ACDC_Cha_On_Off_State = false;
- }
- }
- }
- /*********************************************************************************************************
- * 函数名称:Relay2State
- * 函数功能:Relay2State模块,控制继电器和更新通道状态
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void Relay2State(void)
- {
- if(RelaySlaveChaNum>=2)
- {
- if(EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State==true)
- {
- RELAY_2_ON; //开继电器2
- EE_ACDC_State_ReadRegTrue[1].ACDC_Cha_On_Off_State = true;
- }
- else
- {
- RELAY_2_OFF; //关继电器2
- EE_ACDC_State_ReadRegTrue[1].ACDC_Cha_On_Off_State = false;
- }
- }
- }
- /*********************************************************************************************************
- * 函数名称:Relay3State
- * 函数功能:Relay3State模块,控制继电器和更新通道状态
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void Relay3State(void)
- {
- if(RelaySlaveChaNum>=3)
- {
- if(EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State==true)
- {
- RELAY_3_ON; //开继电器3
- EE_ACDC_State_ReadRegTrue[2].ACDC_Cha_On_Off_State = true;
- }
- else
- {
- RELAY_3_OFF; //关继电器3
- EE_ACDC_State_ReadRegTrue[2].ACDC_Cha_On_Off_State = false;
- }
- }
- }
- /*********************************************************************************************************
- * 函数名称:Relay4State
- * 函数功能:Relay4State模块,控制继电器和更新通道状态
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void Relay4State(void)
- {
- if(RelaySlaveChaNum>=4)
- {
- if(EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State==true)
- {
- RELAY_4_ON; //开继电器4
- EE_ACDC_State_ReadRegTrue[3].ACDC_Cha_On_Off_State = true;
- }
- else
- {
- RELAY_4_OFF; //关继电器4
- EE_ACDC_State_ReadRegTrue[3].ACDC_Cha_On_Off_State = false;
- }
- }
- }
- /*********************************************************************************************************
- * 函数名称:RelayState
- * 函数功能:RelayState模块,控制继电器和更新通道状态
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void RelayState(void)
- {
- BUFF;
- Relay1State();
- Relay2State();
- Relay3State();
- Relay4State();
- LOCK;
- }
- #endif
- /*********************************************************************************************************
- * 函数名称:WarnVolUpthrState
- * 函数功能:根据读取的数据判断是否触发阈值
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *
- *********************************************************************************************************/
- void WarnVolUpthrState(void)
- {
- uint32_t chn_num = 0;
- for(chn_num=0;chn_num<RelaySlaveChaNum;chn_num++)
- {
- if(EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Upthr_En)
- {
- if(AC_Ele_ReadReg[chn_num].AC_V>EE_ACDC_ThresVal_ReadReg[chn_num].ACDC_V_TopThres)
- {
- EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Upthr_Warn = true;
- if(ACDC_Over_WriteReg[chn_num].openration & Voltage_Max_Func)
- {
- over_Func_flag[chn_num] = 1;
- }
- }
- else
- EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Upthr_Warn = false;
- }
- else
- EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Upthr_Warn = false;
- }
- }
- /*********************************************************************************************************
- * 函数名称:WarnVolDownthrState
- * 函数功能:根据读取的数据判断是否触发阈值
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *
- *********************************************************************************************************/
- void WarnVolDownthrState(void)
- {
- uint32_t chn_num = 0;
- for(chn_num=0;chn_num<RelaySlaveChaNum;chn_num++)
- {
- if(EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Downthr_En)
- {
- if(AC_Ele_ReadReg[chn_num].AC_V < EE_ACDC_ThresVal_ReadReg[chn_num].ACDC_V_DownThres)
- {
- EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Downthr_Warn = true;
- if(ACDC_Over_WriteReg[chn_num].openration & Voltage_Min_Func)
- {
- over_Func_flag[chn_num] = 1;
- }
- }
- else
- EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Downthr_Warn = false;
- }
- else
- EE_ACDC_State_ReadReg[chn_num].ACDC_Vol_Downthr_Warn = false;
- }
- }
- /*********************************************************************************************************
- * 函数名称:WarnCurUpthrState
- * 函数功能:根据读取的数据判断是否触发阈值
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *
- *********************************************************************************************************/
- void WarnCurUpthrState(void)
- {
- uint32_t chn_num = 0;
- for(chn_num=0;chn_num<RelaySlaveChaNum;chn_num++)
- {
- if(EE_ACDC_State_ReadReg[chn_num].ACDC_Cur_Upthr_En)
- {
- if(AC_Ele_ReadReg[chn_num].AC_I>EE_ACDC_ThresVal_ReadReg[chn_num].ACDC_I_TopThres)
- {
- EE_ACDC_State_ReadReg[chn_num].ACDC_Cur_Upthr_Warn = true;
- if(ACDC_Over_WriteReg[chn_num].openration & Current_Max_Func)
- {
- over_Func_flag[chn_num] = 1;
- }
- }
- else
- EE_ACDC_State_ReadReg[chn_num].ACDC_Cur_Upthr_Warn = false;
- }
- else
- EE_ACDC_State_ReadReg[chn_num].ACDC_Cur_Upthr_Warn = false;
- }
- }
- /*********************************************************************************************************
- * 函数名称:WarnPowUpthrState
- * 函数功能:根据读取的数据判断是否触发阈值
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *
- *********************************************************************************************************/
- void WarnPowUpthrState(void)
- {
- uint32_t chn_num = 0;
- for(chn_num=0;chn_num<RelaySlaveChaNum;chn_num++)
- {
- if(EE_ACDC_State_ReadReg[chn_num].ACDC_Pow_Upthr_En)
- {
- if(AC_Ele_ReadReg[chn_num].AC_P>EE_ACDC_ThresVal_ReadReg[chn_num].ACDC_P_TopThres){
- EE_ACDC_State_ReadReg[chn_num].ACDC_Pow_Upthr_Warn = true;
- if(ACDC_Over_WriteReg[chn_num].openration & Power_Max_Func)
- {
- over_Func_flag[chn_num] = 1;
- }
- }
- else
- EE_ACDC_State_ReadReg[chn_num].ACDC_Pow_Upthr_Warn = false;
- }
- else
- EE_ACDC_State_ReadReg[chn_num].ACDC_Pow_Upthr_Warn = false;
- }
- }
- /*********************************************************************************************************
- * 函数名称:WarnEleUpthrState
- * 函数功能:根据读取的数据判断是否触发阈值
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *
- *********************************************************************************************************/
- void WarnEleUpthrState(void)
- {
- uint32_t chn_num = 0;
- for(chn_num=0;chn_num<RelaySlaveChaNum;chn_num++)
- {
- if(EE_ACDC_State_ReadReg[chn_num].ACDC_Ele_Upthr_En)
- {
- if(AC_Ele_ReadReg[chn_num].AC_E>EE_ACDC_ThresVal_ReadReg[chn_num].ACDC_E_TopThres)
- {
- EE_ACDC_State_ReadReg[chn_num].ACDC_Ele_Upthr_Warn = true;
- if(ACDC_Over_WriteReg[chn_num].openration & Consumer_Max_Func)
- {
- over_Func_flag[chn_num] = 1;
- }
- }
- else
- EE_ACDC_State_ReadReg[chn_num].ACDC_Ele_Upthr_Warn = false;
- }
- else
- EE_ACDC_State_ReadReg[chn_num].ACDC_Ele_Upthr_Warn = false;
- }
- }
- /*********************************************************************************************************
- * 函数名称:WarnState
- * 函数功能:根据读取的数据判断是否触发阈值
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *
- *********************************************************************************************************/
- void WarnState(void)
- {
- WarnVolUpthrState();
- WarnVolDownthrState();
- WarnCurUpthrState();
- WarnPowUpthrState();
- WarnEleUpthrState();
- }
- void All_Warn_State(void)
- {
-
- //voltage max
- if(EE_ACDC_State_All_en.ACDC_Vol_Upper_En)
- {
- if(AC_Ele_ReadReg_All.AC_V > EE_ACDC_All_ThrVal.ACDC_V_TopThres)
- {
- ACDC_Wann_All.wan.ACDC_V_Max = true;
- if(ACDC_Over_AllWriteReg.openration & Voltage_Max_Func)
- {
- over_func_all_flag = 1;
- //ACDC_Wann_All.over.ACDC_V_Max_O_Func = true;
- }
- }else
- {
- ACDC_Wann_All.wan.ACDC_V_Max = false;
- //ACDC_Wann_All.over.ACDC_V_Max_O_Func = false;
- }
- }else
- {
- ACDC_Wann_All.wan.ACDC_V_Max = false;
- }
- //voltage min
- if(EE_ACDC_State_All_en.ACDC_Vol_Lower_En)
- {
- if(AC_Ele_ReadReg_All.AC_V < EE_ACDC_All_ThrVal.ACDC_V_DownThres)
- {
- ACDC_Wann_All.wan.ACDC_V_Min = true;
- if(ACDC_Over_AllWriteReg.openration & Voltage_Min_Func)
- {
- over_func_all_flag = 1;
- }
-
- }else
- {
- ACDC_Wann_All.wan.ACDC_V_Min = false;
- }
- }else
- {
- ACDC_Wann_All.wan.ACDC_V_Min = false;
- }
- //power max
- if(EE_ACDC_State_All_en.ACDC_Power_Upper_En)
- {
- if(AC_Ele_ReadReg_All.AC_P > EE_ACDC_All_ThrVal.ACDC_P_TopThres)
- {
- ACDC_Wann_All.wan.ACDC_P_Max = true;
- if(ACDC_Over_AllWriteReg.openration & Power_Max_Func)
- {
- over_func_all_flag = 1;
- }
-
- }else
- {
- ACDC_Wann_All.wan.ACDC_P_Max = false;
- }
- }else
- {
- ACDC_Wann_All.wan.ACDC_P_Max = false;
- }
- //current max
- if(EE_ACDC_State_All_en.ACDC_Current_Upper_En)
- {
- if(AC_Ele_ReadReg_All.AC_I > EE_ACDC_All_ThrVal.ACDC_I_TopThres)
- {
- ACDC_Wann_All.wan.ACDC_I_Max = true;
- if(ACDC_Over_AllWriteReg.openration & Current_Max_Func)
- {
- over_func_all_flag = 1;
- }
-
- }else
- {
- ACDC_Wann_All.wan.ACDC_I_Max = false;
- }
- }else
- {
- ACDC_Wann_All.wan.ACDC_I_Max = false;
- }
- //consumer max
- if(EE_ACDC_State_All_en.ACDC_Consumer_Upper_En)
- {
- if(AC_Ele_ReadReg_All.AC_E > EE_ACDC_All_ThrVal.ACDC_E_TopThres)
- {
- ACDC_Wann_All.wan.ACDC_C_Max = true;
- if(ACDC_Over_AllWriteReg.openration & Consumer_Max_Func)
- {
- over_func_all_flag = 1;
- }
-
- }else
- {
- ACDC_Wann_All.wan.ACDC_C_Max = false;
- }
- }else
- {
- ACDC_Wann_All.wan.ACDC_C_Max = false;
- }
-
- }
- /*********************************************************************************************************
- * 函数名称:Bubble_Sort
- * 函数功能:根据读取的数据判断是否触发阈值
- * 输入参数:排序数组
- * 输出参数:排序数组的长度
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *
- *********************************************************************************************************/
- void Bubble_Sort(unsigned short int arr[], unsigned short int len)
- {
- unsigned short int i, j, temp;
- for (i = 0; i < len - 1; i++)
- for (j = 0; j < len - 1 - i; j++)
- if (arr[j] > arr[j + 1])
- {
- temp = arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = temp;
- }
- }
|