Преглед на файлове

新加掉电通道记忆功能。

liyi преди 1 година
родител
ревизия
79a0bce4ff

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

@@ -136,6 +136,8 @@ static  void  Proc1SecTask(void);   			//1s
 static void over_RelayState(void);
 static void all_over_RelayState(void);
 
+bool handle_status[RelaySlaveChaNum] = {0};
+uint8_t handle_detection[2] = {1,1};
 
 
 uint8_t consumer_clear_flag = 0;
@@ -862,25 +864,32 @@ static  void  Proc2msTask_Start(void)
   if(Get2msFlag())  																																									//判断2ms标志状态
   { 
 		
-//		if((detection_value & 1) == 0)
-//		{
-//			
-//			EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State=false;
-//			EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State=false;
-//			EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State=false;
+		if((detection_value & 1) == 0)
+		{
+			handle_detection[0] = 0;
+			handle_status[0] = EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State;
+			handle_status[1] = EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State;
+			handle_status[2] = EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State;
+			EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State=false;
+			EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State=false;
+			EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State=false;
 //			Relay1State();
 //			Relay2State();
 //			Relay3State();
-//		}
-//		if((detection_value & 2) == 0)
-//		{
-//			EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State=false;
-//			EE_ACDC_State_ReadReg[4].ACDC_Cha_On_Off_State=false;
-//			EE_ACDC_State_ReadReg[5].ACDC_Cha_On_Off_State=false;
+		}
+		if((detection_value & 2) == 0)
+		{
+			handle_detection[1] = 0;
+			handle_status[3] = EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State;
+			handle_status[4] = EE_ACDC_State_ReadReg[4].ACDC_Cha_On_Off_State;
+			handle_status[5] = EE_ACDC_State_ReadReg[5].ACDC_Cha_On_Off_State;
+			EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State=false;
+			EE_ACDC_State_ReadReg[4].ACDC_Cha_On_Off_State=false;
+			EE_ACDC_State_ReadReg[5].ACDC_Cha_On_Off_State=false;
 //			Relay4State();
 //			Relay5State();
 //			Relay6State();
-//		}
+		}
 		Delay_Ms_1 = Delay_Ms_1 +1;
 		
 #ifdef ACSingPhSmaCurrNew
@@ -1262,10 +1271,11 @@ static void over_RelayState(void)
 				EE_ACDC_State_ReadRegTrue[i].ACDC_Cha_On_Off_State = false;
 			}
 			over_Func_flag[i] = 0;
+			BUFF;
+			LOCK;
 		}
 	}
-	BUFF;
-	LOCK;
+
 }
 
 
@@ -1290,29 +1300,76 @@ int main(void)
 		eMBPoll();
 		Proc100msTask();			//100ms处理任务
 		//ProcTaskNew();
-		
-//		if((detection_value & 1) == 0)
-//		{
-//			
-//			EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State=false;
-//			EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State=false;
-//			EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State=false;
-//			Relay1State();
-//			Relay2State();
-//			Relay3State();
-//		}
-//		if((detection_value & 2) == 0)
-//		{
-//			EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State=false;
-//			EE_ACDC_State_ReadReg[4].ACDC_Cha_On_Off_State=false;
-//			EE_ACDC_State_ReadReg[5].ACDC_Cha_On_Off_State=false;
-//			Relay4State();
-//			Relay5State();
-//			Relay6State();
-//		}
+		Proc1SecTask(); 			//1s处理任务   
+		if((detection_value & 1) == 0)
+		{
+			if(handle_detection[0] == 1)
+			{
+					handle_status[0] = EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State;
+					handle_status[1] = EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State;
+					handle_status[2] = EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State;
+			}
+			handle_detection[0] = 0;
+
+			EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State=false;
+			EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State=false;
+			EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State=false;
+			Relay1State();
+			Relay2State();
+			Relay3State();
+			BUFF;
+			LOCK;
+		}else
+		{
+			if(handle_detection[0] == 0)
+			{
+				handle_detection[0] = 1;
+				EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State=handle_status[0];
+				EE_ACDC_State_ReadReg[1].ACDC_Cha_On_Off_State=handle_status[1];
+				EE_ACDC_State_ReadReg[2].ACDC_Cha_On_Off_State=handle_status[2];
+				Relay1State();
+				Relay2State();
+				Relay3State();
+				BUFF;
+				LOCK;
+			}
+		}
+		if((detection_value & 2) == 0)
+		{
+			if(handle_detection[1] == 1)
+			{
+					handle_status[3] = EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State;
+					handle_status[4] = EE_ACDC_State_ReadReg[4].ACDC_Cha_On_Off_State;
+					handle_status[5] = EE_ACDC_State_ReadReg[5].ACDC_Cha_On_Off_State;
+			}
+			handle_detection[1] = 0;
+			EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State=false;
+			EE_ACDC_State_ReadReg[4].ACDC_Cha_On_Off_State=false;
+			EE_ACDC_State_ReadReg[5].ACDC_Cha_On_Off_State=false;
+			Relay4State();
+			Relay5State();
+			Relay6State();
+			BUFF;
+			LOCK;
+		}else
+		{
+			if(handle_detection[1] == 0)
+			{
+				handle_detection[1] = 1;
+				EE_ACDC_State_ReadReg[3].ACDC_Cha_On_Off_State=handle_status[3];
+				EE_ACDC_State_ReadReg[4].ACDC_Cha_On_Off_State=handle_status[4];
+				EE_ACDC_State_ReadReg[5].ACDC_Cha_On_Off_State=handle_status[5];
+				Relay4State();
+				Relay5State();
+				Relay6State();
+			BUFF;
+			LOCK;
+			}
+		}
 		check_channel_reset();
-    Proc1SecTask(); 			//1s处理任务   
+    
 		Fwdgt_reload();
+		
 #ifdef ACSingPhSmaCurrNew
 		if(write_2_minute_flag == 1)
 		{

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

@@ -321,22 +321,37 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_V_TopThres <= THRESHOULD_JUDGMENT)
 								{
 									EE_ACDC_State_ReadReg[Chal_num].ACDC_Vol_Upthr_En = false;
+								}else
+								{
+									EE_ACDC_State_ReadReg[Chal_num].ACDC_Vol_Upthr_En = true;
 								}
 								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_V_DownThres <= THRESHOULD_JUDGMENT)
 								{
 									EE_ACDC_State_ReadReg[Chal_num].ACDC_Vol_Downthr_En = false;
+								}else
+								{
+									EE_ACDC_State_ReadReg[Chal_num].ACDC_Vol_Downthr_En = true;
 								}
 								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_I_TopThres <= THRESHOULD_JUDGMENT)
 								{
 									EE_ACDC_State_ReadReg[Chal_num].ACDC_Cur_Upthr_En = false;
+								}else
+								{
+									EE_ACDC_State_ReadReg[Chal_num].ACDC_Cur_Upthr_En = true;
 								}
 								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_P_TopThres <= THRESHOULD_JUDGMENT)
 								{
 									EE_ACDC_State_ReadReg[Chal_num].ACDC_Pow_Upthr_En = false;
+								}else
+								{
+									EE_ACDC_State_ReadReg[Chal_num].ACDC_Pow_Upthr_En = true;
 								}
 								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_E_TopThres <= THRESHOULD_JUDGMENT)
 								{
 									EE_ACDC_State_ReadReg[Chal_num].ACDC_Ele_Upthr_En = false;
+								}else
+								{
+									EE_ACDC_State_ReadReg[Chal_num].ACDC_Ele_Upthr_En = true;
 								}
 								memcpy(&Eeprom_Wbuf,&usRegHoldBuf[WiRegIndex],WusNRegs*2);								 		  //将数据由16进制转化为无符号数据存入数组 
 								AT24CxxWrite(Eepr_AC_Sing_Thr_SmaAddr+WeeiRegIndex*2,Eeprom_Wbuf, WusNRegs*2);      //将数据写入到eeprom中

+ 4 - 0
control/PDU-AC-New-6/App/ReadEeprom/ReadEeprom.c

@@ -82,6 +82,10 @@ void  ReadEeprom(void)
 	AT24CxxRead(Eepr_AC_Sing_Thr_SmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_Thr_SmaQua);			//从eeprom中读出通道阈值数据
 	memcpy(&EE_ACDC_ThresVal_ReadReg,&Eeprom_Rbuf,Eepr_AC_Sing_Thr_SmaQua);						//将数据拷贝到指定的结构体,可能需要注意大小端问题
 	
+	
+	
+	
+	
 	AT24CxxRead(Eepr_AC_Sing_All_Thr_SmaAddr, Eeprom_Rbuf, Eepr_AC_Sing_All_Thr_SmaQua);				//read thr of all 
 	memcpy(&EE_ACDC_All_ThrVal,&Eeprom_Rbuf,Eepr_AC_Sing_All_Thr_SmaQua);
 	

Файловите разлики са ограничени, защото са твърде много
+ 85 - 58
control/PDU-AC-New-6/Project/GD32KeilPrj.uvguix.Gowon


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

@@ -117,6 +117,10 @@
         <pMon>Segger\JL2CM3.dll</pMon>
       </DebugOpt>
       <TargetDriverDllRegistry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>DLGUARM</Key>
+        </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>DLGTARM</Key>
@@ -175,6 +179,21 @@
           <WinNumber>1</WinNumber>
           <ItemText>EE_ACDC_Total_Consum_Read_Reg</ItemText>
         </Ww>
+        <Ww>
+          <count>6</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>ACDC_Over_WriteReg</ItemText>
+        </Ww>
+        <Ww>
+          <count>7</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>EE_ACDC_State_ReadReg</ItemText>
+        </Ww>
+        <Ww>
+          <count>8</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>EE_ACDC_ThresVal_ReadReg</ItemText>
+        </Ww>
       </WatchWindow1>
       <MemoryWindow1>
         <Mm>

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

@@ -49,11 +49,11 @@
             <InvalidFlash>1</InvalidFlash>
           </TargetStatus>
           <OutputDirectory>.\Objects\</OutputDirectory>
-          <OutputName>6通道-2024-12-03-New</OutputName>
+          <OutputName>6通道-2024-12-13-New</OutputName>
           <CreateExecutable>1</CreateExecutable>
           <CreateLib>0</CreateLib>
           <CreateHexFile>1</CreateHexFile>
-          <DebugInformation>0</DebugInformation>
+          <DebugInformation>1</DebugInformation>
           <BrowseInformation>1</BrowseInformation>
           <ListingPath>.\Listings\</ListingPath>
           <HexFormatSelection>1</HexFormatSelection>
@@ -313,7 +313,7 @@
           </ArmAdsMisc>
           <Cads>
             <interw>1</interw>
-            <Optim>7</Optim>
+            <Optim>0</Optim>
             <oTime>0</oTime>
             <SplitLS>0</SplitLS>
             <OneElfS>1</OneElfS>

Файловите разлики са ограничени, защото са твърде много
+ 239067 - 56889
control/PDU-AC-New-6/Project/JLinkLog.txt


+ 1 - 10
control/PDU-AC/App/Main/Main.c

@@ -673,16 +673,7 @@ static  void  InitHardware(void)
 		#endif
 	}
 	InitAT24Cxx();			 //初始化24C64模块	
-//	while(1)													//测试eeprom是否通信正常
-//	{
-//		for(buf_qua=0;buf_qua<=1024;buf_qua++)
-//		{
-//			AT24CxxWrite(buf_qua, pBuffer1, 1);
-//			if(buf_qua==1024)
-//				break;
-//		}
-//	}	
-  //读出EEPROM中的数据,然后开始依次按照设置打开继电器
+
 	ReadEeprom();
 	Delay_Ms_1 = 0;
 	detection_value = get_detection();

+ 27 - 0
control/PDU-AC/App/Modbus/BARE/port/port.c

@@ -271,6 +271,17 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								Chal_num = (usAddress-AC_Sing_State_SmaWAddr);             					 				//设置哪个通道的状态
 //								memcpy(&ACDC_State_WriteReg[Chal_num],&usRegHoldBuf[WiRegIndex],WusNRegs);	//将接收的数据放入写结构体中
 								memcpy(&EE_ACDC_State_ReadReg[Chal_num],&usRegHoldBuf[WiRegIndex],WusNRegs*2);//将接收的数据放入读结构体中
+								if(detection_value == 0)
+								{
+#if (ACSingPhHigCurr && ( ACSingPhHig_Control_type == ACSingPh_Sub_C))
+								
+#elif (ACSingPhHigCurr && ( ACSingPhHig_Control_type == ACSingPh_Gen_C))
+																
+#endif
+								}else
+								{
+									
+								}
 								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_V_TopThres <= THRESHOULD_JUDGMENT)
 								{
 									EE_ACDC_State_ReadReg[Chal_num].ACDC_Vol_Upthr_En = false;
@@ -307,6 +318,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								}
 								else 
 								{
+									if(detection_value != 0)
 										RelayState();
 								}
 						}
@@ -321,22 +333,37 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_V_TopThres <= THRESHOULD_JUDGMENT)
 								{
 									EE_ACDC_State_ReadReg[Chal_num].ACDC_Vol_Upthr_En = false;
+								}else
+								{
+									EE_ACDC_State_ReadReg[Chal_num].ACDC_Vol_Upthr_En = true;
 								}
 								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_V_DownThres <= THRESHOULD_JUDGMENT)
 								{
 									EE_ACDC_State_ReadReg[Chal_num].ACDC_Vol_Downthr_En = false;
+								}else
+								{
+									EE_ACDC_State_ReadReg[Chal_num].ACDC_Vol_Downthr_En = true;
 								}
 								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_I_TopThres <= THRESHOULD_JUDGMENT)
 								{
 									EE_ACDC_State_ReadReg[Chal_num].ACDC_Cur_Upthr_En = false;
+								}else
+								{
+									EE_ACDC_State_ReadReg[Chal_num].ACDC_Cur_Upthr_En = true;
 								}
 								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_P_TopThres <= THRESHOULD_JUDGMENT)
 								{
 									EE_ACDC_State_ReadReg[Chal_num].ACDC_Pow_Upthr_En = false;
+								}else
+								{
+									EE_ACDC_State_ReadReg[Chal_num].ACDC_Pow_Upthr_En = true;
 								}
 								if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_E_TopThres <= THRESHOULD_JUDGMENT)
 								{
 									EE_ACDC_State_ReadReg[Chal_num].ACDC_Ele_Upthr_En = false;
+								}else
+								{
+									EE_ACDC_State_ReadReg[Chal_num].ACDC_Ele_Upthr_En = true;
 								}
 								memcpy(&Eeprom_Wbuf,&usRegHoldBuf[WiRegIndex],WusNRegs*2);								 		  //将数据由16进制转化为无符号数据存入数组 
 								AT24CxxWrite(Eepr_AC_Sing_Thr_SmaAddr+WeeiRegIndex*2,Eeprom_Wbuf, WusNRegs*2);      //将数据写入到eeprom中

Файловите разлики са ограничени, защото са твърде много
+ 24 - 24
control/PDU-AC/Project/GD32KeilPrj.uvguix.Gowon