|
@@ -20,6 +20,7 @@ void Uart0Task(void *pvParameters)
|
|
uint16 pReadLen = 0;
|
|
uint16 pReadLen = 0;
|
|
UartAnsType UartAnsData;
|
|
UartAnsType UartAnsData;
|
|
static uint8 writecounter = 0;
|
|
static uint8 writecounter = 0;
|
|
|
|
+ uint16 UartNoDataReadCounter = 0;
|
|
while (1)
|
|
while (1)
|
|
{
|
|
{
|
|
switch (gProcess_Uart0_Task)
|
|
switch (gProcess_Uart0_Task)
|
|
@@ -66,8 +67,13 @@ void Uart0Task(void *pvParameters)
|
|
if(CrcChkCal==CrcChkGet)
|
|
if(CrcChkCal==CrcChkGet)
|
|
{
|
|
{
|
|
bmsCellInfoDecode(UartAnsData.DataPtr);
|
|
bmsCellInfoDecode(UartAnsData.DataPtr);
|
|
|
|
+ UartNoDataReadCounter = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ UartNoDataReadCounter++;
|
|
|
|
+ }
|
|
/*温度及其他状态信息读取(第二次读取)*/
|
|
/*温度及其他状态信息读取(第二次读取)*/
|
|
pReadLen = 0;
|
|
pReadLen = 0;
|
|
RegAddrBegin = 0x03 + AppDataInfo.BattCellCount;
|
|
RegAddrBegin = 0x03 + AppDataInfo.BattCellCount;
|
|
@@ -103,8 +109,23 @@ void Uart0Task(void *pvParameters)
|
|
if(CrcChkCal==CrcChkGet)
|
|
if(CrcChkCal==CrcChkGet)
|
|
{
|
|
{
|
|
bmsOtherInfoDecode(UartAnsData.DataPtr);
|
|
bmsOtherInfoDecode(UartAnsData.DataPtr);
|
|
|
|
+ UartNoDataReadCounter = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ UartNoDataReadCounter++;
|
|
|
|
+ }
|
|
|
|
+ //没有读到数据时的默认值
|
|
|
|
+ if(UartNoDataReadCounter>20)
|
|
|
|
+ {
|
|
|
|
+ memset(RX_Buffer[UART_LPUART0],0x00,sizeof(RX_Buffer[UART_LPUART0]));
|
|
|
|
+ memcpy((uint8 *)(&UartAnsData),RX_Buffer[UART_LPUART0],0x03);
|
|
|
|
+ UartAnsData.DataPtr = (uint8 *)(&RX_Buffer[UART_LPUART0][3]);
|
|
|
|
+ bmsCellInfoDecode(UartAnsData.DataPtr);
|
|
|
|
+ bmsOtherInfoDecode(UartAnsData.DataPtr);
|
|
|
|
+ PutErrorNum(ErrorArray, sizeof(ErrorArray)/2, 1);
|
|
|
|
+ }
|
|
PROC_UART0_STATE_SWITCH(PROCESS_UART_STATE_IDLE);
|
|
PROC_UART0_STATE_SWITCH(PROCESS_UART_STATE_IDLE);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -177,7 +198,7 @@ bool bmsCellInfoDecode(uint8 *dataPtr) //
|
|
}
|
|
}
|
|
Batt_current = (dataPtr[(0x02 + BATT_CELL_VOL_NUM) * 2] << 8) | (dataPtr[(0x02 + BATT_CELL_VOL_NUM) * 2 + 1]);
|
|
Batt_current = (dataPtr[(0x02 + BATT_CELL_VOL_NUM) * 2] << 8) | (dataPtr[(0x02 + BATT_CELL_VOL_NUM) * 2 + 1]);
|
|
//原始数据:充电为负,放电为正
|
|
//原始数据:充电为负,放电为正
|
|
- if (battWorkState == 0x02) //充电过程
|
|
|
|
|
|
+ if (Batt_current < 0x8000) //充电过程
|
|
{
|
|
{
|
|
if (Batt_current > 0x8000) // 数据为负
|
|
if (Batt_current > 0x8000) // 数据为负
|
|
{
|
|
{
|
|
@@ -258,73 +279,32 @@ bool bmsOtherInfoDecode(uint8 *dataPtr)//
|
|
battConverState = getbit(dataPtr[(0x09 + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],6);
|
|
battConverState = getbit(dataPtr[(0x09 + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],6);
|
|
battSeparateEnableState = getbit(dataPtr[(0x1B + OtherInfoAddrOffset + TEMP_NUM) * 2],7);
|
|
battSeparateEnableState = getbit(dataPtr[(0x1B + OtherInfoAddrOffset + TEMP_NUM) * 2],7);
|
|
//故障状态映关系(先完成告警状态简单上传)
|
|
//故障状态映关系(先完成告警状态简单上传)
|
|
- if(getbit(dataPtr[(0x03 + OtherInfoAddrOffset) * 2],0))//电芯电压过高切断告警
|
|
|
|
- {
|
|
|
|
- ErrorTemp = 81;
|
|
|
|
- }
|
|
|
|
- if(getbit(dataPtr[(0x03 + OtherInfoAddrOffset) * 2],1))//总压过高切断告警
|
|
|
|
- {
|
|
|
|
- ErrorTemp = 87;
|
|
|
|
- }
|
|
|
|
- if(getbit(dataPtr[(0x04 + OtherInfoAddrOffset) * 2 + 1],0))//电芯电压过低切断告警
|
|
|
|
- {
|
|
|
|
- ErrorTemp = 83;
|
|
|
|
- }
|
|
|
|
- if(getbit(dataPtr[(0x04 + OtherInfoAddrOffset) * 2 + 1],1))//总压过低切断告警
|
|
|
|
- {
|
|
|
|
- ErrorTemp = 89;
|
|
|
|
- }
|
|
|
|
- if(getbit(dataPtr[(0x04 + OtherInfoAddrOffset) * 2],4))//单节温度过高切断
|
|
|
|
- {
|
|
|
|
- ErrorTemp = 97;
|
|
|
|
- }
|
|
|
|
- if(getbit(dataPtr[(0x04 + OtherInfoAddrOffset) * 2],5))//单节温度过低切断
|
|
|
|
- {
|
|
|
|
- ErrorTemp = 99;
|
|
|
|
- }
|
|
|
|
- if(getbit(dataPtr[(0x05 + OtherInfoAddrOffset) * 2 + 1],1))//放电电流切断
|
|
|
|
|
|
+ uint8 ErrorArrayTemp[32] ={0};
|
|
|
|
+ uint8 ErrorArrayNumTemp[32]={81,87,83,89,97,99,132,131,134,84,90,82,88,135,136,98,100};
|
|
|
|
+ ErrorArrayTemp[0] = getbit(dataPtr[(0x03 + OtherInfoAddrOffset) * 2],0);//电芯电压过高切断告警-0-81
|
|
|
|
+ ErrorArrayTemp[1] = getbit(dataPtr[(0x03 + OtherInfoAddrOffset) * 2],1);//总压过高切断告警-1-87
|
|
|
|
+ ErrorArrayTemp[2] = getbit(dataPtr[(0x04 + OtherInfoAddrOffset) * 2 + 1],0);//电芯电压过低切断告警2-83
|
|
|
|
+ ErrorArrayTemp[3] = getbit(dataPtr[(0x04 + OtherInfoAddrOffset) * 2 + 1],1);//总压过低切断告警3-89
|
|
|
|
+ ErrorArrayTemp[4] = getbit(dataPtr[(0x04 + OtherInfoAddrOffset) * 2],4);//单节温度过高切断4-97
|
|
|
|
+ ErrorArrayTemp[5] = getbit(dataPtr[(0x04 + OtherInfoAddrOffset) * 2],5);//单节温度过低切断5-99
|
|
|
|
+ ErrorArrayTemp[6] = getbit(dataPtr[(0x05 + OtherInfoAddrOffset) * 2 + 1],1);//放电电流切断6-132
|
|
|
|
+ ErrorArrayTemp[7] = getbit(dataPtr[(0x05 + OtherInfoAddrOffset) * 2 + 1],2);//充电电流切断7-131
|
|
|
|
+ ErrorArrayTemp[8] = getbit(dataPtr[(0x05 + OtherInfoAddrOffset) * 2 + 1],3);//BTU连接告警8-134
|
|
|
|
+ ErrorArrayTemp[9] = getbit(dataPtr[(0x0A + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],0);//单节电压下限告警9-84
|
|
|
|
+ ErrorArrayTemp[10] = getbit(dataPtr[(0x0A + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],1);//组电压下限告警10-90
|
|
|
|
+ ErrorArrayTemp[11] = getbit(dataPtr[(0x0A + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],2);//单节电压上限告警11-82
|
|
|
|
+ ErrorArrayTemp[12] = getbit(dataPtr[(0x0A + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],3);//组单节电压上限告警12-88
|
|
|
|
+ ErrorArrayTemp[13] = getbit(dataPtr[(0x0A + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],4);//放电电流告警13-135
|
|
|
|
+ ErrorArrayTemp[14] = getbit(dataPtr[(0x0A + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],5);//充电电流告警14-136
|
|
|
|
+ ErrorArrayTemp[15] = getbit(dataPtr[(0x0A + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],6);//单节温度上限告警15-98
|
|
|
|
+ ErrorArrayTemp[16] = getbit(dataPtr[(0x0A + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],7);//单节温度下线告警16-100
|
|
|
|
+ for(uint8 i=0,j=0;(i<32&&j<5);i++)
|
|
{
|
|
{
|
|
- ErrorTemp = 132;
|
|
|
|
- }
|
|
|
|
- if(getbit(dataPtr[(0x05 + OtherInfoAddrOffset) * 2 + 1],2))//充电电流切断
|
|
|
|
- {
|
|
|
|
- ErrorTemp = 131;
|
|
|
|
- }
|
|
|
|
- if(getbit(dataPtr[(0x05 + OtherInfoAddrOffset) * 2 + 1],3))//BTU连接告警
|
|
|
|
- {
|
|
|
|
- ErrorTemp = 134;
|
|
|
|
- }
|
|
|
|
- if(getbit(dataPtr[(0x0A + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],0))//单节电压下限告警
|
|
|
|
- {
|
|
|
|
- ErrorTemp = 84;
|
|
|
|
- }
|
|
|
|
- if(getbit(dataPtr[(0x0A + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],1))//组电压下限告警
|
|
|
|
- {
|
|
|
|
- ErrorTemp = 90;
|
|
|
|
- }
|
|
|
|
- if(getbit(dataPtr[(0x0A + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],2))//单节电压上限告警
|
|
|
|
- {
|
|
|
|
- ErrorTemp = 82;
|
|
|
|
- }
|
|
|
|
- if(getbit(dataPtr[(0x0A + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],3))//组单节电压上限告警
|
|
|
|
- {
|
|
|
|
- ErrorTemp = 88;
|
|
|
|
- }
|
|
|
|
- if(getbit(dataPtr[(0x0A + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],4))//放电电流告警
|
|
|
|
- {
|
|
|
|
- ErrorTemp = 135;
|
|
|
|
- }
|
|
|
|
- if(getbit(dataPtr[(0x0A + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],5))//充电电流告警
|
|
|
|
- {
|
|
|
|
- ErrorTemp = 136;
|
|
|
|
- }
|
|
|
|
- if(getbit(dataPtr[(0x0A + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],6))//单节温度上限告警
|
|
|
|
- {
|
|
|
|
- ErrorTemp = 98;
|
|
|
|
- }
|
|
|
|
- if(getbit(dataPtr[(0x0A + OtherInfoAddrOffset + TEMP_NUM) * 2 + 1],7))//单节温度下线告警
|
|
|
|
- {
|
|
|
|
- ErrorTemp = 100;
|
|
|
|
|
|
+ if(ErrorArrayTemp[i]==1)
|
|
|
|
+ {
|
|
|
|
+ PutErrorNum(ErrorArray, sizeof(ErrorArray)/2, ErrorArrayNumTemp[i]);
|
|
|
|
+ j++;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|