Bläddra i källkod

老8路,起吊assert!!!

liyi 1 år sedan
förälder
incheckning
55de2e1f79

+ 21 - 15
truing_control/PDU-AC_ADA_OLD8/hardware/electricity/electricity.c

@@ -49,28 +49,34 @@ static void read_ele(uint8_t channel)
 	if(channel < RelaySlaveChaNum)
 	{
 		select_channel(channel);
+
 		Calculate_HLW8110_MeterData();
+		if(F_AC_V > 20 && F_AC_LINE_Freq < 1.0)
+		{
+			reinit_hlw8110();
+			Calculate_HLW8110_MeterData();
+		}
+		if(F_AC_V < 1.0)
+		{
+			F_AC_V = 0.0;
+			F_AC_I = 0.0;
+			F_AC_P = 0.0;
+			F_AC_LINE_Freq = 0.0;
+			F_AC_PF = 0.0;
+		}else if(F_AC_PF < 0.1 || F_AC_PF > 1 || F_AC_P < 1)
+		{
+			F_AC_I = 0.0;
+			F_AC_P = 0.0;
+			F_AC_PF = 0.0;
+		}
 		board->md_data.r_data.ac_ele.ele_info[channel].voltage = F_AC_V * 1000;
 		board->md_data.r_data.ac_ele.ele_info[channel].current = F_AC_I * 1000;
 		board->md_data.r_data.ac_ele.ele_info[channel].power = F_AC_P * 1000;
 		board->md_data.r_data.ac_ele.ele_info[channel].freq = F_AC_LINE_Freq * 1000;
 		board->md_data.r_data.ac_ele.ele_info[channel].factor = F_AC_PF * 1000;
 		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 < 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;
-			board->md_data.r_data.ac_ele.ele_info[channel].power = 0;
-			board->md_data.r_data.ac_ele.ele_info[channel].factor = 0;
-			board->md_data.r_data.ac_ele.ele_info[channel].freq = 0;
-		}else if(F_AC_PF < 0.1 || F_AC_PF > 1 || F_AC_P  < 1)
-		{
-			board->md_data.r_data.ac_ele.ele_info[channel].current = 0;
-			board->md_data.r_data.ac_ele.ele_info[channel].power = 0;
-			board->md_data.r_data.ac_ele.ele_info[channel].factor = 0;
-		}
+		board->md_data.r_data.ac_ele.ele_info[channel].consumer = board->ele_restore[channel] + (uint32_t)(elec[channel] * 1000);
+		
 	}
 }
 

+ 101 - 0
truing_control/PDU-AC_ADA_OLD8/hardware/hlw8110/Hlw8110.c

@@ -428,6 +428,107 @@ void Init_HLW8110(void)
 	}
 }
 
+void re_check_write_reg_success(void)
+{
+	Uart_Read_HLW8110_Reg(REG_SYSCON_ADDR,2);
+	DelayNms(10);
+	eMBPoll();
+	if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) )
+	{
+		U16_Check_SysconReg_Data =  (u8_RxBuf[0]<<8) + (u8_RxBuf[1]); 
+//		printf("写入的SysconReg寄存器:%lx\n " ,U16_Check_SysconReg_Data);
+		if(U16_Check_SysconReg_Data == 0x0a04)
+		{
+		}else
+		{
+			B_Read_Error = 1;
+		}
+		
+	}
+	else
+	{
+//		printf("SysconReg寄存器读取出错\r\n");
+		B_Read_Error = 1;
+	}
+	
+	Uart_Read_HLW8110_Reg(REG_EMUCON_ADDR,2);
+	DelayNms(10);
+	eMBPoll();
+	if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) )
+	{
+		U16_Check_EmuconReg_Data =  (u8_RxBuf[0]<<8) + (u8_RxBuf[1]); 
+//		printf("写入的EmuconReg寄存器:%lx\n " ,U16_Check_EmuconReg_Data);
+		
+		if(U16_Check_EmuconReg_Data == 0x0001)
+		{
+		}else
+		{
+			B_Read_Error = 1;
+		}
+	}
+	else
+	{
+//		printf("EmuconReg寄存器读取出错\r\n");
+		B_Read_Error = 1;
+	}
+	
+	
+	Uart_Read_HLW8110_Reg(REG_EMUCON2_ADDR,2);
+	DelayNms(10);
+	eMBPoll();
+	if ( u8_RxBuf[u8_RX_Length-1] == HLW8110_checkSum_Read(u8_RX_Length) )
+	{
+		U16_Check_Emucon2Reg_Data =  (u8_RxBuf[0]<<8) + (u8_RxBuf[1]); 
+//		printf("写入的Emucon2Reg寄存器寄存器:%lx\n " ,U16_Check_Emucon2Reg_Data);
+		if(U16_Check_Emucon2Reg_Data == 0x0065)
+		{
+		}else
+		{
+			B_Read_Error = 1;
+		}
+	}
+	else
+	{
+//		printf("Emucon2Reg寄存器读取出错\r\n");
+		B_Read_Error = 1;
+	}
+	
+}
+
+void reinit_hlw8110()
+{
+	for(int i = 0 ; i < 50 ;i++)
+	{
+		Uart_HLW8110_WriteREG_EN();
+		DelayNms(10);
+		eMBPoll();
+		Uart_HLW8110_Set_Channel_A();
+		DelayNms(10);
+		eMBPoll();
+		Uart_Write_HLW8110_Reg(REG_SYSCON_ADDR,2,0x0a04);
+		DelayNms(10);
+		eMBPoll();
+		Uart_Write_HLW8110_Reg(REG_EMUCON_ADDR,2,0x0001);
+		DelayNms(10);
+		eMBPoll();
+		Uart_Write_HLW8110_Reg(REG_EMUCON2_ADDR,2,0x0065);
+		DelayNms(10);
+		eMBPoll();
+		Uart_HLW8110_WriteREG_DIS();
+		B_Read_Error = 0;
+		re_check_write_reg_success();
+		if(B_Read_Error)
+		{
+			eMBPoll();
+			DelayNms(100);
+		}else
+		{
+			break;
+		}
+	}
+}
+
+
 
 uint8_t Check_WriteReg_Sucess_Addr(uint8_t addr,uint8_t readlen, uint16_t value)
 {

+ 1 - 1
truing_control/PDU-AC_ADA_OLD8/hardware/hlw8110/Hlw8110.h

@@ -76,5 +76,5 @@ void Calculate_HLW8110_MeterData(void);
 
 void Init_HLW8112(void);
 void HLW8112_Measure(void);
-
+void reinit_hlw8110(void);
 #endif

+ 8 - 0
truing_control/PDU-AC_ADA_OLD8/modbus/BARE/port/portserial.c

@@ -40,6 +40,14 @@ vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
     /* If xRXEnable enable serial receive interrupts. If xTxENable enable
      * transmitter empty interrupts.
      */
+		if(FALSE == xRxEnable && xTxEnable == FALSE)
+		{
+			usart_interrupt_disable(USART0,USART_INT_RBNE);
+			usart_interrupt_disable(USART0,USART_INT_TC);
+			gpio_bit_reset(GPIOA, GPIO_PIN_11);
+			return;
+		}
+	
 	  if(TRUE == xRxEnable)
     {
         usart_interrupt_enable(USART0,USART_INT_RBNE);//ʹÄܽÓÊÕÖжÏ

+ 4 - 0
truing_control/PDU-AC_ADA_OLD8/modbus/include/mb.h

@@ -409,6 +409,10 @@ eMBErrorCode    eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress,
  */
 eMBErrorCode    eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress,
                                   USHORT usNDiscrete );
+																	
+																	
+																	
+uint8_t eMBCheck(void);
 
 #ifdef __cplusplus
 PR_END_EXTERN_C

+ 14 - 0
truing_control/PDU-AC_ADA_OLD8/modbus/mb.c

@@ -327,6 +327,20 @@ eMBDisable( void )
     return eStatus;
 }
 
+
+uint8_t eMBCheck(void)
+{
+	if( eMBState != STATE_ENABLED)
+	{
+		return 1;
+	}else
+	{
+		return 0;
+	}
+}
+
+
+
 eMBErrorCode
 eMBPoll( void )
 {

+ 34 - 7
truing_control/PDU-AC_ADA_OLD8/modbus/rtu/mbrtu.c

@@ -153,8 +153,14 @@ eMBRTUReceive( UCHAR * pucRcvAddress, UCHAR ** pucFrame, USHORT * pusLength )
     eMBErrorCode    eStatus = MB_ENOERR;
 
     ENTER_CRITICAL_SECTION(  );
-    assert( usRcvBufferPos < MB_SER_PDU_SIZE_MAX );
-
+		
+    //assert( usRcvBufferPos < MB_SER_PDU_SIZE_MAX );
+		if(usRcvBufferPos >= MB_SER_PDU_SIZE_MAX)
+		{
+			eMBDisable();
+			EXIT_CRITICAL_SECTION(  );
+			return eStatus;
+		}
     /* Length and CRC check */
     if( ( usRcvBufferPos >= MB_SER_PDU_SIZE_MIN )
         && ( usMBCRC16( ( UCHAR * ) ucRTUBuf, usRcvBufferPos ) == 0 ) )
@@ -237,7 +243,12 @@ xMBRTUReceiveFSM( void )
     BOOL            xTaskNeedSwitch = FALSE;
     UCHAR           ucByte;
 
-    assert( eSndState == STATE_TX_IDLE );
+    //assert( eSndState == STATE_TX_IDLE );
+		if(eSndState != STATE_TX_IDLE)
+		{
+			eMBDisable();
+			return xTaskNeedSwitch;
+		}
 
     /* Always read the character. */
     ( void )xMBPortSerialGetByte( ( CHAR * ) & ucByte );
@@ -296,8 +307,18 @@ xMBRTUTransmitFSM( void )
 {
     BOOL            xNeedPoll = FALSE;
 
-    assert( eRcvState == STATE_RX_IDLE );
-
+    //assert( eRcvState == STATE_RX_IDLE );
+		if(eRcvState != STATE_RX_IDLE)
+		{
+			eMBDisable();
+			return xNeedPoll;
+		}
+//		if(eRcvState != STATE_RX_IDLE)
+//		{
+//			eMBDisable();
+//			eMBRTUStart();
+//			return xNeedPoll;
+//		}
     switch ( eSndState )
     {
         /* We should not get a transmitter event if the transmitter is in
@@ -317,6 +338,7 @@ xMBRTUTransmitFSM( void )
         }
         else
         {
+						
             xNeedPoll = xMBPortEventPost( EV_FRAME_SENT );
             /* Disable transmitter. This prevents another transmit buffer
              * empty interrupt. */
@@ -354,8 +376,13 @@ xMBRTUTimerT35Expired( void )
 
         /* Function called in an illegal state. */
     default:
-        assert( ( eRcvState == STATE_RX_INIT ) ||
-                ( eRcvState == STATE_RX_RCV ) || ( eRcvState == STATE_RX_ERROR ) );
+			{
+				eMBDisable();
+				eRcvState = STATE_RX_IDLE;
+				return xNeedPoll;
+				//  assert( ( eRcvState == STATE_RX_INIT ) ||
+				//          ( eRcvState == STATE_RX_RCV ) || ( eRcvState == STATE_RX_ERROR ) );
+			}
     }
 
     vMBPortTimersDisable(  );

+ 2 - 2
truing_control/PDU-AC_ADA_OLD8/user/board_cfg.h

@@ -51,12 +51,12 @@
 #define PT_SUB_COUNT_3             3
 #define PT_SUB_COUNT_4             4
 
-#define   PRJ_8_NEW									1
+#define   PRJ_8_NEW									0
 #define   PRJ_3_4                   0
 #define   PRJ_3_2                   0
 #define 	PRJ_DC_8									0
 
-#define 	PRJ_8_CHONGQING             0
+#define 	PRJ_8_CHONGQING           1
 
 
 

+ 5 - 0
truing_control/PDU-AC_ADA_OLD8/user/main.c

@@ -103,7 +103,12 @@ int main(){
 	
 	while(1)
 	{
+		if(eMBCheck())
+		{
+			eMBEnable();
+		}
 		ac_board.feed_dog();
+
 		task_query();
 		task_100ms();
 		task_1s();