|
@@ -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))
|
|
|
{
|