Parcourir la source

适配4路和1路自锁

liyi il y a 1 an
Parent
commit
2cf5a1438f

+ 32 - 28
truing_control/PDU-AC_ADA_NEW_6/common/common.h

@@ -688,22 +688,24 @@ typedef struct {
 	uint32_t  detection_2_count;
 #endif
 #if SUPPORT_SELF_LOCK
-	#if (RelaySlaveChaNum >= 1)
-		uint8_t 			handle_k_1_status;
-		uint8_t  			key_1;
-	#endif
-	#if (RelaySlaveChaNum >= 2)
-		uint8_t 			handle_k_2_status;
-		uint8_t 			key_2;
-	#endif
-	#if (RelaySlaveChaNum >= 3)	
-		uint8_t 			handle_k_3_status;
-		uint8_t 			key_3;
-	#endif
-	#if (RelaySlaveChaNum >= 4)
-		uint8_t 			handle_k_4_status;
-		uint8_t 			key_4;
-	#endif
+//	#if (RelaySlaveChaNum >= 1)
+//		uint8_t 			handle_k_1_status;
+//		uint8_t  			key_1;
+//	#endif
+//	#if (RelaySlaveChaNum >= 2)
+//		uint8_t 			handle_k_2_status;
+//		uint8_t 			key_2;
+//	#endif
+//	#if (RelaySlaveChaNum >= 3)	
+//		uint8_t 			handle_k_3_status;
+//		uint8_t 			key_3;
+//	#endif
+//	#if (RelaySlaveChaNum >= 4)
+//		uint8_t 			handle_k_4_status;
+//		uint8_t 			key_4;
+//	#endif
+	uint8_t  				handle_k_status[4];
+	uint8_t         val_key[4];  
 #endif
 	
 #if SUPPORT_RELAY_REMENBER
@@ -716,18 +718,20 @@ typedef struct {
 #endif
 
 #if SUPPORT_SELF_LOCK
-	#if (RelaySlaveChaNum >= 1)
-		void (*read_key_1)();
-	#endif
-	#if (RelaySlaveChaNum >= 2)
-		void (*read_key_2)();
-	#endif
-	#if (RelaySlaveChaNum >= 3)	
-	void (*read_key_3)();
-	#endif
-	#if (RelaySlaveChaNum >= 4)
-	void (*read_key_4)();
-	#endif
+//	#if (RelaySlaveChaNum >= 1)
+//		void (*read_key_1)();
+//	#endif
+//	#if (RelaySlaveChaNum >= 2)
+//		void (*read_key_2)();
+//	#endif
+//	#if (RelaySlaveChaNum >= 3)	
+//	void (*read_key_3)();
+//	#endif
+//	#if (RelaySlaveChaNum >= 4)
+//	void (*read_key_4)();
+//	#endif
+	void (*get_lock_key)();
+	void (*opt_lock_key)();
 #endif
 
 	void (*open)(uint8_t channel);

+ 286 - 3
truing_control/PDU-AC_ADA_NEW_6/hardware/detection/detection.c

@@ -37,6 +37,18 @@
 
 #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_GPIO          GPIOC
+#define    KEY_TEST_2_GPIO					GPIOB
+#define 	 KEY_TEST_3_4_GPIO        GPIOA
+
+
+
 
 static board_t *board = 0;
 
@@ -65,6 +77,19 @@ static void get_detection(void);
 static void detection_opt(void);
 
 
+#if SUPPORT_SELF_LOCK
+
+	static void get_test_1();
+	static void get_test_2();
+	static void get_test_3();
+	static void get_test_4();
+	static void get_lock_key(void);
+	static void self_lock_opt(void);
+#endif
+
+
+
+
 void detection_init(void)
 {
 	
@@ -114,9 +139,31 @@ void key_init(void)
 	exti_interrupt_flag_clear(KEY_TEST_EXTI);
 
 #elif SUPPORT_SELF_LOCK
+	rcu_periph_clock_enable(RCU_CFGCMP);
+	rcu_periph_clock_enable(RCU_GPIOC);
+	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);
+#endif
+
+#if (RelaySlaveChaNum >= 2)		
+	rcu_periph_clock_enable(RCU_GPIOB);
+	gpio_mode_set(KEY_TEST_2_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_2_IO);
+#endif
 	
-	
-	
+#if (RelaySlaveChaNum >= 3)
+	rcu_periph_clock_enable(RCU_GPIOA);
+	gpio_mode_set(KEY_TEST_3_4_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_3_IO);	
+#endif
+#if (RelaySlaveChaNum >= 4)
+	gpio_mode_set(KEY_TEST_3_4_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_4_IO);
+#endif
+	board->get_lock_key = get_lock_key;
+	board->opt_lock_key = self_lock_opt;
+
 #endif
 	
 }
@@ -332,4 +379,240 @@ static void detection_opt(void)
 	#endif
 #endif		
 	}
-}
+}
+
+
+#if SUPPORT_SELF_LOCK
+
+static void get_lock_key(void)
+{
+#if (RelaySlaveChaNum >= 1)
+	if(gpio_input_bit_get(KEY_TEST_1_GPIO,KEY_TEST_1_IO) == RESET)
+	{
+		board->val_key[0] = 1;
+	}else
+	{
+		board->val_key[0] = 0;
+	}
+#endif
+#if (RelaySlaveChaNum >= 2)
+	if(gpio_input_bit_get(KEY_TEST_2_GPIO,KEY_TEST_2_IO) == RESET)
+	{
+		board->val_key[1] = 1;
+	}else
+	{
+		board->val_key[1] = 0;
+	}
+#endif
+	
+#if (RelaySlaveChaNum >= 3)
+	if(gpio_input_bit_get(KEY_TEST_3_4_GPIO,KEY_TEST_3_IO) == RESET)
+	{
+		board->val_key[2] = 1;
+	}else
+	{
+		board->val_key[2] = 0;
+	}
+#endif
+	
+#if (RelaySlaveChaNum >= 4)
+	if(gpio_input_bit_get(KEY_TEST_3_4_GPIO,KEY_TEST_4_IO) == RESET)
+	{
+		board->val_key[3] = 1;
+	}else
+	{
+		board->val_key[3] = 0;
+	}
+#endif
+}
+
+
+
+//#if (RelaySlaveChaNum >= 1)
+//static void get_test_1()
+//{
+//	uint8_t val = 0;
+//	if(gpio_input_bit_get(KEY_TEST_1_GPIO,KEY_TEST_1_IO) == RESET)
+//	{
+//		val = 1;
+//	}
+//	board->key_1 = val;
+//}
+//#endif
+
+//#if (RelaySlaveChaNum >= 2)
+//static void get_test_2()
+//{
+//	uint8_t val = 0;
+//		if(gpio_input_bit_get(KEY_TEST_2_GPIO,KEY_TEST_2_IO) == RESET)
+//		{
+//			val = 1;
+//		}
+//		board->key_2 = val;
+//}
+//#endif
+//#if (RelaySlaveChaNum >= 3)
+//static void get_test_3()
+//{
+//	uint8_t val = 0;
+//		if(gpio_input_bit_get(KEY_TEST_3_4_GPIO,KEY_TEST_3_IO) == RESET)
+//		{
+//			val = 1;
+//		}
+//		board->key_3 = val;
+//}
+//#endif
+//#if (RelaySlaveChaNum >= 4)
+//static void get_test_4()
+//{
+//	uint8_t val = 0;
+//		if(gpio_input_bit_get(KEY_TEST_3_4_GPIO,KEY_TEST_4_IO) == RESET)
+//		{
+//			val = 1;
+//		}
+//		board->key_4 = val;
+//}
+//#endif
+
+static void self_lock_opt(void)
+{
+#if (RelaySlaveChaNum <= 4)
+	async_data da = {0};
+	da.fire_or_zero = _FIRE;
+	da.method = PROMPT_CTRL;
+	da.w_eep_flag = FLAG_W_EEP;
+	for(uint8_t i = 0; i < RelaySlaveChaNum;i++)
+	{
+		da.channel = i;
+		da.reg = &board->relay_staging_staus[i];
+		if(board->val_key[i] == 0)
+		{
+			if(board->handle_k_status[i] == 1)
+			{
+				da.status = RELAY_CLOSE;
+				set_relay_sta_async(&da);
+				board->handle_k_status[i] = 0;
+			}
+		}else
+		{
+			if(board->handle_k_status[i] == 0)
+			{
+				da.status = RELAY_OPEN;
+				set_relay_sta_async(&da);		
+				board->handle_k_status[i] = 1;
+			}				
+		}
+	}
+#endif
+}
+
+
+
+
+
+//static void self_lock_opt1(void)
+//{
+//	async_data da = {0};
+//	
+//	da.fire_or_zero = _FIRE;
+//	da.method = PROMPT_CTRL;
+//	da.w_eep_flag = FLAG_W_EEP;
+//#if (RelaySlaveChaNum >= 1)
+//	if(board->key_1 == 0)
+//	{
+//		da.channel =0;
+//		da.reg = &board->relay_staging_staus[0];
+//		if(board->handle_k_1_status == 1)
+//		{
+//			da.status = RELAY_CLOSE;
+//			set_relay_sta_async(&da);
+//			board->handle_k_1_status = 0;
+//		}
+//	}else
+//	{
+//		da.channel =0;
+//		da.reg = &board->relay_staging_staus[0];
+//		if(board->handle_k_1_status == 0)
+//		{
+//			da.status = RELAY_OPEN;
+//			set_relay_sta_async(&da);		
+//			board->handle_k_1_status = 1;			
+//		}
+//	}
+//#endif
+//	
+//	
+//#if (RelaySlaveChaNum >= 2)
+//	if(board->key_2 == 0)
+//	{
+//		da.channel =1;
+//		da.reg = &board->relay_staging_staus[1];
+//		if(board->handle_k_2_status == 1)
+//		{
+//			da.status = RELAY_CLOSE;
+//			set_relay_sta_async(&da);
+//			board->handle_k_2_status = 0;
+//		}
+//	}else
+//	{
+//		da.channel =1;
+//		da.reg = &board->relay_staging_staus[1];
+//		if(board->handle_k_2_status == 0)
+//		{
+//			da.status = RELAY_OPEN;
+//			set_relay_sta_async(&da);		
+//			board->handle_k_2_status = 1;			
+//		}
+//	}
+//#endif
+//	
+//#if (RelaySlaveChaNum >= 3)
+//	if(board->key_3 == 0)
+//	{
+//		da.channel =2;
+//		da.reg = &board->relay_staging_staus[2];
+//		if(board->handle_k_3_status == 1)
+//		{
+//			da.status = RELAY_CLOSE;
+//			set_relay_sta_async(&da);
+//			board->handle_k_3_status = 0;
+//		}
+//	}else
+//	{
+//		da.channel =2;
+//		da.reg = &board->relay_staging_staus[2];
+//		if(board->handle_k_3_status == 0)
+//		{
+//			da.status = RELAY_OPEN;
+//			set_relay_sta_async(&da);		
+//			board->handle_k_3_status = 1;			
+//		}
+//	}
+//#endif
+//	
+//#if (RelaySlaveChaNum >= 4)
+//	if(board->key_4 == 0)
+//	{
+//		da.channel =3;
+//		da.reg = &board->relay_staging_staus[3];
+//		if(board->handle_k_4_status == 1)
+//		{
+//			da.status = RELAY_CLOSE;
+//			set_relay_sta_async(&da);
+//			board->handle_k_4_status = 0;
+//		}
+//	}else
+//	{
+//		da.channel =3;
+//		da.reg = &board->relay_staging_staus[3];
+//		if(board->handle_k_4_status == 0)
+//		{
+//			da.status = RELAY_OPEN;
+//			set_relay_sta_async(&da);		
+//			board->handle_k_4_status = 1;			
+//		}
+//	}
+//#endif	
+//}
+
+#endif

+ 17 - 0
truing_control/PDU-AC_ADA_NEW_6/hardware/flash/flash.c

@@ -67,4 +67,21 @@ void flash_get_infomation(ac_information_t *info)
 	info->uniq_ID_64_95 						= *(uint32_t*)(UNIQU_3);
 	info->uniq_ID_32_63 						= *(uint32_t*)(UNIQU_2);
 	info->uniq_ID_00_31 						= *(uint32_t*)(UNIQU_1);
+}
+
+
+void flash_disable_read(void)
+{
+#if OPEN_NOT_READ_EN
+	if(ob_obstat_plevel_get() != OB_OBSTAT_PLEVEL_LOW)
+	{
+		fmc_unlock();
+		fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR);
+		ob_unlock();
+		ob_security_protection_config(FMC_LSPC);
+		ob_lock();
+		fmc_lock();
+		NVIC_SystemReset();
+	}
+#endif
 }

+ 3 - 0
truing_control/PDU-AC_ADA_NEW_6/hardware/flash/flash.h

@@ -21,6 +21,9 @@ void flash_get_meta_data(META_DATA_S *meta);
 
 void flash_get_infomation(ac_information_t *info);
 
+
+void flash_disable_read(void);
+
 #endif
 
 

+ 16 - 3
truing_control/PDU-AC_ADA_NEW_6/user/board_cfg.h

@@ -15,7 +15,11 @@
 
 
 
-#define OPEN_WATCH_DOG  1
+#define OPEN_WATCH_DOG  				0
+#define OPEN_NOT_READ_EN				0
+
+
+
 
 #define  POWER_DC           0
 #define  POWER_AC           1
@@ -56,11 +60,12 @@
 #define   PRJ_3_2                   0
 #define 	PRJ_DC_8									0
 #define   PRJ_6_NEW                 0
-#define   PRJ_3_NEW                 1
-#define 	PRJ_5_NEW									0
+#define   PRJ_3_NEW                 0
+#define 	PRJ_5_NEW									1
 #define 	PRJ_4_SELF_LOCK       	  0
 #define   PRJ_4_BASE                0
 #define   PRJ_1_BASE                0
+#define 	PRJ_1_SELF_LOCK       	  0
 
 #if PRJ_8					
 	#define   POWER_TYPE                (POWER_AC)
@@ -128,6 +133,14 @@
 	#define   PT_SUB_COUNT              (RelaySlaveChaNum)
 	#define   SUPPORT_DETECTION         1
 	#define   SUPPORT_RELAY_REMENBER		1
+#elif PRJ_1_SELF_LOCK
+	#define 	RelaySlaveChaNum 					1
+	#define 	ACSingCurrid 							2 
+	#define   SURPPORT_2_PT             0
+	#define   PT_SUB_COUNT              (RelaySlaveChaNum)
+	#define   SUPPORT_DETECTION         1
+	#define   SUPPORT_RELAY_REMENBER		1
+	#define   SUPPORT_SELF_LOCK         1
 #endif
 
 

+ 1 - 1
truing_control/PDU-AC_ADA_NEW_6/user/cfg.h

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

+ 31 - 12
truing_control/PDU-AC_ADA_NEW_6/user/main.c

@@ -44,6 +44,7 @@ static void app_init(META_DATA_S *meta);
 
 int main(){
 	
+	flash_disable_read();
 	ac_board.md_data.r_data.dev_chn =  ACSingCurrid << 8 | RelaySlaveChaNum;
 	InitSysTick();
 	led_init();
@@ -79,18 +80,40 @@ int main(){
 		ac_board.handle_input_pt[1] = 1;
 	#endif
 	ac_board.detection();
-
-
 	
+#if SUPPORT_SELF_LOCK
+	ac_board.get_lock_key();
+#endif
+
 	if((ac_board.md_data.r_data.detection & 0x1) == 0)
 	{
 		for(uint8_t i = 0; i < PT_SUB_COUNT;i++)
 		{
 			ac_board.handle_status[i] = ac_board.relay_staging_staus[i];
 			ac_board.relay_staging_staus[i] = 0;
+#if SUPPORT_SELF_LOCK
+			ac_board.handle_k_status[i] = ac_board.val_key[i];
+#endif
 		}
 		ac_board.handle_input_pt[0] = 0;
 	}
+#if SUPPORT_SELF_LOCK
+		else
+		{
+				for(uint8_t i = 0; i < PT_SUB_COUNT;i++)
+				{
+					if(ac_board.val_key[i] == 0)
+					{
+						ac_board.handle_status[i] = ac_board.relay_staging_staus[i];
+						ac_board.relay_staging_staus[i] = 0;
+					}else
+					{
+						ac_board.handle_k_status[i] = ac_board.val_key[i];
+					}
+				}
+		}
+#endif	
+	
 #if SURPPORT_2_PT		
 		if((ac_board.md_data.r_data.detection & 0x2) == 0)
 		{
@@ -104,7 +127,6 @@ int main(){
 #endif
 	
 	
-	
 	while(1)
 	{
 		ac_board.feed_dog();
@@ -113,19 +135,15 @@ int main(){
 		task_1s();
 		task_10s();
 		eMBPoll();
+#if SUPPORT_SELF_LOCK
+		ac_board.opt_lock_key();
+#endif
 		ac_board.opt_detection();
 		relay_ctrl();
-		if(ac_board.clear_flag)
-		{
-			ac_board.clear_flag = 0;
-			reset_config_for_eeprom();
-		}
 	}
 	return 0;
 }
 
-static uint16_t _count = 0;
-
 static void task_query(void)
 {
 	w_eeprom_data_t data = {0};
@@ -143,6 +161,9 @@ static void task_1s(void)
 			ac_board.md_data.r_data.info.runing_time++;
 			ac_board.led_flash();
 			ac_board.detection();
+#if SUPPORT_SELF_LOCK
+			ac_board.get_lock_key();
+#endif
 
 	}
 }
@@ -159,8 +180,6 @@ static void task_100ms(void)
 			channel++;
 			if(channel == RelaySlaveChaNum)
 			{
-				//check input wanning
-				//calculate input
 				channel = 0;
 			}	
 	}