|
@@ -166,21 +166,20 @@ static void UartTask(void* arg)
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- if(maxCellVol>4400&&maxCellVol<6000)//继电器测试
|
|
|
+ if(maxCellVol>4400&&maxCellVol<6000)//过压断开继电器
|
|
|
{
|
|
|
AppDataInfo.RelayControl=TRUE;
|
|
|
}
|
|
|
- else if(maxCellVol<4000)
|
|
|
- {
|
|
|
- AppDataInfo.RelayControl=FALSE;
|
|
|
- }
|
|
|
- if(maxCellTemp>=90&&minCellTemp>=90&&battHeatEnableState==0x00&&MOSTemp>=120)//温度的判定需要加40摄氏度,如果模组最高>50度,模组最低>50度,mos温度>80度,并且加热关闭,持续超过10s,则断开继电器
|
|
|
+ if((maxCellTemp>=45+40)&&(minCellTemp>=45+40)&&(battHeatEnableState==0x00)&&(MOSTemp>=70+40))//温度的判定需要加40摄氏度,如果模组最高>=45度,模组最低>=45度,mos温度>=70度,并且加热关闭,持续超过10s,则断开继电器,锁定放电mos
|
|
|
{
|
|
|
heatErrorCounter++;
|
|
|
if(heatErrorCounter>100)
|
|
|
{
|
|
|
heatErrorCounter = 0;
|
|
|
+ AppDataInfo.appDataModify = TRUE;
|
|
|
+ AppNVMData.appDataModify = TRUE;
|
|
|
AppDataInfo.RelayControl=TRUE;
|
|
|
+ AppNVMData.isBattLocked = TRUE;
|
|
|
if(osOK==osMutexAcquire(Error_Mutex, 100))
|
|
|
{
|
|
|
UINT8 ErrorNumTemp = 20;
|
|
@@ -257,24 +256,39 @@ static void UartTask(void* arg)
|
|
|
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)//try to lock lock the discharge
|
|
|
+ //限制充电测试
|
|
|
+ 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
|
|
|
+ {
|
|
|
+ UartWriteData.WriteCmd = 0x01;
|
|
|
+ UartWriteData.Data[0] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2]);
|
|
|
+ UartWriteData.Data[1] = 0x00|((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x01);
|
|
|
+ osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,0);
|
|
|
+ }
|
|
|
+ else if((battSOC<=90)&&(((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x02)!=0x02))//try to unlock 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]);
|
|
|
+ UartWriteData.Data[1] = 0x02|((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x01);
|
|
|
+ osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,0);
|
|
|
+ }
|
|
|
+ if((battWorkState ==0x00) && (AppNVMData.isBattLocked==TRUE) && (((UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x01)!=0x00))//try to lock lock the discharge
|
|
|
{
|
|
|
#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);
|
|
|
#endif
|
|
|
UartWriteData.WriteCmd = 0x01;
|
|
|
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] = 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])&0x03)!=0x03) // 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)) // 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);
|
|
|
#endif
|
|
|
UartWriteData.WriteCmd = 0x01;
|
|
|
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] = 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)//继电器断开
|