Browse Source

MGMLX:V2.3.0.11-2 优化了锁定队列,优化了蜂鸣器响的次数

CHENJIE-PC\QiXiang_CHENJIE 3 years ago
parent
commit
ba8451d9ca
2 changed files with 66 additions and 52 deletions
  1. 0 5
      src/CANTask.c
  2. 66 47
      src/UartTask.c

+ 0 - 5
src/CANTask.c

@@ -97,10 +97,6 @@ static void Can_Receive()
 						if(CanRxMsg[i].Id == 0x7A0)
 						if(CanRxMsg[i].Id == 0x7A0)
 						{	
 						{	
 							udsFlag = 1;
 							udsFlag = 1;
-							if(UDSService[i]!=0x36)
-							{
-								relayControl(TRUE);
-							}
 							UDSService[i] =  CanRxMsg[i].Data[0];
 							UDSService[i] =  CanRxMsg[i].Data[0];
 							UDSSubService[i] = CanRxMsg[i].Data[1];
 							UDSSubService[i] = CanRxMsg[i].Data[1];
 							UDSSubServiceActionCode[i] = CanRxMsg[i].Data[2];
 							UDSSubServiceActionCode[i] = CanRxMsg[i].Data[2];
@@ -114,7 +110,6 @@ static void Can_Receive()
 						}
 						}
 						else if(CanRxMsg[i].Id == 0x7A1)
 						else if(CanRxMsg[i].Id == 0x7A1)
 						{
 						{
-							relayControl(TRUE);
 							if(CanRxMsg[i].Data[0] != 0x00)
 							if(CanRxMsg[i].Data[0] != 0x00)
 							{
 							{
 								msgFlag = 1;	
 								msgFlag = 1;	

+ 66 - 47
src/UartTask.c

@@ -39,6 +39,7 @@ extern volatile BOOL Sleep_flag;
 extern AppNVMDataType AppNVMData;
 extern AppNVMDataType AppNVMData;
 extern AppDataBody AppDataInfo;
 extern AppDataBody AppDataInfo;
 extern UINT8 WorkFlag;
 extern UINT8 WorkFlag;
+extern UINT8 	UDSSwitch;
 //全局变量输出区
 //全局变量输出区
 BOOL UartBattInfoRecvFlag  = false;
 BOOL UartBattInfoRecvFlag  = false;
 QueueHandle_t UartWriteCmdHandle = NULL;
 QueueHandle_t UartWriteCmdHandle = NULL;
@@ -70,7 +71,7 @@ void battSOCDisplay(void);
 void battErrorStateDisplay(void);
 void battErrorStateDisplay(void);
 void battWarningStateDisplay(void);
 void battWarningStateDisplay(void);
 void battLockStateDisplay(UINT8 lockState);
 void battLockStateDisplay(UINT8 lockState);
-void relayControlFunc(UINT8 RingTimes);
+void relayControlFunc(float DutyRatio);
 void SP_BMS_Update_Service(void);
 void SP_BMS_Update_Service(void);
 BOOL BattHeaterSwitch(UINT8* heaterSwitch);
 BOOL BattHeaterSwitch(UINT8* heaterSwitch);
 UINT16  encryptionAlgorithm (UINT16 plainText);
 UINT16  encryptionAlgorithm (UINT16 plainText);
@@ -109,11 +110,12 @@ static void UartTask(void* arg)
     memset(&(UartReadMsg.UartFlag),0x00,sizeof(UartReadMsgType));
     memset(&(UartReadMsg.UartFlag),0x00,sizeof(UartReadMsgType));
     if(UartWriteCmdHandle == NULL)//Uart控制命令传输指针
     if(UartWriteCmdHandle == NULL)//Uart控制命令传输指针
 	{
 	{
-		UartWriteCmdHandle = osMessageQueueNew(3,sizeof(Uart_Write_Data_Type), NULL);
+		UartWriteCmdHandle = osMessageQueueNew(1,sizeof(Uart_Write_Data_Type), NULL);
 	}
 	}
     //上电起始控制区域
     //上电起始控制区域
-	UINT8 ret = 0x00;
+	UINT8 ret = 0x00,Ringtimes = 0;
 	UINT8 HeatSwitch = 0;
 	UINT8 HeatSwitch = 0;
+
     while (1)
     while (1)
     {
     {
         switch (gProcess_Uart_Task)
         switch (gProcess_Uart_Task)
@@ -135,7 +137,9 @@ static void UartTask(void* arg)
                 osDelay(100);
                 osDelay(100);
                 if(Sleep_flag)
                 if(Sleep_flag)
                 {
                 {
+					Ringtimes = 0;
                     PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_SLEEP);
                     PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_SLEEP);
+					break;
                 }
                 }
                 else if(Timer_count%10==0)
                 else if(Timer_count%10==0)
                 {
                 {
@@ -153,16 +157,17 @@ static void UartTask(void* arg)
                     else
                     else
 					{
 					{
 						PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_READ);
 						PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_READ);
+						break;
 					}
 					}
-					if(maxCellVol>4400&&maxCellVol<6000)//继电器测试
-					{
-						AppDataInfo.RelayControl=TRUE;
-					}
-					else if(maxCellVol<3800)
-					{
-						AppDataInfo.RelayControl=FALSE;
-					} 
                 }
                 }
+				if(maxCellVol>4400&&maxCellVol<6000)//继电器测试
+				{
+					AppDataInfo.RelayControl=TRUE;
+				}
+				else if(maxCellVol<4000)
+				{
+					AppDataInfo.RelayControl=FALSE;
+				} 
 				if(UartReadMsg.Header[2]>0)
 				if(UartReadMsg.Header[2]>0)
 				{
 				{
 					uartReadSuccessFlag = true;
 					uartReadSuccessFlag = true;
@@ -186,6 +191,35 @@ static void UartTask(void* arg)
 					{
 					{
 						battWarningStateDisplay();
 						battWarningStateDisplay();
 					}
 					}
+					if(AppNVMData.isBattLocked==FALSE && ret==0x01)
+					{
+						relayControlFunc(0.2);
+						Ringtimes++;
+						if(Ringtimes>=30)
+						{
+							ret = 0;
+							Ringtimes = 0;
+						}
+					}
+					else if (AppNVMData.isBattLocked==TRUE && ret==0x01)
+					{
+						relayControlFunc(0.2);
+						Ringtimes++;
+						if(Ringtimes>=20)
+						{
+							ret = 0;
+							Ringtimes = 0;
+						}
+					}
+					else if(UDSSwitch==1 && Ringtimes<=50)
+					{
+						relayControlFunc(0.2);
+						Ringtimes++;
+					}
+					else if(BuzzerControl==TRUE)
+					{
+						relayControlFunc(0.2);
+					}
 				}
 				}
 				currentTimerCount = Timer_count;
 				currentTimerCount = Timer_count;
 				if(BMS_Fota_update_flag)
 				if(BMS_Fota_update_flag)
@@ -196,7 +230,7 @@ static void UartTask(void* arg)
 						break;
 						break;
 					}
 					}
 				}
 				}
-				if(battWorkState ==0x00 && AppNVMData.isBattLocked==TRUE && ((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x03)!=0x02 && Timer_count%10==0)//try to lock lock the discharge 
+				if(battWorkState ==0x00 && AppNVMData.isBattLocked==TRUE && ((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x03)!=0x02)//try to lock lock the discharge 
 				{
 				{
 					#ifdef USING_PRINTF
 					#ifdef USING_PRINTF
                         printf("[%d]try to lock:%X-%X\n",__LINE__,AppNVMData.isBattLocked,(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x03);
                         printf("[%d]try to lock:%X-%X\n",__LINE__,AppNVMData.isBattLocked,(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x03);
@@ -204,10 +238,9 @@ static void UartTask(void* arg)
 					UartWriteData.WriteCmd = 0x01;
 					UartWriteData.WriteCmd = 0x01;
 					UartWriteData.Data[0] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2]);
 					UartWriteData.Data[0] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2]);
 					UartWriteData.Data[1] = 0x02;
 					UartWriteData.Data[1] = 0x02;
-					osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,1000);
-					PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_READ);
+					osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,0);
 				}
 				}
-				else if (battWorkState ==0x00 && AppNVMData.isBattLocked==FALSE && ((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x03)!=0x03 && Timer_count%10==0 ) // try to unlock
+				else if (battWorkState ==0x00 && AppNVMData.isBattLocked==FALSE && ((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x03)!=0x03) // try to unlock
 				{
 				{
 					#ifdef USING_PRINTF
 					#ifdef USING_PRINTF
                         printf("[%d]try to unlock:%X-%X\n",__LINE__,AppNVMData.isBattLocked,(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x03);
                         printf("[%d]try to unlock:%X-%X\n",__LINE__,AppNVMData.isBattLocked,(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x03);
@@ -215,46 +248,28 @@ static void UartTask(void* arg)
 					UartWriteData.WriteCmd = 0x01;
 					UartWriteData.WriteCmd = 0x01;
 					UartWriteData.Data[0] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2]);
 					UartWriteData.Data[0] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2]);
 					UartWriteData.Data[1] = 0x03;
 					UartWriteData.Data[1] = 0x03;
-					osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,1000);
-					PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_READ);
-				}
-				if(AppNVMData.isBattLocked==FALSE && ret==0x01)
-				{
-					relayControlFunc(3);
-					ret = 0x00;
-				}
-				else if (AppNVMData.isBattLocked==TRUE && ret==0x01)
-				{
-					relayControlFunc(2);
-					ret = 0x00;
-				}
-				else if(BuzzerControl==TRUE && Timer_count%10==0)
-				{
-					relayControlFunc(1);
+					osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,0);
 				}
 				}
 				if(AppDataInfo.RelayControl==TRUE && ((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2])&0x80)==0x00)//继电器断开
 				if(AppDataInfo.RelayControl==TRUE && ((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2])&0x80)==0x00)//继电器断开
 				{
 				{
 					UartWriteData.WriteCmd = 0x03;
 					UartWriteData.WriteCmd = 0x03;
 					UartWriteData.Data[0] = 0x80;
 					UartWriteData.Data[0] = 0x80;
 					UartWriteData.Data[1] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1]);
 					UartWriteData.Data[1] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1]);
-					osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,1000);
-					PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_READ);
+					osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,0);
 				}
 				}
 				else if(AppDataInfo.RelayControl==FALSE && ((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2])&0x80)==0x80)//继电器闭合
 				else if(AppDataInfo.RelayControl==FALSE && ((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2])&0x80)==0x80)//继电器闭合
 				{
 				{
 					UartWriteData.WriteCmd = 0x03;
 					UartWriteData.WriteCmd = 0x03;
 					UartWriteData.Data[0] = 0x00;
 					UartWriteData.Data[0] = 0x00;
 					UartWriteData.Data[1] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1]);
 					UartWriteData.Data[1] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1]);
-					osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,1000);
-					PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_READ);
+					osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,0);
 				}
 				}
-				if(Timer_count%50==0 && BattHeaterSwitch(&HeatSwitch)==TRUE)
+				if(BattHeaterSwitch(&HeatSwitch)==TRUE)
 				{
 				{
 					UartWriteData.WriteCmd = 0x02;
 					UartWriteData.WriteCmd = 0x02;
 					UartWriteData.Data[0] = 0x00;
 					UartWriteData.Data[0] = 0x00;
 					UartWriteData.Data[1] = HeatSwitch&0xFF;
 					UartWriteData.Data[1] = HeatSwitch&0xFF;
-					osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,1000);
-					PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_READ);
+					osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,0);
 				}
 				}
                 break;
                 break;
             }
             }
@@ -1086,23 +1101,27 @@ void battLockStateDisplay(UINT8 lockState)
 	}	
 	}	
 	errorLightTimer++;
 	errorLightTimer++;
 }
 }
-
-void relayControlFunc(UINT8 RingTimes)
+void relayControlFunc(float DutyRatio)
 {
 {
-	UINT8 timerCount=0;
-	//printf("RingTimes=%d\n",RingTimes);
-	while(timerCount<RingTimes)
+	static UINT8  BuzzerTimer = 0;
+	UINT8  BuzzerPeriod = 10;//1000ms
+	BuzzerTimer++;
+	if(BuzzerTimer<(UINT8)(BuzzerPeriod*DutyRatio))
 	{
 	{
 		relayControl(TRUE);
 		relayControl(TRUE);
-		osDelay(50);
+	}
+	else if(BuzzerTimer>=(UINT8)(BuzzerPeriod*DutyRatio) && BuzzerTimer<BuzzerPeriod)
+	{
+		relayControl(FALSE);
+	}
+	else
+	{
 		relayControl(FALSE);
 		relayControl(FALSE);
-		osDelay(150);
-		timerCount++;
+		BuzzerTimer = 0;
 	}
 	}
 }
 }
 
 
 
 
-
 UINT8  decryptionAlgorithm (UINT16 cipherText)
 UINT8  decryptionAlgorithm (UINT16 cipherText)
 {
 {
 	UINT16 plainText = 1;	
 	UINT16 plainText = 1;