Sfoglia il codice sorgente

三相进三项出零线火线同步,修改拨码开关方向,修改耗电量清除不完全bug。
三相进单相出,修改拨码开关方向,增加耗电量清除,增加超限动作。

liyi 2 anni fa
parent
commit
5e4c7a5132
30 ha cambiato i file con 7664 aggiunte e 5401 eliminazioni
  1. 1 0
      control/PDU-AC-New-6/App/Hlw8110/Hlw8110.c
  2. 1 1
      control/PDU-AC-New-6/App/Key/Key.c
  3. 6 1
      control/PDU-AC-New-6/App/Main/Main.c
  4. 7 1
      control/PDU-AC-New-6/App/Main/Main.h
  5. 4 0
      control/PDU-AC-New-6/App/Modbus/BARE/port/port.c
  6. 11 6
      control/PDU-AC-New-6/App/Modbus/BARE/port/portserial.c
  7. 78 42
      control/PDU-AC-New-6/Project/GD32KeilPrj.uvguix.Gowon
  8. 96 0
      control/PDU-AC-New-6/Project/GD32KeilPrj.uvoptx
  9. 1 1
      control/PDU-AC-New-6/Project/GD32KeilPrj.uvprojx
  10. 10 10
      control/PDU-AC-New-6/Project/Objects/GD32KeilPrj_Target 1.dep
  11. BIN
      control/PDU-AC-New-6/Project/Objects/key.o
  12. BIN
      control/PDU-AC-New-6/Project/Objects/main.o
  13. BIN
      control/PDU-AC-New-6/Project/Objects/port.o
  14. BIN
      control/PDU-AC-New-6/Project/Objects/portserial.o
  15. BIN
      control/PDU-AC-New-6/Project/Objects/readeeprom.o
  16. 11 2
      control/PDU-Triphasic/App/Hlw8110/Hlw8110.c
  17. 0 1
      control/PDU-Triphasic/App/Hlw8110/Hlw8110.h
  18. 1 1
      control/PDU-Triphasic/App/Key/Key.c
  19. 80 30
      control/PDU-Triphasic/App/Main/Main.c
  20. 1 1
      control/PDU-Triphasic/App/Main/Main.h
  21. 2 1
      control/PDU-Triphasic/App/ReadEeprom/ReadEeprom.c
  22. 7268 5181
      control/PDU-Triphasic/Project/JLinkLog.txt
  23. BIN
      control/PDU-Triphasic/Project/Objects/hlw8110.o
  24. BIN
      control/PDU-Triphasic/Project/Objects/key.o
  25. BIN
      control/PDU-Triphasic/Project/Objects/main.o
  26. BIN
      control/PDU-Triphasic/Project/Objects/readeeprom.o
  27. 14 14
      control/PDU-Triphasic/Project/Objects/triphasic_3_Target 1.dep
  28. 69 60
      control/PDU-Triphasic/Project/triphasic_3.uvguix.Gowon
  29. 2 47
      control/PDU-Triphasic/Project/triphasic_3.uvoptx
  30. 1 1
      control/PDU-Triphasic/Project/triphasic_3.uvprojx

+ 1 - 0
control/PDU-AC-New-6/App/Hlw8110/Hlw8110.c

@@ -59,6 +59,7 @@ unsigned int    U16_LineFData;
 unsigned int    U16_AngleData;
 unsigned int    U16_PFData;
 unsigned int 		U16_HFConst_RegData;
+
 /*---------------------------------------------------------------------------------------------------------*/
 /*---------------------------------------------------------------------------------------------------------*/
 unsigned int	U16_RMSIAC_RegData; 			// AͨµÀµçÁ÷ת»»ÏµÊý

+ 1 - 1
control/PDU-AC-New-6/App/Key/Key.c

@@ -117,6 +117,6 @@ unsigned char ReadKeyValue(void)
 	s_arrKeyDownLevel[2]=ScanKey(KEY_3_4_RCU,KEY3);
 	s_arrKeyDownLevel[3]=ScanKey(KEY_3_4_RCU,KEY4);
 	s_arrKeyDownLevel[4]=ScanKey(KEY_5_RCU,KEY5);
-	SlaveAddress=(~((s_arrKeyDownLevel[0]<<4)|(s_arrKeyDownLevel[1]<<3)|(s_arrKeyDownLevel[2]<<2)|(s_arrKeyDownLevel[3]<<1)|s_arrKeyDownLevel[4]))&0x1f;
+	SlaveAddress=(~((s_arrKeyDownLevel[0]<<0)|(s_arrKeyDownLevel[1]<<1)|(s_arrKeyDownLevel[2]<<2)|(s_arrKeyDownLevel[3]<<3)|s_arrKeyDownLevel[4]<<4))&0x1f;
 	return SlaveAddress;
 }

+ 6 - 1
control/PDU-AC-New-6/App/Main/Main.c

@@ -84,6 +84,9 @@ uint8_t over_Func_flag[RelaySlaveChaNum] = {0};
 
 uint32_t read_Total_Consumer[RelaySlaveChaNum] = {0};
 
+uint32_t hlw8100_flash_backup[RelaySlaveChaNum] = {0};
+uint32_t Hlw8110_Flash_value[RelaySlaveChaNum] = {0};
+
 uint32_t write_2_minute_flag = 0;
 
 
@@ -314,7 +317,9 @@ static  void  Proc100msTask(void)
 			AC_Ele_ReadReg[channel].AC_P=0;                                                                                //有功功率
 		else
 			AC_Ele_ReadReg[channel].AC_P=F_AC_P*1000;                                                                                //有功功率
-		AC_Ele_ReadReg[channel].AC_E=F_AC_E*1000;																																									 //电能
+		hlw8100_flash_backup[channel] = F_AC_E*1000;
+		
+		AC_Ele_ReadReg[channel].AC_E = hlw8100_flash_backup[channel] - Hlw8110_Flash_value[channel];																//电能
 		AC_Ele_ReadReg[channel].AC_PF=F_AC_PF*1000;																																								 //功率因素
 		
 		EE_ACDC_Total_Consum_Read_Reg[channel].ACDC_Consumption = (read_Total_Consumer[channel] + AC_Ele_ReadReg[channel].AC_E);										//total consumer

+ 7 - 1
control/PDU-AC-New-6/App/Main/Main.h

@@ -100,7 +100,7 @@
 
 
 
-#define Default_Consum_Max   300000000 
+#define Default_Consum_Max   (4000000000)
 
 //选择设备类型
 
@@ -315,6 +315,8 @@ extern EE_ACDC_Total_Consumption  EE_ACDC_Total_Consum_Read_Reg[RelaySlaveChaNum
 
 extern ACDC_All_Chn_Consumption ACDC_Total_All_Chn_Read_Reg;
 
+
+
 typedef struct	ACDC_Coef_struct_WriteReg
 {
 	unsigned long	int ACDC_V_k; 	//设置通道电压的系数k
@@ -327,6 +329,10 @@ extern ACDC_Coef_struct_WriteReg ACDC_Coef_WriteReg[RelaySlaveChaNum];
 
 extern unsigned int read_Total_Consumer[RelaySlaveChaNum];
 
+extern unsigned int Hlw8110_Flash_value[RelaySlaveChaNum];
+extern unsigned int hlw8100_flash_backup[RelaySlaveChaNum];
+
+
 extern unsigned long int 	AC_V_Total;         //交流电压总结果
 extern unsigned long int 	AC_LINE_Freq_Total;	//交流电流总结果
 extern unsigned int All_On_Flag;							//继电器全开标志

+ 4 - 0
control/PDU-AC-New-6/App/Modbus/BARE/port/port.c

@@ -60,6 +60,8 @@ static uint8_t  usRegDiscreteBuf[REG_DISCRETE_NREGS];
 
 extern unsigned long int Delay_Ms;
 
+
+
 /* ----------------------- Start implementation -----------------------------*/
 //int
 //main( void )
@@ -300,6 +302,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								uint8_t buff[4] = {0};
 								AT24CxxWrite(Eepr_AC_Sing_Total_Consumer_addr+temp, buff,4);
 								read_Total_Consumer[Chal_num] = 0;
+								Hlw8110_Flash_value[Chal_num] = hlw8100_flash_backup[Chal_num];
 							}
 							
 						}else if(usAddress == AC_Sing_Clear_Consumer_all)
@@ -313,6 +316,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								for(int i = 0; i < RelaySlaveChaNum;i++)
 								{
 									read_Total_Consumer[i] = 0;
+									Hlw8110_Flash_value[i] = hlw8100_flash_backup[i];
 								}
 							}
 						}

+ 11 - 6
control/PDU-AC-New-6/App/Modbus/BARE/port/portserial.c

@@ -88,7 +88,7 @@ xMBPortSerialInit( UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity e
 	//配置TX_RX的切换
   gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);           //设置GPIO模式
   gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11); //设置GPIO输出模式及速度
-
+	gpio_bit_reset(GPIOA, GPIO_PIN_11);		
   //配置USART的参数
   rcu_periph_clock_enable(RCU_USART0);                  //使能串口时钟
   usart_deinit(USART0);                                 //RCU配置恢复默认值
@@ -131,11 +131,16 @@ void USART0_IRQHandler(void)
 		prvvUARTRxISR();		
     usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE);  //清除USART1中断挂起                                                                                     
   }                                                         
-  if(usart_interrupt_flag_get(USART0, USART_INT_FLAG_ERR_ORERR) == SET) //溢出错误标志为1
-  {    
-		prvvUARTRxISR();
-    usart_interrupt_flag_clear(USART0, USART_INT_FLAG_ERR_ORERR);       //清除溢出错误标志
-  }                                                          
+//  if(usart_interrupt_flag_get(USART0, USART_INT_FLAG_ERR_ORERR) == SET) //溢出错误标志为1
+//  {    
+//		prvvUARTRxISR();
+//    usart_interrupt_flag_clear(USART0, USART_INT_FLAG_ERR_ORERR);       //清除溢出错误标志
+//  }         
+  if(usart_flag_get(USART0, USART_FLAG_ORERR) == SET) //溢出错误标志为1
+  {                                                         
+    usart_flag_clear(USART0, USART_FLAG_ORERR);       //清除溢出错误标志
+     prvvUARTRxISR();
+  }                                                    
 //  if(usart_flag_get(USART0, USART_FLAG_ORERR) == SET) //溢出错误标志为1
 //  {                                                         
 //    usart_flag_clear(USART0, USART_FLAG_ORERR);       //清除溢出错误标志

File diff suppressed because it is too large
+ 78 - 42
control/PDU-AC-New-6/Project/GD32KeilPrj.uvguix.Gowon


+ 96 - 0
control/PDU-AC-New-6/Project/GD32KeilPrj.uvoptx

@@ -245,6 +245,102 @@
           <ExecCommand></ExecCommand>
           <Expression></Expression>
         </Bp>
+        <Bp>
+          <Number>6</Number>
+          <Type>0</Type>
+          <LineNumber>756</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>0</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>0</BreakIfRCount>
+          <Filename>..\App\Main\Main.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression></Expression>
+        </Bp>
+        <Bp>
+          <Number>7</Number>
+          <Type>0</Type>
+          <LineNumber>762</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>0</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>0</BreakIfRCount>
+          <Filename>..\App\Main\Main.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression></Expression>
+        </Bp>
+        <Bp>
+          <Number>8</Number>
+          <Type>0</Type>
+          <LineNumber>768</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>0</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>0</BreakIfRCount>
+          <Filename>..\App\Main\Main.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression></Expression>
+        </Bp>
+        <Bp>
+          <Number>9</Number>
+          <Type>0</Type>
+          <LineNumber>774</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>0</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>0</BreakIfRCount>
+          <Filename>..\App\Main\Main.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression></Expression>
+        </Bp>
+        <Bp>
+          <Number>10</Number>
+          <Type>0</Type>
+          <LineNumber>780</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>0</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>0</BreakIfRCount>
+          <Filename>..\App\Main\Main.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression></Expression>
+        </Bp>
+        <Bp>
+          <Number>11</Number>
+          <Type>0</Type>
+          <LineNumber>786</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>0</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>0</BreakIfRCount>
+          <Filename>..\App\Main\Main.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression></Expression>
+        </Bp>
       </Breakpoint>
       <WatchWindow1>
         <Ww>

+ 1 - 1
control/PDU-AC-New-6/Project/GD32KeilPrj.uvprojx

@@ -49,7 +49,7 @@
             <InvalidFlash>1</InvalidFlash>
           </TargetStatus>
           <OutputDirectory>.\Objects\</OutputDirectory>
-          <OutputName>6通道-2024-8-10-New1</OutputName>
+          <OutputName>6通道-2024-8-22-New1</OutputName>
           <CreateExecutable>1</CreateExecutable>
           <CreateLib>0</CreateLib>
           <CreateHexFile>1</CreateHexFile>

File diff suppressed because it is too large
+ 10 - 10
control/PDU-AC-New-6/Project/Objects/GD32KeilPrj_Target 1.dep


BIN
control/PDU-AC-New-6/Project/Objects/key.o


BIN
control/PDU-AC-New-6/Project/Objects/main.o


BIN
control/PDU-AC-New-6/Project/Objects/port.o


BIN
control/PDU-AC-New-6/Project/Objects/portserial.o


BIN
control/PDU-AC-New-6/Project/Objects/readeeprom.o


+ 11 - 2
control/PDU-Triphasic/App/Hlw8110/Hlw8110.c

@@ -111,6 +111,8 @@ extern AC3PPDU_RELAY_Para_Reg AC3PPDU_RL_time[Output_ChN_default + 2];//
 extern AC_Output_struct_Reg  AC3PPDU_Output[Output_ChN_default + 2]; 
 
 extern uint32_t AC3PPDU_Modbus_Reg[AC3PPDU_Modbus_Reg_len];
+extern uint32_t Hlw8110_Flash_value[Output_ChN_default + 1];
+uint32_t Hlw8110_Flash_Backup[Output_ChN_default + 1] = {0};
 /*---------------------------------------------------------------------------------------------------------*/
 /*---------------------------------------------------------------------------------------------------------*/
 
@@ -1025,7 +1027,7 @@ void read_Hlw8110(uint8_t cs_x)
 	Calculate_HLW8110_MeterData();
 	
 	AC3PPDU_Output[temp0].AC_V = ((F_AC_V * ACDC_V_k) + (ACDC_V_b /1000));
-	if(AC3PPDU_Output[temp0].AC_V <= 30)
+	if(AC3PPDU_Output[temp0].AC_V <= 800)
 	{
 		AC3PPDU_Output[temp0].AC_V = 0;
 	}
@@ -1047,8 +1049,15 @@ void read_Hlw8110(uint8_t cs_x)
 	{
 		AC3PPDU_Output[temp0].AC_U = ((F_AC_P / F_AC_PF)-F_AC_PS) *1000;
 	}
-	AC3PPDU_Output[temp0].AC_kWh = F_AC_E *1000;
+	Hlw8110_Flash_Backup[temp0] = F_AC_E *1000;
+	
+	AC3PPDU_Output[temp0].AC_kWh = Hlw8110_Flash_Backup[temp0] - Hlw8110_Flash_value[temp0];
+	
 	AC3PPDU_Output[temp0].AC_F = F_AC_LINE_Freq *1000;
+	if(AC3PPDU_Output[temp0].AC_V == 0)
+	{
+		AC3PPDU_Output[temp0].AC_F = 0;
+	}
 	AC3PPDU_Output[temp0].AC_Q = F_AC_PF *1000;
 	
 	

+ 0 - 1
control/PDU-Triphasic/App/Hlw8110/Hlw8110.h

@@ -74,7 +74,6 @@ void Read_HLW8110_PF(void);
 void Read_HLW8110_Angle(void);
 void Calculate_HLW8110_MeterData(void);
 
-
 void Init_HLW8112(void);
 void HLW8112_Measure(void);
 void read_Hlw8110(unsigned char channel);

+ 1 - 1
control/PDU-Triphasic/App/Key/Key.c

@@ -119,7 +119,7 @@ unsigned char ReadKeyValue(void)
 	s_arrKeyDownLevel[2] = ScanKey(KEY_A_IO,KEY3);
 	s_arrKeyDownLevel[3] = ScanKey(KEY_A_IO,KEY4);
 	s_arrKeyDownLevel[4] = ScanKey(KEY_B_IO,KEY5);
-	SlaveAddress=(~((s_arrKeyDownLevel[0]<<4)|(s_arrKeyDownLevel[1]<<3)|(s_arrKeyDownLevel[2]<<2)|(s_arrKeyDownLevel[3]<<1)|(s_arrKeyDownLevel[4])))& 0x1f;
+	SlaveAddress=(~((s_arrKeyDownLevel[0]<<0)|(s_arrKeyDownLevel[1]<<1)|(s_arrKeyDownLevel[2]<<2)|(s_arrKeyDownLevel[3]<<3)|(s_arrKeyDownLevel[4]<<4)))& 0x1f;
 	
 	return SlaveAddress;
 }

+ 80 - 30
control/PDU-Triphasic/App/Main/Main.c

@@ -88,6 +88,9 @@ uint8_t RL_last_state[Output_ChN_default+1] = {0};
 uint8_t RL_now_state[Output_ChN_default+1] = {0};
 
 uint8_t RL_Func_statu[Output_ChN_default + 1] = {0};
+uint32_t Hlw8110_Flash_value[Output_ChN_default + 1] = {0};
+extern uint32_t Hlw8110_Flash_Backup[Output_ChN_default + 1];
+
 
 
 // Ch N relay control
@@ -150,6 +153,9 @@ static void MODbus_CMD_New(void);
 static void Read_HT7032_data(uint8_t cs_x);
 static void LimiT_enable_check(uint8_t chx,uint32_t Lt_v);
 static void Fault_state_process(uint8_t ch_x);
+static void hlw8110_init(uint8_t ch_x);
+static void channel_reset(uint8_t ch_x);
+static bool select_channel(uint8_t ch_x);
 /*********************************************************************************************************
 *                                              内部函数实现
 *********************************************************************************************************/
@@ -169,6 +175,59 @@ static  void  InitSoftware(void)
 	
 }
 
+
+static bool select_channel(uint8_t ch_x)
+{
+	if(ch_x == 0)
+		return false;
+	switch(ch_x)
+	{
+		case CH1_out:
+		{
+				SEL_0_H;
+				SEL_1_H;
+				SEL_2_H;
+		}
+			break;
+		case CH2_out:
+		{
+				SEL_0_L;
+				SEL_1_H;
+				SEL_2_H;
+		}
+			break;
+		case CH3_out:
+		{
+				SEL_0_H;
+				SEL_1_L;
+				SEL_2_H;
+		}
+			break;
+		default:
+			return false;
+	}
+	return true;
+}
+
+
+static void hlw8110_init(uint8_t ch_x)
+{
+	if(select_channel(ch_x) == false)
+		return;
+	Init_HLW8110();
+}
+
+static void channel_reset(uint8_t ch_x)
+{
+	int i = 10;
+	if(select_channel(ch_x) == false)
+		return;
+	Uart_HLW8110_Reset();
+	while(i--);
+	Init_HLW8110();
+}
+
+
 /*********************************************************************************************************
 * 函数名称:InitHardware
 * 函数功能:所有的硬件相关的模块初始化函数都放在此函数中
@@ -196,33 +255,7 @@ static  void  InitHardware(void)
 	int i;
 	for(i = 1; i <=AC3PPDU_active_chn;i++)
 	{
-		switch(i)
-		{
-			case 1:				//111
-			{
-				SEL_0_H;
-				SEL_1_H;
-				SEL_2_H;
-				Init_HLW8110();
-			}
-			break;
-			case 2:				//110
-			{
-				SEL_0_L;
-				SEL_1_H;
-				SEL_2_H;
-				Init_HLW8110();
-			}
-			break;
-			case 3:				//101
-			{
-				SEL_0_H;
-				SEL_1_L;
-				SEL_2_H;
-				Init_HLW8110();
-			}
-			break;
-		}
+		hlw8110_init(i);
 	}
 	
 	//init_HT7032_SPI();
@@ -990,8 +1023,13 @@ static void MODbus_CMD_New(void)
 				AC3PPDU_RL_N_time.RL_ontime = data;
 				temp_addr += ERom_RL_Ton1_Addr;
 				Eeprom_Rbuf[temp_addr] = data;
+				Eeprom_Rbuf[ERom_RL_TonN_Addr] = data;
+				
 				AC3PPDU_Modbus_Reg[base_addr] = Eeprom_Rbuf[temp_addr];
+				AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_TonN_Addr] = Eeprom_Rbuf[ERom_RL_TonN_Addr];
+				
 				AT24CxxWriteOneByte(temp_addr,Eeprom_Rbuf[temp_addr]);
+				AT24CxxWriteOneByte(ERom_RL_TonN_Addr,Eeprom_Rbuf[ERom_RL_TonN_Addr]);
 			}
 				break;
 			case Mb_Dbuff_RL_Toff1_Addr ... Mb_Dbuff_RL_ToffN_Addr:               //set off status delay for 1,2,3,4,5,6,7,8,9,N channels
@@ -1004,9 +1042,15 @@ static void MODbus_CMD_New(void)
 				}
 				AC3PPDU_RL_N_time.RL_offtime = data;
 				temp_addr += ERom_RL_Toff1_Addr;
+				
 				Eeprom_Rbuf[temp_addr] = data;
+				Eeprom_Rbuf[ERom_RL_ToffN_Addr] = data;
+				
 				AC3PPDU_Modbus_Reg[base_addr] = Eeprom_Rbuf[temp_addr];
+				AC3PPDU_Modbus_Reg[Mb_Dbuff_RL_ToffN_Addr] = Eeprom_Rbuf[ERom_RL_ToffN_Addr];
+				
 				AT24CxxWriteOneByte(temp_addr,Eeprom_Rbuf[temp_addr]);
+				AT24CxxWriteOneByte(ERom_RL_ToffN_Addr,Eeprom_Rbuf[ERom_RL_ToffN_Addr]);
 			}
 				break;
 			case Mb_Dbuff_RL_Over_Ch1_Func ... Mb_Dbuff_RL_Over_Ch9_Func:					//threod over limit operation
@@ -1022,16 +1066,19 @@ static void MODbus_CMD_New(void)
 			{
 				if(data)
 				{
+					
 					temp_addr = base_addr - Mb_Dbuff_Clear_Chn1_Consumer;
-					hlw8110_base[temp_addr+1] = 0;
 					
+					Hlw8110_Flash_value[temp_addr+CH1_out] = AC3PPDU_Output[temp_addr+CH1_out].AC_kWh;
+					Hlw8110_Flash_value[temp_addr+CH1_out] = Hlw8110_Flash_Backup[temp_addr+CH1_out];
+					hlw8110_base[temp_addr+CH1_out] = 0;
 					temp_addr = temp_addr << 2;
 					temp_addr += ERom_TotalWh1_Addr;
 					Eeprom_Rbuf[temp_addr+0] = 0;
 					Eeprom_Rbuf[temp_addr+1] = 0;
 					Eeprom_Rbuf[temp_addr+2] = 0;
 					Eeprom_Rbuf[temp_addr+3] = 0;
-					
+					//channel_reset(temp_addr+CH1_out);
 					AT24CxxWrite(temp_addr,Eeprom_Rbuf+temp_addr,4);
 				}
 			}
@@ -1041,11 +1088,14 @@ static void MODbus_CMD_New(void)
 					for(i = 0; i < Output_ChN_default ;i++)
 					{
 						int temp = i << 2;
+						Hlw8110_Flash_value[i+CH1_out] = AC3PPDU_Output[i+CH1_out].AC_kWh;
+						Hlw8110_Flash_value[i+CH1_out] = Hlw8110_Flash_Backup[i+CH1_out];
 						Eeprom_Rbuf[ERom_TotalWh1_Addr+temp+0] = 0;
 						Eeprom_Rbuf[ERom_TotalWh1_Addr+temp+1] = 0;
 						Eeprom_Rbuf[ERom_TotalWh1_Addr+temp+2] = 0;
 						Eeprom_Rbuf[ERom_TotalWh1_Addr+temp+3] = 0;
-						hlw8110_base[i] = 0;
+						hlw8110_base[i+CH1_out] = 0;
+						//channel_reset(i+CH1_out);
 					}
 					AT24CxxWrite(ERom_TotalWh1_Addr,(Eeprom_Rbuf + ERom_TotalWh1_Addr),4*Output_ChN_default);
 				}

+ 1 - 1
control/PDU-Triphasic/App/Main/Main.h

@@ -1070,7 +1070,7 @@
 #define AC3PPDU_kWhmax_LT_enable   0x00000010
 
 
-#define AC3MAX_CONSUME            (300000000)
+#define AC3MAX_CONSUME            (4000000000)
 
 #define AC3PPDU_Lack_Voltage			(30000)
 

+ 2 - 1
control/PDU-Triphasic/App/ReadEeprom/ReadEeprom.c

@@ -39,6 +39,7 @@
 extern uint8_t AC3PPDU_active_chn;
 extern uint32_t AC3PPDU_Modbus_Reg[AC3PPDU_Modbus_Reg_len];
 extern uint32_t hlw8110_base[Output_ChN_default + 1];
+
 /*********************************************************************************************************
 *                                              内部函数声明
 *********************************************************************************************************/
@@ -55,7 +56,7 @@ extern uint32_t hlw8110_base[Output_ChN_default + 1];
 * 创建日期:2024年04月26日
 * 注    意:
 *********************************************************************************************************/
-void  ReadEeprom(void)
+void ReadEeprom(void)
 {
 	uint8_t i = 0;
 	uint8_t j = 0;

File diff suppressed because it is too large
+ 7268 - 5181
control/PDU-Triphasic/Project/JLinkLog.txt


BIN
control/PDU-Triphasic/Project/Objects/hlw8110.o


BIN
control/PDU-Triphasic/Project/Objects/key.o


BIN
control/PDU-Triphasic/Project/Objects/main.o


BIN
control/PDU-Triphasic/Project/Objects/readeeprom.o


File diff suppressed because it is too large
+ 14 - 14
control/PDU-Triphasic/Project/Objects/triphasic_3_Target 1.dep


File diff suppressed because it is too large
+ 69 - 60
control/PDU-Triphasic/Project/triphasic_3.uvguix.Gowon


+ 2 - 47
control/PDU-Triphasic/Project/triphasic_3.uvoptx

@@ -117,11 +117,6 @@
         <pMon>Segger\JL2CM3.dll</pMon>
       </DebugOpt>
       <TargetDriverDllRegistry>
-        <SetRegEntry>
-          <Number>0</Number>
-          <Key>DLGUARM</Key>
-          <Name>d</Name>
-        </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>DLGTARM</Key>
@@ -148,58 +143,18 @@
         <Ww>
           <count>0</count>
           <WinNumber>1</WinNumber>
-          <ItemText>Eeprom_Rbuf</ItemText>
+          <ItemText>AC3PPDU_RL_time</ItemText>
         </Ww>
         <Ww>
           <count>1</count>
           <WinNumber>1</WinNumber>
-          <ItemText>RL_Func_statu</ItemText>
+          <ItemText>AC3PPDU_RL_N_time</ItemText>
         </Ww>
         <Ww>
           <count>2</count>
           <WinNumber>1</WinNumber>
           <ItemText>Eeprom_Rbuf</ItemText>
         </Ww>
-        <Ww>
-          <count>3</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>AC3PPDU_Modbus_Reg</ItemText>
-        </Ww>
-        <Ww>
-          <count>4</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>AC3PPDU_Vmax_LTen_flag</ItemText>
-        </Ww>
-        <Ww>
-          <count>5</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>AC3PPDU_Vmin_LTen_flag</ItemText>
-        </Ww>
-        <Ww>
-          <count>6</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>AC3PPDU_Imax_LTen_flag</ItemText>
-        </Ww>
-        <Ww>
-          <count>7</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>AC3PPDU_Wmax_LTen_flag</ItemText>
-        </Ww>
-        <Ww>
-          <count>8</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>AC3PPDU_kWhmax_LTen_flag</ItemText>
-        </Ww>
-        <Ww>
-          <count>9</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>hlw8110_base</ItemText>
-        </Ww>
-        <Ww>
-          <count>10</count>
-          <WinNumber>1</WinNumber>
-          <ItemText>AC3PPDU_RL_time</ItemText>
-        </Ww>
       </WatchWindow1>
       <Tracepoint>
         <THDelay>0</THDelay>

+ 1 - 1
control/PDU-Triphasic/Project/triphasic_3.uvprojx

@@ -49,7 +49,7 @@
             <InvalidFlash>1</InvalidFlash>
           </TargetStatus>
           <OutputDirectory>.\Objects\</OutputDirectory>
-          <OutputName>triphasic_3</OutputName>
+          <OutputName>triphasic_3_3_400A</OutputName>
           <CreateExecutable>1</CreateExecutable>
           <CreateLib>0</CreateLib>
           <CreateHexFile>1</CreateHexFile>