Explorar o código

整形板,单相代码。

liyi hai 1 ano
pai
achega
ee3269ee7d

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

@@ -9,6 +9,30 @@
 #endif
 
 
+
+void reset_config_for_eeprom(void)
+{
+	board_t *board = get_board();
+	if(board)
+	{
+		//board->write_eeprom_page(EEPROM_DEVICES_ADDR,(uint8_t *)&board->md_data.r_data.r_d.dev_chn,EEPROM_DEVICES_LENTH);
+		
+		board->write_eeprom_page(EEPROM_STATUS_ADDR,(uint8_t *)&board->relay_staging_staus[0],EEPROM_STATUS_LENTH);
+		for(int i = 0; i < RelaySlaveChaNum;i++)
+		{
+			board->md_data.rw_data.rw_d.delay_chn[i].delay_open  = (1+i) *100;
+			board->md_data.rw_data.rw_d.delay_chn[i].delay_close = (1+i) *100;
+		}
+		board->write_eeprom_page(EEPROM_OTHER_ADDR,(uint8_t *)&board->md_data.rw_data.rw_d.delay_chn[0],START_RW_LENTH-EEPROM_STATUS_LENTH);
+			//config phase information
+		uint8_t buff[EEPROM_CHANNEL_LENTH] = {0};
+		board->write_eeprom_page(EEPROM_CHANNEL_PHASE,buff,EEPROM_CHANNEL_LENTH);
+		//for(int i = 0 ; i < MAX_ROW;i++)
+		//	board->write_eeprom_page(EEPROM_CONSUMER_ADDR +(CONSUM_PAGE*i),&board->con_da.iic_da.iic_con,CONSUM_PAGE);	
+	}
+}
+
+
 void read_config_from_eeprom(void)
 {
 	board_t *board = get_board();
@@ -96,7 +120,8 @@ 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->md_data.r_data.r_d.ele_out[i].consumer = chache.iic_con.iic_consumer[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)
 			{

+ 7 - 1
truing_control/PDU-AC/common/common.h

@@ -323,6 +323,10 @@ typedef struct {
 	elect_3_info_t      ele_3_in;
 	elect_info_t        ele_out[MAX_CHANNEL];
 	uint16_t            detection;
+	uint16_t            wanning_lock_L1;
+	uint16_t            wanning_lock_L2;
+	uint16_t            wanning_lock_L3;
+	uint64_t            keep_running_time;            
 }r_data_t;
 
 
@@ -415,7 +419,7 @@ typedef struct {
 	mod_data_t md_data;
 	uint8_t 	flag_1s;
 	uint8_t	  flag_10s;
-	uint8_t   erase_consumer_flag; 															/* erase consumer and all successful this flag is 0 */
+	uint8_t   clear_flag; 															/* erase consumer and all successful this flag is 0 */
 	uint8_t   out_wanning_en[MAX_CHANNEL];
 	uint8_t   in_wanning_en[MAX_INPUT_CAHNNEL];
 	uint8_t   over_func[MAX_CHANNEL];
@@ -425,6 +429,7 @@ typedef struct {
 	uint16_t  relay_limit_counter[MAX_CHANNEL];
 	uint16_t  relay_zero_limit_counter[3];
 	consumer_data con_da;
+	uint32_t ele_restore[MAX_CHANNEL];
 	uint8_t   haddr;
 	uint8_t   detection_1_value;
 	uint32_t  detection_1_count;
@@ -511,5 +516,6 @@ typedef struct {
 board_t *get_board();
 void set_relay_status_async(uint16_t *reg,uint8_t method,uint16_t status);
 void read_config_from_eeprom(void);
+void reset_config_for_eeprom(void);
 #endif
 

+ 5 - 2
truing_control/PDU-AC/hardware/electricity/electricity.c

@@ -14,7 +14,9 @@ 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;					
+
+float elec[RelaySlaveChaNum] = {0.0};
 
 void electricity_init(void)
 {
@@ -46,7 +48,8 @@ static void read_ele(uint8_t channel)
 		board->md_data.r_data.r_d.ele_out[channel].power = F_AC_P * 1000;
 		board->md_data.r_data.r_d.ele_out[channel].freq = F_AC_LINE_Freq * 100;
 		board->md_data.r_data.r_d.ele_out[channel].factor = F_AC_PF * 100;
-		board->md_data.r_data.r_d.ele_out[channel].consumer += F_AC_E * 1000;
+		elec[channel] += F_AC_E;
+		board->md_data.r_data.r_d.ele_out[channel].consumer = board->ele_restore[channel] + elec[channel] * 1000;
 
 		if(board->md_data.r_data.r_d.ele_out[channel].voltage < 100)
 		{

+ 45 - 4
truing_control/PDU-AC/modbus/BARE/port/port.c

@@ -26,6 +26,8 @@
 #include "main.h"
 #include "board_cfg.h"
 #include "common.h"
+#include "flash.h"
+#include "gd32e23x.h"
 
 
 /* ----------------------- Defines ------------------------------------------*/
@@ -184,7 +186,27 @@ unsigned int WiRegIndex;
 #define W_SET_PH_INFO_LEN                (1)
 
 
+extern META_DATA_S meta_data;
+extern float elec[RelaySlaveChaNum];
 
+static void break_2_boot_upgreade(void)
+{
+	meta_data.errno = 0;
+	meta_data.operation_flag = 1;
+	meta_data.recent_running_time = 25;
+	flash_erase_meta();
+	flash_write_meta(&meta_data);
+	__disable_irq();
+	//__set_FAULTMASK(1);
+	NVIC_SystemReset();
+}
+
+static void soft_reset(void)
+{
+	__disable_irq();
+	//__set_FAULTMASK(1);
+	NVIC_SystemReset();	
+}
 
 
 eMBErrorCode
@@ -281,6 +303,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 							{
 								// todo
 								T_cnt = usAddress - RW_Com_RELAY_CHN_STU;
+
 							}else if(usAddress >= RW_Zero_RELAY_CHN_STU && usAddress < RW_DELAY_CHN)
 							{
 								// todo
@@ -368,22 +391,40 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								for(uint8_t j = 0; j < RelaySlaveChaNum;j++)
 								{
 									if(j == usRegHoldBuf[WiRegIndex]){
+										board->ele_restore[j] = 0;
 										board->md_data.r_data.r_d.ele_out[j].consumer = 0;
+										elec[j] = 0.0;
 										break;
 									}
 								}
 							}else if(usAddress == W_CLEAR_CONFIG)
 							{
-								
+								board->clear_flag = 1;
 							}else if(usAddress == W_SOFT_RESET)
 							{
-								
+								soft_reset();
 							}else if(usAddress == W_BREAK_UPGRAGE)
 							{
-								
+#if  0
+								break_2_boot_upgreade();
+#endif
+	
 							}else if(usAddress == W_SET_PH_INFO)
 							{
-								
+								for(uint8_t j = 0; j < RelaySlaveChaNum;j++)
+								{
+									if((usRegHoldBuf[WiRegIndex] >> 8) == j)
+									{
+										uint8_t buff = usRegHoldBuf[WiRegIndex] & 0XFF;
+										board->md_data.r_data.r_d.ele_out[j].resever = buff;
+										w_eeprom_data_t data = {0};
+										data.lenth =WusNRegs;
+										memcpy(&data.data,&buff,1);
+										data.start_addr = (EEPROM_CHANNEL_PHASE+j);
+										board->q_cache.en_queue(&data);
+										break;
+									}
+								}
 							}
 							else
 							{

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 3860 - 3723
truing_control/PDU-AC/prj/JLinkLog.txt


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 28 - 145
truing_control/PDU-AC/prj/ctrl_board.uvguix.Gowon


+ 0 - 4
truing_control/PDU-AC/prj/ctrl_board.uvoptx

@@ -117,10 +117,6 @@
         <pMon>Segger\JL2CM3.dll</pMon>
       </DebugOpt>
       <TargetDriverDllRegistry>
-        <SetRegEntry>
-          <Number>0</Number>
-          <Key>DLGUARM</Key>
-        </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>DLGTARM</Key>

+ 17 - 3
truing_control/PDU-AC/user/main.c

@@ -13,11 +13,13 @@
 #include "mb.h"
 #include "flash.h"
 #include "electricity.h"
+#include "gd32e23x.h"
 
 
 
 
-board_t  ac_board = {0};
+board_t  ac_board = 		{0};
+META_DATA_S meta_data = {0};
 
 board_t *get_board()
 {
@@ -33,8 +35,7 @@ static void task_query(void);
 static void task_1s(void);
 static void task_10s(void);
 static void relay_ctrl(void);
-
-
+static void app_init(META_DATA_S *meta);
 
 
 int main(){
@@ -103,6 +104,11 @@ int main(){
 		eMBPoll();
 		ac_board.opt_detection();
 		relay_ctrl();
+		if(ac_board.clear_flag)
+		{
+			ac_board.clear_flag = 0;
+			reset_config_for_eeprom();
+		}
 	}
 	return 0;
 }
@@ -123,6 +129,7 @@ static void task_1s(void)
 	static uint8_t channel = 0;
 	if(ac_board.flag_1s)
 	{
+			ac_board.md_data.r_data.r_d.keep_running_time++;
 			ac_board.flag_1s = 0;
 			ac_board.led_flash();
 			ac_board.detection();
@@ -243,6 +250,13 @@ static void task_10s(void)
 
 	}
 }
+static void app_init(META_DATA_S *meta)
+{
+	flash_get_meta_data(meta);
+	nvic_vector_table_set(NVIC_VECTTAB_FLASH,meta->rom_addr - NVIC_VECTTAB_FLASH);
+	__enable_irq();
+}
+
 
 static void relay_ctrl(void)
 {