Przeglądaj źródła

整合控制板,Modbus节约释放内存,PWM继电器输出,波特率38400,带升级,升级程序波特率38400.

liyi 3 miesięcy temu
rodzic
commit
cf03fba61f

+ 2 - 2
truring_ctrl_upgrade/PDU-AC_ADA_NEW/common/common.c

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

+ 3 - 0
truring_ctrl_upgrade/PDU-AC_ADA_NEW/common/common.h

@@ -247,10 +247,12 @@
 #define EEPROM_DEVICES_LENTH                  (2)
 #define EEPROM_DEVICES_LENTH                  (2)
 
 
 
 
+
 #define EEPROM_STATUS_ADDR                    (64)			// one page
 #define EEPROM_STATUS_ADDR                    (64)			// one page
 #define EEPROM_STATUS_LENTH                   (16*2)
 #define EEPROM_STATUS_LENTH                   (16*2)
 
 
 
 
+
 #define EEPROM_OTHER_ADDR                     (128)
 #define EEPROM_OTHER_ADDR                     (128)
 #define EEPROM_OTHER_LENTH                    (32*30)   // 30 page    
 #define EEPROM_OTHER_LENTH                    (32*30)   // 30 page    
 
 
@@ -775,6 +777,7 @@ typedef struct {
 	void (*relay_sync)(void);
 	void (*relay_sync)(void);
 	void (*read_eeprom_page)(uint16_t addr,uint8_t *r_buff,uint16_t lenth);
 	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 (*write_eeprom_page)(uint16_t addr,uint8_t *r_buff,uint16_t lenth);
+	void (*tog)(uint8_t channel);
 }board_t;
 }board_t;
 
 
 
 

+ 243 - 15
truring_ctrl_upgrade/PDU-AC_ADA_NEW/hardware/detection/detection.c

@@ -37,15 +37,41 @@
 
 
 #endif
 #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_5_IO												GPIO_PIN_12
+#define  	 KEY_TEST_5_IO_SOURCE_RCU							EXTI_SOURCE_GPIOA
+#define    KEY_TEST_5_IO_SOURCE         			  EXTI_SOURCE_PIN12
+#define    KEY_TEST_5_IO_EXIT      					    EXTI_12
+
 #define    KEY_TEST_1_GPIO          GPIOC
 #define    KEY_TEST_1_GPIO          GPIOC
 #define    KEY_TEST_2_GPIO					GPIOB
 #define    KEY_TEST_2_GPIO					GPIOB
-#define 	 KEY_TEST_3_4_GPIO        GPIOA
+#define 	 KEY_TEST_3_4_5_GPIO        GPIOA
 
 
 
 
 
 
@@ -163,18 +189,83 @@ void key_init(void)
 #endif
 #endif
 	board->get_lock_key = get_lock_key;
 	board->get_lock_key = get_lock_key;
 	board->opt_lock_key = self_lock_opt;
 	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_5_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_5_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	
+	
+#if (RelaySlaveChaNum >= 5)
+	gpio_mode_set(KEY_TEST_3_4_5_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_5_IO);
+	nvic_irq_enable(EXTI4_15_IRQn,1);
+	syscfg_exti_line_config(KEY_TEST_5_IO_SOURCE_RCU,KEY_TEST_5_IO_SOURCE);
+	exti_init(KEY_TEST_5_IO_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
+	exti_interrupt_flag_clear(KEY_TEST_5_IO_EXIT);	
+#endif	
 
 
 #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){
 void EXTI4_15_IRQHandler(void){
 #if SUPPORT_ALL_ON_OFF
 #if SUPPORT_ALL_ON_OFF
 	if(RESET != exti_interrupt_flag_get(KEY_RST_EXTI))
 	if(RESET != exti_interrupt_flag_get(KEY_RST_EXTI))
 	{
 	{
 		exti_interrupt_flag_clear(KEY_RST_EXTI);
 		exti_interrupt_flag_clear(KEY_RST_EXTI);
+		for(int i = 0;i < 30;i++);
+		if(gpio_input_bit_get(KEY_RST_IO,KEY_RST) != 0)
+		{
+			return;
+		}
 		if(board)
 		if(board)
 		{
 		{
 			if(gpio_input_bit_get(KEY_TEST_IO,KEY_TEST) != 0)
 			if(gpio_input_bit_get(KEY_TEST_IO,KEY_TEST) != 0)
@@ -187,7 +278,7 @@ void EXTI4_15_IRQHandler(void){
 //						if(board->md_data.r_data.state.state[j].state == RELAY_CLOSE)
 //						if(board->md_data.r_data.state.state[j].state == RELAY_CLOSE)
 //							continue;
 //							continue;
 #if SUPPORT_CTRL2_LOCK2
 #if SUPPORT_CTRL2_LOCK2
-							if(j >= 2)
+							if(j >= AVALIABLE_RELAY)
 							{
 							{
 								continue;
 								continue;
 							}
 							}
@@ -201,19 +292,115 @@ 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);
+		for(int i = 0;i <30;i++);
+		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
+	
+#if (RelaySlaveChaNum >= 5)
+	if(RESET != exti_interrupt_flag_get(KEY_TEST_5_IO_EXIT))
+	{
+		exti_interrupt_flag_clear(KEY_TEST_5_IO_EXIT);
+		for(int i = 0;i <30;i++);
+		if(gpio_input_bit_get(KEY_TEST_3_4_5_GPIO,KEY_TEST_5_IO) == 0)
+		{
+				async_data da = {0};
+				da.fire_or_zero = _FIRE;
+				da.method = PROMPT_CTRL;
+				da.w_eep_flag = FLAG_W_EEP;
+				da.channel = 4;
+				da.reg = &board->relay_staging_staus[4];
+				da.status = board->md_data.r_data.state.state[4].state ? 0 : 1;
+				set_relay_sta_async(&da);	
+		}
+	}
+#endif
+
+
 #endif
 #endif
 
 
 	if(RESET != exti_interrupt_flag_get(DERECTION_IO_1_EXIT))
 	if(RESET != exti_interrupt_flag_get(DERECTION_IO_1_EXIT))
 	{
 	{
+		exti_interrupt_flag_clear(DERECTION_IO_1_EXIT);
 		if(board)
 		if(board)
 		{
 		{
-			board->detection_1_value = 1;
-			board->detection_1_count = 0;
+			//for(int i = 0;i <20;i++);
+			if(gpio_input_bit_get(DERECTION_GPIO_1,DERECTION_IO_1) == 0)
+			{
+				board->detection_1_value = 1;
+				board->detection_1_count = 0;
+			}
 		}
 		}
-		exti_interrupt_flag_clear(DERECTION_IO_1_EXIT);
+		
 	}
 	}
 
 
 }
 }
+#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);
+				for(int i = 0;i <30;i++);
+				if(gpio_input_bit_get(KEY_TEST_3_4_5_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);
+			for(int i = 0;i <30;i++);
+			if(gpio_input_bit_get(KEY_TEST_3_4_5_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)
 void EXTI2_3_IRQHandler(void)
@@ -222,6 +409,11 @@ void EXTI2_3_IRQHandler(void)
 	if(RESET != exti_interrupt_flag_get(KEY_TEST_EXTI))
 	if(RESET != exti_interrupt_flag_get(KEY_TEST_EXTI))
 	{
 	{
 		exti_interrupt_flag_clear(KEY_TEST_EXTI);
 		exti_interrupt_flag_clear(KEY_TEST_EXTI);
+		for(int i = 0;i < 30;i++);
+		if(gpio_input_bit_get(KEY_TEST_IO,KEY_TEST) != 0)
+		{
+			return;
+		}
 		if(board)
 		if(board)
 		{
 		{
 			if(gpio_input_bit_get(KEY_RST_IO,KEY_RST) != 0)
 			if(gpio_input_bit_get(KEY_RST_IO,KEY_RST) != 0)
@@ -239,7 +431,7 @@ void EXTI2_3_IRQHandler(void)
 //						if(board->md_data.r_data.state.state[k].state ==RELAY_OPEN)
 //						if(board->md_data.r_data.state.state[k].state ==RELAY_OPEN)
 //							continue;
 //							continue;
 #if SUPPORT_CTRL2_LOCK2
 #if SUPPORT_CTRL2_LOCK2
-							if(k >= 2)
+							if(k >= AVALIABLE_RELAY)
 							{
 							{
 								continue;
 								continue;
 							}
 							}
@@ -275,18 +467,54 @@ 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
+		{
+			for(int i = 0;i <30;i++);
+			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	
 #endif	
 #if SURPPORT_2_PT
 #if SURPPORT_2_PT
 	if(RESET != exti_interrupt_flag_get(DERECTION_IO_2_EXIT))
 	if(RESET != exti_interrupt_flag_get(DERECTION_IO_2_EXIT))
 	{
 	{
+		exti_interrupt_flag_clear(DERECTION_IO_2_EXIT);
 		if(board)
 		if(board)
 		{
 		{
-			board->detection_2_value = 1;
-			board->detection_2_count = 0;
+			//for(int i = 0;i <20;i++);
+			if(gpio_input_bit_get(DERECTION_GPIO_2,DERECTION_IO_2) == 0)
+			{
+				board->detection_2_value = 1;
+				board->detection_2_count = 0;
+			}
 		}
 		}
-		exti_interrupt_flag_clear(DERECTION_IO_2_EXIT);
+		
 	}	
 	}	
 #endif
 #endif
+
+
+
+
 }
 }
 
 
 static void get_detection()
 static void get_detection()
@@ -327,7 +555,7 @@ static void detection_opt(void)
 									continue;
 									continue;
 #endif
 #endif
 #if SUPPORT_CTRL2_LOCK2
 #if SUPPORT_CTRL2_LOCK2
-							if(k >= 2)
+							if(k >= AVALIABLE_RELAY)
 							{
 							{
 								continue;
 								continue;
 							}
 							}
@@ -350,7 +578,7 @@ static void detection_opt(void)
 						for(uint8_t k = 0; k < PT_SUB_COUNT;k++)
 						for(uint8_t k = 0; k < PT_SUB_COUNT;k++)
 						{
 						{
 #if SUPPORT_CTRL2_LOCK2
 #if SUPPORT_CTRL2_LOCK2
-							if(k >= 2)
+							if(k >= AVALIABLE_RELAY)
 							{
 							{
 								continue;
 								continue;
 							}
 							}

+ 5 - 2
truring_ctrl_upgrade/PDU-AC_ADA_NEW/hardware/electricity/electricity.c

@@ -69,7 +69,7 @@ static void read_ele(uint8_t channel)
 			reinit_hlw8110();
 			reinit_hlw8110();
 			Calculate_HLW8110_MeterData();
 			Calculate_HLW8110_MeterData();
 		}
 		}
-		if(F_AC_V < 1.0)
+		if(F_AC_V < 2.0)
 		{
 		{
 			F_AC_V = 0.0;
 			F_AC_V = 0.0;
 			F_AC_I = 0.0;
 			F_AC_I = 0.0;
@@ -81,6 +81,9 @@ static void read_ele(uint8_t channel)
 			F_AC_I = 0.0;
 			F_AC_I = 0.0;
 			F_AC_P = 0.0;
 			F_AC_P = 0.0;
 			F_AC_PF = 0.0;
 			F_AC_PF = 0.0;
+		}else if(F_AC_LINE_Freq > 100)
+		{
+			F_AC_LINE_Freq = 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].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].current = F_AC_I * 1000;
@@ -176,7 +179,7 @@ static void opt_over_func(uint8_t channel)
 	{
 	{
 		board->over_func[channel] = 0;
 		board->over_func[channel] = 0;
 #if SUPPORT_CTRL2_LOCK2
 #if SUPPORT_CTRL2_LOCK2
-		if(channel >= 2)
+		if(channel >= AVALIABLE_RELAY)
 				return;
 				return;
 #endif
 #endif
 #ifndef SUPPORT_MON
 #ifndef SUPPORT_MON

+ 130 - 17
truring_ctrl_upgrade/PDU-AC_ADA_NEW/hardware/relay/relay.c

@@ -54,34 +54,50 @@
 
 
 #define RELAY_1_ON         gpio_bit_set(RELAY_GPIO,RELAY_1);
 #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_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_ON         gpio_bit_set(RELAY_GPIO,RELAY_2);
 #define RELAY_2_OFF        gpio_bit_reset(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_ON         gpio_bit_set(RELAY_GPIO,RELAY_3);
 #define RELAY_3_OFF        gpio_bit_reset(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_ON         gpio_bit_set(RELAY_GPIO,RELAY_4);
 #define RELAY_4_OFF        gpio_bit_reset(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_ON         gpio_bit_set(RELAY_GPIO,RELAY_5);
 #define RELAY_5_OFF        gpio_bit_reset(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_ON         gpio_bit_set(RELAY_GPIO,RELAY_6);
 #define RELAY_6_OFF        gpio_bit_reset(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_ON         gpio_bit_set(RELAY_GPIO,RELAY_7);
 #define RELAY_7_OFF        gpio_bit_reset(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_ON         gpio_bit_set(RELAY_GPIO,RELAY_8);
 #define RELAY_8_OFF        gpio_bit_reset(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_open(uint8_t channel);
 static void relay_close(uint8_t channel);
 static void relay_close(uint8_t channel);
 static void relay_sync(void);
 static void relay_sync(void);
+static void relay_tog(uint8_t channel);
 static void relay_zero_open(uint8_t channel);
 static void relay_zero_open(uint8_t channel);
 static void relay_zero_close(uint8_t channel);
 static void relay_zero_close(uint8_t channel);
 
 
@@ -94,21 +110,37 @@ void relay_init(void)
 	#if (RelaySlaveChaNum >=1)
 	#if (RelaySlaveChaNum >=1)
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,RELAY_1);
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,RELAY_1);
 		gpio_output_options_set(RELAY_GPIO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_1);
 		gpio_output_options_set(RELAY_GPIO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_1);
-		gpio_bit_reset(RELAY_GPIO, RELAY_1);
+		#if SUPPORT_MON
+			gpio_bit_set(RELAY_GPIO, RELAY_1);
+		#else
+			gpio_bit_reset(RELAY_GPIO, RELAY_1);
+		#endif
 	#endif
 	#endif
 	#if (RelaySlaveChaNum >=2)
 	#if (RelaySlaveChaNum >=2)
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,RELAY_2);
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,RELAY_2);
 		gpio_output_options_set(RELAY_GPIO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_2);
 		gpio_output_options_set(RELAY_GPIO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_2);
-		gpio_bit_reset(RELAY_GPIO, RELAY_2);
+		#if SUPPORT_MON
+			gpio_bit_set(RELAY_GPIO, RELAY_2);
+		#else
+			gpio_bit_reset(RELAY_GPIO, RELAY_2);
+		#endif
 	#endif
 	#endif
 	#if (RelaySlaveChaNum >=3)
 	#if (RelaySlaveChaNum >=3)
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,RELAY_3);
 		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);
 		gpio_output_options_set(RELAY_GPIO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_3);
-#if SUPPORT_CTRL2_LOCK2
-		gpio_bit_set(RELAY_GPIO, RELAY_3);
-#else
-		gpio_bit_reset(RELAY_GPIO, RELAY_3);
-#endif
+		#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);
+			#else
+				gpio_bit_reset(RELAY_GPIO, RELAY_3);
+			#endif
+		#endif
 	#endif
 	#endif
 #if SUPPORT_4_ON_FLASH
 #if SUPPORT_4_ON_FLASH
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,RELAY_4);
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,RELAY_4);
@@ -119,40 +151,121 @@ void relay_init(void)
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,RELAY_4);
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,RELAY_4);
 		gpio_output_options_set(RELAY_GPIO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_4);
 		gpio_output_options_set(RELAY_GPIO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_4);
 		
 		
-#if SUPPORT_CTRL2_LOCK2
-		gpio_bit_set(RELAY_GPIO, RELAY_4);
-#else
-		gpio_bit_reset(RELAY_GPIO, RELAY_4);
-#endif
+		#if SUPPORT_CTRL2_LOCK2
+			#if (AVALIABLE_RELAY < 4)
+				gpio_bit_set(RELAY_GPIO, RELAY_4);
+			#else
+				gpio_bit_reset(RELAY_GPIO, RELAY_4);
+			#endif
+		#else
+			#if SUPPORT_MON
+				gpio_bit_set(RELAY_GPIO, RELAY_4);
+			#else
+				gpio_bit_reset(RELAY_GPIO, RELAY_4);
+			#endif
+		#endif
 	#endif
 	#endif
 	
 	
 	#if (RelaySlaveChaNum >=5)
 	#if (RelaySlaveChaNum >=5)
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLDOWN,RELAY_5);
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLDOWN,RELAY_5);
 		gpio_output_options_set(RELAY_GPIO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_5);
 		gpio_output_options_set(RELAY_GPIO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_5);
-		gpio_bit_reset(RELAY_GPIO, RELAY_5);
+		#if SUPPORT_MON
+			gpio_bit_set(RELAY_GPIO, RELAY_5);
+		#else
+			gpio_bit_reset(RELAY_GPIO, RELAY_5);
+		#endif
 	#endif
 	#endif
 	#if (RelaySlaveChaNum >=6)
 	#if (RelaySlaveChaNum >=6)
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLDOWN,RELAY_6);
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLDOWN,RELAY_6);
 		gpio_output_options_set(RELAY_GPIO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_6);
 		gpio_output_options_set(RELAY_GPIO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_6);
-		gpio_bit_reset(RELAY_GPIO, RELAY_6);
+		#if SUPPORT_MON
+			gpio_bit_set(RELAY_GPIO, RELAY_6);
+		#else
+			gpio_bit_reset(RELAY_GPIO, RELAY_6);
+		#endif
 	#endif
 	#endif
 	#if (RelaySlaveChaNum >=7)
 	#if (RelaySlaveChaNum >=7)
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLDOWN,RELAY_7);
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLDOWN,RELAY_7);
 		gpio_output_options_set(RELAY_GPIO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_7);
 		gpio_output_options_set(RELAY_GPIO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_7);
-		gpio_bit_reset(RELAY_GPIO, RELAY_7);
+		#if SUPPORT_MON
+			gpio_bit_set(RELAY_GPIO, RELAY_7);
+		#else
+			gpio_bit_reset(RELAY_GPIO, RELAY_7);
+		#endif
 	#endif
 	#endif
 	#if (RelaySlaveChaNum >=8)
 	#if (RelaySlaveChaNum >=8)
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLDOWN,RELAY_8);
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLDOWN,RELAY_8);
 		gpio_output_options_set(RELAY_GPIO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_8);
 		gpio_output_options_set(RELAY_GPIO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_8);
-		gpio_bit_reset(RELAY_GPIO, RELAY_8);
+		#if SUPPORT_MON
+			gpio_bit_set(RELAY_GPIO, RELAY_8);
+		#else
+			gpio_bit_reset(RELAY_GPIO, RELAY_8);
+		#endif
 	#endif	
 	#endif	
 
 
+
+
+
 		board->unlock();
 		board->unlock();
 		board->lock();
 		board->lock();
 
 
 	board->open = relay_open;
 	board->open = relay_open;
 	board->close = relay_close;
 	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)
 static void relay_open(uint8_t channel)
 {
 {

+ 74 - 0
truring_ctrl_upgrade/PDU-AC_ADA_NEW/hardware/timer/timer.c

@@ -15,6 +15,7 @@
 
 
 static board_t *board = 0;
 static board_t *board = 0;
 static  void timer14_config(uint16_t arr,uint16_t psc);
 static  void timer14_config(uint16_t arr,uint16_t psc);
+
 static void relay_remember(void);
 static void relay_remember(void);
 
 
 static  uint16_t count_1s = 0;
 static  uint16_t count_1s = 0;
@@ -22,13 +23,25 @@ static  uint16_t count_10s = 0;
 static  uint16_t count_100ms = 0;
 static  uint16_t count_100ms = 0;
 
 
 uint16_t rl_delay_cnt[RelaySlaveChaNum] = {0};
 uint16_t rl_delay_cnt[RelaySlaveChaNum] = {0};
+uint16_t rl_delay_flag[RelaySlaveChaNum] = {0};
+
+#if SUPPORT_PWM_OUT_RELAY
 
 
+uint8_t rl_open_delay_flag[RelaySlaveChaNum] = {0};
+uint8_t rl_open_delay_count[RelaySlaveChaNum] = {0};
+uint8_t rl_pwm_flag[RelaySlaveChaNum] = {0};
+static void timer15_config(uint16_t arr,uint16_t psc);
+#endif
 
 
 void time_init(void)
 void time_init(void)
 {
 {
 	timer14_config(9999,71);
 	timer14_config(9999,71);
+#if SUPPORT_PWM_OUT_RELAY
+	timer15_config(24,71);
+#endif
 }
 }
 
 
+
 static void timer14_config(uint16_t arr,uint16_t psc)
 static void timer14_config(uint16_t arr,uint16_t psc)
 {
 {
 	board = get_board();
 	board = get_board();
@@ -49,6 +62,9 @@ static void timer14_config(uint16_t arr,uint16_t psc)
 	timer_enable(TIMER14);
 	timer_enable(TIMER14);
 }
 }
 
 
+extern uint8_t relay_counter_flag[RelaySlaveChaNum];
+
+
 void TIMER14_IRQHandler(void)
 void TIMER14_IRQHandler(void)
 {
 {
 	if(timer_interrupt_flag_get(TIMER14, TIMER_INT_FLAG_UP) == SET)
 	if(timer_interrupt_flag_get(TIMER14, TIMER_INT_FLAG_UP) == SET)
@@ -72,6 +88,20 @@ void TIMER14_IRQHandler(void)
 					SET_RL_COUNTER_END_FLAG(board->relay_staging_staus[i]);
 					SET_RL_COUNTER_END_FLAG(board->relay_staging_staus[i]);
 				}
 				}
 			}
 			}
+#if SUPPORT_PWM_OUT_RELAY
+			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;
+				}
+			}
+#endif
 		}
 		}
 		if(count_1s == 100)
 		if(count_1s == 100)
 		{
 		{
@@ -108,4 +138,48 @@ void TIMER14_IRQHandler(void)
 	
 	
 }
 }
 
 
+#if SUPPORT_PWM_OUT_RELAY
 
 
+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();
+	uint32_t value = 0;
+	for(int i = 0; i < RelaySlaveChaNum;i++)
+	{
+		if(board->md_data.r_data.state.state[i].state == 1 && rl_pwm_flag[i])
+		{
+			value |= (1<<(i));
+			GPIO_TG(GPIOB) = BIT((8+i));
+		}
+	}
+	if(value)
+	{
+		board->unlock();
+		board->lock();
+	}
+
+}
+#endif

+ 1 - 1
truring_ctrl_upgrade/PDU-AC_ADA_NEW/hardware/timer/timer.h

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

+ 31 - 29
truring_ctrl_upgrade/PDU-AC_ADA_NEW/modbus/BARE/port/port.c

@@ -53,7 +53,7 @@ static USHORT   usRegInputBuf[REG_INPUT_NREGS];
 
 
 
 
 static USHORT   usRegHoldStart = REG_HOLD_START;
 static USHORT   usRegHoldStart = REG_HOLD_START;
-static USHORT   usRegHoldBuf[REG_HOLD_NREGS];
+static USHORT   usRegHoldBuf[128];
 
 
 static USHORT   usRegCoilsStart = REG_COILS_START;
 static USHORT   usRegCoilsStart = REG_COILS_START;
 static uint8_t  usRegCoilsBuf[REG_COILS_NREGS];
 static uint8_t  usRegCoilsBuf[REG_COILS_NREGS];
@@ -213,13 +213,14 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 						}
 						}
 						if(base)
 						if(base)
 						{
 						{
-							memcpy(&usRegHoldBuf[iRegIndex],base,usNRegs*2);
+							memcpy(&usRegHoldBuf[0],base,usNRegs*2);
 						}
 						}
+						int i= 0;
 						while(usNRegs > 0)
 						while(usNRegs > 0)
 						{
 						{
-							*pucRegBuffer++ = (uint8_t)(usRegHoldBuf[iRegIndex] >> 8);
-							*pucRegBuffer++ = (uint8_t)(usRegHoldBuf[iRegIndex] & 0xFF);
-							iRegIndex++;
+							*pucRegBuffer++ = (uint8_t)(usRegHoldBuf[i] >> 8);
+							*pucRegBuffer++ = (uint8_t)(usRegHoldBuf[i] & 0xFF);
+							i++;
 							usNRegs--;
 							usNRegs--;
 						}
 						}
 						break;
 						break;
@@ -228,11 +229,12 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 					case MB_REG_WRITE://д¼Ä´æÆ÷
 					case MB_REG_WRITE://д¼Ä´æÆ÷
 					{
 					{
 						WusNRegs = usNRegs;
 						WusNRegs = usNRegs;
+						int i = 0;
 						while(usNRegs > 0)
 						while(usNRegs > 0)
 						{
 						{
-							usRegHoldBuf[iRegIndex] = *pucRegBuffer++ << 8;
-							usRegHoldBuf[iRegIndex] |= *pucRegBuffer++;
-							iRegIndex++;
+							usRegHoldBuf[i] = *pucRegBuffer++ << 8;
+							usRegHoldBuf[i] |= *pucRegBuffer++;
+							i++;
 							usNRegs--;
 							usNRegs--;
 						}
 						}
 						{
 						{
@@ -250,7 +252,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								{
 								{
 									if(WusNRegs == RelaySlaveChaNum && start == 0)
 									if(WusNRegs == RelaySlaveChaNum && start == 0)
 									{
 									{
-										if((RelaySlaveChaNum == 1) && ((usRegHoldBuf[WiRegIndex] & (1<<11))==0) && ((usRegHoldBuf[WiRegIndex] & (1<<12))==0))
+										if((RelaySlaveChaNum == 1) && ((usRegHoldBuf[0] & (1<<11))==0) && ((usRegHoldBuf[0] & (1<<12))==0))
 										{
 										{
 											for(uint8_t j = 0; j < RelaySlaveChaNum;j++)
 											for(uint8_t j = 0; j < RelaySlaveChaNum;j++)
 											{
 											{
@@ -259,7 +261,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 													continue;
 													continue;
 #endif
 #endif
 #if SUPPORT_CTRL2_LOCK2
 #if SUPPORT_CTRL2_LOCK2
-												if(j >= 2)
+												if(j >= AVALIABLE_RELAY)
 												{
 												{
 													continue;
 													continue;
 												}
 												}
@@ -267,7 +269,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 												da.channel = 	j;
 												da.channel = 	j;
 												da.method = PROMPT_CTRL;
 												da.method = PROMPT_CTRL;
 												da.reg = &board->relay_staging_staus[j];
 												da.reg = &board->relay_staging_staus[j];
-												da.status = (usRegHoldBuf[WiRegIndex+j] & 0x1);
+												da.status = (usRegHoldBuf[j] & 0x1);
 												set_relay_sta_async(&da);									
 												set_relay_sta_async(&da);									
 											}												
 											}												
 										}else
 										}else
@@ -279,7 +281,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 													continue;										
 													continue;										
 #endif
 #endif
 #if SUPPORT_CTRL2_LOCK2
 #if SUPPORT_CTRL2_LOCK2
-												if(j >= 2)
+												if(j >= AVALIABLE_RELAY)
 												{
 												{
 													continue;
 													continue;
 												}
 												}
@@ -287,7 +289,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 												da.channel = 	j;
 												da.channel = 	j;
 												da.method = DELAY_CTRL;
 												da.method = DELAY_CTRL;
 												da.reg = &board->relay_staging_staus[j];
 												da.reg = &board->relay_staging_staus[j];
-												da.status = (usRegHoldBuf[WiRegIndex+j] & 0x1);
+												da.status = (usRegHoldBuf[j] & 0x1);
 												set_relay_sta_async(&da);									
 												set_relay_sta_async(&da);									
 											}	
 											}	
 										}										
 										}										
@@ -310,7 +312,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 													continue;										
 													continue;										
 #endif
 #endif
 #if SUPPORT_CTRL2_LOCK2
 #if SUPPORT_CTRL2_LOCK2
-												if((start + j) >= 2)
+												if((start + j) >= AVALIABLE_RELAY)
 												{
 												{
 													continue;
 													continue;
 												}
 												}
@@ -318,7 +320,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 												da.channel = 	start + j;
 												da.channel = 	start + j;
 												da.method = PROMPT_CTRL;
 												da.method = PROMPT_CTRL;
 												da.reg = &board->relay_staging_staus[start+j];
 												da.reg = &board->relay_staging_staus[start+j];
-												da.status = (usRegHoldBuf[WiRegIndex+j] & 0x1);
+												da.status = (usRegHoldBuf[j] & 0x1);
 												set_relay_sta_async(&da);										
 												set_relay_sta_async(&da);										
 											}	
 											}	
 										}										
 										}										
@@ -336,7 +338,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 												da.channel = 	j;
 												da.channel = 	j;
 												da.method = DELAY_CTRL;
 												da.method = DELAY_CTRL;
 												da.reg = &board->relay_staging_staus[j];
 												da.reg = &board->relay_staging_staus[j];
-												da.status = (usRegHoldBuf[WiRegIndex+j] & 0x1);
+												da.status = (usRegHoldBuf[j] & 0x1);
 												set_relay_sta_async(&da);									
 												set_relay_sta_async(&da);									
 											}										
 											}										
 										}else
 										}else
@@ -356,7 +358,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 													da.channel = 	start + j;
 													da.channel = 	start + j;
 													da.method = PROMPT_CTRL;
 													da.method = PROMPT_CTRL;
 													da.reg = &board->relay_staging_staus[start+j];
 													da.reg = &board->relay_staging_staus[start+j];
-													da.status = (usRegHoldBuf[WiRegIndex+j] & 0x1);
+													da.status = (usRegHoldBuf[j] & 0x1);
 													set_relay_sta_async(&da);										
 													set_relay_sta_async(&da);										
 												}	
 												}	
 											}										
 											}										
@@ -370,10 +372,10 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								start = usAddress - OPEN_DELAY;
 								start = usAddress - OPEN_DELAY;
 								base = (uint16_t*)(&board->md_data.rw_data.open.delay_open[0]);
 								base = (uint16_t*)(&board->md_data.rw_data.open.delay_open[0]);
 								base += start;
 								base += start;
-								memcpy(base,&usRegHoldBuf[WiRegIndex],2*WusNRegs);
+								memcpy(base,&usRegHoldBuf[0],2*WusNRegs);
 								
 								
 								data.lenth =WusNRegs*2;
 								data.lenth =WusNRegs*2;
-								memcpy(&data.data,&usRegHoldBuf[WiRegIndex],2*WusNRegs);		
+								memcpy(&data.data,&usRegHoldBuf[0],2*WusNRegs);		
 								data.start_addr = (EEPROM_OTHER_ADDR+(start*2));
 								data.start_addr = (EEPROM_OTHER_ADDR+(start*2));
 								board->q_cache.en_queue(&data);
 								board->q_cache.en_queue(&data);
 #endif
 #endif
@@ -383,9 +385,9 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								start = usAddress - CLOSE_DELAY;
 								start = usAddress - CLOSE_DELAY;
 								base = (uint16_t*)(&board->md_data.rw_data.close.delay_close[0]);
 								base = (uint16_t*)(&board->md_data.rw_data.close.delay_close[0]);
 								base += start;
 								base += start;
-								memcpy(base,&usRegHoldBuf[WiRegIndex],2*WusNRegs);
+								memcpy(base,&usRegHoldBuf[0],2*WusNRegs);
 								data.lenth =WusNRegs*2;
 								data.lenth =WusNRegs*2;
-								memcpy(&data.data,&usRegHoldBuf[WiRegIndex],2*WusNRegs);
+								memcpy(&data.data,&usRegHoldBuf[0],2*WusNRegs);
 								data.start_addr = (EEPROM_OTHER_ADDR+(sizeof(ac_delay_open_t))+(start*2));
 								data.start_addr = (EEPROM_OTHER_ADDR+(sizeof(ac_delay_open_t))+(start*2));
 								board->q_cache.en_queue(&data);
 								board->q_cache.en_queue(&data);
 #endif
 #endif
@@ -394,11 +396,11 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								start = usAddress - VALUE_THR;
 								start = usAddress - VALUE_THR;
 								base = (uint16_t*)(&board->md_data.rw_data.thr.th[0].v_top);
 								base = (uint16_t*)(&board->md_data.rw_data.thr.th[0].v_top);
 								base+=start;
 								base+=start;
-								memcpy(base,&usRegHoldBuf[WiRegIndex],2*WusNRegs);
+								memcpy(base,&usRegHoldBuf[0],2*WusNRegs);
 								for(uint8_t j = 0; j < RelaySlaveChaNum;j++)
 								for(uint8_t j = 0; j < RelaySlaveChaNum;j++)
 									board->check_threshold(THRESHOLD_OUT,j);
 									board->check_threshold(THRESHOLD_OUT,j);
 								data.lenth =WusNRegs*2;
 								data.lenth =WusNRegs*2;
-								memcpy(&data.data,&usRegHoldBuf[WiRegIndex],2*WusNRegs);
+								memcpy(&data.data,&usRegHoldBuf[0],2*WusNRegs);
 								uint16_t rom_start = EEPROM_OTHER_ADDR + sizeof(ac_delay_open_t) + sizeof(ac_delay_close_t);
 								uint16_t rom_start = EEPROM_OTHER_ADDR + sizeof(ac_delay_open_t) + sizeof(ac_delay_close_t);
 								data.start_addr = (rom_start+(start*2));
 								data.start_addr = (rom_start+(start*2));
 								board->q_cache.en_queue(&data);								
 								board->q_cache.en_queue(&data);								
@@ -407,9 +409,9 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								start = usAddress - CHANNEL_FUNC;
 								start = usAddress - CHANNEL_FUNC;
 								base = (uint16_t*)(&board->md_data.rw_data.over_func[0]);
 								base = (uint16_t*)(&board->md_data.rw_data.over_func[0]);
 								base+=start;
 								base+=start;
-								memcpy(base,&usRegHoldBuf[WiRegIndex],2*WusNRegs);
+								memcpy(base,&usRegHoldBuf[0],2*WusNRegs);
 								data.lenth =WusNRegs*2;
 								data.lenth =WusNRegs*2;
-								memcpy(&data.data,&usRegHoldBuf[WiRegIndex],2*WusNRegs);
+								memcpy(&data.data,&usRegHoldBuf[0],2*WusNRegs);
 								uint16_t rom_start = EEPROM_OTHER_ADDR + sizeof(ac_delay_open_t) + sizeof(ac_delay_close_t) + sizeof(ac_thr_t) + sizeof(all_thr_t);
 								uint16_t rom_start = EEPROM_OTHER_ADDR + sizeof(ac_delay_open_t) + sizeof(ac_delay_close_t) + sizeof(ac_thr_t) + sizeof(all_thr_t);
 								data.start_addr = (rom_start+(start*2));
 								data.start_addr = (rom_start+(start*2));
 								board->q_cache.en_queue(&data);	
 								board->q_cache.en_queue(&data);	
@@ -437,9 +439,9 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								start = usAddress - SET_PT_KV;
 								start = usAddress - SET_PT_KV;
 								base = (uint16_t*)(&board->v_k[0]);
 								base = (uint16_t*)(&board->v_k[0]);
 								base+=start;
 								base+=start;
-								memcpy(base,&usRegHoldBuf[WiRegIndex],2*WusNRegs);
+								memcpy(base,&usRegHoldBuf[0],2*WusNRegs);
 								data.lenth =WusNRegs*2;
 								data.lenth =WusNRegs*2;
-								memcpy(&data.data,&usRegHoldBuf[WiRegIndex],2*WusNRegs);
+								memcpy(&data.data,&usRegHoldBuf[0],2*WusNRegs);
 								uint16_t rom_start = EEPROM_K_V_ADDR;
 								uint16_t rom_start = EEPROM_K_V_ADDR;
 								data.start_addr = (rom_start+(start*2));
 								data.start_addr = (rom_start+(start*2));
 								board->q_cache.en_queue(&data);
 								board->q_cache.en_queue(&data);
@@ -448,9 +450,9 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								start = usAddress - SET_PT_KI;
 								start = usAddress - SET_PT_KI;
 								base = (uint16_t*)(&board->i_k[0]);
 								base = (uint16_t*)(&board->i_k[0]);
 								base+=start;
 								base+=start;
-								memcpy(base,&usRegHoldBuf[WiRegIndex],2*WusNRegs);
+								memcpy(base,&usRegHoldBuf[0],2*WusNRegs);
 								data.lenth =WusNRegs*2;
 								data.lenth =WusNRegs*2;
-								memcpy(&data.data,&usRegHoldBuf[WiRegIndex],2*WusNRegs);
+								memcpy(&data.data,&usRegHoldBuf[0],2*WusNRegs);
 								uint16_t rom_start = EEPROM_K_I_ADDR;
 								uint16_t rom_start = EEPROM_K_I_ADDR;
 								data.start_addr = (rom_start+(start*2));
 								data.start_addr = (rom_start+(start*2));
 								board->q_cache.en_queue(&data);								
 								board->q_cache.en_queue(&data);								

+ 4 - 1
truring_ctrl_upgrade/PDU-AC_ADA_NEW/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_RBNE);
 			usart_interrupt_disable(USART0,USART_INT_TC);
 			usart_interrupt_disable(USART0,USART_INT_TC);
+			usart_disable(USART0);
+			nvic_irq_disable(USART0_IRQn); 
 			gpio_bit_reset(GPIOA, GPIO_PIN_8);
 			gpio_bit_reset(GPIOA, GPIO_PIN_8);
 			return;
 			return;
 		}
 		}
@@ -71,6 +73,7 @@ vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
     }
     }
 }
 }
 
 
+
 BOOL
 BOOL
 xMBPortSerialInit( UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity )
 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)  //接收缓冲区非空中断
   if(usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE) != RESET)  //接收缓冲区非空中断
   {   
   {   
 		usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE);  //清除USART1中断挂起   
 		usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE);  //清除USART1中断挂起   
-		prvvUARTRxISR();		                                                                                   
+		prvvUARTRxISR();
   }                                                         
   }                                                         
                                                             
                                                             
   if(usart_flag_get(USART0, USART_FLAG_ORERR) == SET) //溢出错误标志为1
   if(usart_flag_get(USART0, USART_FLAG_ORERR) == SET) //溢出错误标志为1

+ 2 - 0
truring_ctrl_upgrade/PDU-AC_ADA_NEW/modbus/BARE/port/porttimer.c

@@ -29,6 +29,7 @@
 #include "gd32e23x_rcu.h"
 #include "gd32e23x_rcu.h"
 #include "gd32e23x_misc.h"
 #include "gd32e23x_misc.h"
 #include "gd32e23x_it.h"
 #include "gd32e23x_it.h"
+#include "common.h"
 /* ----------------------- static functions ---------------------------------*/
 /* ----------------------- static functions ---------------------------------*/
 static void prvvTIMERExpiredISR( void );
 static void prvvTIMERExpiredISR( void );
 
 
@@ -87,6 +88,7 @@ static void prvvTIMERExpiredISR( void )
 {
 {
     ( void )pxMBPortCBTimerExpired(  );
     ( void )pxMBPortCBTimerExpired(  );
 }
 }
+
 void TIMER13_IRQHandler(void)
 void TIMER13_IRQHandler(void)
 {
 {
     if(RESET != timer_interrupt_flag_get(TIMER13, TIMER_INT_UP))
     if(RESET != timer_interrupt_flag_get(TIMER13, TIMER_INT_UP))

+ 1 - 0
truring_ctrl_upgrade/PDU-AC_ADA_NEW/modbus/mb.c

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

+ 3 - 0
truring_ctrl_upgrade/PDU-AC_ADA_NEW/modbus/rtu/mbrtu.c

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

BIN
truring_ctrl_upgrade/PDU-AC_ADA_NEW/tools/bootloader.bin


+ 66 - 5
truring_ctrl_upgrade/PDU-AC_ADA_NEW/user/board_cfg.h

@@ -16,7 +16,7 @@
 
 
 
 
 #define OPEN_WATCH_DOG  				0
 #define OPEN_WATCH_DOG  				0
-#define OPEN_NOT_READ_EN				1
+#define OPEN_NOT_READ_EN				0
 
 
 
 
 
 
@@ -55,7 +55,7 @@
 #define PT_SUB_COUNT_3             3
 #define PT_SUB_COUNT_3             3
 #define PT_SUB_COUNT_4             4
 #define PT_SUB_COUNT_4             4
 
 
-#define   PRJ_8_NEW									1
+#define   PRJ_8_NEW									0
 #define   PRJ_3_4                   0
 #define   PRJ_3_4                   0
 #define   PRJ_3_2                   0
 #define   PRJ_3_2                   0
 #define 	PRJ_DC_8									0
 #define 	PRJ_DC_8									0
@@ -67,18 +67,24 @@
 #define   PRJ_1_BASE                0
 #define   PRJ_1_BASE                0
 #define 	PRJ_1_SELF_LOCK       	  0
 #define 	PRJ_1_SELF_LOCK       	  0
 #define   PRJ_1_ALL_MON             0
 #define   PRJ_1_ALL_MON             0
+#define   PRJ_4_NO_MON              0
+
+#define   PRJ_3_BASE                0
 
 
 #define   PRJ_3_NEW_2               0
 #define   PRJ_3_NEW_2               0
 #define   PRJ_7_NEW                 0
 #define   PRJ_7_NEW                 0
 
 
 #define   PRJ_4_SELF_LOCK_2_2       0
 #define   PRJ_4_SELF_LOCK_2_2       0
 #define   PPRJ_4_BASE_2_2           0
 #define   PPRJ_4_BASE_2_2           0
+#define   PPRJ_4_BASE_3_1           0
 
 
 #define   PRJ_7_NO_MON              0
 #define   PRJ_7_NO_MON              0
 
 
 #define   PRJ_8_NO_MON              0
 #define   PRJ_8_NO_MON              0
 
 
+#define   PRJ_4_KEY_EXIT            0
 
 
+#define   PRJ_5_KEY_EXIT            1
 
 
 
 
 
 
@@ -94,7 +100,14 @@
 	#define 	SUPPORT_ALL_ON_OFF        0
 	#define 	SUPPORT_ALL_ON_OFF        0
 	#define   PT_SUB_COUNT              (PT_SUB_COUNT_4)
 	#define   PT_SUB_COUNT              (PT_SUB_COUNT_4)
 	#define 	ACSingCurrid 							1 
 	#define 	ACSingCurrid 							1 
-	
+#elif PRJ_4_NO_MON
+
+	#define 	RelaySlaveChaNum 					4
+	#define 	ACSingCurrid 							2 
+	#define   SURPPORT_2_PT             0
+	#define   PT_SUB_COUNT              (RelaySlaveChaNum)
+	#define   SUPPORT_MON               1
+
 #elif PRJ_6_NEW
 #elif PRJ_6_NEW
 	#define 	RelaySlaveChaNum 					6
 	#define 	RelaySlaveChaNum 					6
 	#define 	ACSingCurrid 							1 
 	#define 	ACSingCurrid 							1 
@@ -116,9 +129,25 @@
 	#define   PT_SUB_COUNT              (RelaySlaveChaNum)
 	#define   PT_SUB_COUNT              (RelaySlaveChaNum)
 	#define   SUPPORT_DETECTION         1
 	#define   SUPPORT_DETECTION         1
 	#define   SUPPORT_RELAY_REMENBER		1
 	#define   SUPPORT_RELAY_REMENBER		1
-	#define   SUPPORT_4_ON_FLASH        1
+//	#define   SUPPORT_4_ON_FLASH        1
+	#define   SUPPORT_ALL_ON_OFF    		1
+	
+#elif PRJ_3_BASE
+
+	#define 	RelaySlaveChaNum 					3
+	#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_ALL_ON_OFF    		1
 #elif PRJ_5_NEW
 #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 	RelaySlaveChaNum 					5
 	#define 	ACSingCurrid 							1 
 	#define 	ACSingCurrid 							1 
 	#define   SURPPORT_2_PT             0
 	#define   SURPPORT_2_PT             0
@@ -133,6 +162,26 @@
 	#define   SUPPORT_DETECTION         1
 	#define   SUPPORT_DETECTION         1
 	#define   SUPPORT_RELAY_REMENBER		1
 	#define   SUPPORT_RELAY_REMENBER		1
 	#define   SUPPORT_SELF_LOCK         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
+	#define   SUPPORT_PWM_OUT_RELAY     1
+#elif PRJ_5_KEY_EXIT
+
+	#define 	RelaySlaveChaNum 					5
+	#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
+	#define   SUPPORT_PWM_OUT_RELAY     1
 #elif PRJ_4_BASE
 #elif PRJ_4_BASE
 	#define 	RelaySlaveChaNum 					4
 	#define 	RelaySlaveChaNum 					4
 	#define 	ACSingCurrid 							2 
 	#define 	ACSingCurrid 							2 
@@ -140,7 +189,7 @@
 	#define   PT_SUB_COUNT              (RelaySlaveChaNum)
 	#define   PT_SUB_COUNT              (RelaySlaveChaNum)
 	#define   SUPPORT_DETECTION         1
 	#define   SUPPORT_DETECTION         1
 	#define   SUPPORT_RELAY_REMENBER		1
 	#define   SUPPORT_RELAY_REMENBER		1
-	#define   SUPPORT_ALL_ON_OFF    		1
+	//#define   SUPPORT_ALL_ON_OFF    		1
 #elif PPRJ_4_BASE_2_2
 #elif PPRJ_4_BASE_2_2
 	#define 	RelaySlaveChaNum 					4
 	#define 	RelaySlaveChaNum 					4
 	#define 	ACSingCurrid 							2 
 	#define 	ACSingCurrid 							2 
@@ -150,6 +199,17 @@
 	#define   SUPPORT_RELAY_REMENBER		1
 	#define   SUPPORT_RELAY_REMENBER		1
 	#define   SUPPORT_ALL_ON_OFF    		1
 	#define   SUPPORT_ALL_ON_OFF    		1
 	#define   SUPPORT_CTRL2_LOCK2       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              
 #elif PRJ_1_BASE              
 	#define 	RelaySlaveChaNum 					1
 	#define 	RelaySlaveChaNum 					1
 	#define 	ACSingCurrid 							2 
 	#define 	ACSingCurrid 							2 
@@ -157,6 +217,7 @@
 	#define   PT_SUB_COUNT              (RelaySlaveChaNum)
 	#define   PT_SUB_COUNT              (RelaySlaveChaNum)
 	#define   SUPPORT_DETECTION         1
 	#define   SUPPORT_DETECTION         1
 	#define   SUPPORT_RELAY_REMENBER		1
 	#define   SUPPORT_RELAY_REMENBER		1
+	//#define   SUPPORT_ALL_ON_OFF    		1
 #elif PRJ_1_SELF_LOCK
 #elif PRJ_1_SELF_LOCK
 	#define 	RelaySlaveChaNum 					1
 	#define 	RelaySlaveChaNum 					1
 	#define 	ACSingCurrid 							2 
 	#define 	ACSingCurrid 							2 

+ 1 - 1
truring_ctrl_upgrade/PDU-AC_ADA_NEW/user/cfg.h

@@ -18,7 +18,7 @@
 #define PROGRAME_APP1_SIZE								(48*1024)													//App1 programe Max size
 #define PROGRAME_APP1_SIZE								(48*1024)													//App1 programe Max size
 
 
 
 
-#define VERSION                          		"V1.0.0.4"
+#define VERSION                          		"V1.0.0.7"
 
 
 #define MODBUS_HEAD                        	"GOWONE_UPGRADE"
 #define MODBUS_HEAD                        	"GOWONE_UPGRADE"
 
 

+ 23 - 5
truring_ctrl_upgrade/PDU-AC_ADA_NEW/user/main.c

@@ -31,9 +31,14 @@ board_t *get_board()
 	return &ac_board;
 	return &ac_board;
 }
 }
 
 
+
 extern uint16_t rl_delay_cnt[RelaySlaveChaNum];
 extern uint16_t rl_delay_cnt[RelaySlaveChaNum];
 
 
 
 
+#if SUPPORT_PWM_OUT_RELAY
+	extern uint8_t rl_open_delay_flag[RelaySlaveChaNum];
+	extern uint8_t rl_pwm_flag[RelaySlaveChaNum];
+#endif
 
 
 static void task_query(void);
 static void task_query(void);
 static void task_1s(void);
 static void task_1s(void);
@@ -64,13 +69,15 @@ int main(){
 	query_init();
 	query_init();
 	key_init();
 	key_init();
 	//device
 	//device
-	
 	fwdgt_Init();
 	fwdgt_Init();
+#if SUPPORT_PWM_OUT_RELAY
+	eMBInit(MB_RTU, ac_board.haddr, 0, 38400, MB_PAR_NONE);
+#else
 	eMBInit(MB_RTU, ac_board.haddr, 0, 115200, MB_PAR_NONE);
 	eMBInit(MB_RTU, ac_board.haddr, 0, 115200, MB_PAR_NONE);
+#endif
+
 	eMBEnable();
 	eMBEnable();
 	
 	
-	
-	
 	ac_board.md_data.r_data.info.channels = RelaySlaveChaNum;
 	ac_board.md_data.r_data.info.channels = RelaySlaveChaNum;
 	strcpy((char*)&(ac_board.md_data.r_data.info.date),__DATE__);
 	strcpy((char*)&(ac_board.md_data.r_data.info.date),__DATE__);
 	strcat((char*)&(ac_board.md_data.r_data.info.date)," ");
 	strcat((char*)&(ac_board.md_data.r_data.info.date)," ");
@@ -136,7 +143,13 @@ int main(){
 	{
 	{
 		if(eMBCheck())
 		if(eMBCheck())
 		{
 		{
+#if SUPPORT_PWM_OUT_RELAY
+			eMBInit(MB_RTU, ac_board.haddr, 0, 38400, MB_PAR_NONE);
+#else
+			eMBInit(MB_RTU, ac_board.haddr, 0, 115200, MB_PAR_NONE);
+#endif
 			eMBEnable();
 			eMBEnable();
+			DelayNms(1);
 		}
 		}
 		ac_board.feed_dog();
 		ac_board.feed_dog();
 		task_query();
 		task_query();
@@ -280,7 +293,7 @@ static void relay_ctrl(void)
 				CLEAR_RL_OFF_FLAG(ac_board.relay_staging_staus[i]);
 				CLEAR_RL_OFF_FLAG(ac_board.relay_staging_staus[i]);
 				if(IS_RL_ON_DELAY_FLAG_EN(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]);
 					CLEAR_RL_COUNTER_END_FLAG(ac_board.relay_staging_staus[i]);
 					SET_RL_COUNTER_BEGIN_FLAG(ac_board.relay_staging_staus[i]);
 					SET_RL_COUNTER_BEGIN_FLAG(ac_board.relay_staging_staus[i]);
 					rl_delay_cnt[i] = 0;
 					rl_delay_cnt[i] = 0;
@@ -326,12 +339,17 @@ static void relay_ctrl(void)
 			{
 			{
 				CLEAR_RL_ON_FLAG(ac_board.relay_staging_staus[i]);
 				CLEAR_RL_ON_FLAG(ac_board.relay_staging_staus[i]);
 				ac_board.open(i);
 				ac_board.open(i);
+#if SUPPORT_PWM_OUT_RELAY
+				rl_open_delay_flag[i] = 1;
+#endif
 			}else if(IS_RL_OFF_FLAG_EN(ac_board.relay_staging_staus[i]))
 			}else if(IS_RL_OFF_FLAG_EN(ac_board.relay_staging_staus[i]))
 			{
 			{
+#if SUPPORT_PWM_OUT_RELAY
+				rl_pwm_flag[i] = 0;
+#endif
 				CLEAR_RL_OFF_FLAG(ac_board.relay_staging_staus[i]);
 				CLEAR_RL_OFF_FLAG(ac_board.relay_staging_staus[i]);
 				ac_board.close(i);
 				ac_board.close(i);
 			}
 			}
 		}
 		}
 	}
 	}
-
 }
 }