Bläddra i källkod

控制板统型直流。

liyi 1 år sedan
förälder
incheckning
7beee59596

+ 3 - 1
truing_control/PDU-AC/common/common.c

@@ -216,8 +216,10 @@ void read_config_from_eeprom(void)
 			}	
 			board->read_eeprom_page(EEPROM_CONSUMER_ADDR +(CONSUM_PAGE*(board->con_da.row)),&chache,sizeof(iic_data));
 			for(int i = 0 ; i < RelaySlaveChaNum;i++)
+			{
 					board->ele_restore[i] = chache.iic_con.iic_consumer[i];
-			//board->md_data.r_data.r_d.ele_out[i].consumer = chache.iic_con.iic_consumer[i];
+			}
+
 			board->con_da.row++;      //point next write row
 			if(board->con_da.row >= MAX_ROW)
 			{

+ 8 - 2
truing_control/PDU-AC/common/common.h

@@ -273,7 +273,10 @@ enum{
 	DELAY_CTRL = 0,
 	PROMPT_CTRL,
 };
-
+enum{
+	STM32_ADC_V_1 = 0,
+	STM32_ADC_V_2,
+};
 
 
 #pragma pack (2)
@@ -383,7 +386,10 @@ typedef union{
 	iic_consumer_chache_t iic_con;
 }iic_data;
 
-
+typedef union{
+	uint8_t 	data[4];
+	uint32_t     value;
+}Rx_Data;
 
 
 

+ 287 - 0
truing_control/PDU-AC/hardware/adc/ADC.c

@@ -0,0 +1,287 @@
+
+#include <stdbool.h>
+#include "ADC.h"
+#include "gd32e23x.h"
+#include "SysTick.h"
+#include "Timer.h"
+#include "math.h"
+#include "common.h"
+
+
+
+bool adc_data_ok_flag = false;
+uint8_t adc_sample_n;//采样次数
+
+
+uint16_t adc_original_value[ADC_CH_N]={0};//存放各通道原始值
+uint16_t adc_calc_value[ADC_Avg_N][ADC_CH_N];//各通道中间过程计算值
+uint32_t adc_Avg_value[ADC_CH_N];//存放各通道平均值
+uint16_t adc_data_zero[ADC_CH_N];
+
+
+
+#define     CH442E_GPIO           GPIOA
+#define     CH442E_RCU            RCU_GPIOA
+#define     CH442E_IN_GPIO				GPIO_PIN_15
+#define 		CH442E_EN_GPIO				GPIO_PIN_12
+
+
+
+
+
+#define      CHOISE_STM32_1			gpio_bit_set(CH442E_GPIO, CH442E_IN_GPIO)
+
+#define      CHOISE_STM32_2			gpio_bit_reset(CH442E_GPIO, CH442E_IN_GPIO) 
+
+
+
+void Init_ADC(void)
+{
+	adc_sample_n = 0;
+	ConfigADCGPIO();
+	while(!dma_flag_get(DMA_CH0,DMA_FLAG_FTF));
+	dma_flag_clear(DMA_CH0,DMA_FLAG_FTF);
+	for(int i = 0;i < 8;i++)
+	{
+		adc_data_zero[i] = 0x149;
+	}
+}
+
+void ConfigADCGPIO(void)
+{
+    //使能RCU相关时钟
+    rcu_periph_clock_enable(ADC_0_5_RCU);//使能GPIOA的时钟
+	rcu_periph_clock_enable(ADC_67_RCU);//使能GPIOB的时钟
+    //使能ADC时钟
+    rcu_periph_clock_enable(RCU_ADC);
+    //使能DMA的时钟
+    rcu_periph_clock_enable(RCU_DMA);
+    //配置ADC时钟
+    rcu_adc_clock_config(RCU_ADCCK_APB2_DIV6);
+  //设置GPIO为ADC接口 
+	gpio_mode_set(ADC_0_5_IO, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, ADC_ch0|ADC_ch1|ADC_ch2|ADC_ch3|ADC_ch4|ADC_ch5);//ADC通道3和4用于串口通信,所以扩展用了ADC通道9和10
+	gpio_mode_set(ADC_67_IO, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, ADC_ch6|ADC_ch7);
+	//复位ADC外设
+	adc_deinit();
+	//配置DMA
+	ADC_dma_config();
+	//内部ADC配置
+	adc_special_function_config(ADC_SCAN_MODE,ENABLE);//配置ADC扫描转换模式
+	adc_special_function_config(ADC_CONTINUOUS_MODE,ENABLE);//配置ADC连续转换模式
+	adc_external_trigger_source_config(ADC_REGULAR_CHANNEL,ADC_EXTTRIG_REGULAR_NONE);//配置ADC外部触发是软件触发
+	adc_data_alignment_config(ADC_DATAALIGN_RIGHT);//配置ADC数据对齐方式是右对齐
+	adc_resolution_config(ADC_RESOLUTION_12B);//配置ADC为12位
+	adc_channel_length_config(ADC_REGULAR_CHANNEL, ADC_CH_N);//配置ADC规则通道组成或注入通道组的长度,因为用到8个通道,所以是8
+
+	adc_regular_channel_config(0U, ADC_CHANNEL_0, ADC_SAMPLETIME_55POINT5);//配置ADC通道组
+    adc_regular_channel_config(1U, ADC_CHANNEL_1, ADC_SAMPLETIME_55POINT5);
+    adc_regular_channel_config(2U, ADC_CHANNEL_4, ADC_SAMPLETIME_55POINT5);
+    adc_regular_channel_config(3U, ADC_CHANNEL_5, ADC_SAMPLETIME_55POINT5);
+    adc_regular_channel_config(4U, ADC_CHANNEL_6, ADC_SAMPLETIME_55POINT5);
+    adc_regular_channel_config(5U, ADC_CHANNEL_7, ADC_SAMPLETIME_55POINT5);
+    adc_regular_channel_config(6U, ADC_CHANNEL_8, ADC_SAMPLETIME_55POINT5);
+    adc_regular_channel_config(7U, ADC_CHANNEL_9, ADC_SAMPLETIME_55POINT5);
+		
+	adc_enable();//使能
+	adc_enable();//使能
+	//delay_ms(2);
+	adc_calibration_enable();//校准复位
+	adc_dma_mode_enable();//使能DMA
+	adc_software_trigger_enable(ADC_REGULAR_CHANNEL);//软件触发
+	adc_software_trigger_enable(ADC_REGULAR_CHANNEL);
+	//dma_interrupt_enable(DMA_CH0,DMA_INT_FTF);
+}
+
+
+
+void ADC_dma_config(void)
+{
+    //通道参数配置
+    dma_parameter_struct dma_data_parameter;
+	//使能ADC时钟
+    rcu_periph_clock_enable(RCU_ADC);
+    //使能DMA的时钟
+    rcu_periph_clock_enable(RCU_DMA);
+    //复位DMA通道
+    dma_deinit(DMA_CH0);
+    
+    //初始化DMA为单数据模式
+    dma_data_parameter.periph_addr  = (uint32_t)(&ADC_RDATA);//设置DMA外设地址,也是DMA数据传输的源地址,ADC单次采样转换结束后,会将数据存入ADC_RDATA地址中
+    dma_data_parameter.periph_inc   = DMA_PERIPH_INCREASE_DISABLE;//设置DMA数据传输的源地址自增算法取消,ADC每次转换后数据存入地址不变
+    dma_data_parameter.memory_addr  = (uint32_t)(adc_original_value);//设置DMA存储器地址,也是DMA数据传输的目标地址
+    dma_data_parameter.memory_inc   = DMA_MEMORY_INCREASE_ENABLE;//设置DMA数据传输目标地址自增算法使能,因为DMA每个周期需要传送八个数据,所以在一个周期内,目标地址要自增
+    dma_data_parameter.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;//设置DMA从外设中读出数据的位数,因为ADC转换后的数值是12位,用16位数值表示,所以这里设置为1字
+    dma_data_parameter.memory_width = DMA_MEMORY_WIDTH_16BIT;  //设置DMA存入存储器的数据位数
+    dma_data_parameter.direction    = DMA_PERIPHERAL_TO_MEMORY;//设置DMA的数据传输方向
+
+    dma_data_parameter.number       = ADC_CH_N;//设置DMA一个周期要传输的数据个数,用了8个通道的ADC,所以在一个周期内要传输8个数据
+
+    dma_data_parameter.priority     = DMA_PRIORITY_HIGH;//设置DMA数据传输高优先级
+    dma_circulation_enable(DMA_CH0);//DMA循环模式使能,这样DMA在传输8个数据后,存储地址复位,自动开启下一轮传输
+    dma_init(DMA_CH0, &dma_data_parameter);//初始化DMA
+	dma_memory_to_memory_disable(DMA_CH0);//这里用不上,所以存储器到存储器DMA传输取消
+    dma_channel_enable(DMA_CH0);//使能DMA通道
+}
+/*********************************************************************************************************
+* 函数名称:DC_I_calfunction
+* 函数功能:直流电流计算公式函数
+* 输入参数:uint16_t 电流的ADC值
+* 输出参数:uint32_t 浮点电流值(mA)
+* 返 回 值:uint32_t 浮点电流值(mA)
+* 创建日期:2024年04月06日
+* 注    意:12位ADC转换公式:实际电压值V = (ADC参考电压Vref * 采样数值N) / 2^12
+*           电流传感器转换公式:实际电流值I(A) = 实际电压值V / 灵敏度参数(V/A)
+*           实际计算时,让小数变成整数,最终结果扩大1000倍
+*********************************************************************************************************/
+uint32_t DC_I_calfunction(uint16_t da,uint8_t channel)
+{
+	uint32_t temp_i = 0;
+	uint32_t temp_v = 0;
+	if(da > 0)
+	{
+		switch(channel)
+		{
+	#if SPPPORT_BIG_HAL
+			case 0:
+			case 1:
+			case 4:
+			case 5:
+			{
+				temp_v = da;
+				if(da < 0xA)
+				{
+					temp_v = 0;
+				}
+				temp_v *= ADC_Vref;
+				temp_v *= 1000;
+				temp_v = temp_v >> 12;
+				temp_v *= 2.5;
+				temp_i = temp_v;
+				temp_i /= 10;//去掉第3位小数
+				temp_i *= 10;
+				//temp_i += 200;
+				if(temp_i <= 80)
+							temp_i = 0;
+			}
+				break;
+		#endif
+			default:
+			{
+				temp_v = da;
+				temp_v *= ADC_Vref;
+				temp_v *= 1000;
+				temp_v = temp_v >> 12;//temp_v /= ADC_Fulscale;
+				temp_v /= A_gain;
+				temp_i = temp_v / I_sens;
+				temp_i /= 10;//去掉第3位小数
+				temp_i *= 10;
+				//temp_i += 70;
+				if(temp_i <= 200)
+							temp_i = 0;
+			}
+		}
+		
+		return temp_i;
+	}
+	else
+	{
+		return 0;
+	}
+}
+
+
+
+static uint16_t sort_buff[ADC_CH_N][ADC_Avg_N] = {0};
+
+
+static void buff_sort(uint16_t *arr,int num)
+{
+	int i,j;
+	uint16_t tmp;
+	for(j=0; j < num;j++)
+	{
+		for(i =0; i < (num -j-1);i++)
+		{
+			if(arr[i+1] > arr[i])
+			{
+				tmp = arr[i+1];
+				arr[i+1] = arr[i];
+				arr[i] = tmp;
+			}
+		}
+	}
+}
+
+static uint32_t calculate_all(uint16_t *arr,int num)
+{
+	uint32_t temp;
+	for(int i= 0; i < num;i++)
+	{
+		temp+=arr[i];
+	}
+	temp = (temp /num);
+	return temp;
+}
+
+
+
+void read_adc_val(void)
+{
+	int8_t i = 0;
+
+	if(adc_sample_n < ADC_Avg_N)
+	{
+		for(i = 0;i < ADC_CH_N ;i++)
+		{
+			 sort_buff[i][adc_sample_n] = adc_original_value[i];
+		}
+		adc_sample_n++;
+	}
+	else
+	{
+		adc_sample_n = 0;
+		
+		for(i = 0;i < ADC_CH_N ;i++)
+		{
+			uint16_t *arr = &sort_buff[i][0];
+			buff_sort(arr,ADC_Avg_N);
+			adc_Avg_value[i] = sort_buff[i][6];
+
+			if(adc_Avg_value[i] > adc_data_zero[i])
+			{
+				adc_Avg_value[i] -= adc_data_zero[i];
+			}
+			else
+			{
+				adc_Avg_value[i] = 0;
+			}
+		}	
+		adc_data_ok_flag = true;
+	}
+}
+
+void che442e_Init(void)
+{
+	rcu_periph_clock_enable(CH442E_RCU); 
+	gpio_mode_set(CH442E_GPIO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, CH442E_IN_GPIO | CH442E_EN_GPIO);
+	gpio_bit_set(CH442E_GPIO, CH442E_IN_GPIO);
+	gpio_bit_reset(CH442E_GPIO, CH442E_EN_GPIO);
+}
+
+
+void che442_change_ch(uint8_t channel)
+{
+	switch(channel)
+	{
+		case STM32_ADC_V_1:
+			CHOISE_STM32_1;
+		break;
+		case STM32_ADC_V_2:
+			CHOISE_STM32_2;
+		break;
+		default:
+			break;
+	}
+}
+
+

+ 56 - 0
truing_control/PDU-AC/hardware/adc/ADC.h

@@ -0,0 +1,56 @@
+
+#ifndef _ADC_H_
+#define _ADC_H_
+/*********************************************************************************************************
+*                                              包含头文件
+*********************************************************************************************************/
+#include "Main.h"
+#include "gd32e23x.h"
+#include "SysTick.h"
+#include "ADC.h"
+#include "board_cfg.h"
+/*********************************************************************************************************
+*                                              宏定义
+*********************************************************************************************************/
+#define ADC_Vref     33  //实际ADC参考电压3.3V,扩大成33
+#define ADC_V_Gain   4020    //实际 200.9   扩大2009
+#define ADC_Fulscale 4096 //ADC满量程值,12位,即4096
+#define I_sens       0.66  //实际电流传感器的灵敏度,单位是V/A,扩大成1
+
+#define A_gain       2  //电压放大倍数
+
+#define ADC_CH_N    8   //通道数
+#define ADC_Avg_N   12   //平均次数
+#define ADC_0_5_RCU RCU_GPIOA
+#define ADC_67_RCU RCU_GPIOB
+
+#define ADC_0_5_IO GPIOA
+#define ADC_67_IO GPIOB
+
+#define ADC_ch0 GPIO_PIN_0
+#define ADC_ch1 GPIO_PIN_1
+#define ADC_ch2 GPIO_PIN_4
+#define ADC_ch3 GPIO_PIN_5
+#define ADC_ch4 GPIO_PIN_6
+#define ADC_ch5 GPIO_PIN_7
+#define ADC_ch6 GPIO_PIN_0
+#define ADC_ch7 GPIO_PIN_1
+
+
+
+/*********************************************************************************************************
+*                                              内部函数声明
+*********************************************************************************************************/
+
+void Init_ADC(void);
+void ConfigADCGPIO(void);
+void ADC_dma_config(void);
+void che442e_Init(void);
+void che442_change_ch(uint8_t channel);
+
+uint32_t DC_I_calfunction(uint16_t da,uint8_t channel);
+void read_adc_val(void);
+
+uint32_t read_voltage(uint8_t channel);
+#endif
+

+ 13 - 3
truing_control/PDU-AC/hardware/detection/detection.c

@@ -69,7 +69,10 @@ void detection_init(void)
 	board = get_board();
 	
 #if(POWER_TYPE == POWER_DC)
-	
+	rcu_periph_clock_enable(DETECTION_1_RCU);
+	gpio_mode_set(DETECTION_1_IO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, DETECTION_1);
+	rcu_periph_clock_enable(DETECTION_2_RCU);
+	gpio_mode_set(DETECTION_2_IO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, DETECTION_2);
 #else
 	rcu_periph_clock_enable(RCU_CFGCMP);
 	rcu_periph_clock_enable(DETECTION_1_RCU);
@@ -202,7 +205,13 @@ static void get_detection()
 	if(board)
 	{
 #if (POWER_TYPE == POWER_DC)
-		
+	uint8_t value = 0;
+	if(gpio_input_bit_get(GPIOB,GPIO_PIN_3)==0)
+		value |= 1;
+	if(gpio_input_bit_get(GPIOA,GPIO_PIN_11)==0)
+		value |= 2;
+	board->md_data.r_data.r_d.detection = value;
+	//return value;		
 #else
 		uint16_t data = 0;
 		if(board->detection_1_value > 0)
@@ -214,9 +223,10 @@ static void get_detection()
 		{
 			data  |= (1 << 1);
 		}		
-#endif
 #endif
 		board->md_data.r_data.r_d.detection = data;
+#endif
+		
 	}
 }
 

+ 29 - 1
truing_control/PDU-AC/hardware/electricity/electricity.c

@@ -4,6 +4,7 @@
 #include "board_cfg.h"
 #include "Hlw8110.h"
 #include "relay.h"
+#include "ADC.h"
 
 static board_t *board = 0;
 static void read_ele(uint8_t channel);
@@ -15,13 +16,21 @@ extern float   F_AC_I;
 extern float   F_AC_P;													
 extern float   F_AC_LINE_Freq;     							
 extern float   F_AC_E;													
-extern float   F_AC_PF;					
+extern float   F_AC_PF;		
+
+extern uint32_t adc_Avg_value[ADC_CH_N];
 
 float elec[RelaySlaveChaNum] = {0.0};
 
 void electricity_init(void)
 {
 	board = get_board();
+#if (POWER_TYPE == POWER_DC)
+	che442e_Init();
+	Init_ADC();
+	uart1_config(115200);
+
+#else
 	uart1_config(9600);
 	ch448f_config();
 	
@@ -30,6 +39,7 @@ void electricity_init(void)
 		select_channel(i);
 		Init_HLW8110();
 	}
+#endif
 	board->read_ele = read_ele;
 	board->check_wanning = check_wanning;
 	board->opt_overfunc = opt_over_func;
@@ -41,8 +51,25 @@ void electricity_init(void)
 
 static void read_ele(uint8_t channel)
 {
+
 	if(channel < RelaySlaveChaNum)
 	{
+#if (POWER_TYPE == POWER_DC)
+		if(channel >=4)
+		{
+			board->md_data.r_data.r_d.ele_out[channel].voltage = read_voltage(STM32_ADC_V_2);
+		}else
+		{
+			board->md_data.r_data.r_d.ele_out[channel].voltage = read_voltage(STM32_ADC_V_1);
+		}
+		read_adc_val();
+		board->md_data.r_data.r_d.ele_out[channel].current = DC_I_calfunction(adc_Avg_value[channel],channel);
+		uint32_t temp_v;
+		uint32_t temp_i;
+		temp_v = board->md_data.r_data.r_d.ele_out[channel].voltage / 10;
+		temp_i = board->md_data.r_data.r_d.ele_out[channel].current / 10;
+		board->md_data.r_data.r_d.ele_out[channel].power = (temp_v * temp_i) / 10;	
+#else
 		select_channel(channel);
 		Calculate_HLW8110_MeterData();
 		board->md_data.r_data.r_d.ele_out[channel].voltage = F_AC_V * 1000;
@@ -66,6 +93,7 @@ static void read_ele(uint8_t channel)
 			board->md_data.r_data.r_d.ele_out[channel].power = 0;
 			board->md_data.r_data.r_d.ele_out[channel].factor = 0;
 		}
+#endif
 	}
 }
 

+ 4 - 1
truing_control/PDU-AC/hardware/relay/relay.c

@@ -140,7 +140,10 @@ void relay_init(void)
 		gpio_bit_reset(RELAY_GPIO, RELAY_8);
 	#endif	
 
-	
+#if (POWER_TYPE == POWER_DC)
+		board->unlock();
+		board->lock;
+#endif
 	board->open = relay_open;
 	board->close = relay_close;
 	board->zero_close = relay_zero_close;

+ 4 - 0
truing_control/PDU-AC/hardware/timer/timer.c

@@ -61,14 +61,18 @@ void TIMER14_IRQHandler(void)
 		board->detection_1_count ++;
 		if(board->detection_1_count >= 100)
 		{
+#if (POWER_TYPE != POWER_DC)
 			board->detection_1_value  = 0;
+#endif
 			board->detection_1_count = 0;
 		}
 #if SURPPORT_2_PT
 		board->detection_2_count ++;
 		if(board->detection_2_count >= 100)
 		{
+#if (POWER_TYPE != POWER_DC)
 			board->detection_2_value  = 0;
+#endif
 			 board->detection_2_count = 0;		
 		}			
 #endif

+ 126 - 3
truing_control/PDU-AC/hardware/uart/uart.c

@@ -3,6 +3,7 @@
 #include "common.h"
 #include "gd32e23x.h"
 #include "Hlw8110.h"
+#include "stdbool.h"
 
 
 #define UART1_BUF_SIZE 10 
@@ -15,6 +16,7 @@ extern unsigned char	u8_RX_Index;
 extern unsigned char	B_Rx_Data_ING;
 extern unsigned char	B_Rx_Finish;
 
+Rx_Data data={0};
 
 
 
@@ -33,8 +35,37 @@ extern unsigned char	B_Rx_Finish;
 #define SEL_2_L  gpio_bit_reset(GPIOB,GPIO_PIN_0)
 
 
-void uart1_config(uint16_t bound)
+void uart1_config(uint32_t bound)
 {
+#if(POWER_TYPE == POWER_DC)  
+  nvic_irq_enable(USART1_IRQn, 1);     //ê1?ü′??ú?D??£?éè??ó??è??
+  rcu_periph_clock_enable(RCU_GPIOA);  //ê1?üGPIOAê±?ó
+
+  //????TXμ?GPIO 
+  gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_2);  //?′ó?PA2
+  gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_2);
+  gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_2);
+  
+  //????RXμ?GPIO
+  gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_3);  //?′ó?PA3
+  gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_3);
+  gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_3);
+
+  //????USARTμ?2?êy
+  rcu_periph_clock_enable(RCU_USART1);                  //ê1?ü′??úê±?ó
+  usart_deinit(USART1);                                 //RCU???????′??è??μ
+  usart_baudrate_set(USART1, bound);                    //éè??2¨ì??ê
+  usart_stop_bit_set(USART1,USART_STB_1BIT);            //éè??í£?1??
+  usart_word_length_set(USART1,USART_WL_8BIT);          //éè??êy?Y×?3¤?è
+  usart_parity_config(USART1,USART_PM_NONE);            //éè??????D£?é??,??D£?é
+  usart_receive_config(USART1, USART_RECEIVE_ENABLE);   //ê1?ü?óê?
+  usart_transmit_config(USART1, USART_TRANSMIT_ENABLE); //ê1?ü·¢?í
+  usart_enable(USART1);                                 //ê1?ü′??ú
+
+  usart_interrupt_enable(USART1, USART_INT_RBNE);  			//ê1?ü?óê??o3???·????D??  
+	 nvic_irq_enable(USART1_IRQn, 2);
+#else
+	
 	nvic_irq_enable(USART1_IRQn, 2);
 	rcu_periph_clock_enable(RCU_GPIOA);
 	gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_2); 
@@ -49,18 +80,70 @@ void uart1_config(uint16_t bound)
 	usart_deinit(USART1);
 	usart_baudrate_set(USART1, bound);
 	usart_stop_bit_set(USART1,USART_STB_1BIT);
+
 	usart_word_length_set(USART1,USART_WL_9BIT);
 	usart_parity_config(USART1,USART_PM_EVEN); 
 	usart_receive_config(USART1, USART_RECEIVE_ENABLE);
 	usart_transmit_config(USART1, USART_TRANSMIT_ENABLE);
 	usart_enable(USART1);
 	usart_interrupt_enable(USART1, USART_INT_RBNE);
-	
+#endif	
 }
 
 
+
+
+#if (POWER_TYPE == POWER_DC)
+
+uint8_t	TX_Length;
+uint8_t	RX_Length;
+uint8_t	RX_Index;
+uint8_t	Rx_Data_len;
+bool    Rx_Finish_flag;   
+
+void USART1_IRQHandler(void)            
+{
+	 if(usart_flag_get(USART1, USART_FLAG_ORERR) == SET) //ò?3?′í?ó±ê???a1
+  {                                                         
+    usart_flag_clear(USART1, USART_FLAG_ORERR);       //??3yò?3?′í?ó±ê??
+
+  }                                                                                                           
+	if(usart_interrupt_flag_get(USART1, USART_INT_FLAG_TBE)!= RESET)  //·¢?í?o3??????D??
+  {     
+	
+    usart_interrupt_flag_clear(USART1, USART_INT_FLAG_TBE);        //??3y·¢?í?D??±ê??
+  }
+	if(usart_interrupt_flag_get(USART1, USART_INT_FLAG_TC)!= RESET)  //·¢?ííê3é?D??
+  {     	
+		usart_interrupt_flag_clear(USART1, USART_INT_FLAG_TC);         //??3y·¢?ííê3é?D??   		
+  }
+	if(usart_interrupt_flag_get(USART1, USART_INT_FLAG_RBNE) != RESET)  //?óê??o3???·????D??
+	{
+		usart_interrupt_flag_clear(USART1, USART_INT_FLAG_RBNE);  //??3yUSART1?D??1ò?e
+		
+
+		extern Rx_Data data;
+		data.data[RX_Index] = usart_data_receive(USART1);
+
+		RX_Index++;
+		if(RX_Index >= RX_Length)//?óê?íê3é
+		{
+			RX_Index = 0;
+			Rx_Finish_flag = true;
+		}
+	}
+} 
+#else
 void USART1_IRQHandler(void)
 {
+	if(usart_flag_get(USART1, USART_FLAG_ORERR) == SET)
+  {                                                         
+    usart_flag_clear(USART1, USART_FLAG_ORERR);       
+  } 
+	if(usart_interrupt_flag_get(USART1, USART_INT_FLAG_TBE)!= RESET) 
+  {     
+    usart_interrupt_flag_clear(USART1, USART_INT_FLAG_TBE);       
+  }
 	if(usart_interrupt_flag_get(USART1, USART_INT_FLAG_RBNE) != RESET) 
 	{
 		usart_interrupt_flag_clear(USART1, USART_INT_FLAG_RBNE);
@@ -77,7 +160,7 @@ void USART1_IRQHandler(void)
 		}
 	}
 }
-
+#endif
 
 void Start_Send_UartData(unsigned char len)
 {
@@ -89,6 +172,16 @@ void Start_Send_UartData(unsigned char len)
 	}
 }
 
+void DC_Start_Send_UartData(uint8_t *pt,uint8_t len)
+{
+	uint8_t i;
+	for(i = 0;i < len;i++)
+	{
+		usart_data_transmit(USART1, *(pt+i));  	//·¢?í×?·?oˉêy
+		while(usart_flag_get(USART1, USART_FLAG_TC) == RESET);//μè′y·¢?í?áê?
+	}
+}
+
 
 void ch448f_config(void)
 {
@@ -169,3 +262,33 @@ void select_channel(uint8_t chx)
 	}
 }
 
+uint32_t read_voltage(uint8_t channel)
+{
+	uint16_t _read_volatge = 0xA5A5;
+	uint32_t value;
+	RX_Length = 4;
+	che442_change_ch(channel);
+	DelayNus(5);
+	//memcpy(u8_TxBuf,&_read_volatge,2);
+	//Start_Send_UartData(2);
+	DC_Start_Send_UartData((uint8_t*)&_read_volatge,sizeof(_read_volatge));
+	int count = 0;
+	while(Rx_Finish_flag != true)
+	{
+		DelayNms(1);
+		if(count >= 20)
+		{
+			RX_Index = 0;
+			Rx_Finish_flag =false;
+			break;
+		}
+		count++;
+	}
+	if(Rx_Finish_flag)
+	{
+		value = data.value;
+		Rx_Finish_flag = false;
+	}else
+		value = 0;
+	return value;
+}

+ 3 - 2
truing_control/PDU-AC/hardware/uart/uart.h

@@ -1,7 +1,7 @@
 #ifndef __UART_H_
 #define __UART_H_
 
-
+#include "stdint.h"
 
 
 
@@ -11,9 +11,10 @@
 
 void ch448f_config(void);
 void select_channel(unsigned char chx);
-void uart1_config(unsigned short bound);
+void uart1_config(unsigned int bound);
 void Start_Send_UartData(unsigned char len);
 
+uint32_t read_voltage(uint8_t channel);
 
 
 #endif

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 3598 - 3860
truing_control/PDU-AC/prj/JLinkLog.txt


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 157 - 103
truing_control/PDU-AC/prj/ctrl_board.uvguix.Gowon


+ 95 - 34
truing_control/PDU-AC/prj/ctrl_board.uvoptx

@@ -117,6 +117,11 @@
         <pMon>Segger\JL2CM3.dll</pMon>
       </DebugOpt>
       <TargetDriverDllRegistry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>DLGUARM</Key>
+          <Name>???</Name>
+        </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>DLGTARM</Key>
@@ -155,6 +160,26 @@
           <WinNumber>1</WinNumber>
           <ItemText>usRegHoldBuf</ItemText>
         </Ww>
+        <Ww>
+          <count>3</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>u8_TxBuf</ItemText>
+        </Ww>
+        <Ww>
+          <count>4</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>adc_Avg_value</ItemText>
+        </Ww>
+        <Ww>
+          <count>5</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>adc_original_value</ItemText>
+        </Ww>
+        <Ww>
+          <count>6</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>TotalWh</ItemText>
+        </Ww>
       </WatchWindow1>
       <Tracepoint>
         <THDelay>0</THDelay>
@@ -180,7 +205,7 @@
         <aPa1>0</aPa1>
         <AscS4>0</AscS4>
         <aSer4>0</aSer4>
-        <StkLoc>0</StkLoc>
+        <StkLoc>1</StkLoc>
         <TrcWin>0</TrcWin>
         <newCpu>0</newCpu>
         <uProt>0</uProt>
@@ -367,6 +392,30 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>13</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\fw_lib\Source\gd32e23x_adc.c</PathWithFileName>
+      <FilenameWithoutPath>gd32e23x_adc.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>14</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\fw_lib\Source\gd32e23x_dma.c</PathWithFileName>
+      <FilenameWithoutPath>gd32e23x_dma.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
@@ -377,7 +426,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>13</FileNumber>
+      <FileNumber>15</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -389,7 +438,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>14</FileNumber>
+      <FileNumber>16</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -401,7 +450,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>15</FileNumber>
+      <FileNumber>17</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -413,7 +462,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>16</FileNumber>
+      <FileNumber>18</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -425,7 +474,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>17</FileNumber>
+      <FileNumber>19</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -437,7 +486,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>18</FileNumber>
+      <FileNumber>20</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -449,7 +498,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>19</FileNumber>
+      <FileNumber>21</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -461,7 +510,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>20</FileNumber>
+      <FileNumber>22</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -473,7 +522,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>21</FileNumber>
+      <FileNumber>23</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -485,7 +534,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>22</FileNumber>
+      <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -497,7 +546,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>23</FileNumber>
+      <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -509,7 +558,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>24</FileNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -521,7 +570,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -533,7 +582,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -545,7 +594,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -555,6 +604,18 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>4</GroupNumber>
+      <FileNumber>30</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\hardware\adc\ADC.c</PathWithFileName>
+      <FilenameWithoutPath>ADC.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
@@ -565,7 +626,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -577,7 +638,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -589,7 +650,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -601,7 +662,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -613,7 +674,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -625,7 +686,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -637,7 +698,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -649,7 +710,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -661,7 +722,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -673,7 +734,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>40</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -685,7 +746,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <FileNumber>41</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -697,7 +758,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>39</FileNumber>
+      <FileNumber>42</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -709,7 +770,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>40</FileNumber>
+      <FileNumber>43</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -721,7 +782,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>41</FileNumber>
+      <FileNumber>44</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -733,7 +794,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>42</FileNumber>
+      <FileNumber>45</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -753,7 +814,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>43</FileNumber>
+      <FileNumber>46</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -765,7 +826,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>44</FileNumber>
+      <FileNumber>47</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -777,7 +838,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>45</FileNumber>
+      <FileNumber>48</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 16 - 1
truing_control/PDU-AC/prj/ctrl_board.uvprojx

@@ -339,7 +339,7 @@
               <MiscControls></MiscControls>
               <Define>GD32E230</Define>
               <Undefine></Undefine>
-              <IncludePath>..\common;..\core\Include;..\fw_lib\Include;..\hardware\detection;..\hardware\eeprom;..\hardware\flash;..\hardware\fwdgt;..\hardware\haddr;..\hardware\hlw8110;..\hardware\jlink;..\hardware\key;..\hardware\led;..\hardware\lock;..\hardware\relay;..\hardware\timer;..\hardware\uart;..\hardware\switch;..\modbus\ascii;..\modbus\BARE\port;..\modbus\functions;..\modbus\include;..\modbus\rtu;..\user;..\hardware\electricity;..\hardware\quere</IncludePath>
+              <IncludePath>..\common;..\core\Include;..\fw_lib\Include;..\hardware\detection;..\hardware\eeprom;..\hardware\flash;..\hardware\fwdgt;..\hardware\haddr;..\hardware\hlw8110;..\hardware\jlink;..\hardware\key;..\hardware\led;..\hardware\lock;..\hardware\relay;..\hardware\timer;..\hardware\uart;..\hardware\switch;..\modbus\ascii;..\modbus\BARE\port;..\modbus\functions;..\modbus\include;..\modbus\rtu;..\user;..\hardware\electricity;..\hardware\quere;..\hardware\adc</IncludePath>
             </VariousControls>
           </Cads>
           <Aads>
@@ -453,6 +453,16 @@
               <FileType>1</FileType>
               <FilePath>..\fw_lib\Source\gd32e23x_exti.c</FilePath>
             </File>
+            <File>
+              <FileName>gd32e23x_adc.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\fw_lib\Source\gd32e23x_adc.c</FilePath>
+            </File>
+            <File>
+              <FileName>gd32e23x_dma.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\fw_lib\Source\gd32e23x_dma.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>
@@ -533,6 +543,11 @@
               <FileType>1</FileType>
               <FilePath>..\hardware\quere\query.c</FilePath>
             </File>
+            <File>
+              <FileName>ADC.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\hardware\adc\ADC.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>

+ 13 - 1
truing_control/PDU-AC/user/board_cfg.h

@@ -52,7 +52,8 @@
 
 #define   PRJ_8_NEW									0
 #define   PRJ_3_4                   0
-#define   PRJ_3_2                   1
+#define   PRJ_3_2                   0
+#define 	PRJ_DC_8									1
 
 
 
@@ -87,6 +88,17 @@
 	#define 	RELAY_REMENBER						1
 	#define   SURPPORT_2_PT             1
 	#define   PT_SUB_COUNT              (PT_SUB_COUNT_4)
+#elif PRJ_DC_8
+	#define   POWER_TYPE                (POWER_DC)
+	#define   INPUT_PT_NUM              (INPUT_PT_2)
+	#define   ZERO_CONTRL               (ZERO_LINE_CTRL_NO)
+	#define   ZERO_CTRL_NUM             (ZERO_LINE_NONE)
+	#define   OUTPUT_CONTRL             (OUTPUT_CTRL_YES)
+	#define 	RelaySlaveChaNum 					8
+	#define 	SUPPORT_ALL_ON_OFF        1
+	#define 	RELAY_REMENBER						1
+	#define   SURPPORT_2_PT             1	
+	#define   PT_SUB_COUNT              (PT_SUB_COUNT_4)
 #endif
 
 

+ 51 - 13
truing_control/PDU-AC/user/main.c

@@ -21,6 +21,8 @@
 board_t  ac_board = 		{0};
 META_DATA_S meta_data = {0};
 
+float TotalWh[RelaySlaveChaNum] ={0.0};
+
 board_t *get_board()
 {
 	return &ac_board;
@@ -46,7 +48,6 @@ int main(){
 	detection_init();
 	relay_init();
 	haddr_init();
-	relay_init();
 	eeprom_init();
 	time_init();
 	electricity_init();
@@ -134,26 +135,53 @@ int main(){
 	}
 
 #else
-	
-	if(ac_board.md_data.r_data.r_d.detection & 0x1)
-	{
-		for(uint8_t i = 0; i < RelaySlaveChaNum;i++)
+	#if SURPPORT_2_PT
+		if(ac_board.md_data.r_data.r_d.detection & 0x1)
 		{
-			ac_board.handle_status[i] = ac_board.relay_staging_staus[i];
+			for(uint8_t i = 0; i < PT_SUB_COUNT;i++)
+			{
+				ac_board.handle_status[i] = ac_board.relay_staging_staus[i];
+			}
 		}
-#if (ZERO_CONTRL  == ZERO_LINE_CTRL_YES)
-		for(uint8_t i = 0; i < ZERO_CTRL_NUM;i++)
+		
+		if(ac_board.md_data.r_data.r_d.detection & 0x2)
 		{
-			ac_board.handle_status_N[i] = ac_board.relay_zero_staging_status[i];
+			for(uint8_t i = PT_SUB_COUNT; i < RelaySlaveChaNum;i++)
+			{
+				ac_board.handle_status[i] = ac_board.relay_staging_staus[i];
+			}
 		}
+	#else
+
+		if(ac_board.md_data.r_data.r_d.detection & 0x1)
+		{
+			for(uint8_t i = 0; i < RelaySlaveChaNum;i++)
+			{
+				ac_board.handle_status[i] = ac_board.relay_staging_staus[i];
+			}
+	#if (ZERO_CONTRL  == ZERO_LINE_CTRL_YES)
+			for(uint8_t i = 0; i < ZERO_CTRL_NUM;i++)
+			{
+				ac_board.handle_status_N[i] = ac_board.relay_zero_staging_status[i];
+			}
+	#endif
+		}	
+	
+
 #endif
-	}	
 	
 #endif
 	
 	
 	while(1)
 	{
+		
+#if (POWER_TYPE == POWER_DC)
+		for(int i = 0;i < RelaySlaveChaNum;i++)
+		{
+			ac_board.read_ele(i);
+		}
+#endif
 		task_query();
 		task_1s();
 		task_10s();
@@ -189,11 +217,21 @@ static void task_1s(void)
 			ac_board.flag_1s = 0;
 			ac_board.led_flash();
 			ac_board.detection();
+	
+#if (POWER_TYPE == POWER_DC)
+		for(int i = 0;i < RelaySlaveChaNum;i++)
+		{
+			float temp_w = (float)ac_board.md_data.r_data.r_d.ele_out[i].power;
+			temp_w /= 3600.0;
+			temp_w /= 1000.0;
+			TotalWh[i] += temp_w;
+			ac_board.md_data.r_data.r_d.ele_out[i].consumer = ac_board.ele_restore[i] + TotalWh[i];
+		}
+#else
 			ac_board.read_ele(channel);
 			ac_board.check_wanning(ELE_OUTPUT,channel);
-			ac_board.opt_overfunc(channel);
-
-		
+			ac_board.opt_overfunc(channel);		
+#endif
 			channel++;
 			if(channel == RelaySlaveChaNum)
 			{