瀏覽代碼

新6路板,耗电量清零,电压显示bug,开关检测集成!!!!

liyi 2 年之前
父節點
當前提交
60a99305ce

+ 13 - 0
control/PDU-AC-New-6/App/Key/Key.c

@@ -63,6 +63,9 @@ static  void  ConfigKeyGPIO(void)
   gpio_mode_set(KEY_3_4_RCU, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY3);   //配置PA12为上拉输入K3
 	gpio_mode_set(KEY_3_4_RCU, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY4);   //配置PA12为上拉输入K4
 	gpio_mode_set(KEY_5_RCU, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY5);   //配置PB10为上拉输入K5
+	
+	gpio_mode_set(DERECTION_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, DERECTION_IO_1);
+	gpio_mode_set(DERECTION_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, DERECTION_IO_2);
 }
 
 /*********************************************************************************************************
@@ -120,3 +123,13 @@ unsigned char ReadKeyValue(void)
 	SlaveAddress=(~((s_arrKeyDownLevel[0]<<0)|(s_arrKeyDownLevel[1]<<1)|(s_arrKeyDownLevel[2]<<2)|(s_arrKeyDownLevel[3]<<3)|s_arrKeyDownLevel[4]<<4))&0x1f;
 	return SlaveAddress;
 }
+
+unsigned char get_detection()
+{
+	uint8_t value = 0;
+	if(gpio_input_bit_get(DERECTION_GPIO,DERECTION_IO_1)==0)
+		value |=(1<<0);
+	if(gpio_input_bit_get(DERECTION_GPIO,DERECTION_IO_2)==0)
+		value |=(1<<1);
+	return value;
+}

+ 8 - 0
control/PDU-AC-New-6/App/Key/Key.h

@@ -35,6 +35,11 @@
 #define KEY4 GPIO_PIN_8
 #define KEY5 GPIO_PIN_10
 
+#define DERECTION_GPIO   GPIOB
+#define DERECTION_IO_1 GPIO_PIN_8
+#define DERECTION_IO_2 GPIO_PIN_9
+
+
 #define KEY_ON 0
 #define KEY_OFF 1
 
@@ -51,4 +56,7 @@
 void  InitKey(void);                                                                     //初始化Key模块
 unsigned char ScanKey(unsigned int gpio_periph,unsigned int pin);																 //
 unsigned char ReadKeyValue(void);																												 //上电读取一次modbus的地址
+
+unsigned char get_detection();
+
 #endif

+ 133 - 4
control/PDU-AC-New-6/App/Main/Main.c

@@ -73,6 +73,9 @@ EE_ACDC_Coef_struct_ReadReg EE_ACDC_Coef_ReadReg[RelaySlaveChaNum];
 
 EE_ACDC_Total_Consumption  EE_ACDC_Total_Consum_Read_Reg[RelaySlaveChaNum];
 
+ACDC_Consumer_Clear EE_ACDC_Consumer_Clear[RelaySlaveChaNum] = {0};
+
+
 ACDC_All_Chn_Consumption ACDC_Total_All_Chn_Read_Reg;
 
 ACDC_Over_Func_WriteReg 	ACDC_Over_WriteReg[RelaySlaveChaNum];  
@@ -89,6 +92,8 @@ uint32_t Hlw8110_Flash_value[RelaySlaveChaNum] = {0};
 
 uint32_t write_2_minute_flag = 0;
 
+uint16_t detection_value = 0;
+
 
 unsigned short int Sort_Onbuf[RelaySlaveChaNum];
 unsigned short int Sort_Offbuf[RelaySlaveChaNum];
@@ -119,6 +124,11 @@ static  void  Proc1SecTask(void);   			//1s
 
 static void over_RelayState(void);
 
+
+
+
+uint8_t consumer_clear_flag = 0;
+
 /*********************************************************************************************************
 *                                              内部函数实现
 *********************************************************************************************************/
@@ -136,6 +146,104 @@ static  void  InitSoftware(void)
 	eMBInit(MB_RTU, RelaySlaveAddress, 0, Uart0_Baud, MB_PAR_NONE);		// 初始化modbus为RTU方式,地址RelaySlaveAddress, 波特率Uart0_Baud,无校验
 	eMBEnable();																											// 使能modbus协议栈
 }
+static bool select_channel(uint8_t ch_x)
+{
+	switch(ch_x)
+	{
+		case 5:
+		{
+			SEL0_H;
+			SEL1_L;
+			SEL2_L;
+		}
+			break;
+		case 4:
+		{
+			SEL0_L;
+			SEL1_L;
+			SEL2_L;			
+		}
+			break;
+		case 3:
+		{
+			SEL0_H;
+			SEL1_H;				
+			SEL2_H;
+		}
+			break;
+		case 2:
+		{
+			SEL0_L;
+			SEL1_H;
+			SEL2_H;
+		}
+			break;
+		case 1:
+		{
+			SEL0_H;
+			SEL1_L;
+			SEL2_H;
+		}
+			break;
+		case 0:
+		{
+			SEL0_L;
+			SEL1_L;
+			SEL2_H;			
+		}
+			break;
+		default:
+			return false;
+	}
+	return true;
+}
+
+void channel_reset(unsigned char ch_x)
+{
+	if(select_channel(ch_x) == false)
+		return;
+	Uart_HLW8110_Reset();
+}
+
+void check_channel_reset()
+{
+	if(consumer_clear_flag){
+		for(int i = 0; i < RelaySlaveChaNum;i++)
+		{
+			if(EE_ACDC_Consumer_Clear[i].flag)
+			{
+				if(EE_ACDC_Consumer_Clear[i].value)
+				{
+					
+					int temp = i << 2;
+					uint8_t buff[4] = {0};
+					AT24CxxWrite(Eepr_AC_Sing_Total_Consumer_addr+temp, buff,4);
+					read_Total_Consumer[i] = 0;
+					channel_reset(i);
+					//EE_ACDC_Consumer_Clear[i].value = 0;
+					
+				}
+				//EE_ACDC_Consumer_Clear[i].flag = 0;
+			}
+		}
+		InitUART1(9600);
+		for(int i = 0; i < RelaySlaveChaNum;i++){
+			if(EE_ACDC_Consumer_Clear[i].flag)
+			{
+				if(EE_ACDC_Consumer_Clear[i].value)
+				{
+					select_channel(i);
+					Init_HLW8110();
+					EE_ACDC_Consumer_Clear[i].value = 0;
+				}
+				EE_ACDC_Consumer_Clear[i].flag = 0;
+			}
+		}
+		consumer_clear_flag = 0;
+	}
+	
+}
+
 /*********************************************************************************************************
 * 函数名称:Proc100msTask
 * 函数功能:100ms处理任务 循环读取电能计量芯片的数据
@@ -279,6 +387,7 @@ static  void  Proc100msTask(void)
 
 		if((Start_Read_Flag)&&(channel==0x00))		//只有读完数据之后且现在轮询到通道0才会继续更新电压和频率值
 		{
+			#ifndef ACSingPhSmaCurrNew
 			AC_Ele_ReadReg[0].AC_V=(F_AC_V*EE_ACDC_Coef_ReadReg[0].ACDC_V_k)+(EE_ACDC_Coef_ReadReg[0].ACDC_V_b/1000);//实际的电压放大1000倍,实际的K,B值要缩小1000倍
 			if(AC_Ele_ReadReg[0].AC_V <= 10000)			//小于10V频率为0
 			{
@@ -294,6 +403,8 @@ static  void  Proc100msTask(void)
 				AC_Ele_ReadReg[chal_num].AC_V=AC_Ele_ReadReg[0].AC_V;
 				AC_Ele_ReadReg[chal_num].AC_LINE_Freq=AC_Ele_ReadReg[0].AC_LINE_Freq;
 			}
+			#endif
+			
 			Start_Read_Flag = 0;
 		}	
 //		if((channel==0x00)&&(Start_Read_Flag==0x00))		//只有读完数据之后才会继续更新电压和频率值
@@ -312,15 +423,32 @@ static  void  Proc100msTask(void)
 //				AC_Ele_ReadReg[chal_num].AC_LINE_Freq=AC_Ele_ReadReg[0].AC_LINE_Freq;
 //			}
 //		}
+#ifdef ACSingPhSmaCurrNew
+		AC_Ele_ReadReg[channel].AC_V=(F_AC_V*EE_ACDC_Coef_ReadReg[channel].ACDC_V_k)+(EE_ACDC_Coef_ReadReg[channel].ACDC_V_b/1000);
+		if(AC_Ele_ReadReg[channel].AC_V <= 10000)			//小于10V频率为0
+		{
+			AC_Ele_ReadReg[channel].AC_LINE_Freq=0;
+			AC_Ele_ReadReg[channel].AC_V = 0;
+		}
+		else
+		{
+			AC_Ele_ReadReg[channel].AC_LINE_Freq=F_AC_LINE_Freq*1000;
+		}
+		AC_Ele_ReadReg[channel].AC_LINE_Freq=AC_Ele_ReadReg[channel].AC_LINE_Freq;
+#endif
+		
 		AC_Ele_ReadReg[channel].AC_I=(F_AC_I*EE_ACDC_Coef_ReadReg[channel].ACDC_I_k)+(EE_ACDC_Coef_ReadReg[channel].ACDC_I_b/1000);//实际的电流放大1000倍,实际的K,B值要缩小1000倍
+		if(AC_Ele_ReadReg[channel].AC_V == 0)
+		{
+			AC_Ele_ReadReg[channel].AC_I = 0;
+		}
 		if((AC_Ele_ReadReg[channel].AC_I)<=No_Load[channel])
 			AC_Ele_ReadReg[channel].AC_P=0;                                                                                //有功功率
 		else
 			AC_Ele_ReadReg[channel].AC_P=F_AC_P*1000;                                                                                //有功功率
-		hlw8100_flash_backup[channel] = F_AC_E*1000;
 		
-		AC_Ele_ReadReg[channel].AC_E = hlw8100_flash_backup[channel] - Hlw8110_Flash_value[channel];																//电能
-		AC_Ele_ReadReg[channel].AC_PF=F_AC_PF*1000;																																								 //功率因素
+		AC_Ele_ReadReg[channel].AC_E = F_AC_E*1000;																//电能
+		AC_Ele_ReadReg[channel].AC_PF = F_AC_PF*1000;																																								 //功率因素
 		
 		EE_ACDC_Total_Consum_Read_Reg[channel].ACDC_Consumption = (read_Total_Consumer[channel] + AC_Ele_ReadReg[channel].AC_E);										//total consumer
 		ACDC_Total_All_Chn_Read_Reg.ACDC_All_Consumption += EE_ACDC_Total_Consum_Read_Reg[channel].ACDC_Consumption;
@@ -975,7 +1103,8 @@ int main(void)
   {
 		eMBPoll();
 		Proc100msTask();			//100ms处理任务
-		
+		detection_value = get_detection();
+		check_channel_reset();
     Proc1SecTask(); 			//1s处理任务   
 #ifdef ACSingPhSmaCurrNew
 		if(write_2_minute_flag == 1)

+ 19 - 0
control/PDU-AC-New-6/App/Main/Main.h

@@ -40,6 +40,9 @@
 #define AC_Sing_All_Chn_ConsumerAddr 4300
 #define AC_Sing_All_Chn_ConsumerQua  2
 
+#define AC_Sing_Detection_Addr 4310
+#define AC_Sing_Detection_Qua  1
+
 
 #define AC_Sing_Dela_OnSmaAddr 4500
 #define AC_Sing_Dela_OnSmaQua  1*RelaySlaveChaNum
@@ -101,6 +104,11 @@
 
 
 #define Default_Consum_Max   (4000000000)
+#define Default_Voltage_Max  (1000000000)
+#define Default_Current_Max  (1000000000)
+#define Default_Power_Max		 (1000000000)
+
+
 
 //选择设备类型
 
@@ -243,6 +251,12 @@ typedef struct	AC_Ele_struct_ReadReg
 	unsigned long int 	AC_PF;        //交流功率因数
 }AC_Ele_struct_ReadReg; 
 
+
+typedef struct Consumer_clear{
+	unsigned char 			flag;
+	unsigned char       value;
+}ACDC_Consumer_Clear;
+
 extern AC_Ele_struct_ReadReg AC_Ele_ReadReg[RelaySlaveChaNum];
 
 
@@ -316,6 +330,8 @@ extern EE_ACDC_Total_Consumption  EE_ACDC_Total_Consum_Read_Reg[RelaySlaveChaNum
 extern ACDC_All_Chn_Consumption ACDC_Total_All_Chn_Read_Reg;
 
 
+void channel_reset(unsigned char ch_x);
+
 
 typedef struct	ACDC_Coef_struct_WriteReg
 {
@@ -331,6 +347,7 @@ extern unsigned int read_Total_Consumer[RelaySlaveChaNum];
 
 extern unsigned int Hlw8110_Flash_value[RelaySlaveChaNum];
 extern unsigned int hlw8100_flash_backup[RelaySlaveChaNum];
+extern ACDC_Consumer_Clear EE_ACDC_Consumer_Clear[RelaySlaveChaNum];
 
 
 extern unsigned long int 	AC_V_Total;         //交流电压总结果
@@ -338,6 +355,7 @@ extern unsigned long int 	AC_LINE_Freq_Total;	//交流电流总结果
 extern unsigned int All_On_Flag;							//继电器全开标志
 extern unsigned int All_Off_Flag;							//继电器全关标志 
 extern unsigned int Start_Read_Flag;					//开始读取数据标志
+extern unsigned char consumer_clear_flag;
 /*********************************************************************************************************
 *                                              枚举结构体
 *********************************************************************************************************/
@@ -357,6 +375,7 @@ extern unsigned int Start_Read_Flag;					//开始读取数据标志
 
 
 
+#define THRESHOULD_JUDGMENT    		(50)
 
 
 

+ 39 - 20
control/PDU-AC-New-6/App/Modbus/BARE/port/port.c

@@ -35,7 +35,7 @@
 
 //保持寄存器
 #define REG_HOLD_START   4000
-#define REG_HOLD_NREGS   1000
+#define REG_HOLD_NREGS   1500
 
 //线圈
 #define REG_COILS_START  0
@@ -59,6 +59,7 @@ static USHORT   usRegDiscreteStart = REG_DISCRETE_START;
 static uint8_t  usRegDiscreteBuf[REG_DISCRETE_NREGS];
 
 extern unsigned long int Delay_Ms;
+extern unsigned char detection_value;
 
 
 
@@ -197,6 +198,9 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 						}else if((usAddress  >= AC_Sing_All_Chn_ConsumerAddr) &&(usAddress <= AC_Sing_All_Chn_ConsumerAddr + AC_Sing_All_Chn_ConsumerQua))
 						{
 							memcpy(&usRegHoldBuf[iRegIndex],&ACDC_Total_All_Chn_Read_Reg,usNRegs*2);
+						}else if(usAddress == AC_Sing_Detection_Addr)
+						{
+							memcpy(&usRegHoldBuf[iRegIndex],&detection_value,usNRegs*2);
 						}
             while(usNRegs > 0)
             {
@@ -247,7 +251,27 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								Chal_num = (usAddress-AC_Sing_State_SmaWAddr);             					 				//设置哪个通道的状态
 //								memcpy(&ACDC_State_WriteReg[Chal_num],&usRegHoldBuf[WiRegIndex],WusNRegs);	//将接收的数据放入写结构体中
 								memcpy(&EE_ACDC_State_ReadReg[Chal_num],&usRegHoldBuf[WiRegIndex],WusNRegs*2);//将接收的数据放入读结构体中
-								memcpy(&Eeprom_Wbuf,&usRegHoldBuf[WiRegIndex],WusNRegs*2);								   			//将数据由16进制转化为无符号数据存入数组 
+								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_V_TopThres < THRESHOULD_JUDGMENT)
+								{
+									EE_ACDC_State_ReadReg[Chal_num].ACDC_Vol_Upthr_En = false;
+								}
+								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_V_DownThres < THRESHOULD_JUDGMENT)
+								{
+									EE_ACDC_State_ReadReg[Chal_num].ACDC_Vol_Downthr_En = false;
+								}
+								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_I_TopThres < THRESHOULD_JUDGMENT)
+								{
+									EE_ACDC_State_ReadReg[Chal_num].ACDC_Cur_Upthr_En = false;
+								}
+								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_P_TopThres < THRESHOULD_JUDGMENT)
+								{
+									EE_ACDC_State_ReadReg[Chal_num].ACDC_Pow_Upthr_En = false;
+								}
+								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_E_TopThres < THRESHOULD_JUDGMENT)
+								{
+									EE_ACDC_State_ReadReg[Chal_num].ACDC_Ele_Upthr_En = false;
+								}
+								memcpy(&Eeprom_Wbuf,&EE_ACDC_State_ReadReg[Chal_num],WusNRegs*2);								   			//将数据由16进制转化为无符号数据存入数组 
 								AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+WeeiRegIndex*2,Eeprom_Wbuf, WusNRegs*2); //将数据写入到eeprom中
 							  if((WusNRegs==RelaySlaveChaNum)&&(EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State==true)&&(EE_ACDC_State_ReadReg[0].ACDC_ALLCha_On_State==true))//通过下发的通道数和开关状态可以判断为全开
 								{
@@ -272,6 +296,8 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								Chal_num = (usAddress-AC_Sing_Thr_SmaAddr)/16;              						 				//设置哪个通道的阈值
 //								memcpy(&ACDC_ThresVal_WriteReg[Chal_num],&usRegHoldBuf[WiRegIndex],WusNRegs*2);		//将接收的数据放入写结构体中
 								memcpy(&EE_ACDC_ThresVal_ReadReg[Chal_num],&usRegHoldBuf[WiRegIndex],WusNRegs*2);	//将接收的数据放入读结构体中
+								
+							
 								memcpy(&Eeprom_Wbuf,&usRegHoldBuf[WiRegIndex],WusNRegs*2);								 		  //将数据由16进制转化为无符号数据存入数组 
 								AT24CxxWrite(Eepr_AC_Sing_Thr_SmaAddr+WeeiRegIndex*2,Eeprom_Wbuf, WusNRegs*2);      //将数据写入到eeprom中
 						}
@@ -292,32 +318,25 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 						}else if(usAddress >= AC_Sing_Clear_Consumer && usAddress <= AC_Sing_Clear_Consumer+ AC_Sing_Clear_ConsumerQua)
 						{
 							//WeeiRegIndex = (int)(usAddress - AC_Sing_Clear_Consumer);
-							Chal_num = usAddress-AC_Sing_Coef_SmaAddr;
+							Chal_num = usAddress-AC_Sing_Clear_Consumer;
 							//AT24CxxRead(Eepr_AC_Sing_Total_Consumer_addr, Eeprom_Rbuf, Eepr_AC_Sing_Total_Consumer_SmaQua);
+							
 							uint16_t recive = 0;
 							memcpy(&recive,&usRegHoldBuf[WiRegIndex],WusNRegs*2);
-							if(recive)
-							{
-								int temp = Chal_num << 2;
-								uint8_t buff[4] = {0};
-								AT24CxxWrite(Eepr_AC_Sing_Total_Consumer_addr+temp, buff,4);
-								read_Total_Consumer[Chal_num] = 0;
-								Hlw8110_Flash_value[Chal_num] = hlw8100_flash_backup[Chal_num];
-							}
+							EE_ACDC_Consumer_Clear[Chal_num].flag = 1;
+							EE_ACDC_Consumer_Clear[Chal_num].value = recive;
+							consumer_clear_flag = 1;
+							
 							
 						}else if(usAddress == AC_Sing_Clear_Consumer_all)
 						{
-							Chal_num = usAddress-AC_Sing_Coef_SmaAddr;
 							uint16_t recive = 0;
-							uint8_t buff[RelaySlaveChaNum * 4] = {0};
-							if(recive)
+							memcpy(&recive,&usRegHoldBuf[WiRegIndex],WusNRegs*2);
+							consumer_clear_flag = 1;
+							for(int i = 0; i < RelaySlaveChaNum;i++)
 							{
-								AT24CxxWrite(Eepr_AC_Sing_Total_Consumer_addr,buff,4);
-								for(int i = 0; i < RelaySlaveChaNum;i++)
-								{
-									read_Total_Consumer[i] = 0;
-									Hlw8110_Flash_value[i] = hlw8100_flash_backup[i];
-								}
+								EE_ACDC_Consumer_Clear[i].flag = 1;
+								EE_ACDC_Consumer_Clear[i].value = recive;
 							}
 						}
         }

+ 48 - 3
control/PDU-AC-New-6/App/ReadEeprom/ReadEeprom.c

@@ -75,6 +75,51 @@ void  ReadEeprom(void)
 	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);						//将数据拷贝到指定的结构体,可能需要注意大小端问题
 	
+	//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;
+		}		
+	}
+	
+	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;
+		}
+		if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_V_DownThres < THRESHOULD_JUDGMENT)
+		{
+			EE_ACDC_State_ReadReg[Chal_Num].ACDC_Vol_Downthr_En = false;
+		}
+		if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_I_TopThres < THRESHOULD_JUDGMENT)
+		{
+			EE_ACDC_State_ReadReg[Chal_Num].ACDC_Cur_Upthr_En = false;
+		}
+		if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_P_TopThres < THRESHOULD_JUDGMENT)
+		{
+			EE_ACDC_State_ReadReg[Chal_Num].ACDC_Pow_Upthr_En = false;
+		}
+		if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_E_TopThres < THRESHOULD_JUDGMENT)
+		{
+			EE_ACDC_State_ReadReg[Chal_Num].ACDC_Ele_Upthr_En = false;
+		}
+	}
+	
 	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中没有存入数据设置默认值
@@ -534,7 +579,7 @@ void WarnVolDownthrState(void)
 	{
 		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)
+			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)
@@ -598,7 +643,7 @@ void WarnPowUpthrState(void)
 	{
 		if(EE_ACDC_State_ReadReg[chn_num].ACDC_Pow_Upthr_En)
 		{
-			if(AC_Ele_ReadReg[chn_num].AC_E>EE_ACDC_ThresVal_ReadReg[chn_num].ACDC_P_TopThres){
+			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)
 				{
@@ -630,7 +675,7 @@ void WarnEleUpthrState(void)
 	{
 		if(EE_ACDC_State_ReadReg[chn_num].ACDC_Ele_Upthr_En)
 		{
-			if(AC_Ele_ReadReg[chn_num].AC_P>EE_ACDC_ThresVal_ReadReg[chn_num].ACDC_E_TopThres)
+			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)