소스 검색

2.3.0.31 在30基础上新增 工作模式转换延时

CHENJIE-PC\QiXiang_CHENJIE 3 년 전
부모
커밋
b13508ed75
7개의 변경된 파일56개의 추가작업 그리고 46개의 파일을 삭제
  1. 1 0
      inc/Signal.h
  2. 7 1
      inc/app.h
  3. 1 2
      src/GpsTask.c
  4. 34 6
      src/MainTask.c
  5. 1 0
      src/Signal.c
  6. 7 31
      src/TcpTask.c
  7. 5 6
      src/UartTask.c

+ 1 - 0
inc/Signal.h

@@ -27,6 +27,7 @@ extern  UINT8   CanMsgFlag;
 extern  UINT8	VibrationStatus;
 extern  UINT8   RxInterprut;
 extern  UINT8   chargerConnectState;
+extern  UINT8   BattWorkStateDelay;
 //declear the UINT16 vars
 extern	UINT16	battCellU[28];
 extern	UINT16	minCellVol;

+ 7 - 1
inc/app.h

@@ -51,10 +51,16 @@ 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		0x0203001E
+#define	APPSWVERSION		0x0203001F
 //#define	APPSWVERSION		0x0201000E
 //--------------------------------------------------------------------------------
 
+#define BATT_IDLE_SYM           0x00    //静置
+#define BATT_CHARGE_SYM 		0x02    //充电
+#define BATT_DISCHARGE_SYM      0x01    //放电
+#define BATT_MOVE_SYM	        0x01    //移动
+#define BATT_NO_MOVE_SYM 		0x00    //静止
+
 #define APP_CONFIG_FILE_LATEST_VERSION 0
 #define APP_CONFIG_FILE_NAME  "qxappconfig.nvm"
 #define APP_DATAINFO_FILE_NAME  "qxappDataInfo.nvm"

+ 1 - 2
src/GpsTask.c

@@ -33,7 +33,6 @@
 //全局变量区输入
 extern volatile BOOL Sleep_flag; 
 extern AppDataBody AppDataInfo;
-extern UINT8 WorkFlag;
 //全局变量区输出
 UINT8 GpsData[20];
 osMutexId_t GpsMutex = NULL;
@@ -132,7 +131,7 @@ static void GpsTask(void* arg)
                             GpsData[2] = 0xff;
                             GpsData[3] = 0xfe;
                         }
-                        if(speedtemp>=30 && speedtemp<=1500 && WorkFlag==0x01)
+                        if(speedtemp>=30 && speedtemp<=1500 && BattWorkStateDelay==0x01)
                         {
                             AppDataInfo.appDataModify = true;
                             AppDataInfo.AccMileage = speedtemp/36 + AppDataInfo.AccMileage;

+ 34 - 6
src/MainTask.c

@@ -72,7 +72,7 @@ static void appBeforeSlp2(void *pdata, slpManLpState state);
 static void appAfterSlp2(void *pdata, slpManLpState state);
 void montior_timer_callback(TimerHandle_t xTimer);
 void work_timer_callback(TimerHandle_t xTimer);
-
+void BattWorkStateDelayFunc(UINT8 battWorkCurrentState);
 static void setDefaultAppDataValue(void);
 void appLoadConfig(void);
 void appSaveConfig(void);
@@ -187,8 +187,8 @@ static void MainTask(void* arg)
             }
             case PROCESS_STATE_WORK:
             {
-
-                if(Error_count>=5 && CanMsgFlag==0x00 && UDSSwitch==0 &&BMS_Fota_update_flag==FALSE && battWorkState==0)
+                osDelay(100);
+                if(Error_count>=5 && CanMsgFlag==0x00 && UDSSwitch==0 &&BMS_Fota_update_flag==FALSE)
                 {
                     AppDataInfo.appDataModify = true;
                     AppDataInfo.SysReStart = AppDataInfo.SysReStart +1;
@@ -208,7 +208,10 @@ static void MainTask(void* arg)
                     osDelay(1000);
                     EC_SystemReset();
                 }
-                osDelay(100);
+                if(Timer_count%10==0)
+                {
+                    BattWorkStateDelayFunc(battWorkState);
+                }
                 if(Work_timer_end)
                 {
                     xTimerStop(montior_timer, 0);
@@ -827,5 +830,30 @@ static void setDefaultAppDataInfo(void)
     AppDataInfo.RelayControl = 0;
     return;
 }
-
-
+void BattWorkStateDelayFunc(UINT8 battWorkCurrentState)
+{
+    static UINT8 workDelayCounter;
+    if(battWorkCurrentState==BATT_DISCHARGE_SYM)//从 充电或者静置 转放电 3s延时
+	{
+		workDelayCounter++;
+		if(workDelayCounter>=3)
+		{
+			workDelayCounter==0;
+			BattWorkStateDelay = battWorkCurrentState;
+		}
+	}
+	else if(battWorkCurrentState==BATT_CHARGE_SYM)//从 放电或者静置 转充电 1min延时
+	{
+		workDelayCounter++;
+		if(workDelayCounter>=60)
+		{
+			workDelayCounter==0;
+			BattWorkStateDelay = battWorkCurrentState;
+		}
+	}
+	else
+	{
+		BattWorkStateDelay = battWorkCurrentState;
+		workDelayCounter = 0;
+	}
+}

+ 1 - 0
src/Signal.c

@@ -57,6 +57,7 @@ UINT8   CanMsgFlag = 0x00;
 UINT8	VibrationStatus = 0x00;
 UINT8   RxInterprut = 0x00;
 UINT8   chargerConnectState = 0x00;
+UINT8   BattWorkStateDelay  = 0x00;
 //declear the UINT16 vars
 UINT16	battCellU[28] = {0xFFFF};
 UINT16	minCellVol = 0xFFFF;

+ 7 - 31
src/TcpTask.c

@@ -33,7 +33,7 @@
 #include "Signal.h"
 //全局变量输出区
 UINT32 TcpService = 0;
-UINT8 WorkFlag=0;
+
 //全局变量输入区
 extern UINT32 Timer_count;
 extern volatile BOOL Sleep_flag;
@@ -262,7 +262,6 @@ static void TcpDataInfoAssembleSend()
     UINT16 DataLen=0;
     UINT8 BattSendFreq=6;
     UINT8 GpsSendFreq=1;
-    UINT8 WorkState=0;
 
     UINT16 year;
     UINT8 month,day,hour,minute,sec;
@@ -270,36 +269,17 @@ static void TcpDataInfoAssembleSend()
     UTC8TimeType UTC8TimeTcp;
 	int i = 0;
 	INT8 len = -1;
-    WorkState = battWorkState;
-    if(WorkState==0x00 && WorkFlag==0x01)
-    {
-        if(send_counter%(RUN_END_DELAY/5)==0)
-        {
-            WorkFlag=0x00;
-        }
-    }
-    else if(WorkState==0x00 && WorkFlag==0x02)
-    {
-        if(send_counter%(CHRG_END_DELAY/5)==0)
-        {
-            WorkFlag=0x00;
-        }
-    }
-    else
-    {
-        WorkFlag=WorkState;
-    }
-    switch(WorkFlag)
+    switch(BattWorkStateDelay)
     {
-        case 0x00:
+        case BATT_IDLE_SYM:
             BattSendFreq = 30/5;
             GpsSendFreq = 30/5;
             break;
-        case 0x01:
+        case BATT_DISCHARGE_SYM:
             GpsSendFreq = 10/5;
             BattSendFreq = 30/5;
             break;
-        case 0x02:
+        case BATT_CHARGE_SYM:
             BattSendFreq = 10/5;
             GpsSendFreq = 30/5;
             break;
@@ -311,12 +291,8 @@ static void TcpDataInfoAssembleSend()
     if(VibrationStatus)
     {
         GpsSendFreq = 10/5;
-        VibrationStatus = 0x00;
-    }
-    else
-    {
-        GpsSendFreq = 30/5;
-    }    
+        VibrationStatus=0x00;
+    }   
     if(send_counter%BattSendFreq==0)
     {
         BattMsgtoTcpType BattToTcpInfo;

+ 5 - 6
src/UartTask.c

@@ -38,7 +38,6 @@ extern UINT32 Timer_count;
 extern volatile BOOL Sleep_flag; 
 extern AppNVMDataType AppNVMData;
 extern AppDataBody AppDataInfo;
-extern UINT8 WorkFlag;
 extern UINT8 	UDSSwitch;
 //全局变量输出区
 BOOL UartBattInfoRecvFlag  = false;
@@ -250,14 +249,14 @@ static void UartTask(void* arg)
 				currentTimerCount = Timer_count;
 				if(BMS_Fota_update_flag)
 				{
-					if(WorkFlag==0x00)
+					if(BattWorkStateDelay==0x00)
 					{
 						PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_UPDATE);
 						break;
 					}
 				}
 				//限制充电测试
-				if((battSOC>=95)&&(battWorkState ==0x02)&&(((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x02)!=0x00))//try to lock lock the charge 
+				if((battSOC>=95)&&(BattWorkStateDelay ==0x02)&&(((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x02)!=0x00))//try to lock lock the charge 
 				{
 					UartWriteData.WriteCmd = 0x01;
 					UartWriteData.Data[0] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2]);
@@ -281,7 +280,7 @@ static void UartTask(void* arg)
 					UartWriteData.Data[1] = 0x00|((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x02);
 					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])&0x01)!=0x01)) // 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])&0x01)!=0x01)&&(uartReadSuccessFlag==TRUE)) // try to unlock
 				{
 					#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);
@@ -291,14 +290,14 @@ static void UartTask(void* arg)
 					UartWriteData.Data[1] = 0x01|((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x02);
 					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)&&(uartReadSuccessFlag==TRUE))//继电器断开
 				{
 					UartWriteData.WriteCmd = 0x03;
 					UartWriteData.Data[0] = 0x80;
 					UartWriteData.Data[1] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1]);
 					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)&&(uartReadSuccessFlag==TRUE))//继电器闭合
 				{
 					UartWriteData.WriteCmd = 0x03;
 					UartWriteData.Data[0] = 0x00;