| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- /*********************************************************************************************************
- * 模块名称: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 "Sn74hc573.h"
- /*********************************************************************************************************
- * 宏定义
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 枚举结构体
- *********************************************************************************************************/
- extern DCPDU_RELAY_Para_Reg DCPDU_RL_time;
- /*********************************************************************************************************
- * 内部变量定义
- *********************************************************************************************************/
- uint8_t Eeprom_Rbuf[RELAY_para_sum]={0};
- extern uint8_t DCPDU_active_chn;
- extern uint8_t Active_state_bit;
- extern uint32_t DCPDU_Modbus_Reg[DCPDU_Modbus_Reg_len];
- /*********************************************************************************************************
- * 内部函数声明
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 内部函数实现
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 函数名称:ReadEeprom
- * 函数功能:读出Eeprom的数据
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void ReadEeprom(void)
- {
- uint8_t i = 0;
- uint8_t j = 0;
- uint32_t temp0 = 0;
- uint32_t temp1 = 0;
- uint32_t temp2 = 0;
- uint32_t temp3 = 0;
-
- AT24CxxRead(0, Eeprom_Rbuf, RELAY_para_sum); //从eeprom中读出通道开启延时数据
- if((Eeprom_Rbuf[ERom_RL_Ch_N_addr] < 1) || (Eeprom_Rbuf[ERom_RL_Ch_N_addr] > RELAY_ChN_default))
- {
- Eeprom_Rbuf[ERom_RL_Ch_N_addr] = RELAY_ChN_default;
- }
- DCPDU_active_chn = Eeprom_Rbuf[ERom_RL_Ch_N_addr];
- DCPDU_Modbus_Reg[DCPDU_RL_ST_Addr - DCPDU_Modbus_RegStAd] = Eeprom_Rbuf[ERom_RL_ST_Addr];
- DCPDU_Modbus_Reg[DCPDU_RLft_ST_Addr - DCPDU_Modbus_RegStAd] = Eeprom_Rbuf[ERom_RLft_ST_Addr];
- for(i = 0;i < RELAY_ChN_default;i++)
- {
- if((Eeprom_Rbuf[ERom_RL_Ton1_Addr + i] < 1) || (Eeprom_Rbuf[ERom_RL_Ton1_Addr + i] > RELAY_ontime_max))
- {
- Eeprom_Rbuf[ERom_RL_Ton1_Addr + i] = RELAY_ontime_default;
- }
- if((Eeprom_Rbuf[ERom_RL_Toff1_Addr + i] < 1) || (Eeprom_Rbuf[ERom_RL_Toff1_Addr + i] > RELAY_offtime_max))
- {
- Eeprom_Rbuf[ERom_RL_Toff1_Addr + i] = RELAY_offtime_default;
- }
- DCPDU_Modbus_Reg[DCPDU_RL_Ton1_Addr + i - DCPDU_Modbus_RegStAd] = Eeprom_Rbuf[ERom_RL_Ton1_Addr + i];
- DCPDU_Modbus_Reg[DCPDU_RL_Toff1_Addr + i - DCPDU_Modbus_RegStAd] = Eeprom_Rbuf[ERom_RL_Toff1_Addr + i];
-
- DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] = 0;
- DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] = 0;
-
- DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] = 0;
- DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_min_Addr + i] = 0;
-
- temp0 = 4 * i;
-
- DCPDU_Modbus_Reg[Mb_Dbuff_P1Output_Addr + temp0 + 3] = 0;
-
- for(j = 0;j < 4;j++)
- {
- temp2 = 8 * j;
- temp2 = 24 - temp2;
- temp3 = 4 * i;
- temp3 += j;
-
- DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] += (Eeprom_Rbuf[ERom_VLit1_max_Addr + temp3] << temp2);
- DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] += (Eeprom_Rbuf[ERom_VLit1_min_Addr + temp3] << temp2);
-
- DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] += (Eeprom_Rbuf[ERom_ILit1_max_Addr + temp3] << temp2);
- DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_min_Addr + i] += (Eeprom_Rbuf[ERom_ILit1_min_Addr + temp3] << temp2);
-
- DCPDU_Modbus_Reg[Mb_Dbuff_P1Output_Addr + temp0 + 3] += (Eeprom_Rbuf[ERom_TotalWh1_Addr + temp3] << temp2);
-
- //read
- }
-
- // if((DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] < Vin_LTmin_default) || (DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] > Vin_LTmax_default))
- // {
- // DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] = Vin_LTmax_default;
- // }
- if(DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] > Default_Voltage_Max)
- {
- DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] = 0;
- }
- // if((DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] < Vin_LTmin_default) || (DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] > Vin_LTmax_default))
- // {
- // DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] = Vin_LTmin_default;
- // }
- if(DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] > Default_Voltage_Max)
- {
- DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] = 0;
- }
- // if(DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] < DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i])
- // {
- // temp3 = DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i];
- // DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] = DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i];
- // DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] = temp3;
- // }
-
- // if((DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] < Iout_LTmin_default) || (DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] > Iout_LTmax_default))
- // {
- // DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] = Iout_LTmax_default;
- // }
- if(DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] > Default_Current_Max)
- {
- DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] = 0;
- }
- // if((DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_min_Addr + i] < Iout_LTmin_default) || (DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_min_Addr + i] > Iout_LTmax_default))
- // {
- // DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_min_Addr + i] = Iout_LTmin_default;
- // }
- // if(DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] < DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_min_Addr + i])
- // {
- // temp3 = DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i];
- // DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] = DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_min_Addr + i];
- // DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_min_Addr + i] = temp3;
- // }
- }
- DCPDU_Modbus_Reg[DCPDU_RL_Allon_Addr - DCPDU_Modbus_RegStAd] = Eeprom_Rbuf[ERom_RL_Allon_Addr];
- DCPDU_Modbus_Reg[DCPDU_RL_Alloff_Addr - DCPDU_Modbus_RegStAd] = Eeprom_Rbuf[ERom_RL_Alloff_Addr];
-
- for(i = 0;i < RELAY_ChN_default;i++)
- {
- for(j = 0;j < 4;j++)
- {
- temp0 = 8 * j;
- temp0 = 24 - temp0;
- temp1 = 4 * i;
- temp1 += j;
- DCPDU_Modbus_Reg[Mb_Dbuff_WLit1_max_Addr + i] += Eeprom_Rbuf[ERom_WLit1_max_Addr + temp1] << temp0;
- DCPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr + i] += Eeprom_Rbuf[ERom_kWhLit1_max_Addr + temp1] << temp0;
- }
- if(DCPDU_Modbus_Reg[Mb_Dbuff_WLit1_max_Addr + i] > Default_Power_Max)
- {
- DCPDU_Modbus_Reg[Mb_Dbuff_WLit1_max_Addr + i] = 0;
- }
- if(DCPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr + i] > Default_Consum_Max)
- {
- DCPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr + i] = 0;
- }
- }
-
-
- // read channel status
- for(i = 0;i < RELAY_ChN_default;i++)
- {
- uint8_t temp = i << 1;
- DCPDU_Modbus_Reg[Mb_Dbuff_CH1ST_FT_Addr + i] = Eeprom_Rbuf[ERom_CH1LT_ST_Addr+temp]; //Read channel status
-
- if(DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr+i] < THRESHOULD_JUDGMENT)
- {
- DCPDU_Modbus_Reg[Mb_Dbuff_CH1ST_FT_Addr + i] &= (Shield_Vmax_Threshould_Disable);
- }
- if(DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr+i] < THRESHOULD_JUDGMENT)
- {
- DCPDU_Modbus_Reg[Mb_Dbuff_CH1ST_FT_Addr + i] &= (Shield_Vmin_Threshould_Disable);
- }
- if(DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr+i] < THRESHOULD_JUDGMENT)
- {
- DCPDU_Modbus_Reg[Mb_Dbuff_CH1ST_FT_Addr + i] &= (Shield_Imax_Threshould_Disable);
- }
- if(DCPDU_Modbus_Reg[Mb_Dbuff_WLit1_max_Addr+i] < THRESHOULD_JUDGMENT)
- {
- DCPDU_Modbus_Reg[Mb_Dbuff_CH1ST_FT_Addr + i] &= (Shield_Wmax_Threshould_Disable);
- }
- if(DCPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr+i] < THRESHOULD_JUDGMENT)
- {
- DCPDU_Modbus_Reg[Mb_Dbuff_CH1ST_FT_Addr + i] &= (Shield_Kwhmax_Threshould_Disable);
- }
- }
- //read over func
- for(i = 0;i < RELAY_ChN_default;i++)
- {
- DCPDU_Modbus_Reg[Mb_Dbuff_RL_Over_Ch1_Func + i] = Eeprom_Rbuf[ERom_RL_Over_Func_Ch1+i];
- if(DCPDU_Modbus_Reg[Mb_Dbuff_RL_Over_Ch1_Func + i] >0x0F)
- {
- DCPDU_Modbus_Reg[Mb_Dbuff_RL_Over_Ch1_Func + i] = 0;
- }
- }
- }
- /*********************************************************************************************************
- * API函数实现
- *********************************************************************************************************/
- void WriteEeprom(void)
- {
- uint8_t i = 0;
- uint8_t j = 0;
- uint32_t temp0 = 0;
- uint32_t temp1 = 0;
- uint32_t temp2 = 0;
- uint32_t temp3 = 0;
- uint32_t temp4 = 0;
- uint32_t temp5 = 0;
- Eeprom_Rbuf[ERom_RL_Ch_N_addr] = RELAY_ChN_default;
- Eeprom_Rbuf[ERom_RL_ST_Addr] = DCPDU_Modbus_Reg[DCPDU_RL_ST_Addr - DCPDU_Modbus_RegStAd] & Active_state_bit;
- Eeprom_Rbuf[ERom_RLft_ST_Addr] = DCPDU_Modbus_Reg[DCPDU_RLft_ST_Addr - DCPDU_Modbus_RegStAd] & Active_state_bit;
- for(i = 0;i <RELAY_ChN_default;i++)
- {
- Eeprom_Rbuf[ERom_RL_Ton1_Addr + i] = DCPDU_Modbus_Reg[DCPDU_RL_Ton1_Addr + i - DCPDU_Modbus_RegStAd];
- Eeprom_Rbuf[ERom_RL_Toff1_Addr + i] = DCPDU_Modbus_Reg[DCPDU_RL_Toff1_Addr + i - DCPDU_Modbus_RegStAd];
- }
- Eeprom_Rbuf[ERom_RL_Allon_Addr] = DCPDU_Modbus_Reg[DCPDU_RL_Allon_Addr - DCPDU_Modbus_RegStAd] & Active_state_bit;
- Eeprom_Rbuf[ERom_RL_Alloff_Addr] = DCPDU_Modbus_Reg[DCPDU_RL_Alloff_Addr - DCPDU_Modbus_RegStAd] & Active_state_bit;
-
- temp0 = DCPDU_VLit1_max_Addr - DCPDU_Modbus_RegStAd;
- temp1 = DCPDU_VLit1_min_Addr - DCPDU_Modbus_RegStAd;
-
- temp4 = DCPDU_ILit1_max_Addr - DCPDU_Modbus_RegStAd;
- temp5 = DCPDU_ILit1_min_Addr - DCPDU_Modbus_RegStAd;
-
- for(i = 0;i <RELAY_ChN_default;i++)
- {
-
- for(j = 0;j < 4;j++)
- {
- temp2 = 8 * j;
- temp2 = 24 - temp2;
- temp3 = 4 * i;
- temp3 += j;
-
- Eeprom_Rbuf[ERom_VLit1_max_Addr + temp3] = DCPDU_Modbus_Reg[temp0 + i] >> temp2;
- Eeprom_Rbuf[ERom_VLit1_min_Addr + temp3] = DCPDU_Modbus_Reg[temp1 + i] >> temp2;
- Eeprom_Rbuf[ERom_ILit1_max_Addr + temp3] = DCPDU_Modbus_Reg[temp4 + i] >> temp2;
- Eeprom_Rbuf[ERom_ILit1_min_Addr + temp3] = DCPDU_Modbus_Reg[temp5 + i] >> temp2;
- }
- }
- AT24CxxWrite(ERom_RL_Ch_N_addr,Eeprom_Rbuf,RELAY_para_sum);
- }
|