Explorar o código

升级控制板增加电压校准功能。

liyi hai 7 meses
pai
achega
60eb35e061

+ 36 - 0
truring_ctrl_upgrade/PDU-AC_ADA_NEW/common/common.c

@@ -52,6 +52,16 @@ void read_config_from_eeprom(void)
 			for(uint8_t i = 0 ; i < MAX_ROW;i++){
 				board->write_eeprom_page(EEPROM_CONSUMER_ADDR +(CONSUM_PAGE*i),(uint8_t*)&chache.data[0],CONSUM_PAGE);
 			}
+			
+			board->v_k[0] = 3135;
+			board->v_k[1] = 3135;
+			
+			board->i_k[0] = 10000;
+			board->i_k[1] = 10000;		
+			board->write_eeprom_page(EEPROM_K_V_ADDR,(uint8_t *)&board->v_k[0],EEPROM_K_V_LEN);
+			
+			board->write_eeprom_page(EEPROM_K_I_ADDR,(uint8_t *)&board->i_k[0],EEPROM_K_I_LEN);
+				
 			board->write_eeprom_page(EEPROM_DEVICES_ADDR,(uint8_t *)&board->md_data.r_data.dev_chn,EEPROM_DEVICES_LENTH);
 		}
 		{
@@ -61,12 +71,28 @@ void read_config_from_eeprom(void)
 				for(int i =0 ;i < RelaySlaveChaNum;i++)
 				{
 #ifndef SUPPORT_MON
+		#if SUPPORT_CTRL2_LOCK2
+					if(i < 2)
+					{
+						if(board->relay_staging_staus[i])
+						{
+							SET_RL_ON_DELAY_FLAG(board->relay_staging_staus[i]);
+							CLEAR_RL_OFF_DELAY_FLAG(board->relay_staging_staus[i]);
+							SET_RL_ORDER_FLAG(board->relay_staging_staus[i]);
+						}
+					}else
+					{
+						board->md_data.r_data.state.state[i].state = 1;
+					}
+					
+		#else					
 					if(board->relay_staging_staus[i])
 					{
 						SET_RL_ON_DELAY_FLAG(board->relay_staging_staus[i]);
 						CLEAR_RL_OFF_DELAY_FLAG(board->relay_staging_staus[i]);
 						SET_RL_ORDER_FLAG(board->relay_staging_staus[i]);
 					}
+		#endif
 #else
 					board->md_data.r_data.state.state[i].state = 1;
 #endif
@@ -80,6 +106,16 @@ void read_config_from_eeprom(void)
 				board->check_threshold(THRESHOLD_OUT,i);
 			}
 			
+			board->read_eeprom_page(EEPROM_K_V_ADDR,(uint8_t *)&board->v_k[0],EEPROM_K_V_LEN);
+			
+			board->read_eeprom_page(EEPROM_K_I_ADDR,(uint8_t *)&board->i_k[0],EEPROM_K_I_LEN);
+			
+			for(int i =0 ;i < 2;i++)
+			{
+				board->v_k[i] = board->v_k[i] > 10000 ?  3135 : board->v_k[i];
+				board->i_k[i] = board->i_k[i] > 10000 ?  10000 : board->i_k[i];
+			}
+			
 			iic_data chache={0};
 			for(uint8_t i = 0 ; i < MAX_ROW;i++)
 			{

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

@@ -61,6 +61,11 @@
 
 #define CLEAR_CONSUMER_ALL                 (5128)
 
+#define SET_PT_KV													(5129)
+#define SET_PT_KV_LEN                     (2)
+
+#define SET_PT_KI                         (5131)
+#define SET_PT_KI_LEN                     (2)
 
 #define TOTAL_THR                           (5200)
 #define TOTAL_THR_LEN                       (16)
@@ -263,6 +268,16 @@
 #define EEPROM_CONSUMER_ADDR                  (3072)
 #define EEPROM_CONSUMER_ADDR_LEN              (CONSUM_PAGE*MAX_ROW)
 
+#define EEPROM_K_V_ADDR                        (6144)
+#define EEPROM_K_V_LEN                         (4)
+
+#define EEPROM_K_I_ADDR												 (6176)
+#define EEPROM_K_I_LEN                         (4)
+
+
+
+
+
 
 #define THRESHOLD_IN             							0
 #define THRESHOLD_OUT            							1
@@ -682,6 +697,8 @@ typedef struct {
 	//uint16_t  relay_zero_limit_counter[3];
 	consumer_data con_da;
 	uint32_t ele_restore[MAX_CHANNEL];
+	uint16_t    v_k[2];
+	uint16_t    i_k[2];
 	uint8_t   haddr;
 	uint8_t   detection_1_value;
 	uint32_t  detection_1_count;

+ 27 - 2
truring_ctrl_upgrade/PDU-AC_ADA_NEW/hardware/detection/detection.c

@@ -186,6 +186,12 @@ 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)
+							{
+								continue;
+							}
+#endif
 						da.channel = 	j;
 						da.method = DELAY_CTRL;
 						da.reg = &board->relay_staging_staus[j];
@@ -232,6 +238,12 @@ 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)
+							{
+								continue;
+							}
+#endif
 						da.channel =k;
 						da.reg = &board->relay_staging_staus[k];
 						da.status = RELAY_OPEN;
@@ -307,12 +319,18 @@ static void detection_opt(void)
 				{
 					if(board->handle_input_pt[0] == 0)
 					{
-						board->handle_input_pt[0] = 1;
+						
 						for(uint8_t k = 0; k < PT_SUB_COUNT;k++)
 						{
 #if SUPPORT_SELF_LOCK
 							if(board->val_key[k] == 0)
 									continue;
+#endif
+#if SUPPORT_CTRL2_LOCK2
+							if(k >= 2)
+							{
+								continue;
+							}
 #endif
 							async_data da = {0};
 							da.channel =k;
@@ -323,6 +341,7 @@ static void detection_opt(void)
 							da.w_eep_flag = FLAG_N_W_EEP;
 							set_relay_sta_async(&da);
 						}
+						board->handle_input_pt[0] = 1;
 					}
 				}else
 				{
@@ -330,6 +349,12 @@ static void detection_opt(void)
 					{
 						for(uint8_t k = 0; k < PT_SUB_COUNT;k++)
 						{
+#if SUPPORT_CTRL2_LOCK2
+							if(k >= 2)
+							{
+								continue;
+							}
+#endif
 							board->handle_status[k] = board->md_data.r_data.state.state[k].state;
 							async_data da = {0};
 							da.channel =k;
@@ -348,7 +373,6 @@ static void detection_opt(void)
 				{
 					if(board->handle_input_pt[1] == 0)
 					{
-						board->handle_input_pt[1] = 1;
 						for(uint8_t k = PT_SUB_COUNT; k < RelaySlaveChaNum;k++)
 						{
 							async_data da = {0};
@@ -360,6 +384,7 @@ static void detection_opt(void)
 							da.w_eep_flag = FLAG_N_W_EEP;
 							set_relay_sta_async(&da);
 						}
+						board->handle_input_pt[1] = 1;
 					}
 				}else
 				{

+ 19 - 0
truring_ctrl_upgrade/PDU-AC_ADA_NEW/hardware/electricity/electricity.c

@@ -18,6 +18,8 @@ extern float   F_AC_LINE_Freq;
 extern float   F_AC_E;													
 extern float   F_AC_PF;		
 
+extern uint8_t flag_value;
+
 extern uint32_t adc_Avg_value[ADC_CH_N];
 
 float elec[RelaySlaveChaNum] = {0.0};
@@ -48,6 +50,17 @@ static void read_ele(uint8_t channel)
 
 	if(channel < RelaySlaveChaNum)
 	{
+#if SURPPORT_2_PT
+		if( channel >= PT_SUB_COUNT)
+		{
+			flag_value = 1;
+		}else
+		{
+			flag_value = 0;
+		}
+#else
+		flag_value = 0;
+#endif
 		select_channel(channel);
 
 		Calculate_HLW8110_MeterData();
@@ -162,6 +175,11 @@ static void opt_over_func(uint8_t channel)
 	if(board->over_func[channel])
 	{
 		board->over_func[channel] = 0;
+#if SUPPORT_CTRL2_LOCK2
+		if(channel >= 2)
+				return;
+#endif
+#ifndef SUPPORT_MON
 		if(board->md_data.r_data.state.state[channel].state == RELAY_OPEN)
 		{
 				async_data da = {0};
@@ -173,5 +191,6 @@ static void opt_over_func(uint8_t channel)
 				da.w_eep_flag = FLAG_N_W_EEP;
 				set_relay_sta_async(&da);				
 		}
+#endif
 	}
 }

+ 44 - 13
truring_ctrl_upgrade/PDU-AC_ADA_NEW/hardware/hlw8110/Hlw8110.c

@@ -13,6 +13,7 @@
 #include "uart.h"
 #include "Timer.h"
 #include "mb.h"
+#include "common.h"
 #if HLW8110
 
 #define HIGH	1
@@ -94,6 +95,8 @@ float 	F_AC_E_B;												// B通
 float   F_AC_BACKUP_E_B;								// B通道电量备份	
 float   F_AC_LINE_Freq;     						// 市电线性频率
 
+uint8_t flag_value = 0;
+
 void Clear_RxBuf(void)
 {
 	unsigned char i;
@@ -615,7 +618,7 @@ void Check_WriteReg_Success(void)
 void Read_HLW8110_IA(void)
 {	
 	float a;
-	
+	board_t *board = get_board();
 	Uart_Read_HLW8110_Reg(REG_RMSIA_ADDR,3);
 	//DelayNms(10);
 	for(uint8_t i = 0;i < 5;i++)
@@ -650,7 +653,10 @@ void Read_HLW8110_IA(void)
 		a = (float)U32_RMSIA_RegData;
 		a = a * U16_RMSIAC_RegData;
 		a  = a/0x800000;                     //电流计算出来的浮点数单位是mA,比如5003.12 
-		a = a/1;  								// 1 = 电流系数
+		if(flag_value)
+			a = a/((float)board->i_k[1]/10000.0);  								// 1 = 电流系数
+		else
+			a = a/((float)board->i_k[0]/10000.0);
 		a = a/1000;              //a= 5003ma,a/1000 = 5.003A,单位转换成A
 		a = a * D_CAL_A_I;				//D_CAL_A_I是校正系数,默认是1
 		F_AC_I = a;
@@ -661,7 +667,7 @@ void Read_HLW8110_IA(void)
 void Read_HLW8110_U(void)
 {
 	float a;
-	
+	board_t *board = get_board();
 	Uart_Read_HLW8110_Reg(REG_RMSU_ADDR,3);
 	for(uint8_t i = 0;i < 5;i++)
 	{
@@ -697,8 +703,12 @@ void Read_HLW8110_U(void)
   a =  (float)U32_RMSU_RegData;
   a = a*U16_RMSUC_RegData;  
   a = a/0x400000;       
-  a = a/1;  						// 1 = 电压系数
-	a= a * 3.189;
+	if(flag_value)
+			a = a/((float)board->v_k[1]/10000.0);  								// 1 = 电流系数
+	else
+		  a = a/((float)board->v_k[0]/10000.0);
+  //a = a/0.31163;  						// 1 = 电压系数
+	//a= a * 3.189;
   a = a/100;    				//计算出a = 22083.12mV,a/100表示220.8312V,电压转换成V
   a = a*D_CAL_U;				//D_CAL_U是校正系数,默认是1,		
   F_AC_V = a;
@@ -710,7 +720,7 @@ void Read_HLW8110_PA(void)
 {
 	float a;
 	float b;
-	
+	board_t *board = get_board();
 	Uart_Read_HLW8110_Reg(REG_POWER_PA_ADDR,4);
 	for(uint8_t i = 0;i < 5;i++)
 	{
@@ -749,9 +759,19 @@ void Read_HLW8110_PA(void)
 	
     a = a*U16_PowerPAC_RegData;
     a = a/0x80000000;             
-    a = a/1;  										// 1 = 电流系数
-		a = a * 3.189;
-    a = a/1;  										// 1 = 电压系数
+	  if(flag_value)
+			a = a/((float)board->i_k[1]/10000.0);  								// 1 = 电流系数
+		else
+		  a = a/((float)board->i_k[0]/10000.0);    
+	 //a = a/1;  										// 1 = 电流系数
+		//a = a/0.31163; 
+	 //a = a * 3.189;
+   // a = a/0.31163;  										// 1 = 电压系数
+	  if(flag_value)
+			a = a/((float)board->v_k[1]/10000.0);  								// 1 = 电压系数
+		else
+		  a = a/((float)board->v_k[0]/10000.0);
+	
     a = a * D_CAL_A_P;						//D_CAL_A_P是校正系数,默认是1
     F_AC_P = a;									//单位为W,比如算出来5000.123,表示5000.123W
 
@@ -761,6 +781,7 @@ void Read_HLW8110_PA(void)
 void Read_HLW8110_EA(void)
 {
 	float a;
+	board_t *board = get_board();
 	Uart_Read_HLW8110_Reg(REG_ENERGY_PA_ADDR,3); 
 	for(uint8_t i = 0;i < 5;i++)
 	{
@@ -802,10 +823,20 @@ void Read_HLW8110_EA(void)
 	a =  (float)U32_ENERGY_PA_RegData;	
   a = a*U16_EnergyAC_RegData;
   a = a/0x20000000;             //电量单位是0.001KWH,比如算出来是2.002,表示2.002KWH    
-  a = a/1;  										// 1 = 电流系数
-	a= a * 3.189;
-  a = a/1;  										// 1 = 电压系数
-  a = a * D_CAL_A_E;     				//D_CAL_A_E是校正系数,默认是1
+	
+	  if(flag_value)
+			a = a/((float)board->i_k[1]/10000.0);  								// 1 = 电流系数
+		else
+		  a = a/((float)board->i_k[0]/10000.0);    
+  //a = a/1;  										// 1 = 电流系数
+	//a= a * 3.189;
+  //a = a/0.31163;  										// 1 = 电压系数
+	  if(flag_value)
+			a = a/((float)board->v_k[1]/10000.0);  								// 1 = 电压系数
+		else
+		  a = a/((float)board->v_k[0]/10000.0);  
+		
+	a = a * D_CAL_A_E;     				//D_CAL_A_E是校正系数,默认是1
   F_AC_E = a;
 	F_AC_BACKUP_E = F_AC_E;
 		

+ 9 - 0
truring_ctrl_upgrade/PDU-AC_ADA_NEW/hardware/relay/relay.c

@@ -104,7 +104,11 @@ void relay_init(void)
 	#if (RelaySlaveChaNum >=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);
+#if SUPPORT_CTRL2_LOCK2
+		gpio_bit_set(RELAY_GPIO, RELAY_3);
+#else
 		gpio_bit_reset(RELAY_GPIO, RELAY_3);
+#endif
 	#endif
 #if SUPPORT_4_ON_FLASH
 		gpio_mode_set(RELAY_GPIO,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,RELAY_4);
@@ -114,7 +118,12 @@ void relay_init(void)
 	#if (RelaySlaveChaNum >=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);
+		
+#if SUPPORT_CTRL2_LOCK2
+		gpio_bit_set(RELAY_GPIO, RELAY_4);
+#else
 		gpio_bit_reset(RELAY_GPIO, RELAY_4);
+#endif
 	#endif
 	
 	#if (RelaySlaveChaNum >=5)

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

@@ -257,6 +257,12 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 #if SUPPORT_SELF_LOCK
 												if(board->val_key[j] == 0)
 													continue;
+#endif
+#if SUPPORT_CTRL2_LOCK2
+												if(j >= 2)
+												{
+													continue;
+												}
 #endif
 												da.channel = 	j;
 												da.method = PROMPT_CTRL;
@@ -271,6 +277,12 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 #if SUPPORT_SELF_LOCK
 												if(board->val_key[j] == 0)
 													continue;										
+#endif
+#if SUPPORT_CTRL2_LOCK2
+												if(j >= 2)
+												{
+													continue;
+												}
 #endif
 												da.channel = 	j;
 												da.method = DELAY_CTRL;
@@ -296,6 +308,12 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 #if SUPPORT_SELF_LOCK
 												if(board->val_key[start+j] == 0)
 													continue;										
+#endif
+#if SUPPORT_CTRL2_LOCK2
+												if((start + j) >= 2)
+												{
+													continue;
+												}
 #endif
 												da.channel = 	start + j;
 												da.method = PROMPT_CTRL;
@@ -414,6 +432,29 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 							{
 								board->upgrade_flag = 1;
 							}
+							else if((usAddress >= SET_PT_KV) && (usAddress <= (SET_PT_KV + SET_PT_KV_LEN)))
+							{
+								start = usAddress - SET_PT_KV;
+								base = (uint16_t*)(&board->v_k[0]);
+								base+=start;
+								memcpy(base,&usRegHoldBuf[WiRegIndex],2*WusNRegs);
+								data.lenth =WusNRegs*2;
+								memcpy(&data.data,&usRegHoldBuf[WiRegIndex],2*WusNRegs);
+								uint16_t rom_start = EEPROM_K_V_ADDR;
+								data.start_addr = (rom_start+(start*2));
+								board->q_cache.en_queue(&data);
+							}else if((usAddress >= SET_PT_KI) && (usAddress <= (SET_PT_KI + SET_PT_KI_LEN)))
+							{
+								start = usAddress - SET_PT_KI;
+								base = (uint16_t*)(&board->i_k[0]);
+								base+=start;
+								memcpy(base,&usRegHoldBuf[WiRegIndex],2*WusNRegs);
+								data.lenth =WusNRegs*2;
+								memcpy(&data.data,&usRegHoldBuf[WiRegIndex],2*WusNRegs);
+								uint16_t rom_start = EEPROM_K_I_ADDR;
+								data.start_addr = (rom_start+(start*2));
+								board->q_cache.en_queue(&data);								
+							}
 						}
 						break;
 					}

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 79 - 3841
truring_ctrl_upgrade/PDU-AC_ADA_NEW/prj/JLinkLog.txt


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 34 - 34
truring_ctrl_upgrade/PDU-AC_ADA_NEW/prj/ctrl_board.uvguix.Gowon


+ 57 - 4
truring_ctrl_upgrade/PDU-AC_ADA_NEW/user/board_cfg.h

@@ -16,7 +16,7 @@
 
 
 #define OPEN_WATCH_DOG  				0
-#define OPEN_NOT_READ_EN				0
+#define OPEN_NOT_READ_EN				1
 
 
 
@@ -55,20 +55,33 @@
 #define PT_SUB_COUNT_3             3
 #define PT_SUB_COUNT_4             4
 
-#define   PRJ_8_NEW									0
+#define   PRJ_8_NEW									1
 #define   PRJ_3_4                   0
 #define   PRJ_3_2                   0
 #define 	PRJ_DC_8									0
-#define   PRJ_6_NEW                 1
+#define   PRJ_6_NEW                 0
 #define   PRJ_3_NEW                 0
 #define 	PRJ_5_NEW									0
 #define 	PRJ_4_SELF_LOCK       	  0
 #define   PRJ_4_BASE                0
 #define   PRJ_1_BASE                0
 #define 	PRJ_1_SELF_LOCK       	  0
-
 #define   PRJ_1_ALL_MON             0
 
+#define   PRJ_3_NEW_2               0
+#define   PRJ_7_NEW                 0
+
+#define   PRJ_4_SELF_LOCK_2_2       0
+#define   PPRJ_4_BASE_2_2           0
+
+#define   PRJ_7_NO_MON              0
+
+#define   PRJ_8_NO_MON              0
+
+
+
+
+
 #if PRJ_8					
 	#define   POWER_TYPE                (POWER_AC)
 	#define   INPUT_PT_NUM              (INPUT_PT_2)
@@ -128,6 +141,15 @@
 	#define   SUPPORT_DETECTION         1
 	#define   SUPPORT_RELAY_REMENBER		1
 	#define   SUPPORT_ALL_ON_OFF    		1
+#elif PPRJ_4_BASE_2_2
+	#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
 #elif PRJ_1_BASE              
 	#define 	RelaySlaveChaNum 					1
 	#define 	ACSingCurrid 							2 
@@ -150,6 +172,37 @@
 	#define   SURPPORT_2_PT             0
 	#define   PT_SUB_COUNT              (RelaySlaveChaNum)
 	#define   SUPPORT_MON               1
+#elif PRJ_3_NEW_2
+	#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_SELF_LOCK         1
+#elif PRJ_7_NEW
+	#define 	RelaySlaveChaNum 					7
+	#define 	ACSingCurrid 							1 
+	#define   SURPPORT_2_PT             1
+	#define   PT_SUB_COUNT              (PT_SUB_COUNT_4)
+	#define   SUPPORT_DETECTION         1
+	#define   SUPPORT_RELAY_REMENBER		1
+#elif PRJ_7_NO_MON
+
+	#define 	RelaySlaveChaNum 					7
+	#define 	ACSingCurrid 							2 
+	#define   SURPPORT_2_PT             1
+	#define   PT_SUB_COUNT              (PT_SUB_COUNT_4)
+	#define   SUPPORT_MON               1
+#elif PRJ_8_NO_MON
+
+	#define 	RelaySlaveChaNum 					8
+	#define 	ACSingCurrid 							2 
+	#define   SURPPORT_2_PT             1
+	#define   PT_SUB_COUNT              (PT_SUB_COUNT_4)
+	#define   SUPPORT_MON               1
+	
+	
 #endif
 
 

+ 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 VERSION                          		"V1.0.0.2"
+#define VERSION                          		"V1.0.0.4"
 
 #define MODBUS_HEAD                        	"GOWONE_UPGRADE"