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

处理当前电流读取可能为0的情况。

liyi 1 год назад
Родитель
Сommit
8879a7846d

+ 2 - 1
truing_control/PDU-AC_ADA_NEW_6/common/common.c

@@ -39,7 +39,7 @@ void read_config_from_eeprom(void)
 		if(device != board->md_data.r_data.dev_chn)
 		{
 			//default write eeprom
-			board->write_eeprom_page(EEPROM_DEVICES_ADDR,(uint8_t *)&board->md_data.r_data.dev_chn,EEPROM_DEVICES_LENTH);
+			
 			board->write_eeprom_page(EEPROM_STATUS_ADDR,(uint8_t *)&board->relay_staging_staus[0],2*RelaySlaveChaNum);
 			for(uint8_t i = 0; i < RelaySlaveChaNum;i++)
 			{
@@ -52,6 +52,7 @@ void read_config_from_eeprom(void)
 			for(uint8_t i = 0 ; i < MAX_ROW;i++){
 				board->write_eeprom_page(EEPROM_CONSUMER_ADDR +(CONSUM_PAGE*i),(uint8_t*)&chache.data[0],CONSUM_PAGE);
 			}
+			board->write_eeprom_page(EEPROM_DEVICES_ADDR,(uint8_t *)&board->md_data.r_data.dev_chn,EEPROM_DEVICES_LENTH);
 		}
 		{
 			//channel open or close

+ 93 - 14
truing_control/PDU-AC_ADA_NEW_6/hardware/hlw8110/Hlw8110.c

@@ -511,7 +511,16 @@ void Read_HLW8110_U(void)
 	float a;
 	
 	Uart_Read_HLW8110_Reg(REG_RMSU_ADDR,3);
-	DelayNms(10);
+	for(uint8_t i = 0;i < 5;i++)
+	{
+		if(B_Rx_Finish == TRUE)
+		{
+			break;
+		}
+		DelayNms(2);
+	}
+	
+	//DelayNms(10);
 	if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) )
 	{
 		U32_RMSU_RegData = (unsigned long)(u8_RxBuf[0]<<16) + (unsigned long)(u8_RxBuf[1]<<8) + (unsigned long)(u8_RxBuf[2]);
@@ -550,7 +559,15 @@ void Read_HLW8110_PA(void)
 	float b;
 	
 	Uart_Read_HLW8110_Reg(REG_POWER_PA_ADDR,4);
-	DelayNms(10);
+	for(uint8_t i = 0;i < 5;i++)
+	{
+		if(B_Rx_Finish == TRUE)
+		{
+			break;
+		}
+		DelayNms(2);
+	}
+	//DelayNms(10);
 	if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) )
 	{
 		U32_POWERPA_RegData = (unsigned long)(u8_RxBuf[0]<<24) + (unsigned long)(u8_RxBuf[1]<<16) + (unsigned long)(u8_RxBuf[2]<<8) + (unsigned long)(u8_RxBuf[3]);
@@ -591,7 +608,15 @@ void Read_HLW8110_EA(void)
 {
 	float a;
 	Uart_Read_HLW8110_Reg(REG_ENERGY_PA_ADDR,3); 
-	DelayNms(10);
+	for(uint8_t i = 0;i < 5;i++)
+	{
+		if(B_Rx_Finish == TRUE)
+		{
+			break;
+		}
+		DelayNms(2);
+	}
+	//DelayNms(10);
 	
 	if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) )
 	{
@@ -637,7 +662,15 @@ void Read_HLW8110_LineFreq(void)
 	float a;
 	unsigned long b;
 	Uart_Read_HLW8110_Reg(REG_UFREQ_ADDR,2);
-	DelayNms(10);
+	for(uint8_t i = 0;i < 5;i++)
+	{
+		if(B_Rx_Finish == TRUE)
+		{
+			break;
+		}
+		DelayNms(2);
+	}
+	//DelayNms(10);
 	if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) )
 	{
 		b = (unsigned long)(u8_RxBuf[0]<<8) + (unsigned long)(u8_RxBuf[1]);
@@ -666,7 +699,15 @@ void Read_HLW8110_PF(void)
 //测量B通道的功率因素,需要发送EA+A5命令	
 	
 	Uart_Read_HLW8110_Reg(REG_PF_ADDR,3);
-	DelayNms(10);
+	for(uint8_t i = 0;i < 5;i++)
+	{
+		if(B_Rx_Finish == TRUE)
+		{
+			break;
+		}
+		DelayNms(2);
+	}
+	//DelayNms(10);
 	if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) )
 	{
 		b = (unsigned long)(u8_RxBuf[0]<<16) + (unsigned long)(u8_RxBuf[1]<<8) + (unsigned long)(u8_RxBuf[2]);
@@ -702,7 +743,15 @@ void Read_HLW8110_Angle(void)
 	float a;	
 	unsigned long b;
 	Uart_Read_HLW8110_Reg(REG_ANGLE_ADDR,2);
-	DelayNms(10);
+	for(uint8_t i = 0;i < 5;i++)
+	{
+		if(B_Rx_Finish == TRUE)
+		{
+			break;
+		}
+		DelayNms(2);
+	}
+	//DelayNms(10);
 	if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) )
 	{
 		b =(unsigned long)(u8_RxBuf[0]<<8) + (unsigned long)(u8_RxBuf[1]);
@@ -759,16 +808,46 @@ void Read_HLW8110_Angle(void)
 void Calculate_HLW8110_MeterData(void)
 {	
 	//Check_WriteReg_Success();
+	uint8_t count = 4;
+	B_Read_Error = 0;
+	do{
+		B_Read_Error = 0;
+		Read_HLW8110_IA();
+	}while((B_Read_Error) && (count--));
+	count = 4;
+	do{
+		B_Read_Error = 0;
+		Read_HLW8110_U();
+	}while((B_Read_Error) && (count--));
+
+	count = 4;
+	do{
+		B_Read_Error = 0;
+		Read_HLW8110_PA();
+	}while((B_Read_Error) && (count--));
 	
-	Read_HLW8110_IA();
-	Read_HLW8110_U();
-	Read_HLW8110_PA();
-	Read_HLW8110_EA();
+	count = 4;
+	do{
+		B_Read_Error = 0;
+		Read_HLW8110_EA();
+	}while((B_Read_Error) && (count--));
+
+	count = 4;
+	do{	
+		B_Read_Error = 0;
+		Read_HLW8110_LineFreq();
+	}while((B_Read_Error) && (count--));
 	
-	Read_HLW8110_LineFreq();
-	Read_HLW8110_Angle();
-	Read_HLW8110_PF();
-		
+	count = 4;
+	do{
+		B_Read_Error = 0;
+		Read_HLW8110_Angle();
+	}while((B_Read_Error) && (count--));
+	count = 4;
+	do{
+		B_Read_Error = 0;
+		Read_HLW8110_PF();
+	}while((B_Read_Error) && (count--));		
 }
 
 #endif

+ 1 - 1
truing_control/PDU-AC_ADA_NEW_6/modbus/include/mbconfig.h

@@ -46,7 +46,7 @@ PR_BEGIN_EXTERN_C
  *  @{
  */
 /*! \brief If Modbus ASCII support is enabled. */
-#define MB_ASCII_ENABLED                        (  1 )
+#define MB_ASCII_ENABLED                        (  0 )
 
 /*! \brief If Modbus RTU support is enabled. */
 #define MB_RTU_ENABLED                          (  1 )

Разница между файлами не показана из-за своего большого размера
+ 79 - 12962
truing_control/PDU-AC_ADA_NEW_6/prj/JLinkLog.txt


+ 1 - 0
truing_control/PDU-AC_ADA_NEW_6/prj/LoadSymbol.ini

@@ -0,0 +1 @@
+LOAD %L INCREMENTAL

Разница между файлами не показана из-за своего большого размера
+ 83 - 74
truing_control/PDU-AC_ADA_NEW_6/prj/ctrl_board.uvguix.Gowon


+ 1 - 1
truing_control/PDU-AC_ADA_NEW_6/prj/ctrl_board.uvoptx

@@ -215,7 +215,7 @@
       <DebugFlag>
         <trace>0</trace>
         <periodic>1</periodic>
-        <aLwin>1</aLwin>
+        <aLwin>0</aLwin>
         <aCover>0</aCover>
         <aSer1>0</aSer1>
         <aSer2>0</aSer2>

+ 1 - 1
truing_control/PDU-AC_ADA_NEW_6/prj/ctrl_board.uvprojx

@@ -49,7 +49,7 @@
             <InvalidFlash>1</InvalidFlash>
           </TargetStatus>
           <OutputDirectory>.\Objects\</OutputDirectory>
-          <OutputName>ctrl_board_new_3</OutputName>
+          <OutputName>ctrl_board_new_8</OutputName>
           <CreateExecutable>1</CreateExecutable>
           <CreateLib>0</CreateLib>
           <CreateHexFile>1</CreateHexFile>

+ 2 - 1
truing_control/PDU-AC_ADA_OLD8/common/common.c

@@ -31,7 +31,7 @@ void read_config_from_eeprom(void)
 		if(device != board->md_data.r_data.dev_chn)
 		{
 			//default write eeprom
-			board->write_eeprom_page(EEPROM_DEVICES_ADDR,(uint8_t *)&board->md_data.r_data.dev_chn,EEPROM_DEVICES_LENTH);
+			
 			board->write_eeprom_page(EEPROM_STATUS_ADDR,(uint8_t *)&board->relay_staging_staus[0],2*RelaySlaveChaNum);
 			for(uint8_t i = 0; i < RelaySlaveChaNum;i++)
 			{
@@ -44,6 +44,7 @@ void read_config_from_eeprom(void)
 			for(uint8_t i = 0 ; i < MAX_ROW;i++){
 				board->write_eeprom_page(EEPROM_CONSUMER_ADDR +(CONSUM_PAGE*i),(uint8_t*)&chache.data[0],CONSUM_PAGE);
 			}
+			board->write_eeprom_page(EEPROM_DEVICES_ADDR,(uint8_t *)&board->md_data.r_data.dev_chn,EEPROM_DEVICES_LENTH);
 		}
 		{
 			//channel open or close

+ 1 - 1
truing_control/PDU-AC_ADA_OLD8/hardware/electricity/electricity.c

@@ -58,7 +58,7 @@ static void read_ele(uint8_t channel)
 		elec[channel] += F_AC_E;
 		board->md_data.r_data.ac_ele.ele_info[channel].consumer = board->ele_restore[channel] + elec[channel] * 1000;
 
-		if(F_AC_V < 0.5)
+		if(F_AC_V < 1)
 		{
 			board->md_data.r_data.ac_ele.ele_info[channel].voltage = 0;
 			board->md_data.r_data.ac_ele.ele_info[channel].current = 0;

+ 93 - 14
truing_control/PDU-AC_ADA_OLD8/hardware/hlw8110/Hlw8110.c

@@ -511,7 +511,16 @@ void Read_HLW8110_U(void)
 	float a;
 	
 	Uart_Read_HLW8110_Reg(REG_RMSU_ADDR,3);
-	DelayNms(10);
+	for(uint8_t i = 0;i < 5;i++)
+	{
+		if(B_Rx_Finish == TRUE)
+		{
+			break;
+		}
+		DelayNms(2);
+	}
+	
+	//DelayNms(10);
 	if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) )
 	{
 		U32_RMSU_RegData = (unsigned long)(u8_RxBuf[0]<<16) + (unsigned long)(u8_RxBuf[1]<<8) + (unsigned long)(u8_RxBuf[2]);
@@ -550,7 +559,15 @@ void Read_HLW8110_PA(void)
 	float b;
 	
 	Uart_Read_HLW8110_Reg(REG_POWER_PA_ADDR,4);
-	DelayNms(10);
+	for(uint8_t i = 0;i < 5;i++)
+	{
+		if(B_Rx_Finish == TRUE)
+		{
+			break;
+		}
+		DelayNms(2);
+	}
+	//DelayNms(10);
 	if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) )
 	{
 		U32_POWERPA_RegData = (unsigned long)(u8_RxBuf[0]<<24) + (unsigned long)(u8_RxBuf[1]<<16) + (unsigned long)(u8_RxBuf[2]<<8) + (unsigned long)(u8_RxBuf[3]);
@@ -591,7 +608,15 @@ void Read_HLW8110_EA(void)
 {
 	float a;
 	Uart_Read_HLW8110_Reg(REG_ENERGY_PA_ADDR,3); 
-	DelayNms(10);
+	for(uint8_t i = 0;i < 5;i++)
+	{
+		if(B_Rx_Finish == TRUE)
+		{
+			break;
+		}
+		DelayNms(2);
+	}
+	//DelayNms(10);
 	
 	if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) )
 	{
@@ -637,7 +662,15 @@ void Read_HLW8110_LineFreq(void)
 	float a;
 	unsigned long b;
 	Uart_Read_HLW8110_Reg(REG_UFREQ_ADDR,2);
-	DelayNms(10);
+	for(uint8_t i = 0;i < 5;i++)
+	{
+		if(B_Rx_Finish == TRUE)
+		{
+			break;
+		}
+		DelayNms(2);
+	}
+	//DelayNms(10);
 	if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) )
 	{
 		b = (unsigned long)(u8_RxBuf[0]<<8) + (unsigned long)(u8_RxBuf[1]);
@@ -666,7 +699,15 @@ void Read_HLW8110_PF(void)
 //测量B通道的功率因素,需要发送EA+A5命令	
 	
 	Uart_Read_HLW8110_Reg(REG_PF_ADDR,3);
-	DelayNms(10);
+	for(uint8_t i = 0;i < 5;i++)
+	{
+		if(B_Rx_Finish == TRUE)
+		{
+			break;
+		}
+		DelayNms(2);
+	}
+	//DelayNms(10);
 	if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) )
 	{
 		b = (unsigned long)(u8_RxBuf[0]<<16) + (unsigned long)(u8_RxBuf[1]<<8) + (unsigned long)(u8_RxBuf[2]);
@@ -702,7 +743,15 @@ void Read_HLW8110_Angle(void)
 	float a;	
 	unsigned long b;
 	Uart_Read_HLW8110_Reg(REG_ANGLE_ADDR,2);
-	DelayNms(10);
+	for(uint8_t i = 0;i < 5;i++)
+	{
+		if(B_Rx_Finish == TRUE)
+		{
+			break;
+		}
+		DelayNms(2);
+	}
+	//DelayNms(10);
 	if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) )
 	{
 		b =(unsigned long)(u8_RxBuf[0]<<8) + (unsigned long)(u8_RxBuf[1]);
@@ -759,16 +808,46 @@ void Read_HLW8110_Angle(void)
 void Calculate_HLW8110_MeterData(void)
 {	
 	//Check_WriteReg_Success();
+	uint8_t count = 4;
+	B_Read_Error = 0;
+	do{
+		B_Read_Error = 0;
+		Read_HLW8110_IA();
+	}while((B_Read_Error) && (count--));
+	count = 4;
+	do{
+		B_Read_Error = 0;
+		Read_HLW8110_U();
+	}while((B_Read_Error) && (count--));
+
+	count = 4;
+	do{
+		B_Read_Error = 0;
+		Read_HLW8110_PA();
+	}while((B_Read_Error) && (count--));
 	
-	Read_HLW8110_IA();
-	Read_HLW8110_U();
-	Read_HLW8110_PA();
-	Read_HLW8110_EA();
+	count = 4;
+	do{
+		B_Read_Error = 0;
+		Read_HLW8110_EA();
+	}while((B_Read_Error) && (count--));
+
+	count = 4;
+	do{	
+		B_Read_Error = 0;
+		Read_HLW8110_LineFreq();
+	}while((B_Read_Error) && (count--));
 	
-	Read_HLW8110_LineFreq();
-	Read_HLW8110_Angle();
-	Read_HLW8110_PF();
-		
+	count = 4;
+	do{
+		B_Read_Error = 0;
+		Read_HLW8110_Angle();
+	}while((B_Read_Error) && (count--));
+	count = 4;
+	do{
+		B_Read_Error = 0;
+		Read_HLW8110_PF();
+	}while((B_Read_Error) && (count--));		
 }
 
 #endif

Разница между файлами не показана из-за своего большого размера
+ 52 - 34
truing_control/PDU-AC_ADA_OLD8/prj/ctrl_board.uvguix.Gowon