Pārlūkot izejas kodu

2.3.0.25 SOC临时修复问题

CHENJIE-PC\QiXiang_CHENJIE 3 gadi atpakaļ
vecāks
revīzija
d216c232aa
3 mainītis faili ar 22 papildinājumiem un 16 dzēšanām
  1. 1 1
      inc/app.h
  2. 2 2
      src/Signal.c
  3. 19 13
      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		0x02030017
+#define	APPSWVERSION		0x02030019
 //#define	APPSWVERSION		0x0201000E
 //--------------------------------------------------------------------------------
 

+ 2 - 2
src/Signal.c

@@ -82,5 +82,5 @@ UINT16 ErrorNum[5]={0};
 
 osMutexId_t Error_Mutex = NULL;
 //测试
-UINT8 SOC1 = 0;
-UINT8 SOC2 = 0;
+UINT8 SOC1 = 100;
+UINT8 SOC2 = 100;

+ 19 - 13
src/UartTask.c

@@ -436,8 +436,7 @@ static BOOL uartBattInfoDecode(UINT8* dataPtr)
         battMOSSwitchState = battMOSSwitchState |(0x00<<2);
     }
 	battWarningState = (dataPtr[(0x09+BATT_CELL_VOL_NUM+TEMP_NUM)*2+0]<<16) | (dataPtr[(0x0A+BATT_CELL_VOL_NUM+TEMP_NUM)*2+0] << 8) |(dataPtr[(0x0A+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1]);
-    battSOC = dataPtr[(0x0B+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1];
-	SOC2 = dataPtr[(0x0B+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1];
+    battSOC = dataPtr[(0x0B+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1];	
     battSOH = dataPtr[(0x0C+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1];
 	Battdesigncap = (dataPtr[(0x0E+BATT_CELL_VOL_NUM+TEMP_NUM)*2])<<24|(dataPtr[(0x0E+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1])<<16|(dataPtr[(0x0F+BATT_CELL_VOL_NUM+TEMP_NUM)*2])<<8|(dataPtr[(0x0F+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1]);
 	BattRemainCap = (dataPtr[(0x12+BATT_CELL_VOL_NUM+TEMP_NUM)*2])<<24|(dataPtr[(0x12+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1])<<16|(dataPtr[(0x13+BATT_CELL_VOL_NUM+TEMP_NUM)*2])<<8|(dataPtr[(0x13+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1]);
@@ -449,23 +448,30 @@ static BOOL uartBattInfoDecode(UINT8* dataPtr)
     battHeatEnableState = dataPtr[(0x1C+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1]&0x01;
 
 	//SOC问题紧急修复
-	
-	static UINT8 SOC_counter=0;
-	SOC1 = (battPackVol*45-27000)/100;
-	if((battSOC - SOC1>10)&&(battPackVol>500)&&(battPackVol<900))
+	static UINT8 Soc_change_flag = 0;//0-BMS原始值,1-计算值
+	SOC1 = min((battPackVol*45-27000)/100,SOC1);
+	SOC2 = battSOC;
+	if(Soc_change_flag == 0)//使用原始值
 	{
-		SOC_counter++;
+		if((SOC2 - SOC1>=10)&&(battPackVol>500)&&(battPackVol<900))
+		{
+			Soc_change_flag = 1;
+		}		
 	}
 	else
 	{
-		SOC_counter = 0;
-	}
-	if(SOC_counter>=10)
-	{
-		if(SOC_counter>=200)
+		if((SOC2 - SOC1<5)||(battPackVol<500)||(battPackVol>900))
 		{
-			SOC_counter==10;
+			Soc_change_flag = 0;
 		}
+	}
+
+	if(Soc_change_flag==0)
+	{
+		battSOC = SOC2;
+	}
+	else
+	{
 		battSOC = SOC1;
 		if(osOK==osMutexAcquire(Error_Mutex, 100))
 		{