liyi 1 рік тому
батько
коміт
b6706acc24

+ 22 - 7
control/PDU-AC-COMBINE_UPGRADE/App/Key/Key.c

@@ -61,6 +61,20 @@
 		#define DERECTION_IO_1_SOURCE         				EXTI_SOURCE_PIN1
 		#define DERECTION_IO_1_EXIT      							EXTI_1
 		
+		#define DERECTION_IO_2_RCU										EXTI_SOURCE_GPIOB
+		#define DERECTION_IO_2_PIN     								DERECTION_IO_2
+		#define DERECTION_IO_2_SOURCE         				EXTI_SOURCE_PIN2
+		#define DERECTION_IO_2_EXIT      							EXTI_2		
+#elif ((RelaySlaveChaNum <= 4) && (SUPPORT_TWIN_FIRE))
+		#define DERECTION_GPIO   		GPIOB
+		#define DERECTION_IO_1 			GPIO_PIN_1
+		#define DERECTION_IO_2 			GPIO_PIN_2
+
+		#define DERECTION_IO_1_RCU										EXTI_SOURCE_GPIOB
+		#define DERECTION_IO_1_PIN     								DERECTION_IO_1
+		#define DERECTION_IO_1_SOURCE         				EXTI_SOURCE_PIN1
+		#define DERECTION_IO_1_EXIT      							EXTI_1
+		
 		#define DERECTION_IO_2_RCU										EXTI_SOURCE_GPIOB
 		#define DERECTION_IO_2_PIN     								DERECTION_IO_2
 		#define DERECTION_IO_2_SOURCE         				EXTI_SOURCE_PIN2
@@ -118,11 +132,13 @@ static void   ConfigDetection(void)
 		rcu_periph_clock_enable(RCU_GPIOB);
 	#elif ((RelaySlaveChaNum == 8) && (SUPPORT_2_DETECTION))
 		rcu_periph_clock_enable(RCU_GPIOB);
+	#elif(SUPPORT_TWIN_FIRE)
+		rcu_periph_clock_enable(RCU_GPIOB);
 	#else
 		rcu_periph_clock_enable(RCU_GPIOA);
 	#endif
 	//config io
-	#if (RelaySlaveChaNum == 6 || ((RelaySlaveChaNum == 8) && SUPPORT_2_DETECTION))
+	#if (RelaySlaveChaNum == 6 || ((RelaySlaveChaNum == 8) && SUPPORT_2_DETECTION) || SUPPORT_TWIN_FIRE)
 		gpio_mode_set(DERECTION_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, DERECTION_IO_2);
 	#endif
 		gpio_mode_set(DERECTION_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, DERECTION_IO_1);
@@ -136,7 +152,7 @@ static void   ConfigDetection(void)
 			exti_interrupt_flag_clear(DERECTION_IO_2_EXIT);
 		#elif((RelaySlaveChaNum <= 4) && (!SUPPORT_TWIN_FIRE))
 			nvic_irq_enable(EXTI4_15_IRQn,2);
-		#elif ((RelaySlaveChaNum == 8) && (SUPPORT_2_DETECTION))
+		#elif ((RelaySlaveChaNum == 8) && (SUPPORT_2_DETECTION) || (SUPPORT_TWIN_FIRE))
 			nvic_irq_enable(EXTI0_1_IRQn,2);
 			nvic_irq_enable(EXTI2_3_IRQn,2);
 			syscfg_exti_line_config(DERECTION_IO_2_RCU,DERECTION_IO_2_SOURCE);
@@ -150,6 +166,7 @@ static void   ConfigDetection(void)
 		exti_init(DERECTION_IO_1_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
 		exti_interrupt_flag_clear(DERECTION_IO_1_EXIT);
 	#endif
+
 #endif
 }
 
@@ -245,22 +262,20 @@ uint8_t get_detection(void)
 			value |= (1 << 1);
 		}
 	#else
-		{
-			#if (RelaySlaveChaNum == 6 || ((RelaySlaveChaNum == 8) && SUPPORT_2_DETECTION))
+		#if (RelaySlaveChaNum == 6 || ((RelaySlaveChaNum == 8) && SUPPORT_2_DETECTION) || SUPPORT_TWIN_FIRE)
 					uint8_t val1 = 0;
 				  val1 = gpio_input_bit_get(DERECTION_GPIO,DERECTION_IO_2);
 				  if(val1 == 0)
 				  {
 					  value |= (1 << 1);
 				  }
-			#endif
+		#endif
 					uint8_t val2 = 0;
 					val2 = gpio_input_bit_get(DERECTION_GPIO,DERECTION_IO_1);
 			    if(val2 == 0)
 				  {
 					  value |= (1 << 0);
-				  }
-		}
+				  }		
 	#endif
 #endif 
 	return value;

+ 117 - 27
control/PDU-AC-COMBINE_UPGRADE/App/Main/Main.c

@@ -270,11 +270,71 @@ void check_channel_reset()
 *							0   0     1   1    1     选择A7X    选择A7Y    		TR5    			5								4						5																		4靠电压互感器那边(4通道大电流)
 *							1   1     X   X    X     全部断开   全部断开
 *********************************************************************************************************/
+
+
+
 static  void  Proc100msTask(void)
 {
 	unsigned int chal_num=0;
   if(Get100msFlag())  //判断100ms标志状态
   { 
+		
+#if SUPPORT_TWIN_FIRE
+		uint32_t voltage = 0;
+		uint32_t current = 0;
+		uint32_t power = 0;
+		uint32_t consumer = 0;
+		uint32_t fac = 0;
+		uint32_t freq = 0;
+		uint32_t data_v = 0;
+		uint32_t data_i = 0;
+		if((Start_Read_Flag)&&(channel==0x00))		//只有读完数据之后且现在轮询到通道0才会继续更新电压和频率值
+		{
+			Start_Read_Flag = 0;
+		}
+		select_channel(channel);
+		Calculate_HLW8110_MeterData();
+		
+		data_v = (F_AC_V*EE_ACDC_Coef_ReadReg[channel].ACDC_V_k)+(EE_ACDC_Coef_ReadReg[channel].ACDC_V_b/1000);
+		data_i = (F_AC_I*EE_ACDC_Coef_ReadReg[channel].ACDC_I_k)+(EE_ACDC_Coef_ReadReg[channel].ACDC_I_b/1000);
+		voltage = data_v;
+		current = data_i;
+		power = F_AC_P*1000;
+	  freq = F_AC_LINE_Freq*1000;
+	  Hlw8110_Restore[channel] += F_AC_E;
+		fac = F_AC_PF*1000;
+	
+	
+		select_channel(channel + 4);
+		Calculate_HLW8110_MeterData();
+		
+		
+		data_v = (F_AC_V*EE_ACDC_Coef_ReadReg[channel].ACDC_V_k)+(EE_ACDC_Coef_ReadReg[channel].ACDC_V_b/1000);
+		data_i = (F_AC_I*EE_ACDC_Coef_ReadReg[channel].ACDC_I_k)+(EE_ACDC_Coef_ReadReg[channel].ACDC_I_b/1000);
+
+		voltage = data_v > voltage ? data_v : voltage;
+		current += data_i;
+		power += (F_AC_P*1000);
+		Hlw8110_Restore[channel] += F_AC_E;
+		consumer = Hlw8110_Restore[channel]*1000 + read_Total_Consumer[channel];
+		fac = fac > (F_AC_PF*1000) ? fac : (F_AC_PF*1000);
+		if(voltage <=1000)
+		{
+			current = 0;
+			freq = 0;
+			fac = 0;
+			power = 0;
+		}
+		
+		AC_Ele_ReadReg[channel].AC_V = voltage*(1.732);
+		AC_Ele_ReadReg[channel].AC_I = current;
+		AC_Ele_ReadReg[channel].AC_LINE_Freq = freq;
+		AC_Ele_ReadReg[channel].AC_P = power;
+		AC_Ele_ReadReg[channel].AC_PF =fac;
+		AC_Ele_ReadReg[channel].AC_E = consumer;
+		
+		
+#else
 		select_channel(channel);
 		Calculate_HLW8110_MeterData();
 		//AC_Ele_ReadReg[0].AC_V=(F_AC_V*EE_ACDC_Coef_ReadReg[0].ACDC_V_k)+(EE_ACDC_Coef_ReadReg[0].ACDC_V_b/1000);
@@ -305,17 +365,18 @@ static  void  Proc100msTask(void)
 		Hlw8110_Restore[channel] += F_AC_E;
 		AC_Ele_ReadReg[channel].AC_E=(Hlw8110_Restore[channel]*1000 + read_Total_Consumer[channel]);																																									 //电能
 		AC_Ele_ReadReg[channel].AC_PF=F_AC_PF*1000;						//功率因素
-		
-		AC_Ele_ReadReg_All.AC_V = AC_Ele_ReadReg[0].AC_V;
-		AC_Ele_ReadReg_All.AC_I += AC_Ele_ReadReg[channel].AC_I;		//all current
-		AC_Ele_ReadReg_All.AC_P += AC_Ele_ReadReg[channel].AC_P;
-		AC_Ele_ReadReg_All.AC_LINE_Freq = AC_Ele_ReadReg[0].AC_LINE_Freq;
-		AC_Ele_ReadReg_All.AC_PF= AC_Ele_ReadReg[channel].AC_PF;
+#endif	
+	//	AC_Ele_ReadReg_All.AC_V = AC_Ele_ReadReg[0].AC_V;
+	//	AC_Ele_ReadReg_All.AC_I += AC_Ele_ReadReg[channel].AC_I;		//all current
+	//	AC_Ele_ReadReg_All.AC_P += AC_Ele_ReadReg[channel].AC_P;
+	//	AC_Ele_ReadReg_All.AC_LINE_Freq = AC_Ele_ReadReg[0].AC_LINE_Freq;
+	//	AC_Ele_ReadReg_All.AC_PF= AC_Ele_ReadReg[channel].AC_PF;
 		
 		EE_ACDC_Total_Consum_Read_Reg[channel].ACDC_Consumption = AC_Ele_ReadReg[channel].AC_E;										//total consumer
 	//	ACDC_Total_All_Chn_Read_Reg.ACDC_All_Consumption += EE_ACDC_Total_Consum_Read_Reg[channel].ACDC_Consumption;
 		all_val += EE_ACDC_Total_Consum_Read_Reg[channel].ACDC_Consumption;
-		AC_Ele_ReadReg_All.AC_E += EE_ACDC_Total_Consum_Read_Reg[channel].ACDC_Consumption;
+	//	AC_Ele_ReadReg_All.AC_E += EE_ACDC_Total_Consum_Read_Reg[channel].ACDC_Consumption;
+
 		WarnState_ch(channel);																																																							//更新状态寄存器的告警阈值
 		//over_RelayState();
 		over_RelayState_ch(channel);
@@ -369,11 +430,15 @@ static  void  InitHardware(void)
 	RelaySlaveAddress=ReadKeyValue();	//读取从机的地址
   InitSoftware();   								//初始化软件相关函数,就是modbus这个部分
 	channel = 0;
-	
+
 	while(1)						 //切换开关轮询初始化8110计量芯片
 	{
 		select_channel(channel);
 		Init_HLW8110();
+#if SUPPORT_TWIN_FIRE
+		select_channel(channel+4);
+		Init_HLW8110();
+#endif
 		channel++;
 		if(channel>=RelaySlaveChaNum){
 			channel=0;
@@ -462,24 +527,6 @@ void set_channel_status(uint8_t channel,uint8_t status)
 	}
 }
 
-int check_or_control_detection(void)
-{
-#if SUPPORT_DETECTION_SWITCH
-	uint8_t channels = RelaySlaveChaNum;
-	if(detection_value == 0)
-	{
-			for(int i = 0; i < RelaySlaveChaNum;i++)
-			{
-				set_channel_status(i,0);
-			}
-			RelayState();
-		return 0;
-	}
-	return 1;
-#endif
-	return 1;
-}
-
 
 void switch_recode()
 {
@@ -534,6 +581,34 @@ void switch_recode()
 						RelayState_ch(k);
 				}
 			}
+#elif (SUPPORT_TWIN_FIRE)
+		if((detection_value & 0x3) != 0x3)
+		{
+				if(handle_detection[0] == 1)
+				{
+					for(int i = 0;i < RelaySlaveChaNum;i++)
+						handle_status[i] = EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State;
+				}
+				handle_detection[0] = 0;
+				EE_ACDC_State_ReadReg[0].ACDC_ALLCha_Off_State=true;
+				for(int i = 0;i < RelaySlaveChaNum;i++)
+					EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State = false;
+				RelayState();
+		}else
+		{
+			if(handle_detection[0] == 0)
+			{
+				handle_detection[0] = 1;
+				for(int i = 0;i < RelaySlaveChaNum;i++)
+					EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State=handle_status[i];
+				EE_ACDC_State_ReadReg[0].ACDC_ALLCha_On_State=true;
+				All_On_Flag = 1;																										//全开标志置1
+				All_Off_Flag = 0;	
+				Delay_Ms_2 = 0;
+				timer_enable(TIMER14);
+				//RelayState();
+			}
+		}
 #else
 		if(detection_value == 0)
 		{
@@ -543,6 +618,7 @@ void switch_recode()
 						handle_status[i] = EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State;
 				}
 				handle_detection[0] = 0;
+				EE_ACDC_State_ReadReg[0].ACDC_ALLCha_Off_State=true;
 				for(int i = 0;i < RelaySlaveChaNum;i++)
 					EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State = false;
 				RelayState();
@@ -553,7 +629,12 @@ void switch_recode()
 				handle_detection[0] = 1;
 				for(int i = 0;i < RelaySlaveChaNum;i++)
 					EE_ACDC_State_ReadReg[i].ACDC_Cha_On_Off_State=handle_status[i];
-				RelayState();
+				EE_ACDC_State_ReadReg[0].ACDC_ALLCha_On_State=true;
+				All_On_Flag = 1;																										//全开标志置1
+				All_Off_Flag = 0;	
+				Delay_Ms_2 = 0;
+				timer_enable(TIMER14);
+				//RelayState();
 			}
 		}
 	#endif
@@ -575,6 +656,15 @@ void switch_recode()
 				}
 				RelayState();
 		}
+#elif (SUPPORT_TWIN_FIRE)
+		if((detection_value & 0x3) != 0x3)
+		{
+				for(int i = 0; i < (RelaySlaveChaNum)/2;i++)
+				{
+					set_channel_status(i,0);
+				}
+				RelayState();
+		}		
 #else
 		if(detection_value == 0)
 		{

+ 0 - 1
control/PDU-AC-COMBINE_UPGRADE/App/Main/Main.h

@@ -468,6 +468,5 @@ extern unsigned char consumer_clear_flag;
 
 #define THRESHOULD_JUDGMENT    		(50)
 
-int check_or_control_detection(void);
 void break_2_boot_upgreade(void);
 #endif

+ 13 - 12
control/PDU-AC-COMBINE_UPGRADE/App/Main/board_cfg.h

@@ -7,15 +7,15 @@
 #define 	PRJ_4_ALL_O_ALL_C					0
 #define   PRJ_4_SELF_LOCK_SWITCH    0
 #define 	PRJ_6_BASE								0
-#define 	PRJ_8_BASE								1
+#define 	PRJ_8_BASE								0
 #define   PRJ_1_ALL_O_ALL_C         0
 #define   PRJ_1_SELF_LOCK_SWITCH    0
-#define   PRJ_TWIN_FIRE             0
+#define   PRJ_TWIN_FIRE             1
 #define 	PRJ_ITK_8_CHANNEL					0
 #define   PRJ_2_2_BASE              0
 #define   PRJ_8_NEW									0
 #define 	PRJ_OLD_4                 0
-
+#define   PRJ_1_All_OLD             0
 
 
 #if PRJ_4_BASE
@@ -25,14 +25,14 @@
 	#define 	ACSingCurrid 							2 
 #elif PRJ_4_ALL_O_ALL_C
 	#define 	RelaySlaveChaNum 					4
-	#define   SUPPORT_SWITCH_REMENBER   0
+	#define   SUPPORT_SWITCH_REMENBER   1
 	#define 	SUPPORT_ALL_ON_OFF        1
 	#define 	SUPPORT_JLINK							1
 	#define   SUPPORT_DETECTION         1
 	#define 	ACSingCurrid 							2 
 #elif PRJ_4_SELF_LOCK_SWITCH
 	#define 	RelaySlaveChaNum 					4
-	//#define 	SUPPORT_SWITCH_REMENBER		1
+	#define 	SUPPORT_SWITCH_REMENBER		1
 	#define 	SUPPORT_SELF_LOCK         1
 	#define   SUPPORT_DETECTION         1
 	#define 	ACSingCurrid 							2 
@@ -40,15 +40,12 @@
 	#define 	RelaySlaveChaNum 					6
 	#define 	SUPPORT_SWITCH_REMENBER		1
 	#define   SUPPORT_DETECTION         1
-	#define  	SUPPORT_DETECTION_SWITCH  1
 	#define 	ACSingCurrid 							1 
 #elif PRJ_8_BASE
 	#define 	RelaySlaveChaNum 					8
-	#define 	SUPPORT_SWITCH_REMENBER		0
+	#define 	SUPPORT_SWITCH_REMENBER		1
 	#define   SUPPORT_DETECTION         1
 	#define 	ACSingCurrid 							1 
-	#define 	SUPPORT_DETECTION_SWITCH  1
-	#define   SUPPORT_FALLING_DETECTED  0
 #elif PRJ_1_ALL_O_ALL_C
 	#define 	RelaySlaveChaNum 					1
 	#define 	SUPPORT_SWITCH_REMENBER		1
@@ -58,7 +55,7 @@
 #elif PRJ_1_SELF_LOCK_SWITCH
 	#define 	RelaySlaveChaNum 					1
 	#define 	SUPPORT_SELF_LOCK         1
-	//#define 	SUPPORT_SWITCH_REMENBER		1
+	#define 	SUPPORT_SWITCH_REMENBER		1
 	#define   SUPPORT_DETECTION         1
 	#define 	ACSingCurrid 							2 
 #elif PRJ_TWIN_FIRE
@@ -66,14 +63,13 @@
 	#define 	SUPPORT_TWIN_FIRE					1
 	#define 	SUPPORT_SWITCH_REMENBER		1
 	#define   SUPPORT_DETECTION         1
-	#define   SUPPORT_DETECTION_SWITCH  1
+	#define   SUPPORT_FALLING_DETECTED  0
  	#define 	ACSingCurrid 							1 
 #elif PRJ_ITK_8_CHANNEL
 	#define 	RelaySlaveChaNum 					8
 	#define 	SUPPORT_SWITCH_REMENBER		0
 	#define   SUPPORT_DETECTION         0
 	#define 	ACSingCurrid 							1 
-	#define 	SUPPORT_DETECTION_SWITCH  0
 #elif 	PRJ_2_2_BASE
 	#define 	RelaySlaveChaNum 					2
 	#define 	SURPPORT_2_2							1
@@ -91,6 +87,11 @@
 	#define 	RelaySlaveChaNum 					4
 	#define   SUPPORT_4_KEY             1
 	#define 	ACSingCurrid 							2 
+	
+#elif   PRJ_1_All_OLD
+	#define 	RelaySlaveChaNum 					1
+	#define   SUPPORT_4_KEY             1
+	#define 	ACSingCurrid 							2 
 #endif
 
 

+ 3 - 16
control/PDU-AC-COMBINE_UPGRADE/HW/Uart1/Uart1.c

@@ -640,62 +640,49 @@ void select_channel(uint8_t chx)
 								break;
 	#endif
 #else
-		#if (RelaySlaveChaNum >= 1)
 							case 0x00:		//011
 								SEL0_H;
 								SEL1_H;
 								SEL2_L;
 								break;					
-		#endif
-		#if (RelaySlaveChaNum >= 2)
+
+
 							case 0x01:		//010
 								SEL0_L;
 								SEL1_H;
 								SEL2_L;
 								break;
-		#endif
-		#if (RelaySlaveChaNum >= 3)
+
 							case 0x02:		//001
 								SEL0_H;
 								SEL1_L;
 								SEL2_L;
 								break;							
-		#endif
-		#if (RelaySlaveChaNum >= 4)
 						case 0x03:		//000
 							SEL0_L;
 							SEL1_L;
 							SEL2_L;
 							break;		
-		#endif
-		#if (RelaySlaveChaNum >= 5)
 						case 0x04:    //111
 							SEL0_H;
 							SEL1_H;
 							SEL2_H;
 							break;
-		#endif
-		#if (RelaySlaveChaNum >= 6)
 						case 0x05:    //110
 							SEL0_L;
 							SEL1_H;
 							SEL2_H;
 							break;
-		#endif
-		#if (RelaySlaveChaNum >= 7)
 						case 0x06:    //101
 							SEL0_H;
 							SEL1_L;
 							SEL2_H;
 							break;
-		#endif
-		#if (RelaySlaveChaNum >= 8)
 						case 0x07:    //100
 							SEL0_L;
 							SEL1_L;
 							SEL2_H;
 							break;
-		#endif
 						default:
 							break;
 #endif