Преглед на файлове

1、6路板,8路板,4路板,3路板切换采样电阻为330K匹配。
2、单相超限动作只能动作一路bug
3、单相设置阈值告警需重启生效bug

liyi преди 2 години
родител
ревизия
7f1da2dd82

+ 3 - 0
control/PDU-AC-New-6/App/Hlw8110/Hlw8110.c

@@ -619,6 +619,7 @@ void Read_HLW8110_U(void)
   a = a*U16_RMSUC_RegData;  
   a = a/0x400000;       
   a = a/1;  						// 1 = 电压系数
+	a= a * 3.189;
   a = a/100;    				//计算出a = 22083.12mV,a/100表示220.8312V,电压转换成V
   a = a*D_CAL_U;				//D_CAL_U是校正系数,默认是1,		
   F_AC_V = a;
@@ -667,6 +668,7 @@ void Read_HLW8110_PA(void)
     a = a*U16_PowerPAC_RegData;
     a = a/0x80000000;             
     a = a/1;  										// 1 = 电流系数
+		a= a * 3.189;
     a = a/1;  										// 1 = 电压系数
     a = a * D_CAL_A_P;						//D_CAL_A_P是校正系数,默认是1
     F_AC_P = a;									//单位为W,比如算出来5000.123,表示5000.123W
@@ -716,6 +718,7 @@ void Read_HLW8110_EA(void)
   a = a*U16_EnergyAC_RegData;
   a = a/0x20000000;             //电量单位是0.001KWH,比如算出来是2.002,表示2.002KWH    
   a = a/1;  										// 1 = 电流系数
+	a= a * 3.189;
   a = a/1;  										// 1 = 电压系数
   a = a * D_CAL_A_E;     				//D_CAL_A_E是校正系数,默认是1
   F_AC_E = a;

+ 24 - 1
control/PDU-AC-New-6/App/Main/Main.c

@@ -1178,7 +1178,30 @@ static void over_RelayState(void)
 		{
 			if(EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State==true)
 			{
-				RELAY_1_OFF;
+				switch(i)
+				{
+					case 0:
+						RELAY_1_OFF;
+						break;
+					case 1:
+						RELAY_2_OFF;
+						break;
+					case 2:
+						RELAY_3_OFF;
+						break;
+					case 3:
+						RELAY_4_OFF;
+						break;
+					case 4:
+						RELAY_5_OFF;
+						break;
+					case 5:
+						RELAY_6_OFF;
+						break;
+					default:
+						return;
+				}
+				EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State = false;
 				EE_ACDC_State_ReadRegTrue[i].ACDC_Cha_On_Off_State = false;
 			}
 			over_Func_flag[i] = 0;

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

@@ -251,23 +251,23 @@ 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);//将接收的数据放入读结构体中
-								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_V_TopThres < THRESHOULD_JUDGMENT)
+								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)
+								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)
+								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)
+								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)
+								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_E_TopThres <= THRESHOULD_JUDGMENT)
 								{
 									EE_ACDC_State_ReadReg[Chal_num].ACDC_Ele_Upthr_En = false;
 								}
@@ -298,6 +298,26 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								memcpy(&EE_ACDC_ThresVal_ReadReg[Chal_num],&usRegHoldBuf[WiRegIndex],WusNRegs*2);	//将接收的数据放入读结构体中
 								
 							
+								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,&usRegHoldBuf[WiRegIndex],WusNRegs*2);								 		  //将数据由16进制转化为无符号数据存入数组 
 								AT24CxxWrite(Eepr_AC_Sing_Thr_SmaAddr+WeeiRegIndex*2,Eeprom_Wbuf, WusNRegs*2);      //将数据写入到eeprom中
 						}
@@ -312,7 +332,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 						}else if((usAddress>=AC_Sing_Channel_Func)&&(usAddress<=AC_Sing_Channel_Func+AC_Sing_Channel_FuncQua))
 						{
 							WeeiRegIndex = (int)(usAddress - AC_Sing_Channel_Func);
-							memcpy(&ACDC_Over_WriteReg,&usRegHoldBuf[WiRegIndex],WusNRegs*2);
+							memcpy(&ACDC_Over_WriteReg[WeeiRegIndex],&usRegHoldBuf[WiRegIndex],WusNRegs*2);
 							memcpy(&Eeprom_Wbuf,&usRegHoldBuf[WiRegIndex],WusNRegs*2);
 							AT24CxxWrite(Eepr_AC_Sing_Channel_Func_SmaAddr+WeeiRegIndex*2,Eeprom_Wbuf, WusNRegs*2);
 						}else if(usAddress >= AC_Sing_Clear_Consumer && usAddress <= AC_Sing_Clear_Consumer+ AC_Sing_Clear_ConsumerQua)

+ 20 - 5
control/PDU-AC-New-6/App/ReadEeprom/ReadEeprom.c

@@ -98,25 +98,40 @@ void  ReadEeprom(void)
 	
 	for(Chal_Num=0;Chal_Num<RelaySlaveChaNum;Chal_Num++) 
 	{
-		if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_V_TopThres < THRESHOULD_JUDGMENT)
+		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)
+		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)
+		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)
+		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)
+		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;
 		}
 	}
 	

+ 3 - 0
control/PDU-AC/App/Hlw8110/Hlw8110.c

@@ -619,6 +619,7 @@ void Read_HLW8110_U(void)
   a = a*U16_RMSUC_RegData;  
   a = a/0x400000;       
   a = a/1;  						// 1 = 电压系数
+	a= a * 3.189;
   a = a/100;    				//计算出a = 22083.12mV,a/100表示220.8312V,电压转换成V
   a = a*D_CAL_U;				//D_CAL_U是校正系数,默认是1,		
   F_AC_V = a;
@@ -667,6 +668,7 @@ void Read_HLW8110_PA(void)
     a = a*U16_PowerPAC_RegData;
     a = a/0x80000000;             
     a = a/1;  										// 1 = 电流系数
+		a = a * 3.189;
     a = a/1;  										// 1 = 电压系数
     a = a * D_CAL_A_P;						//D_CAL_A_P是校正系数,默认是1
     F_AC_P = a;									//单位为W,比如算出来5000.123,表示5000.123W
@@ -716,6 +718,7 @@ void Read_HLW8110_EA(void)
   a = a*U16_EnergyAC_RegData;
   a = a/0x20000000;             //电量单位是0.001KWH,比如算出来是2.002,表示2.002KWH    
   a = a/1;  										// 1 = 电流系数
+	a= a * 3.189;
   a = a/1;  										// 1 = 电压系数
   a = a * D_CAL_A_E;     				//D_CAL_A_E是校正系数,默认是1
   F_AC_E = a;

+ 33 - 1
control/PDU-AC/App/Main/Main.c

@@ -955,11 +955,43 @@ static void over_RelayState(void)
 {
 	for(int i = 0; i < RelaySlaveChaNum;i++)
 	{
+
 		if(over_Func_flag[i])
 		{
 			if(EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State==true)
 			{
-				RELAY_1_OFF;
+				switch(i)
+				{
+					case 0:
+						RELAY_1_OFF;
+						break;
+					case 1:
+						RELAY_2_OFF;
+						break;
+					case 2:
+						RELAY_3_OFF;
+						break;
+					case 3:
+						RELAY_4_OFF;
+						break;
+#if ACSingPhSmaCurr
+					case 4:
+						RELAY_5_OFF;
+						break;
+					case 5:
+						RELAY_6_OFF;
+						break;
+					case 6:
+						RELAY_7_OFF;
+						break;
+					case 7:
+						RELAY_8_OFF;
+						break;
+#endif
+					default:
+						return;
+				}
+				EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State = false;
 				EE_ACDC_State_ReadRegTrue[i].ACDC_Cha_On_Off_State = false;
 			}
 			over_Func_flag[i] = 0;

+ 1 - 1
control/PDU-AC/App/Main/Main.h

@@ -123,7 +123,7 @@
 #endif
 
 #if ACSingPhHigCurr
-	#define RelaySlaveChaNum	1		//通道数
+	#define RelaySlaveChaNum	4		//通道数
 	#define ACSingCurrid 2   //设备ID
 #endif
 

+ 26 - 6
control/PDU-AC/App/Modbus/BARE/port/port.c

@@ -251,23 +251,23 @@ 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);//将接收的数据放入读结构体中
-								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_V_TopThres < THRESHOULD_JUDGMENT)
+								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)
+								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)
+								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)
+								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)
+								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_E_TopThres <= THRESHOULD_JUDGMENT)
 								{
 									EE_ACDC_State_ReadReg[Chal_num].ACDC_Ele_Upthr_En = false;
 								}
@@ -298,6 +298,26 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								memcpy(&EE_ACDC_ThresVal_ReadReg[Chal_num],&usRegHoldBuf[WiRegIndex],WusNRegs*2);	//将接收的数据放入读结构体中
 								
 							
+								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,&usRegHoldBuf[WiRegIndex],WusNRegs*2);								 		  //将数据由16进制转化为无符号数据存入数组 
 								AT24CxxWrite(Eepr_AC_Sing_Thr_SmaAddr+WeeiRegIndex*2,Eeprom_Wbuf, WusNRegs*2);      //将数据写入到eeprom中
 						}
@@ -312,7 +332,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 						}else if((usAddress>=AC_Sing_Channel_Func)&&(usAddress<=AC_Sing_Channel_Func+AC_Sing_Channel_FuncQua))
 						{
 							WeeiRegIndex = (int)(usAddress - AC_Sing_Channel_Func);
-							memcpy(&ACDC_Over_WriteReg,&usRegHoldBuf[WiRegIndex],WusNRegs*2);
+							memcpy(&ACDC_Over_WriteReg[WeeiRegIndex],&usRegHoldBuf[WiRegIndex],WusNRegs*2);
 							memcpy(&Eeprom_Wbuf,&usRegHoldBuf[WiRegIndex],WusNRegs*2);
 							AT24CxxWrite(Eepr_AC_Sing_Channel_Func_SmaAddr+WeeiRegIndex*2,Eeprom_Wbuf, WusNRegs*2);
 						}else if(usAddress >= AC_Sing_Clear_Consumer && usAddress <= AC_Sing_Clear_Consumer+ AC_Sing_Clear_ConsumerQua)

+ 20 - 5
control/PDU-AC/App/ReadEeprom/ReadEeprom.c

@@ -98,25 +98,40 @@ void  ReadEeprom(void)
 	
 	for(Chal_Num=0;Chal_Num<RelaySlaveChaNum;Chal_Num++) 
 	{
-		if(EE_ACDC_ThresVal_ReadReg[Chal_Num].ACDC_V_TopThres < THRESHOULD_JUDGMENT)
+		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)
+		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)
+		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)
+		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)
+		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;
 		}
 	}
 	

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

@@ -631,6 +631,7 @@ void Read_HLW8110_U(void)
   a = a*U16_RMSUC_RegData;  
   a = a/0x400000;       
   a = a/1;  						// 1 = 电压系数
+	a= a * 3.189;
   a = a/100;    				//计算出a = 22083.12mV,a/100表示220.8312V,电压转换成V
   a = a*D_CAL_U;				//D_CAL_U是校正系数,默认是1,		
   F_AC_V = a;
@@ -680,6 +681,7 @@ void Read_HLW8110_PA(void)
     a = a/0x80000000;             
     a = a/1;  										// 1 = 电流系数
     a = a/1;  										// 1 = 电压系数
+		a= a * 3.189;
     a = a * D_CAL_A_P;						//D_CAL_A_P是校正系数,默认是1
     F_AC_P = a;									//单位为W,比如算出来5000.123,表示5000.123W
 
@@ -730,6 +732,7 @@ void Read_HLW8110_PSA(void)
     a = a/0x80000000;             
     a = a/1;  										// 1 = 电流系数
     a = a/1;  										// 1 = 电压系数
+	a= a * 3.189;
     a = a * D_CAL_A_P;						//D_CAL_A_P是校正系数,默认是1
     F_AC_PS = a;									//单位为W,比如算出来5000.123,表示5000.123W
 
@@ -779,6 +782,7 @@ void Read_HLW8110_EA(void)
   a = a/0x20000000;             //电量单位是0.001KWH,比如算出来是2.002,表示2.002KWH    
    a = a/1;  										// 1 = 电流系数
    a = a/1;  										// 1 = 电压系数
+   a= a * 3.189;
    a = a * D_CAL_A_E;     			//D_CAL_A_E是校正系数,默认是1
   F_AC_E = a;
 	F_AC_BACKUP_E = F_AC_E;

+ 5 - 1
control/PDU-Triphasic_IO/App/Hlw8110/Hlw8110.c

@@ -631,6 +631,7 @@ void Read_HLW8110_U(void)
   a = a*U16_RMSUC_RegData;  
   a = a/0x400000;       
   a = a/1;  						// 1 = 电压系数
+	a= a * 3.189;
   a = a/100;    				//计算出a = 22083.12mV,a/100表示220.8312V,电压转换成V
   a = a*D_CAL_U;				//D_CAL_U是校正系数,默认是1,		
   F_AC_V = a;
@@ -679,6 +680,7 @@ void Read_HLW8110_PA(void)
     a = a*U16_PowerPAC_RegData;
     a = a/0x80000000;             
     a = a/1;  										// 1 = 电流系数
+		a = a * 3.189;
     a = a/1;  										// 1 = 电压系数
     a = a * D_CAL_A_P;						//D_CAL_A_P是校正系数,默认是1
     F_AC_P = a;									//单位为W,比如算出来5000.123,表示5000.123W
@@ -729,6 +731,7 @@ void Read_HLW8110_PSA(void)
     a = a*U16_PowerPAC_RegData;
     a = a/0x80000000;             
     a = a/1;  										// 1 = 电流系数
+		a = a * 3.189;
     a = a/1;  										// 1 = 电压系数
     a = a * D_CAL_A_P;						//D_CAL_A_P是校正系数,默认是1
     F_AC_PS = a;									//单位为W,比如算出来5000.123,表示5000.123W
@@ -777,7 +780,8 @@ void Read_HLW8110_EA(void)
 	a =  (float)U32_ENERGY_PA_RegData;	
   a = a*U16_EnergyAC_RegData;
   a = a/0x20000000;             //电量单位是0.001KWH,比如算出来是2.002,表示2.002KWH    
-   a = a/1;  										// 1 = 电流系数
+  a = a/1;  										// 1 = 电流系数
+	a= a * 3.189;
    a = a/1;  										// 1 = 电压系数
    a = a * D_CAL_A_E;     			//D_CAL_A_E是校正系数,默认是1
   F_AC_E = a;

+ 34 - 13
control/PDU-Triphasic_IO/App/Main/Main.c

@@ -507,12 +507,7 @@ static void key_io_control()
 	}else
 	{
 		AC3PPDU_Modbus_Reg[Mb_Dbuff_Detection] = 0x0;
-	}
-	
-	if(rst != test)
-	{
-		if(rst)
-		{
+		//close 
 			DB_Out1_L;
 			DB_Out2_L;
 			DB_Out3_L;
@@ -530,24 +525,50 @@ static void key_io_control()
 				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;
 			}
-		}else
+	}
+	
+	if(rst != test)
+	{
+		if(rst)
 		{
-			DB_Out1_H;
-			DB_Out2_H;
-			DB_Out3_H;
+			DB_Out1_L;
+			DB_Out2_L;
+			DB_Out3_L;
 			for(uint8_t i = 0; i < Output_ChN_default;i++)
 			{
-				AC3PPDU_RL_time[i + CH1_out].LT_state = AC3PPDU_RL_time[i + CH1_out].LT_state  | 0x00000001;
+				AC3PPDU_RL_time[i + CH1_out].LT_state = AC3PPDU_RL_time[i + CH1_out].LT_state &0xfffffffe;
 				RL_now_state[i] = AC3PPDU_RL_time[i + CH1_out].LT_state & 0x01;
+				uint8_t stat = AC3PPDU_RL_time[i + CH1_out].LT_state;
 				if(RL_now_state[i] != RL_last_state[i])
 				{
 					RL_last_state[i] = RL_now_state[i];
 				}
 				// save value to eeprom
-				uint8_t stat = AC3PPDU_RL_time[i + CH1_out].LT_state;
 				AT24CxxWriteOneByte(ERom_CH1LT_ST_Addr+i,stat);
 				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 | 0x00000001;
+				AC3PPDU_Modbus_Reg[Mb_Dbuff_OUTCH1_ST_Addr + (i % 3)]  = AC3PPDU_RL_time[i + CH1_out].LT_state;
+			}
+		}else
+		{
+			if(AC3PPDU_Modbus_Reg[Mb_Dbuff_Detection] == 0x1)
+			{
+				DB_Out1_H;
+				DB_Out2_H;
+				DB_Out3_H;
+				for(uint8_t i = 0; i < Output_ChN_default;i++)
+				{
+					AC3PPDU_RL_time[i + CH1_out].LT_state = AC3PPDU_RL_time[i + CH1_out].LT_state  | 0x00000001;
+					RL_now_state[i] = AC3PPDU_RL_time[i + CH1_out].LT_state & 0x01;
+					if(RL_now_state[i] != RL_last_state[i])
+					{
+						RL_last_state[i] = RL_now_state[i];
+					}
+					// save value to eeprom
+					uint8_t stat = AC3PPDU_RL_time[i + CH1_out].LT_state;
+					AT24CxxWriteOneByte(ERom_CH1LT_ST_Addr+i,stat);
+					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 | 0x00000001;
+				}
 			}
 		}
 	}