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

新5路板,PWM 跳继电器电压

liyi месяцев назад: 5
Родитель
Сommit
29593f0e71

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

@@ -68,11 +68,11 @@ void read_config_from_eeprom(void)
 			//channel open or close
 			board->read_eeprom_page(EEPROM_STATUS_ADDR,(uint8_t *)&board->relay_staging_staus[0],2*RelaySlaveChaNum);
 			{
-				for(int i =0 ;i < RelaySlaveChaNum;i++)
+				for(int i = 0 ;i < RelaySlaveChaNum;i++)
 				{
 #ifndef SUPPORT_MON
 		#if SUPPORT_CTRL2_LOCK2
-					if(i < 2)
+					if(i < AVALIABLE_RELAY)
 					{
 						if(board->relay_staging_staus[i])
 						{

+ 1 - 0
truing_control/PDU-AC_ADA_NEW_6/common/common.h

@@ -776,6 +776,7 @@ typedef struct {
 	void (*relay_sync)(void);
 	void (*read_eeprom_page)(uint16_t addr,uint8_t *r_buff,uint16_t lenth);
 	void (*write_eeprom_page)(uint16_t addr,uint8_t *r_buff,uint16_t lenth);
+	void (*tog)(uint8_t channel);
 }board_t;
 
 

+ 183 - 8
truing_control/PDU-AC_ADA_NEW_6/hardware/detection/detection.c

@@ -37,10 +37,33 @@
 
 #endif
 
-#define    KEY_TEST_1_IO            GPIO_PIN_14
-#define    KEY_TEST_2_IO						GPIO_PIN_2
-#define    KEY_TEST_3_IO						GPIO_PIN_0
-#define    KEY_TEST_4_IO						GPIO_PIN_1
+#define    KEY_TEST_1_IO            					  GPIO_PIN_14
+#define  	 KEY_TEST_1_IO_SOURCE_RCU							EXTI_SOURCE_GPIOC
+#define    KEY_TEST_1_IO_SOURCE         				EXTI_SOURCE_PIN14
+#define    KEY_TEST_1_IO_EXIT      					  	EXTI_14
+
+
+
+#define    KEY_TEST_2_IO												GPIO_PIN_2
+#define  	 KEY_TEST_2_IO_SOURCE_RCU							EXTI_SOURCE_GPIOB
+#define    KEY_TEST_2_IO_SOURCE         			  EXTI_SOURCE_PIN2
+#define    KEY_TEST_2_IO_EXIT      					    EXTI_2
+
+
+
+#define    KEY_TEST_3_IO												GPIO_PIN_0
+#define  	 KEY_TEST_3_IO_SOURCE_RCU							EXTI_SOURCE_GPIOA
+#define    KEY_TEST_3_IO_SOURCE         			  EXTI_SOURCE_PIN0
+#define    KEY_TEST_3_IO_EXIT      					    EXTI_0
+
+
+
+
+#define    KEY_TEST_4_IO												GPIO_PIN_1
+#define  	 KEY_TEST_4_IO_SOURCE_RCU							EXTI_SOURCE_GPIOA
+#define    KEY_TEST_4_IO_SOURCE         			  EXTI_SOURCE_PIN1
+#define    KEY_TEST_4_IO_EXIT      					    EXTI_1
+
 
 
 #define    KEY_TEST_1_GPIO          GPIOC
@@ -163,12 +186,65 @@ void key_init(void)
 #endif
 	board->get_lock_key = get_lock_key;
 	board->opt_lock_key = self_lock_opt;
+	
+#elif SUPPORT_KEY_EXIT
+	rcu_periph_clock_enable(RCU_CFGCMP);
+	rcu_periph_clock_enable(RCU_GPIOC);
+	rcu_periph_clock_enable(RCU_GPIOA);
+	rcu_periph_clock_enable(RCU_GPIOB);
+	if(!board)
+	{
+		board = get_board();
+	}
+#if (RelaySlaveChaNum >= 1)
+	gpio_mode_set(KEY_TEST_1_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_1_IO);
+	nvic_irq_enable(EXTI4_15_IRQn,1);
+	syscfg_exti_line_config(KEY_TEST_1_IO_SOURCE_RCU,KEY_TEST_1_IO_SOURCE);
+	exti_init(KEY_TEST_1_IO_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
+	exti_interrupt_flag_clear(KEY_TEST_1_IO_EXIT);	
+#endif	
+	
+#if (RelaySlaveChaNum >= 2)
+	gpio_mode_set(KEY_TEST_2_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_2_IO);
+	nvic_irq_enable(EXTI2_3_IRQn,1);
+	syscfg_exti_line_config(KEY_TEST_2_IO_SOURCE_RCU,KEY_TEST_2_IO_SOURCE);
+	exti_init(KEY_TEST_2_IO_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
+	exti_interrupt_flag_clear(KEY_TEST_2_IO_EXIT);	
+#endif	
+	
+	
+#if (RelaySlaveChaNum >= 3)
+	gpio_mode_set(KEY_TEST_3_4_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_3_IO);
+	nvic_irq_enable(EXTI0_1_IRQn,1);
+	syscfg_exti_line_config(KEY_TEST_3_IO_SOURCE_RCU,KEY_TEST_3_IO_SOURCE);
+	exti_init(KEY_TEST_3_IO_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
+	exti_interrupt_flag_clear(KEY_TEST_3_IO_EXIT);	
+#endif	
+	
+#if (RelaySlaveChaNum >= 4)
+	gpio_mode_set(KEY_TEST_3_4_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_4_IO);
+	nvic_irq_enable(EXTI0_1_IRQn,1);
+	syscfg_exti_line_config(KEY_TEST_4_IO_SOURCE_RCU,KEY_TEST_4_IO_SOURCE);
+	exti_init(KEY_TEST_4_IO_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
+	exti_interrupt_flag_clear(KEY_TEST_4_IO_EXIT);	
+#endif	
+	
 
 #endif
 	
+
+	
+	
+	
 }
 
 
+extern uint8_t relay_flag[RelaySlaveChaNum];
+extern uint8_t relay_status[RelaySlaveChaNum];
+uint8_t relay_counter_flag[RelaySlaveChaNum];
+
+
+
 
 void EXTI4_15_IRQHandler(void){
 #if SUPPORT_ALL_ON_OFF
@@ -187,7 +263,7 @@ void EXTI4_15_IRQHandler(void){
 //						if(board->md_data.r_data.state.state[j].state == RELAY_CLOSE)
 //							continue;
 #if SUPPORT_CTRL2_LOCK2
-							if(j >= 2)
+							if(j >= AVALIABLE_RELAY)
 							{
 								continue;
 							}
@@ -201,6 +277,27 @@ void EXTI4_15_IRQHandler(void){
 			}
 		}
 	}
+#elif SUPPORT_KEY_EXIT
+
+#if (RelaySlaveChaNum >= 1)
+	if(RESET != exti_interrupt_flag_get(KEY_TEST_1_IO_EXIT))
+	{
+		exti_interrupt_flag_clear(KEY_TEST_1_IO_EXIT);
+		if(gpio_input_bit_get(KEY_TEST_1_GPIO,KEY_TEST_1_IO) == 0)
+		{
+				async_data da = {0};
+				da.fire_or_zero = _FIRE;
+				da.method = PROMPT_CTRL;
+				da.w_eep_flag = FLAG_W_EEP;
+				da.channel = 0;
+				da.reg = &board->relay_staging_staus[0];
+				da.status = board->md_data.r_data.state.state[0].state ? 0 : 1;
+				set_relay_sta_async(&da);	
+		}
+	}
+#endif
+
+
 #endif
 
 	if(RESET != exti_interrupt_flag_get(DERECTION_IO_1_EXIT))
@@ -219,6 +316,54 @@ void EXTI4_15_IRQHandler(void){
 	}
 
 }
+#if SUPPORT_KEY_EXIT
+void EXTI0_1_IRQHandler(void)
+{
+#if SUPPORT_DETECTION
+		if(board->md_data.r_data.detection & 0x1)	
+#endif
+		{
+#if (RelaySlaveChaNum >= 3)
+			if(RESET != exti_interrupt_flag_get(KEY_TEST_3_IO_EXIT))
+			{
+				exti_interrupt_flag_clear(KEY_TEST_3_IO_EXIT);
+				if(gpio_input_bit_get(KEY_TEST_3_4_GPIO,KEY_TEST_3_IO) == 0)
+				{
+						async_data da = {0};
+						da.fire_or_zero = _FIRE;
+						da.method = PROMPT_CTRL;
+						da.w_eep_flag = FLAG_W_EEP;
+						da.channel = 2;
+						da.reg = &board->relay_staging_staus[2];
+						da.status = board->md_data.r_data.state.state[2].state ? 0 : 1;
+						set_relay_sta_async(&da);			
+				}
+			}
+#endif
+	
+	
+	
+#if (RelaySlaveChaNum >= 4)
+		if(RESET != exti_interrupt_flag_get(KEY_TEST_4_IO_EXIT))
+		{
+			exti_interrupt_flag_clear(KEY_TEST_4_IO_EXIT);
+			if(gpio_input_bit_get(KEY_TEST_3_4_GPIO,KEY_TEST_4_IO) == 0)
+			{
+					async_data da = {0};
+					da.fire_or_zero = _FIRE;
+					da.method = PROMPT_CTRL;
+					da.w_eep_flag = FLAG_W_EEP;
+					da.channel = 3;
+					da.reg = &board->relay_staging_staus[3];
+					da.status = board->md_data.r_data.state.state[3].state ? 0 : 1;
+					set_relay_sta_async(&da);			
+			}
+		}
+#endif	
+	}
+}
+
+#endif
 
 
 void EXTI2_3_IRQHandler(void)
@@ -244,7 +389,7 @@ void EXTI2_3_IRQHandler(void)
 //						if(board->md_data.r_data.state.state[k].state ==RELAY_OPEN)
 //							continue;
 #if SUPPORT_CTRL2_LOCK2
-							if(k >= 2)
+							if(k >= AVALIABLE_RELAY)
 							{
 								continue;
 							}
@@ -280,6 +425,32 @@ void EXTI2_3_IRQHandler(void)
 			
 		}
 	}
+#elif SUPPORT_KEY_EXIT
+
+#if (RelaySlaveChaNum >= 2)
+	if(RESET != exti_interrupt_flag_get(KEY_TEST_2_IO_EXIT))
+	{
+		exti_interrupt_flag_clear(KEY_TEST_2_IO_EXIT);
+#if SUPPORT_DETECTION
+		if(board->md_data.r_data.detection & 0x1)	
+#endif
+		{
+			if(gpio_input_bit_get(KEY_TEST_2_GPIO,KEY_TEST_2_IO) == 0)
+			{
+					async_data da = {0};
+					da.fire_or_zero = _FIRE;
+					da.method = PROMPT_CTRL;
+					da.w_eep_flag = FLAG_W_EEP;
+					da.channel = 1;
+					da.reg = &board->relay_staging_staus[1];
+					da.status = board->md_data.r_data.state.state[1].state ? 0 : 1;
+					set_relay_sta_async(&da);		
+			}
+		}
+	}
+#endif
+
+	
 #endif	
 #if SURPPORT_2_PT
 	if(RESET != exti_interrupt_flag_get(DERECTION_IO_2_EXIT))
@@ -297,6 +468,10 @@ void EXTI2_3_IRQHandler(void)
 		
 	}	
 #endif
+
+
+
+
 }
 
 static void get_detection()
@@ -337,7 +512,7 @@ static void detection_opt(void)
 									continue;
 #endif
 #if SUPPORT_CTRL2_LOCK2
-							if(k >= 2)
+							if(k >= AVALIABLE_RELAY)
 							{
 								continue;
 							}
@@ -360,7 +535,7 @@ static void detection_opt(void)
 						for(uint8_t k = 0; k < PT_SUB_COUNT;k++)
 						{
 #if SUPPORT_CTRL2_LOCK2
-							if(k >= 2)
+							if(k >= AVALIABLE_RELAY)
 							{
 								continue;
 							}

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

@@ -176,7 +176,7 @@ static void opt_over_func(uint8_t channel)
 	{
 		board->over_func[channel] = 0;
 #if SUPPORT_CTRL2_LOCK2
-		if(channel >= 2)
+		if(channel >= AVALIABLE_RELAY)
 				return;
 #endif
 #ifndef SUPPORT_MON

+ 75 - 1
truing_control/PDU-AC_ADA_NEW_6/hardware/relay/relay.c

@@ -54,34 +54,50 @@
 
 #define RELAY_1_ON         gpio_bit_set(RELAY_GPIO,RELAY_1);
 #define RELAY_1_OFF        gpio_bit_reset(RELAY_GPIO,RELAY_1);
+#define RELAY_1_TOG			 gpio_bit_toggle(RELAY_GPIO,RELAY_1);
+
 
 #define RELAY_2_ON         gpio_bit_set(RELAY_GPIO,RELAY_2);
 #define RELAY_2_OFF        gpio_bit_reset(RELAY_GPIO,RELAY_2);
+#define RELAY_2_TOG			 gpio_bit_toggle(RELAY_GPIO,RELAY_2);
 
 #define RELAY_3_ON         gpio_bit_set(RELAY_GPIO,RELAY_3);
 #define RELAY_3_OFF        gpio_bit_reset(RELAY_GPIO,RELAY_3);
+#define RELAY_3_TOG			 gpio_bit_toggle(RELAY_GPIO,RELAY_3);
 
 #define RELAY_4_ON         gpio_bit_set(RELAY_GPIO,RELAY_4);
 #define RELAY_4_OFF        gpio_bit_reset(RELAY_GPIO,RELAY_4);
+#define RELAY_4_TOG			 gpio_bit_toggle(RELAY_GPIO,RELAY_4);
+
 
 #define RELAY_5_ON         gpio_bit_set(RELAY_GPIO,RELAY_5);
 #define RELAY_5_OFF        gpio_bit_reset(RELAY_GPIO,RELAY_5);
+#define RELAY_5_TOG			 gpio_bit_toggle(RELAY_GPIO,RELAY_5);
+
+
 
 #define RELAY_6_ON         gpio_bit_set(RELAY_GPIO,RELAY_6);
 #define RELAY_6_OFF        gpio_bit_reset(RELAY_GPIO,RELAY_6);
+#define RELAY_6_TOG			 gpio_bit_toggle(RELAY_GPIO,RELAY_6);
+
+
 
 #define RELAY_7_ON         gpio_bit_set(RELAY_GPIO,RELAY_7);
 #define RELAY_7_OFF        gpio_bit_reset(RELAY_GPIO,RELAY_7);
+#define RELAY_7_TOG			 gpio_bit_toggle(RELAY_GPIO,RELAY_7);
+
+
 
 #define RELAY_8_ON         gpio_bit_set(RELAY_GPIO,RELAY_8);
 #define RELAY_8_OFF        gpio_bit_reset(RELAY_GPIO,RELAY_8);
-
+#define RELAY_8_TOG			 gpio_bit_toggle(RELAY_GPIO,RELAY_8);
 
 
 
 static void relay_open(uint8_t channel);
 static void relay_close(uint8_t channel);
 static void relay_sync(void);
+static void relay_tog(uint8_t channel);
 static void relay_zero_open(uint8_t channel);
 static void relay_zero_close(uint8_t channel);
 
@@ -113,7 +129,11 @@ void relay_init(void)
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,RELAY_3);
 		gpio_output_options_set(RELAY_GPIO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_3);
 		#if SUPPORT_CTRL2_LOCK2
+			#if (AVALIABLE_RELAY > 3)
 				gpio_bit_set(RELAY_GPIO, RELAY_3);
+			#else
+				gpio_bit_reset(RELAY_GPIO, RELAY_3);
+			#endif
 		#else
 			#if SUPPORT_MON
 				gpio_bit_set(RELAY_GPIO, RELAY_3);
@@ -187,7 +207,61 @@ void relay_init(void)
 
 	board->open = relay_open;
 	board->close = relay_close;
+	board->tog = relay_tog;
 }
+static void relay_tog(uint8_t channel)
+{
+		board_t * board = get_board();
+		switch(channel)
+		{
+	#if (RelaySlaveChaNum >= 1)
+			case 0:
+				RELAY_1_TOG;
+			break;
+	#endif
+	#if (RelaySlaveChaNum >= 2)
+			case 1:
+				RELAY_2_TOG;
+				break;
+	#endif
+	#if (RelaySlaveChaNum >= 3)
+			case 2:
+				RELAY_3_TOG;
+				break;
+	#endif
+	#if (RelaySlaveChaNum >= 4)
+			case 3:
+				RELAY_4_TOG;
+				break;
+	#endif
+	#if (RelaySlaveChaNum >= 5)
+			case 4:
+				RELAY_5_TOG;
+				break;
+	#endif
+	#if (RelaySlaveChaNum >= 6)
+			case 5:
+				RELAY_6_TOG;
+				break;
+	#endif
+	#if (RelaySlaveChaNum >= 7)
+			case 6:
+				RELAY_7_TOG;
+				break;
+	#endif
+	#if (RelaySlaveChaNum >= 8)
+			case 7:
+				RELAY_8_TOG;
+				break;
+	#endif
+
+			default:
+				return;
+		}
+		board->unlock();
+		board->lock();
+}
+
 
 static void relay_open(uint8_t channel)
 {

+ 59 - 1
truing_control/PDU-AC_ADA_NEW_6/hardware/timer/timer.c

@@ -15,6 +15,7 @@
 
 static board_t *board = 0;
 static  void timer14_config(uint16_t arr,uint16_t psc);
+static void timer15_config(uint16_t arr,uint16_t psc);
 static void relay_remember(void);
 
 static  uint16_t count_1s = 0;
@@ -22,13 +23,19 @@ static  uint16_t count_10s = 0;
 static  uint16_t count_100ms = 0;
 
 uint16_t rl_delay_cnt[RelaySlaveChaNum] = {0};
+uint16_t rl_delay_flag[RelaySlaveChaNum] = {0};
+uint8_t rl_open_delay_flag[RelaySlaveChaNum] = {0};
+uint8_t rl_open_delay_count[RelaySlaveChaNum] = {0};
+uint8_t rl_pwm_flag[RelaySlaveChaNum] = {0};
 
 
 void time_init(void)
 {
-	timer14_config(9999,71);
+	timer14_config(9999,71);;
+	timer15_config(24,71);
 }
 
+
 static void timer14_config(uint16_t arr,uint16_t psc)
 {
 	board = get_board();
@@ -49,6 +56,9 @@ static void timer14_config(uint16_t arr,uint16_t psc)
 	timer_enable(TIMER14);
 }
 
+extern uint8_t relay_counter_flag[RelaySlaveChaNum];
+
+
 void TIMER14_IRQHandler(void)
 {
 	if(timer_interrupt_flag_get(TIMER14, TIMER_INT_FLAG_UP) == SET)
@@ -72,6 +82,18 @@ void TIMER14_IRQHandler(void)
 					SET_RL_COUNTER_END_FLAG(board->relay_staging_staus[i]);
 				}
 			}
+			if(rl_open_delay_flag[i])
+			{
+				if(rl_open_delay_count[i] < 3)
+				{
+					rl_open_delay_count[i]++;
+				}else
+				{
+					rl_pwm_flag[i] = 1;
+					rl_open_delay_count[i] = 0;
+					rl_open_delay_flag[i] = 0;
+				}
+			}
 		}
 		if(count_1s == 100)
 		{
@@ -109,3 +131,39 @@ void TIMER14_IRQHandler(void)
 }
 
 
+static void timer15_config(uint16_t arr,uint16_t psc)
+{
+	board = get_board();
+	
+	timer_parameter_struct timer_initpara;
+	rcu_periph_clock_enable(RCU_TIMER15);
+	timer_deinit(TIMER15); 
+	timer_struct_para_init(&timer_initpara);
+	
+	timer_initpara.prescaler         = psc;
+	timer_initpara.counterdirection  = TIMER_COUNTER_UP;
+	timer_initpara.period            = arr; 
+	timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
+	timer_init(TIMER15, &timer_initpara);
+	
+	timer_interrupt_enable(TIMER15, TIMER_INT_UP);
+	nvic_irq_enable(TIMER15_IRQn, 2);
+	timer_enable(TIMER15);
+}
+void TIMER15_IRQHandler(void)
+{
+	if(timer_interrupt_flag_get(TIMER15, TIMER_INT_FLAG_UP) == SET)
+	{
+		timer_interrupt_flag_clear(TIMER15, TIMER_INT_FLAG_UP);
+	}
+	board = get_board();
+	for(int i = 0; i < RelaySlaveChaNum;i++)
+	{
+		if(board->md_data.r_data.state.state[i].state == 1 && rl_pwm_flag[i])
+		{
+			board->tog(i);
+		}
+	}
+
+}
+

+ 1 - 1
truing_control/PDU-AC_ADA_NEW_6/hardware/timer/timer.h

@@ -13,6 +13,6 @@
 
 
 void time_init(void);
-
+void time2_init(void);
 
 #endif

+ 3 - 3
truing_control/PDU-AC_ADA_NEW_6/modbus/BARE/port/port.c

@@ -259,7 +259,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 													continue;
 #endif
 #if SUPPORT_CTRL2_LOCK2
-												if(j >= 2)
+												if(j >= AVALIABLE_RELAY)
 												{
 													continue;
 												}
@@ -279,7 +279,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 													continue;										
 #endif
 #if SUPPORT_CTRL2_LOCK2
-												if(j >= 2)
+												if(j >= AVALIABLE_RELAY)
 												{
 													continue;
 												}
@@ -310,7 +310,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 													continue;										
 #endif
 #if SUPPORT_CTRL2_LOCK2
-												if((start + j) >= 2)
+												if((start + j) >= AVALIABLE_RELAY)
 												{
 													continue;
 												}

+ 4 - 1
truing_control/PDU-AC_ADA_NEW_6/modbus/BARE/port/portserial.c

@@ -44,6 +44,8 @@ vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
 		{
 			usart_interrupt_disable(USART0,USART_INT_RBNE);
 			usart_interrupt_disable(USART0,USART_INT_TC);
+			usart_disable(USART0);
+			nvic_irq_disable(USART0_IRQn); 
 			gpio_bit_reset(GPIOA, GPIO_PIN_8);
 			return;
 		}
@@ -71,6 +73,7 @@ vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
     }
 }
 
+
 BOOL
 xMBPortSerialInit( UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity )
 {
@@ -139,7 +142,7 @@ void USART0_IRQHandler(void)
   if(usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE) != RESET)  //接收缓冲区非空中断
   {   
 		usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE);  //清除USART1中断挂起   
-		prvvUARTRxISR();		                                                                                   
+		prvvUARTRxISR();
   }                                                         
                                                             
   if(usart_flag_get(USART0, USART_FLAG_ORERR) == SET) //溢出错误标志为1

+ 1 - 0
truing_control/PDU-AC_ADA_NEW_6/modbus/mb.c

@@ -313,6 +313,7 @@ eMBDisable( void )
     if( eMBState == STATE_ENABLED )
     {
         pvMBFrameStopCur(  );
+
         eMBState = STATE_DISABLED;
         eStatus = MB_ENOERR;
     }

+ 3 - 0
truing_control/PDU-AC_ADA_NEW_6/modbus/rtu/mbrtu.c

@@ -247,6 +247,8 @@ xMBRTUReceiveFSM( void )
 		if(eSndState != STATE_TX_IDLE)
 		{
 			eMBDisable();
+			eSndState = STATE_TX_IDLE;
+			xMBPortSerialGetByte( ( CHAR * ) & ucByte );
 			return xTaskNeedSwitch;
 		}
 
@@ -311,6 +313,7 @@ xMBRTUTransmitFSM( void )
 		if(eRcvState != STATE_RX_IDLE)
 		{
 			eMBDisable();
+			eRcvState = STATE_RX_IDLE;
 			return xNeedPoll;
 		}
 //		if(eRcvState != STATE_RX_IDLE)

+ 28 - 1
truing_control/PDU-AC_ADA_NEW_6/user/board_cfg.h

@@ -137,8 +137,14 @@
 	#define   PT_SUB_COUNT              (RelaySlaveChaNum)
 	#define   SUPPORT_DETECTION         1
 	#define   SUPPORT_RELAY_REMENBER		1
-	
+	#define   SUPPORT_ALL_ON_OFF    		1
 #elif PRJ_5_NEW
+//	#define 	RelaySlaveChaNum 					5
+//	#define 	ACSingCurrid 							1 
+//	#define   SURPPORT_2_PT             1
+//	#define   PT_SUB_COUNT              (PT_SUB_COUNT_3)
+//	#define   SUPPORT_DETECTION         1
+//	#define   SUPPORT_RELAY_REMENBER		1
 	#define 	RelaySlaveChaNum 					5
 	#define 	ACSingCurrid 							1 
 	#define   SURPPORT_2_PT             0
@@ -153,6 +159,16 @@
 	#define   SUPPORT_DETECTION         1
 	#define   SUPPORT_RELAY_REMENBER		1
 	#define   SUPPORT_SELF_LOCK         1
+#elif PRJ_4_KEY_EXIT
+
+	#define 	RelaySlaveChaNum 					4
+	#define 	ACSingCurrid 							2 
+	#define   SURPPORT_2_PT             0
+	#define   PT_SUB_COUNT              (RelaySlaveChaNum)
+	#define   SUPPORT_DETECTION         1
+	#define   SUPPORT_RELAY_REMENBER		1
+	#define   SUPPORT_KEY_EXIT          1
+
 #elif PRJ_4_BASE
 	#define 	RelaySlaveChaNum 					4
 	#define 	ACSingCurrid 							2 
@@ -170,6 +186,17 @@
 	#define   SUPPORT_RELAY_REMENBER		1
 	#define   SUPPORT_ALL_ON_OFF    		1
 	#define   SUPPORT_CTRL2_LOCK2       1
+	#define   AVALIABLE_RELAY           2
+#elif PPRJ_4_BASE_3_1
+	#define 	RelaySlaveChaNum 					4
+	#define 	ACSingCurrid 							2 
+	#define   SURPPORT_2_PT             0
+	#define   PT_SUB_COUNT              (RelaySlaveChaNum)
+	#define   SUPPORT_DETECTION         1
+	#define   SUPPORT_RELAY_REMENBER		1
+	#define   SUPPORT_ALL_ON_OFF    		1
+	#define   SUPPORT_CTRL2_LOCK2       1
+	#define   AVALIABLE_RELAY           3 
 #elif PRJ_1_BASE              
 	#define 	RelaySlaveChaNum 					1
 	#define 	ACSingCurrid 							2 

+ 6 - 8
truing_control/PDU-AC_ADA_NEW_6/user/main.c

@@ -31,9 +31,8 @@ board_t *get_board()
 }
 
 extern uint16_t rl_delay_cnt[RelaySlaveChaNum];
-
-
-
+extern uint8_t rl_open_delay_flag[RelaySlaveChaNum];
+extern uint8_t rl_pwm_flag[RelaySlaveChaNum];
 static void task_query(void);
 static void task_1s(void);
 static void task_10s(void);
@@ -60,13 +59,10 @@ int main(){
 	query_init();
 	key_init();
 	//device
-	
 	fwdgt_Init();
 	eMBInit(MB_RTU, ac_board.haddr, 0, 115200, MB_PAR_NONE);
 	eMBEnable();
 	
-	
-	
 	ac_board.md_data.r_data.info.channels = RelaySlaveChaNum;
 	strcpy((char*)&(ac_board.md_data.r_data.info.date),__DATE__);
 	strcat((char*)&(ac_board.md_data.r_data.info.date)," ");
@@ -132,6 +128,7 @@ int main(){
 	{
 		if(eMBCheck())
 		{
+			eMBInit(MB_RTU, ac_board.haddr, 0, 115200, MB_PAR_NONE);
 			eMBEnable();
 		}
 		ac_board.feed_dog();
@@ -248,7 +245,7 @@ static void relay_ctrl(void)
 				CLEAR_RL_OFF_FLAG(ac_board.relay_staging_staus[i]);
 				if(IS_RL_ON_DELAY_FLAG_EN(ac_board.relay_staging_staus[i]))
 				{
-					ac_board.relay_limit_counter[i] = ac_board.md_data.rw_data.open.delay_open[i] / 10;
+					ac_board.relay_limit_counter[i] = ac_board.md_data.rw_data.open.delay_open[i]/10;
 					CLEAR_RL_COUNTER_END_FLAG(ac_board.relay_staging_staus[i]);
 					SET_RL_COUNTER_BEGIN_FLAG(ac_board.relay_staging_staus[i]);
 					rl_delay_cnt[i] = 0;
@@ -294,12 +291,13 @@ static void relay_ctrl(void)
 			{
 				CLEAR_RL_ON_FLAG(ac_board.relay_staging_staus[i]);
 				ac_board.open(i);
+				rl_open_delay_flag[i] = 1;
 			}else if(IS_RL_OFF_FLAG_EN(ac_board.relay_staging_staus[i]))
 			{
+				rl_pwm_flag[i] = 0;
 				CLEAR_RL_OFF_FLAG(ac_board.relay_staging_staus[i]);
 				ac_board.close(i);
 			}
 		}
 	}
-
 }