Просмотр исходного кода

1、修改直流PDU控制板断电后电能不能累计的bug

liyuezong лет назад: 2
Родитель
Сommit
68c58957be
3 измененных файлов с 750 добавлено и 708 удалено
  1. 9 1
      control/PDU-DC/App/Main/Main.c
  2. 543 514
      control/PDU-DC/App/Main/Main.h
  3. 198 193
      control/PDU-DC/App/ReadEeprom/ReadEeprom.c

+ 9 - 1
control/PDU-DC/App/Main/Main.c

@@ -443,7 +443,7 @@ int main(void)
 	for(i = 0;i < DCPDU_active_chn;i++)
 	{
 		temp0 = 4*i;
-		DCPDU_Modbus_Reg[temp0 + Mb_Dbuff_P1Output_Addr + 3] = 0;//输出耗电量初始化为0
+		TotalWh[i] = DCPDU_Modbus_Reg[temp0 + Mb_Dbuff_P1Output_Addr + 3];//耗电量初始化
 	}
 	while(1)
 	{
@@ -539,7 +539,15 @@ int main(void)
 				if(DCPDU_Modbus_Reg[temp0 + Mb_Dbuff_P1Output_Addr + 3] > 0xfffffffe)
 				{
 					TotalWh[i] = 0.0;
+					DCPDU_Modbus_Reg[temp0 + Mb_Dbuff_P1Output_Addr + 3]=(uint32_t)TotalWh[i];
 				}
+				
+				//将耗电量实时写入Eeprom
+				Eeprom_Rbuf[ERom_TotalWh1_Addr + temp0] = DCPDU_Modbus_Reg[temp0 + Mb_Dbuff_P1Output_Addr + 3] >> 24;
+				Eeprom_Rbuf[ERom_TotalWh1_Addr + temp0 + 1] = DCPDU_Modbus_Reg[temp0 + Mb_Dbuff_P1Output_Addr + 3] >> 16;
+				Eeprom_Rbuf[ERom_TotalWh1_Addr + temp0 + 2] = DCPDU_Modbus_Reg[temp0 + Mb_Dbuff_P1Output_Addr + 3] >> 8;
+				Eeprom_Rbuf[ERom_TotalWh1_Addr + temp0 + 3] = DCPDU_Modbus_Reg[temp0 + Mb_Dbuff_P1Output_Addr + 3];
+				AT24CxxWrite(ERom_TotalWh1_Addr + temp0,(Eeprom_Rbuf + ERom_TotalWh1_Addr + temp0),4);
 			}
 		}
 		if(adc_data_ok_flag)//读到ADC数据,然后进行处理。

Разница между файлами не показана из-за своего большого размера
+ 543 - 514
control/PDU-DC/App/Main/Main.h


+ 198 - 193
control/PDU-DC/App/ReadEeprom/ReadEeprom.c

@@ -1,193 +1,198 @@
-/*********************************************************************************************************
-* 模块名称: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;
-		
-		
-		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);
-		}
-		
-		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_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_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_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];
-}
-
-/*********************************************************************************************************
-*                                              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);
-}
-
+/*********************************************************************************************************
+* 模块名称: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);
+		}
+		
+		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_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_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_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];
+}
+
+/*********************************************************************************************************
+*                                              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);
+}
+