Bladeren bron

安德森4路控制板,阈值使能检测,阈值超限动作零线同步!!!,更改耗电量清除功能。

liyi 2 jaren geleden
bovenliggende
commit
d503e0983d

+ 4 - 5
control/PDU-Triphasic/App/Hlw8110/Hlw8110.c

@@ -111,8 +111,8 @@ extern AC3PPDU_RELAY_Para_Reg AC3PPDU_RL_time[Output_ChN_default + 2];//
 extern AC_Output_struct_Reg  AC3PPDU_Output[Output_ChN_default + 2]; 
 
 extern uint32_t AC3PPDU_Modbus_Reg[AC3PPDU_Modbus_Reg_len];
-extern uint32_t Hlw8110_Flash_value[Output_ChN_default + 1];
-uint32_t Hlw8110_Flash_Backup[Output_ChN_default + 1] = {0};
+//extern uint32_t Hlw8110_Flash_value[Output_ChN_default + 1];
+//uint32_t Hlw8110_Flash_Backup[Output_ChN_default + 1] = {0};
 /*---------------------------------------------------------------------------------------------------------*/
 /*---------------------------------------------------------------------------------------------------------*/
 
@@ -1049,9 +1049,8 @@ void read_Hlw8110(uint8_t cs_x)
 	{
 		AC3PPDU_Output[temp0].AC_U = ((F_AC_P / F_AC_PF)-F_AC_PS) *1000;
 	}
-	Hlw8110_Flash_Backup[temp0] = F_AC_E *1000;
-	
-	AC3PPDU_Output[temp0].AC_kWh = Hlw8110_Flash_Backup[temp0] - Hlw8110_Flash_value[temp0];
+
+	AC3PPDU_Output[temp0].AC_kWh = F_AC_E *1000;
 	
 	AC3PPDU_Output[temp0].AC_F = F_AC_LINE_Freq *1000;
 	if(AC3PPDU_Output[temp0].AC_V == 0)

+ 137 - 43
control/PDU-Triphasic/App/Main/Main.c

@@ -88,8 +88,8 @@ uint8_t RL_last_state[Output_ChN_default+1] = {0};
 uint8_t RL_now_state[Output_ChN_default+1] = {0};
 
 uint8_t RL_Func_statu[Output_ChN_default + 1] = {0};
-uint32_t Hlw8110_Flash_value[Output_ChN_default + 1] = {0};
-extern uint32_t Hlw8110_Flash_Backup[Output_ChN_default + 1];
+//uint32_t Hlw8110_Flash_value[Output_ChN_default + 1] = {0};
+//extern uint32_t Hlw8110_Flash_Backup[Output_ChN_default + 1];
 
 
 
@@ -109,7 +109,7 @@ extern uint32_t RL_N_delay_Limit;			// add by liyi
 
 
 
-
+uint8_t reset_hlw8110_flag[Output_ChN_default + 1]={0};
 
 uint32_t hlw8110_base[Output_ChN_default + 1] = {0}; //add by liyi
 uint8_t write_kwh2Eeprom_flag = 0;
@@ -151,10 +151,10 @@ static void CHK_JLINK(void);
 static void MODbus_CMD(void);
 static void MODbus_CMD_New(void);
 static void Read_HT7032_data(uint8_t cs_x);
-static void LimiT_enable_check(uint8_t chx,uint32_t Lt_v);
+void LimiT_enable_check(uint8_t chx,uint32_t Lt_v);
 static void Fault_state_process(uint8_t ch_x);
-static void hlw8110_init(uint8_t ch_x);
-static void channel_reset(uint8_t ch_x);
+void hlw8110_init(uint8_t ch_x);
+void channel_reset(uint8_t ch_x);
 static bool select_channel(uint8_t ch_x);
 /*********************************************************************************************************
 *                                              内部函数实现
@@ -210,21 +210,21 @@ static bool select_channel(uint8_t ch_x)
 }
 
 
-static void hlw8110_init(uint8_t ch_x)
+void hlw8110_init(uint8_t ch_x)
 {
 	if(select_channel(ch_x) == false)
 		return;
 	Init_HLW8110();
 }
 
-static void channel_reset(uint8_t ch_x)
+void channel_reset(uint8_t ch_x)
 {
-	int i = 10;
+	int i = 100;
 	if(select_channel(ch_x) == false)
 		return;
 	Uart_HLW8110_Reset();
+	//delay_ms(10);
 	while(i--);
-	Init_HLW8110();
 }
 
 
@@ -454,20 +454,20 @@ static  void  CHK_JLINK(void)
 	}
 }
 
-static uint8_t _check(uint8_t *sourse,uint8_t *read,int size)
-{
-	for(int i =0; i < size;i++)
-	{
-		if(sourse[i] == read[i])
-		{
-			
-		}else
-		{
-			return 1;
-		}
-	}
-	return 0;
-}
+//static uint8_t _check(uint8_t *sourse,uint8_t *read,int size)
+//{
+//	for(int i =0; i < size;i++)
+//	{
+//		if(sourse[i] == read[i])
+//		{
+//			
+//		}else
+//		{
+//			return 1;
+//		}
+//	}
+//	return 0;
+//}
 //static uint8_t write_buff[10] = {0};
 //static uint8_t read_buff[10] = {0};
 
@@ -585,6 +585,15 @@ static void RL_Over_Func()
 			
 			AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i]  = AC3PPDU_RL_time[i + CH1_out].LT_state;	
 			AC3PPDU_Modbus_Reg[Mb_Dbuff_OUTCH1_ST_Addr + (i % 3)]  = AC3PPDU_RL_time[i + CH1_out].LT_state;
+			
+			AC3PPDU_RL_N_time.LT_state  = AC3PPDU_RL_N_time.LT_state &0xfffffffe;
+			RL_N_now_state = AC3PPDU_RL_N_time.LT_state & 0x01;
+			if(RL_N_now_state != RL_N_last_state)
+			{
+				RL_N_last_state = RL_N_now_state;
+			}
+			DB_Out4_L;
+			AC3PPDU_Modbus_Reg[Mb_Dbuff_CHNLT_ST_Addr] = AC3PPDU_RL_N_time.LT_state | 0xfffffffe;
 			RL_Func_statu[i+1] = 0;
 		}
 	}
@@ -718,7 +727,8 @@ int main(void)
 //			}
 			for(int j = 0 ; j < Hlw8110_CS;j++)
 			{
-				read_Hlw8110(j);
+				if(!reset_hlw8110_flag[j])
+					read_Hlw8110(j);
 			}
 			
 			//输入A相电压,平均
@@ -832,6 +842,7 @@ static void MODbus_CMD_New(void)
 		uint32_t temp_addr;
 		uint32_t base_addr = Modbus_Wr_buff[Wr_eeprom_cnt][1];
 		uint32_t data = Modbus_Wr_buff[Wr_eeprom_cnt][2];
+		uint32_t value = 0;
 		
 		switch(base_addr)
 		{
@@ -851,6 +862,7 @@ static void MODbus_CMD_New(void)
 			case Mb_Dbuff_VLit1_max_Addr ... Mb_Dbuff_VLit9_max_Addr:							//output voltage max threod for 1,2,3,4,5,6,7,8,9 channels
 				{
 					temp_addr = base_addr - Mb_Dbuff_VLit1_max_Addr;
+					value = temp_addr;
 					temp_addr = temp_addr << 2;
 					temp_addr += ERom_VLit1_max_Addr;
 					Eeprom_Rbuf[temp_addr + 0] = data >> 24;
@@ -858,12 +870,18 @@ static void MODbus_CMD_New(void)
 					Eeprom_Rbuf[temp_addr + 2] = data >> 8;
 					Eeprom_Rbuf[temp_addr + 3] = data >> 0;	
 					AC3PPDU_Modbus_Reg[base_addr] = data;
+					if(AC3PPDU_Modbus_Reg[base_addr] < THRESHOULD_JUDGMENT)
+					{
+						AC3PPDU_RL_time[value + CH1_out].LT_state &= (Shield_Vmax_Threshould_Disable);
+						LimiT_enable_check((value + CH1_out),AC3PPDU_RL_time[value + CH1_out].LT_state);
+					}
 					AT24CxxWrite(temp_addr,(Eeprom_Rbuf + temp_addr),4);
 				}
 				break;
 			case Mb_Dbuff_VLit1_min_Addr ... Mb_Dbuff_VLit9_min_Addr:							//output voltage min thred for 1,2,3,4,5,6,7,8,9 channels
 			{
 					temp_addr = base_addr - Mb_Dbuff_VLit1_min_Addr;
+					value = temp_addr;
 					temp_addr = temp_addr << 2;
 					temp_addr += ERom_VLit1_min_Addr;
 					Eeprom_Rbuf[temp_addr + 0] = data >> 24;
@@ -871,12 +889,18 @@ static void MODbus_CMD_New(void)
 					Eeprom_Rbuf[temp_addr + 2] = data >> 8;
 					Eeprom_Rbuf[temp_addr + 3] = data >> 0;	
 					AC3PPDU_Modbus_Reg[base_addr] = data;
+					if(AC3PPDU_Modbus_Reg[base_addr] < THRESHOULD_JUDGMENT)
+					{
+						AC3PPDU_RL_time[value + CH1_out].LT_state &= (Shield_Vmin_Threshould_Disable);
+						LimiT_enable_check((value + CH1_out),AC3PPDU_RL_time[value + CH1_out].LT_state);
+					}
 					AT24CxxWrite(temp_addr,(Eeprom_Rbuf + temp_addr),4);
 			}
 				break;
 			case Mb_Dbuff_ILit1_max_Addr ... Mb_Dbuff_ILit9_max_Addr:							// output current max throud for 1,2,3,4,5,6,7,8,9 channels
 			{
 					temp_addr = base_addr - Mb_Dbuff_ILit1_max_Addr;
+					value = temp_addr;
 					temp_addr = temp_addr << 2;
 					temp_addr += ERom_ILit1_max_Addr;
 					Eeprom_Rbuf[temp_addr + 0] = data >> 24;
@@ -884,12 +908,18 @@ static void MODbus_CMD_New(void)
 					Eeprom_Rbuf[temp_addr + 2] = data >> 8;
 					Eeprom_Rbuf[temp_addr + 3] = data >> 0;	
 					AC3PPDU_Modbus_Reg[base_addr] = data;
+					if(AC3PPDU_Modbus_Reg[base_addr] < THRESHOULD_JUDGMENT)
+					{
+						AC3PPDU_RL_time[value + CH1_out].LT_state &= (Shield_Imax_Threshould_Disable);
+						LimiT_enable_check((value + CH1_out),AC3PPDU_RL_time[value + CH1_out].LT_state);
+					}
 					AT24CxxWrite(temp_addr,(Eeprom_Rbuf + temp_addr),4);
 			}
 				break;
 			case Mb_Dbuff_WLit1_max_Addr ... Mb_Dbuff_WLit9_max_Addr:							//output power max .....
 			{
 					temp_addr = base_addr - Mb_Dbuff_WLit1_max_Addr;
+					value = temp_addr;
 					temp_addr = temp_addr << 2;
 					temp_addr += ERom_WLit1_max_Addr;
 					Eeprom_Rbuf[temp_addr + 0] = data >> 24;
@@ -897,12 +927,18 @@ static void MODbus_CMD_New(void)
 					Eeprom_Rbuf[temp_addr + 2] = data >> 8;
 					Eeprom_Rbuf[temp_addr + 3] = data >> 0;	
 					AC3PPDU_Modbus_Reg[base_addr] = data;
+					if(AC3PPDU_Modbus_Reg[base_addr] < THRESHOULD_JUDGMENT)
+					{
+						AC3PPDU_RL_time[value + CH1_out].LT_state &= (Shield_Wmax_Threshould_Disable);
+						LimiT_enable_check((value + CH1_out),AC3PPDU_RL_time[value + CH1_out].LT_state);
+					}
 					AT24CxxWrite(temp_addr,(Eeprom_Rbuf + temp_addr),4);
 			}
 				break;
 			case Mb_Dbuff_kWhLit1_max_Addr ... Mb_Dbuff_kWhLit9_max_Addr:					//output customers max .....
 			{
 						temp_addr = base_addr - Mb_Dbuff_kWhLit1_max_Addr;
+						value = temp_addr;
 						temp_addr = temp_addr << 2;
 						temp_addr += ERom_kWhLit1_max_Addr;
 						Eeprom_Rbuf[temp_addr + 0] = data >> 24;
@@ -910,6 +946,12 @@ static void MODbus_CMD_New(void)
 						Eeprom_Rbuf[temp_addr + 2] = data >> 8;
 						Eeprom_Rbuf[temp_addr + 3] = data >> 0;	
 						AC3PPDU_Modbus_Reg[base_addr] = data;
+						if(AC3PPDU_Modbus_Reg[base_addr] < THRESHOULD_JUDGMENT)
+						{
+							AC3PPDU_RL_time[value + CH1_out].LT_state &= (Shield_Kwhmax_Threshould_Disable);
+							LimiT_enable_check((value + CH1_out),AC3PPDU_RL_time[value + CH1_out].LT_state);
+						}
+				
 						AT24CxxWrite(temp_addr,(Eeprom_Rbuf + temp_addr),4);
 			}
 				break;
@@ -960,6 +1002,27 @@ static void MODbus_CMD_New(void)
 				if(temp_addr == 9) {					//Ch N
 					AC3PPDU_RL_N_time.LT_state = data;
 				}else{
+					if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+					{
+						data &= (Shield_Vmax_Threshould_Disable);
+					}
+					if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+					{
+						data &= (Shield_Vmin_Threshould_Disable);
+					}
+					if(AC3PPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+					{
+						data &= (Shield_Imax_Threshould_Disable);
+					}
+					if(AC3PPDU_Modbus_Reg[Mb_Dbuff_WLit1_max_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+					{
+						data &= (Shield_Wmax_Threshould_Disable);
+					}
+					if(AC3PPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+					{
+						data &= (Shield_Kwhmax_Threshould_Disable);
+					}
+					
 					AC3PPDU_RL_time[temp_addr + CH1_out].LT_state = data;
 					LimiT_enable_check((temp_addr + CH1_out),AC3PPDU_RL_time[temp_addr + CH1_out].LT_state);
 				}
@@ -974,6 +1037,26 @@ static void MODbus_CMD_New(void)
 				temp_addr = base_addr - Mb_Dbuff_OUTCH1_ST_Addr;
 				OutUnit_control_flag[temp_addr] = 1;
 				temp_addr *= 3;
+				if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+				{
+					data &= (Shield_Vmax_Threshould_Disable);
+				}
+				if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+				{
+					data &= (Shield_Vmin_Threshould_Disable);
+				}
+				if(AC3PPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+				{
+					data &= (Shield_Imax_Threshould_Disable);
+				}
+				if(AC3PPDU_Modbus_Reg[Mb_Dbuff_WLit1_max_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+				{
+					data &= (Shield_Wmax_Threshould_Disable);
+				}
+				if(AC3PPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+				{
+					data &= (Shield_Kwhmax_Threshould_Disable);
+				}
 				
 				AC3PPDU_RL_time[temp_addr + CH1_out].LT_state = data;
 				AC3PPDU_RL_time[temp_addr + CH2_out].LT_state = data;
@@ -1068,34 +1151,45 @@ static void MODbus_CMD_New(void)
 				{
 					
 					temp_addr = base_addr - Mb_Dbuff_Clear_Chn1_Consumer;
+					uint8_t value = temp_addr;
 					
-					Hlw8110_Flash_value[temp_addr+CH1_out] = AC3PPDU_Output[temp_addr+CH1_out].AC_kWh;
-					Hlw8110_Flash_value[temp_addr+CH1_out] = Hlw8110_Flash_Backup[temp_addr+CH1_out];
-					hlw8110_base[temp_addr+CH1_out] = 0;
+					//Hlw8110_Flash_value[temp_addr+CH1_out] = AC3PPDU_Output[temp_addr+CH1_out].AC_kWh;
+					//Hlw8110_Flash_value[temp_addr+CH1_out] = Hlw8110_Flash_Backup[temp_addr+CH1_out];
+					//hlw8110_base[temp_addr+CH1_out] = 0;
 					temp_addr = temp_addr << 2;
 					temp_addr += ERom_TotalWh1_Addr;
-					Eeprom_Rbuf[temp_addr+0] = 0;
-					Eeprom_Rbuf[temp_addr+1] = 0;
-					Eeprom_Rbuf[temp_addr+2] = 0;
-					Eeprom_Rbuf[temp_addr+3] = 0;
-					//channel_reset(temp_addr+CH1_out);
+//					Eeprom_Rbuf[temp_addr+0] = 0;
+//					Eeprom_Rbuf[temp_addr+1] = 0;
+//					Eeprom_Rbuf[temp_addr+2] = 0;
+//					Eeprom_Rbuf[temp_addr+3] = 0;
+//					channel_reset(temp_addr+CH1_out);
+//					InitUART1(9600);
+					hlw8110_init(value+CH1_out);
+					reset_hlw8110_flag[value] = 0;
 					AT24CxxWrite(temp_addr,Eeprom_Rbuf+temp_addr,4);
 				}
 			}
 			case Mb_Dbuff_Clear_Chnall_Consumer:
 			{
 				if(data){
+//					for(i = 0; i < Output_ChN_default ;i++)
+//					{
+//						int temp = i << 2;
+//						//Hlw8110_Flash_value[i+CH1_out] = AC3PPDU_Output[i+CH1_out].AC_kWh;
+//						//Hlw8110_Flash_value[i+CH1_out] = Hlw8110_Flash_Backup[i+CH1_out];
+//						Eeprom_Rbuf[ERom_TotalWh1_Addr+temp+0] = 0;
+//						Eeprom_Rbuf[ERom_TotalWh1_Addr+temp+1] = 0;
+//						Eeprom_Rbuf[ERom_TotalWh1_Addr+temp+2] = 0;
+//						Eeprom_Rbuf[ERom_TotalWh1_Addr+temp+3] = 0;
+//						hlw8110_base[i+CH1_out] = 0;
+//						channel_reset(i+CH1_out);
+//					}
+//						InitUART1(9600);
+//						//InitCH448F();
 					for(i = 0; i < Output_ChN_default ;i++)
 					{
-						int temp = i << 2;
-						Hlw8110_Flash_value[i+CH1_out] = AC3PPDU_Output[i+CH1_out].AC_kWh;
-						Hlw8110_Flash_value[i+CH1_out] = Hlw8110_Flash_Backup[i+CH1_out];
-						Eeprom_Rbuf[ERom_TotalWh1_Addr+temp+0] = 0;
-						Eeprom_Rbuf[ERom_TotalWh1_Addr+temp+1] = 0;
-						Eeprom_Rbuf[ERom_TotalWh1_Addr+temp+2] = 0;
-						Eeprom_Rbuf[ERom_TotalWh1_Addr+temp+3] = 0;
-						hlw8110_base[i+CH1_out] = 0;
-						//channel_reset(i+CH1_out);
+						hlw8110_init(i+CH1_out);
+						reset_hlw8110_flag[i] = 0;
 					}
 					AT24CxxWrite(ERom_TotalWh1_Addr,(Eeprom_Rbuf + ERom_TotalWh1_Addr),4*Output_ChN_default);
 				}
@@ -1401,7 +1495,7 @@ static void MODbus_CMD(void)
 * 创建日期:2024年05月06日
 * 注    意:
 *********************************************************************************************************/
-static void LimiT_enable_check(uint8_t ch_x,uint32_t Lt_v)
+void LimiT_enable_check(uint8_t ch_x,uint32_t Lt_v)
 {
 	uint16_t temp0 = 0;
 	temp0 = Lt_v >> 1;

+ 17 - 3
control/PDU-Triphasic/App/Main/Main.h

@@ -999,8 +999,8 @@
 #define RELAY_offtime_max       99
 #define AC3PPDU_Device_ID       0x0008
 #define Uart0_Baud              115200
-#define Mb_Wcmd_Width           16
-#define Mb_Wcmd_len             8
+#define Mb_Wcmd_Width           36
+#define Mb_Wcmd_len             4
 
 #define CH_in                   0
 #define CH1_out                 1
@@ -1074,7 +1074,7 @@
 
 #define AC3PPDU_Lack_Voltage			(30000)
 
-
+#define THRESHOULD_JUDGMENT    		(50)
 
 
 
@@ -1084,6 +1084,20 @@
 #define AC3PPDU_Over_P_Max_Func_enable 0x00000008
 #define AC3PPDU_Over_C_Max_Func_enable 0x00000010
 
+#define Default_Consum_Max   (4000000000)
+#define Default_Voltage_Max  (1000000000)
+#define Default_Current_Max  (1000000000)
+#define Default_Power_Max		 (1000000000)
+
+
+
+
+#define Shield_Vmax_Threshould_Disable   (0xfffffffD)
+#define Shield_Vmin_Threshould_Disable   (0xfffffffB)
+#define Shield_Imax_Threshould_Disable   (0xfffffff7)
+#define Shield_Wmax_Threshould_Disable   (0xffffffEF)
+#define Shield_Kwhmax_Threshould_Disable (0xffffffDF)
+
 
 
 

+ 329 - 1
control/PDU-Triphasic/App/Modbus/BARE/port/port.c

@@ -28,6 +28,7 @@
 #include "ReadEeprom.h"
 #include "gd32e230x_conf.h"
 #include "Timer.h"
+#include "Uart1.h"
 /* ----------------------- Defines ------------------------------------------*/
 //输入寄存器
 #define REG_INPUT_START  3000
@@ -71,7 +72,6 @@ extern uint8_t RL_now_state;
 extern uint8_t AC3PPDU_SlaveAddress;
 extern uint32_t AC3PPDU_Modbus_Reg[AC3PPDU_Modbus_Reg_len];
 
-extern AC3PPDU_RELAY_Para_Reg AC3PPDU_RL_time;
 /****************************************************************************
 * 名	  称:eMBRegInputCB
 * 功    能:读取输入寄存器,对应功能码是 04 eMBFuncReadInputRegister
@@ -127,6 +127,16 @@ eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs )
 unsigned char WusNRegs;
 unsigned int WiRegIndex;
 
+extern void LimiT_enable_check(uint8_t ch_x,uint32_t Lt_v);
+extern AC3PPDU_RELAY_Para_Reg AC3PPDU_RL_time[Output_ChN_default + 2];
+extern AC3PPDU_RELAY_Para_Reg AC3PPDU_RL_N_time;
+extern uint8_t OutUnit_control_flag[Output_ChN_default +1];
+extern uint32_t hlw8110_base[Output_ChN_default + 1];
+extern void channel_reset(uint8_t ch_x);
+extern void hlw8110_init(uint8_t ch_x);
+
+extern uint8_t reset_hlw8110_flag[Output_ChN_default + 1];
+
 eMBErrorCode
 eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode )
 {
@@ -198,11 +208,329 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 						memcpy((Modbus_Wr_buff[cmd_cnt]+2),&usRegHoldBuf[WiRegIndex],WusNRegs * 2);
 						Modbus_Wr_buff[cmd_cnt][0] = 1;
 						Modbus_Wr_buff[cmd_cnt][1] = T_cnt;
+						uint32_t temp_addr;
+						uint32_t base_addr = Modbus_Wr_buff[cmd_cnt][1];
+						uint32_t data = Modbus_Wr_buff[cmd_cnt][2];
+						
+						switch(T_cnt)
+						{
+//								case Mb_Dbuff_ViLit_max_Addr ... Mb_Dbuff_kWhiLit_max_Addr:						//input votage max votage min current power coustermer add by liyi
+//								{
+//									temp_addr = base_addr - Mb_Dbuff_ViLit_max_Addr;
+//									temp_addr = temp_addr << 2;
+//									temp_addr += ERom_ViLit_max_Addr;
+//									Eeprom_Rbuf[temp_addr + 0] = data >> 24;
+//									Eeprom_Rbuf[temp_addr + 1] = data >> 16;
+//									Eeprom_Rbuf[temp_addr + 2] = data >> 8;
+//									Eeprom_Rbuf[temp_addr + 3] = data >> 0;	
+//									AC3PPDU_Modbus_Reg[base_addr] = data;
+//								}
+//								break;
+//								case Mb_Dbuff_VLit1_max_Addr ... Mb_Dbuff_VLit9_max_Addr:							//output voltage max threod for 1,2,3,4,5,6,7,8,9 channels
+//								{
+//									temp_addr = base_addr - Mb_Dbuff_ViLit_max_Addr;
+			
+//									temp_addr = temp_addr << 2;
+//									temp_addr += ERom_VLit1_max_Addr;
+//									Eeprom_Rbuf[temp_addr + 0] = data >> 24;
+//									Eeprom_Rbuf[temp_addr + 1] = data >> 16;
+//									Eeprom_Rbuf[temp_addr + 2] = data >> 8;
+//									Eeprom_Rbuf[temp_addr + 3] = data >> 0;	
+//									AC3PPDU_Modbus_Reg[base_addr] = data;
+//									if(AC3PPDU_Modbus_Reg[base_addr] < THRESHOULD_JUDGMENT)
+//									{
+//										uint32_t value = base_addr - Mb_Dbuff_VLit1_max_Addr;
+//										AC3PPDU_RL_time[value + CH1_out].LT_state &= (Shield_Vmax_Threshould_Disable);
+//										LimiT_enable_check((value + CH1_out),AC3PPDU_RL_time[value + CH1_out].LT_state);
+//									}
+//								}
+//								break;
+//								case Mb_Dbuff_VLit1_min_Addr ... Mb_Dbuff_VLit9_min_Addr:							//output voltage min thred for 1,2,3,4,5,6,7,8,9 channels
+//								{
+//										temp_addr = base_addr - Mb_Dbuff_VLit1_min_Addr;
+//										temp_addr = temp_addr << 2;
+//										temp_addr += ERom_VLit1_min_Addr;
+//										Eeprom_Rbuf[temp_addr + 0] = data >> 24;
+//										Eeprom_Rbuf[temp_addr + 1] = data >> 16;
+//										Eeprom_Rbuf[temp_addr + 2] = data >> 8;
+//										Eeprom_Rbuf[temp_addr + 3] = data >> 0;	
+//										AC3PPDU_Modbus_Reg[base_addr] = data;
+//										if(AC3PPDU_Modbus_Reg[base_addr] < THRESHOULD_JUDGMENT)
+//										{
+//											uint32_t value = base_addr - Mb_Dbuff_VLit1_min_Addr;
+//											AC3PPDU_RL_time[value + CH1_out].LT_state &= (Shield_Vmin_Threshould_Disable);
+//											LimiT_enable_check((value + CH1_out),AC3PPDU_RL_time[value + CH1_out].LT_state);
+//										}
+//								}
+//								break;
+//								case Mb_Dbuff_ILit1_max_Addr ... Mb_Dbuff_ILit9_max_Addr:							// output current max throud for 1,2,3,4,5,6,7,8,9 channels
+//								{
+//										temp_addr = base_addr - Mb_Dbuff_ILit1_max_Addr;
+//										temp_addr = temp_addr << 2;
+//										temp_addr += ERom_ILit1_max_Addr;
+//										Eeprom_Rbuf[temp_addr + 0] = data >> 24;
+//										Eeprom_Rbuf[temp_addr + 1] = data >> 16;
+//										Eeprom_Rbuf[temp_addr + 2] = data >> 8;
+//										Eeprom_Rbuf[temp_addr + 3] = data >> 0;	
+//										AC3PPDU_Modbus_Reg[base_addr] = data;
+//										if(AC3PPDU_Modbus_Reg[base_addr] < THRESHOULD_JUDGMENT)
+//										{
+//											uint32_t value = base_addr - Mb_Dbuff_ILit1_max_Addr;
+//											AC3PPDU_RL_time[value + CH1_out].LT_state &= (Shield_Imax_Threshould_Disable);
+//											LimiT_enable_check((value + CH1_out),AC3PPDU_RL_time[value + CH1_out].LT_state);
+//										}
+//								}
+//								break;
+//								case Mb_Dbuff_WLit1_max_Addr ... Mb_Dbuff_WLit9_max_Addr:	
+//								{
+//									temp_addr = base_addr - Mb_Dbuff_WLit1_max_Addr;
+////									value = temp_addr;
+//									temp_addr = temp_addr << 2;
+//									temp_addr += ERom_WLit1_max_Addr;
+//									Eeprom_Rbuf[temp_addr + 0] = data >> 24;
+//									Eeprom_Rbuf[temp_addr + 1] = data >> 16;
+//									Eeprom_Rbuf[temp_addr + 2] = data >> 8;
+//									Eeprom_Rbuf[temp_addr + 3] = data >> 0;	
+//									AC3PPDU_Modbus_Reg[base_addr] = data;
+//									if(AC3PPDU_Modbus_Reg[base_addr] < THRESHOULD_JUDGMENT)
+//									{
+//										uint32_t value = base_addr - Mb_Dbuff_WLit1_max_Addr;
+//										AC3PPDU_RL_time[value + CH1_out].LT_state &= (Shield_Wmax_Threshould_Disable);
+//										LimiT_enable_check((value + CH1_out),AC3PPDU_RL_time[value + CH1_out].LT_state);
+//									}
+//								}
+//								break;
+//								case Mb_Dbuff_kWhLit1_max_Addr ... Mb_Dbuff_kWhLit9_max_Addr:	
+//								{
+//									temp_addr = base_addr - Mb_Dbuff_kWhLit1_max_Addr;
+//									//value = temp_addr;
+//									temp_addr = temp_addr << 2;
+//									temp_addr += ERom_kWhLit1_max_Addr;
+//									Eeprom_Rbuf[temp_addr + 0] = data >> 24;
+//									Eeprom_Rbuf[temp_addr + 1] = data >> 16;
+//									Eeprom_Rbuf[temp_addr + 2] = data >> 8;
+//									Eeprom_Rbuf[temp_addr + 3] = data >> 0;	
+//									AC3PPDU_Modbus_Reg[base_addr] = data;
+//									if(AC3PPDU_Modbus_Reg[base_addr] < THRESHOULD_JUDGMENT)
+//									{
+//										uint32_t value = base_addr - Mb_Dbuff_kWhLit1_max_Addr;
+//										AC3PPDU_RL_time[value + CH1_out].LT_state &= (Shield_Wmax_Threshould_Disable);
+//										LimiT_enable_check((value + CH1_out),AC3PPDU_RL_time[value + CH1_out].LT_state);
+//									}
+//								}
+//								break;
+//								case Mb_Dbuff_RL_Allon_Addr:	
+//								{
+//									//RL_Allon_flag = true;
+//									for(int i = 0;i < Output_ChN_default;i++)
+//									{
+//										temp_addr = i << 1; 
+//										Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] | 0x41;
+//										AC3PPDU_RL_time[i + CH1_out].LT_state = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr];
+//									}	
+//									Eeprom_Rbuf[ERom_CHNLT_ST_Addr] = Eeprom_Rbuf[ERom_CHNLT_ST_Addr] | 0x41;
+//									AC3PPDU_RL_N_time.LT_state = Eeprom_Rbuf[ERom_CHNLT_ST_Addr];
+//								}
+//								break;
+//								case Mb_Dbuff_RL_Alloff_Addr:	
+//								{
+//									//RL_Alloff_flag = true;
+//									for(int i = 0;i < Output_ChN_default;i++)
+//									{
+//										temp_addr = i << 1;
+//										Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] | 0x80;
+//										Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr] & 0xfe;
+//										AC3PPDU_RL_time[i + CH1_out].LT_state = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp_addr];
+//									}
+//									Eeprom_Rbuf[ERom_CHNLT_ST_Addr] = Eeprom_Rbuf[ERom_CHNLT_ST_Addr] | 0x80;
+//									Eeprom_Rbuf[ERom_CHNLT_ST_Addr] = Eeprom_Rbuf[ERom_CHNLT_ST_Addr] & 0xfe;
+//									AC3PPDU_RL_N_time.LT_state = Eeprom_Rbuf[ERom_CHNLT_ST_Addr];
+//								}
+//								break;
+//								case Mb_Dbuff_LT_ST_Addr:																							//set input status
+//								{
+//									AC3PPDU_RL_time[CH_in].LT_state = data;
+//									Eeprom_Rbuf[ERom_LT_ST_Addr] = data;
+//									AC3PPDU_Modbus_Reg[base_addr] = data;
+//									LimiT_enable_check(CH_in,AC3PPDU_RL_time[CH_in].LT_state);
+//								}
+//								break;
+//								case Mb_Dbuff_CH1LT_ST_Addr ...  Mb_Dbuff_CHNLT_ST_Addr:							//set output relay statues
+//								{
+//									temp_addr = base_addr - Mb_Dbuff_CH1LT_ST_Addr;
+//									if(temp_addr == 9) {					//Ch N
+//										AC3PPDU_RL_N_time.LT_state = data;
+//									}else{
+//										if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+//										{
+//											data &= (Shield_Vmax_Threshould_Disable);
+//										}
+//										if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+//										{
+//											data &= (Shield_Vmin_Threshould_Disable);
+//										}
+//										if(AC3PPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+//										{
+//											data &= (Shield_Imax_Threshould_Disable);
+//										}
+//										if(AC3PPDU_Modbus_Reg[Mb_Dbuff_WLit1_max_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+//										{
+//											data &= (Shield_Wmax_Threshould_Disable);
+//										}
+//										if(AC3PPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+//										{
+//											data &= (Shield_Kwhmax_Threshould_Disable);
+//										}
+//										
+//										AC3PPDU_RL_time[temp_addr + CH1_out].LT_state = data;
+//										LimiT_enable_check((temp_addr + CH1_out),AC3PPDU_RL_time[temp_addr + CH1_out].LT_state);
+//									}
+//									temp_addr = temp_addr << 1;
+//									temp_addr += ERom_CH1LT_ST_Addr;
+//									Eeprom_Rbuf[temp_addr] = data;
+//								}
+//								break;
+//								case Mb_Dbuff_OUTCH1_ST_Addr ... Mb_Dbuff_OUTCH3_ST_Addr:							//set output channel relay's status
+//								{
+//									temp_addr = base_addr - Mb_Dbuff_OUTCH1_ST_Addr;
+//									OutUnit_control_flag[temp_addr] = 1;
+//									temp_addr *= 3;
+//									if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+//									{
+//										data &= (Shield_Vmax_Threshould_Disable);
+//									}
+//									if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+//									{
+//										data &= (Shield_Vmin_Threshould_Disable);
+//									}
+//									if(AC3PPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+//									{
+//										data &= (Shield_Imax_Threshould_Disable);
+//									}
+//									if(AC3PPDU_Modbus_Reg[Mb_Dbuff_WLit1_max_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+//									{
+//										data &= (Shield_Wmax_Threshould_Disable);
+//									}
+//									if(AC3PPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr + temp_addr] < THRESHOULD_JUDGMENT)
+//									{
+//										data &= (Shield_Kwhmax_Threshould_Disable);
+//									}
+//									
+//									AC3PPDU_RL_time[temp_addr + CH1_out].LT_state = data;
+//									AC3PPDU_RL_time[temp_addr + CH2_out].LT_state = data;
+//									AC3PPDU_RL_time[temp_addr + CH3_out].LT_state = data;
+//									
+//									temp_addr = temp_addr << 1;
+//									Eeprom_Rbuf[temp_addr + ERom_CH1LT_ST_Addr] = data;
+//									Eeprom_Rbuf[temp_addr + ERom_CH2LT_ST_Addr] = data;
+//									Eeprom_Rbuf[temp_addr + ERom_CH3LT_ST_Addr] = data;
+//									
+//									LimiT_enable_check((temp_addr + CH1_out),AC3PPDU_RL_time[temp_addr + CH1_out].LT_state);
+//									LimiT_enable_check((temp_addr + CH2_out),AC3PPDU_RL_time[temp_addr + CH2_out].LT_state);
+//									LimiT_enable_check((temp_addr + CH3_out),AC3PPDU_RL_time[temp_addr + CH3_out].LT_state);
+//									
+//								}
+//								break;
+//								case Mb_Dbuff_RL_Ton1_Addr ... Mb_Dbuff_RL_TonN_Addr:									//set on status delay for 1,2,3,4,5,6,7,8,9,N channels
+//								{
+//									temp_addr = base_addr - Mb_Dbuff_RL_Ton1_Addr;
+//									if(temp_addr == 9){				//Ch   N   add by liyi
+//										AC3PPDU_RL_N_time.RL_ontime = data;
+//									}else
+//									{
+//										AC3PPDU_RL_time[temp_addr + CH1_out].RL_ontime = data;
+//									}
+//									AC3PPDU_RL_N_time.RL_ontime = data;
+//									temp_addr += ERom_RL_Ton1_Addr;
+//									
+//									Eeprom_Rbuf[temp_addr] = data;
+//									Eeprom_Rbuf[ERom_RL_TonN_Addr] = data;
+//									AC3PPDU_Modbus_Reg[base_addr] = Eeprom_Rbuf[temp_addr];
+//									AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_TonN_Addr] = Eeprom_Rbuf[ERom_RL_TonN_Addr];
+//								}
+//								break;
+//								case Mb_Dbuff_RL_Toff1_Addr ... Mb_Dbuff_RL_ToffN_Addr:               //set off status delay for 1,2,3,4,5,6,7,8,9,N channels
+//								{
+//									temp_addr = base_addr - Mb_Dbuff_RL_Toff1_Addr;
+//									if(temp_addr == 9){
+//										AC3PPDU_RL_N_time.RL_offtime = data;
+//									}else {
+//										AC3PPDU_RL_time[temp_addr + CH1_out].RL_offtime = data;
+//									}
+//									AC3PPDU_RL_N_time.RL_offtime = data;
+//									temp_addr += ERom_RL_Toff1_Addr;
+//				
+//									Eeprom_Rbuf[temp_addr] = data;
+//									Eeprom_Rbuf[ERom_RL_ToffN_Addr] = data;
+//									AC3PPDU_Modbus_Reg[base_addr] = Eeprom_Rbuf[temp_addr];
+//									AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_ToffN_Addr] = Eeprom_Rbuf[ERom_RL_ToffN_Addr];
+//								}
+//								break;
+//								case Mb_Dbuff_RL_Over_Ch1_Func ... Mb_Dbuff_RL_Over_Ch9_Func:					//threod over limit operation
+//								{
+//									temp_addr = base_addr - Mb_Dbuff_RL_Over_Ch1_Func;
+//									temp_addr += ERom_RL_Over_Ch1_Addr;
+//									AC3PPDU_Modbus_Reg[base_addr] = data;
+//									Eeprom_Rbuf[temp_addr] = data;
+//								}
+//								break;
+								case Mb_Dbuff_Clear_Chn1_Consumer ... Mb_Dbuff_Clear_Chn9_Consumer:
+								{
+									if(data)
+									{
+										temp_addr = base_addr - Mb_Dbuff_Clear_Chn1_Consumer;
+										int value = temp_addr;
+										//Hlw8110_Flash_value[temp_addr+CH1_out] = AC3PPDU_Output[temp_addr+CH1_out].AC_kWh;
+										//Hlw8110_Flash_value[temp_addr+CH1_out] = Hlw8110_Flash_Backup[temp_addr+CH1_out];
+										hlw8110_base[temp_addr+CH1_out] = 0;
+										temp_addr = temp_addr << 2;
+										temp_addr += ERom_TotalWh1_Addr;
+										Eeprom_Rbuf[temp_addr+0] = 0;
+										Eeprom_Rbuf[temp_addr+1] = 0;
+										Eeprom_Rbuf[temp_addr+2] = 0;
+										Eeprom_Rbuf[temp_addr+3] = 0;
+										channel_reset(value+CH1_out);
+										InitUART1(9600);
+										reset_hlw8110_flag[value] =1;
+										//hlw8110_init(value+CH1_out);
+									}
+								}
+								break;
+								case Mb_Dbuff_Clear_Chnall_Consumer:
+								{
+									if(data)
+									{
+										for(int i = 0; i < Output_ChN_default ;i++)
+										{
+											int temp = i << 2;
+											//Hlw8110_Flash_value[i+CH1_out] = AC3PPDU_Output[i+CH1_out].AC_kWh;
+											//Hlw8110_Flash_value[i+CH1_out] = Hlw8110_Flash_Backup[i+CH1_out];
+											Eeprom_Rbuf[ERom_TotalWh1_Addr+temp+0] = 0;
+											Eeprom_Rbuf[ERom_TotalWh1_Addr+temp+1] = 0;
+											Eeprom_Rbuf[ERom_TotalWh1_Addr+temp+2] = 0;
+											Eeprom_Rbuf[ERom_TotalWh1_Addr+temp+3] = 0;
+											hlw8110_base[i+CH1_out] = 0;
+											channel_reset(i+CH1_out);
+											reset_hlw8110_flag[i] = 0;
+										}
+										InitUART1(9600);
+											//InitCH448F();
+//										for(int i = 0; i < Output_ChN_default ;i++)
+//											hlw8110_init(i+CH1_out);
+									}
+								}
+								break;
+								default:
+								break;
+						}
+						
+						
 						cmd_cnt++;
 						if(cmd_cnt >= Mb_Wcmd_Width)
 						{
 							cmd_cnt = 0;
 						}
+						
 					}
 				}
 				else//错误

+ 34 - 10
control/PDU-Triphasic/App/ReadEeprom/ReadEeprom.c

@@ -117,25 +117,25 @@ void ReadEeprom(void)
 			AC3PPDU_Modbus_Reg[Mb_Dbuff_WLit1_max_Addr + i] += Eeprom_Rbuf[ERom_WLit1_max_Addr + temp1] << temp0;
 			AC3PPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr + i] += Eeprom_Rbuf[ERom_kWhLit1_max_Addr + temp1] << temp0;
 		}
-		if((AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] < Vin_LTmin_default) || (AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] > Vin_LTmax_default))
+		if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] > Default_Voltage_Max)
 		{
-			AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] = Vin_LTmax_default;
+			AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] = 0;
 		}
-		if((AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] < Vin_LTmin_default) || (AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] > Vin_LTmax_default))
+		if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] > Default_Voltage_Max)
 		{
-			AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] = Vin_LTmin_default;
+			AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] = 0;
 		}
-		if(AC3PPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] > Iin_LTmax_default)
+		if(AC3PPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] > Default_Current_Max)
 		{
-			AC3PPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] = Iin_LTmax_default;
+			AC3PPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] = 0;
 		}
-		if(AC3PPDU_Modbus_Reg[Mb_Dbuff_WLit1_max_Addr + i] > Win_LTmax_default)
+		if(AC3PPDU_Modbus_Reg[Mb_Dbuff_WLit1_max_Addr + i] > Default_Power_Max)
 		{
-			AC3PPDU_Modbus_Reg[Mb_Dbuff_WLit1_max_Addr + i] = Win_LTmax_default;
+			AC3PPDU_Modbus_Reg[Mb_Dbuff_WLit1_max_Addr + i] = 0;
 		}
-		if(AC3PPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr + i] > kWhin_LTmax_default)
+		if(AC3PPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr + i] > AC3MAX_CONSUME)
 		{
-			AC3PPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr + i] = kWhin_LTmax_default;
+			AC3PPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr + i] = 0;
 		}
 	}
 	//¶Á³öÊäÈë״̬ãÐÖµ
@@ -146,6 +146,30 @@ void ReadEeprom(void)
 		temp0 = 2 * i;
 		AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i] = Eeprom_Rbuf[ERom_CH1LT_ST_Addr + temp0];
 	}
+	//check threshoud enable
+	for(i = 0;i < Output_ChN_default;i++)
+	{
+		if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] < THRESHOULD_JUDGMENT)
+		{
+			AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i] &= (Shield_Vmax_Threshould_Disable);
+		}
+		if(AC3PPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] < THRESHOULD_JUDGMENT)
+		{
+			AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i] &= (Shield_Vmin_Threshould_Disable);
+		}
+		if(AC3PPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] < THRESHOULD_JUDGMENT)
+		{
+			AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i] &= (Shield_Imax_Threshould_Disable);
+		}
+		if(AC3PPDU_Modbus_Reg[Mb_Dbuff_WLit1_max_Addr + i] < THRESHOULD_JUDGMENT)
+		{
+			AC3PPDU_Modbus_Reg[Mb_Dbuff_CH1LT_ST_Addr + i] &= (Shield_Wmax_Threshould_Disable);
+		}
+		if(AC3PPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr + i] < THRESHOULD_JUDGMENT)
+		{
+			AC3PPDU_Modbus_Reg[Mb_Dbuff_kWhLit1_max_Addr + i] &= (Shield_Kwhmax_Threshould_Disable);
+		}
+	}
 	//read ChN status 
 	AC3PPDU_Modbus_Reg[Mb_Dbuff_CHNLT_ST_Addr] = Eeprom_Rbuf[ERom_CHNLT_ST_Addr];			//add by liyi