Browse Source

V2.3.0.40 优化了LED闪灯,优化了租期下发和锁定下发判定

CHENJIE-PC\QiXiang_CHENJIE 3 years ago
parent
commit
d24045949b
4 changed files with 95 additions and 67 deletions
  1. 1 1
      inc/app.h
  2. 0 6
      src/MainTask.c
  3. 4 2
      src/TcpTask.c
  4. 90 58
      src/UartTask.c

+ 1 - 1
inc/app.h

@@ -51,7 +51,7 @@ extern "C" {
 #define	BLSWVERSION		0x01020000    //BootLoader版本号V1.2.0.0
 #define	DRVSWVERSION		0x01050000     //驱动层版本号V1.4.0.0  驱动层1.5.0.0,增加了三轴
 //#define	APPSWVERSION		0x01020209     
-#define	APPSWVERSION		0x02030027
+#define	APPSWVERSION		0x02030028
 //#define	APPSWVERSION		0x0201000E
 //--------------------------------------------------------------------------------
 

+ 0 - 6
src/MainTask.c

@@ -229,13 +229,7 @@ static void MainTask(void* arg)
                     }
                     if(Timer_count%(10*60)==0)
                     {
-                        #ifdef USING_PRINTF
-                            printf("[%d]\n",__LINE__);
-                        #endif
                         BattLockFunc();
-                        #ifdef USING_PRINTF
-                            printf("[%d]\n",__LINE__);
-                        #endif
                     }
                 }
                 if(Work_timer_end)

+ 4 - 2
src/TcpTask.c

@@ -33,7 +33,7 @@
 #include "Signal.h"
 //全局变量输出区
 UINT32 TcpService = 0;
-
+extern void BattLockFunc(void);
 //全局变量输入区
 extern UINT32 Timer_count;
 extern volatile BOOL Sleep_flag;
@@ -397,7 +397,7 @@ static void TcpDataInfoAssembleSend()
         BattToTcpInfo.battInfo.battotherTemp[5] = heatTemp2;
         BattToTcpInfo.CRC = bcc_chk((UINT8 *)&BattToTcpInfo, sizeof(BattMsgtoTcpType)-1 );
         //osMutexRelease(UartMutex);
-        if(UartBattInfoRecvFlag)
+        if(1)
         {
             len = tcpipConnectionSend(socContext.id, (UINT8 *)&BattToTcpInfo, sizeof(BattToTcpInfo), 0, 0, 0);
             if(len>0)
@@ -758,6 +758,7 @@ static void TcpDataInfoRecvHandle()
                             AppDataInfo.appDataModify = TRUE;
                             tcpipConnectionSend(socContext.id,TcpCmdAnswer,31,0,0,0);
                         }
+                        BattLockFunc();
                         TcpService=0x00;
                         
                     }
@@ -830,6 +831,7 @@ static void TcpDataInfoRecvHandle()
                             for(UINT8 i =0 ;i<6;i++)
                                 printf("%d  ",ExpiryUTC8TimeArray[i]);
                         #endif
+                        BattLockFunc();
                         TcpService=0x00;
                     }
                     else

+ 90 - 58
src/UartTask.c

@@ -43,8 +43,8 @@ extern UINT8 	UDSSwitch;
 BOOL UartBattInfoRecvFlag  = false;
 QueueHandle_t UartWriteCmdHandle = NULL;
 UINT8 BattChrgEndFlag;
-
-
+UINT8	Ringtimes = 0;
+UINT8 ret = 0x00;
 
 //
 
@@ -90,6 +90,8 @@ UINT8 SP_BMS_Update_Query(UINT8* pSend,UINT32 sendLen, UINT8* pRead, UINT32 read
 updateBMSStatus MS_BMS_Update_Service();
 UINT16 MS_BMS_Update_CRC16(UINT8* pSendData,UINT16 len);
 UINT8 MS_BMS_Update_Query(UINT8* pSend,UINT32 sendLen, UINT8* pRead, UINT32 readLen, UINT32 timeout);
+static osThreadId_t   ControlTaskId = NULL;
+void controlTask(void *arg);
 //Uart线程任务区
 static void UartTask(void* arg)
 {
@@ -102,7 +104,6 @@ static void UartTask(void* arg)
                       ARM_USART_FLOW_CONTROL_NONE, 9600);
     PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_ENCRYPT);
     UINT16  Reg_Num = 0;
-	UINT32  currentTimerCount=0;
     Uart_Read_Msg_Type Uart_Read_Msg;
 	memset(&(Uart_Read_Msg),0x00,sizeof(Uart_Read_Msg_Type));
     Uart_Write_Data_Type UartWriteData; //Uart控制命令
@@ -112,10 +113,18 @@ static void UartTask(void* arg)
 	{
 		UartWriteCmdHandle = osMessageQueueNew(1,sizeof(Uart_Write_Data_Type), NULL);
 	}
+	if(ControlTaskId == NULL)
+	{
+		xTaskCreate(controlTask,
+					"ControlTaskName",
+					256,( void * ) NULL,
+					osPriorityNormal6,
+					&ControlTaskId);
+	}
     //上电起始控制区域
-	UINT8 ret = 0x00,Ringtimes = 0;
 	UINT8 HeatSwitch = 0;
 	UINT8 heatErrorCounter = 0;
+	UINT8 UartErrorCounter = 0;
     while (1)
     {
         switch (gProcess_Uart_Task)
@@ -174,59 +183,6 @@ static void UartTask(void* arg)
 						AppNVMData.isBattLocked = TRUE;
 					}
 				}
-				if(Timer_count-currentTimerCount >= 1)
-				{
-					if(AppNVMData.isBattLocked != 0)
-					{
-						battLockStateDisplay(TRUE);
-					}
-					else if(UartBattInfoRecvFlag)
-					{
-						battSOCDisplay();
-						battErrorStateDisplay();
-					}
-					else
-					{
-						battWarningStateDisplay();
-					}
-					if(AppNVMData.isBattLocked==FALSE && ret==0x01)
-					{
-						relayControlFunc(0.6,5);//表示1s响2次,占比80%
-						Ringtimes++;
-						if(Ringtimes>=15)
-						{
-							relayControl(FALSE);
-							ret = 0;
-							Ringtimes = 0;
-						}
-					}
-					else if (AppNVMData.isBattLocked==TRUE && ret==0x01)
-					{
-						relayControlFunc(0.6,5);//表示1s响2次,占比80%
-						Ringtimes++;
-						if(Ringtimes>=10)
-						{
-							relayControl(FALSE);
-							ret = 0;
-							Ringtimes = 0;
-						}
-					}
-					else if(CanMsgFlag==1 && Ringtimes<=50)
-					{
-						relayControlFunc(0.6,5);//表示1s响2次,占比80%
-						Ringtimes++;
-						if(Ringtimes>=50)
-						{
-							Ringtimes = 51;
-							relayControl(FALSE);
-						}
-					}
-					else if(BuzzerControl==TRUE)
-					{
-						relayControlFunc(0.6,5);//表示1s响2次,占比80%
-					}
-				}
-				currentTimerCount = Timer_count;
 				if(BMS_Fota_update_flag)
 				{
 					if(BattWorkStateDelay==0x00)
@@ -327,12 +283,24 @@ static void UartTask(void* arg)
 				Uart_Recv_LEN = Uart_DataRecv_func(Uart_Read_Msg,(UINT8 *)&UartReadMsg);
 				if(Uart_Recv_LEN>0)
 				{
+					UartErrorCounter = 0;
 					UartBattInfoRecvFlag =  TRUE;
 					uartBattInfoDecode(UartReadMsg.data);
 				}
 				else
 				{
 					UartBattInfoRecvFlag =  FALSE;
+					UartErrorCounter++;
+				}
+				if(UartErrorCounter>=5)
+				{
+					if(osOK==osMutexAcquire(Error_Mutex, 100))
+					{
+						UINT8 ErrorNumTemp = 33;
+						PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+					}
+					osMutexRelease(Error_Mutex);
+					UartErrorCounter = 5;
 				}
                 PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_IDLE);
 				#ifdef USING_PRINTF1
@@ -370,6 +338,7 @@ static void UartTask(void* arg)
             case PROCESS_UART_STATE_SLEEP:
             {
                 USARTdrv->PowerControl(ARM_POWER_LOW);
+				vTaskDelete(ControlTaskId);
                 while(TRUE)
                 {
                     osDelay(60000/portTICK_PERIOD_MS);
@@ -1158,18 +1127,27 @@ void battWarningStateDisplay()
 			if(warningLightTimer<(UINT8)(warningLEDFlashPeriod*warningDutyRatio)) 
 			{			
 				NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+				NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+				NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+				NetSocDisplay(LED_SOC_3,LED_TURN_OFF);
 				FaultDisplay(LED_TURN_ON);
 				
 			}
 			else if(warningLightTimer>=(UINT8)(warningLEDFlashPeriod*warningDutyRatio) && warningLightTimer<warningLEDFlashPeriod)
 			{
 				NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
+				NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+				NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+				NetSocDisplay(LED_SOC_3,LED_TURN_OFF);
 				FaultDisplay(LED_TURN_OFF);
 				
 			}
 			else
 			{
 				NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
+				NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+				NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+				NetSocDisplay(LED_SOC_3,LED_TURN_OFF);
 				FaultDisplay(LED_TURN_OFF);
 				warningLightTimer = 0;			
 			}
@@ -1348,7 +1326,61 @@ UINT8 Uart_Encrypt_Send()
 		return 0x03;
 	}
 }
-
+void controlTask(void *arg)
+{
+	while (TRUE)
+	{	osDelay(100);
+		if(AppNVMData.isBattLocked != 0)
+		{
+			battLockStateDisplay(TRUE);
+		}
+		else if(UartBattInfoRecvFlag)
+		{
+			battSOCDisplay();
+			battErrorStateDisplay();
+		}
+		else
+		{
+			battWarningStateDisplay();
+		}
+		if(AppNVMData.isBattLocked==FALSE && ret==0x01)
+		{
+			relayControlFunc(0.6,5);//表示1s响2次,占比80%
+			Ringtimes++;
+			if(Ringtimes>=15)
+			{
+				relayControl(FALSE);
+				ret = 0;
+				Ringtimes = 0;
+			}
+		}
+		else if (AppNVMData.isBattLocked==TRUE && ret==0x01)
+		{
+			relayControlFunc(0.6,5);//表示1s响2次,占比80%
+			Ringtimes++;
+			if(Ringtimes>=10)
+			{
+				relayControl(FALSE);
+				ret = 0;
+				Ringtimes = 0;
+			}
+		}
+		else if(CanMsgFlag==1 && Ringtimes<=50)
+		{
+			relayControlFunc(0.6,5);//表示1s响2次,占比80%
+			Ringtimes++;
+			if(Ringtimes>=50)
+			{
+				Ringtimes = 51;
+				relayControl(FALSE);
+			}
+		}
+		else if(BuzzerControl==TRUE)
+		{
+			relayControlFunc(0.6,5);//表示1s响2次,占比80%
+		}
+	}
+}