|
@@ -39,6 +39,7 @@ extern volatile BOOL Sleep_flag;
|
|
extern AppNVMDataType AppNVMData;
|
|
extern AppNVMDataType AppNVMData;
|
|
extern AppDataBody AppDataInfo;
|
|
extern AppDataBody AppDataInfo;
|
|
extern UINT8 WorkFlag;
|
|
extern UINT8 WorkFlag;
|
|
|
|
+extern UINT8 UDSSwitch;
|
|
//全局变量输出区
|
|
//全局变量输出区
|
|
BOOL UartBattInfoRecvFlag = false;
|
|
BOOL UartBattInfoRecvFlag = false;
|
|
QueueHandle_t UartWriteCmdHandle = NULL;
|
|
QueueHandle_t UartWriteCmdHandle = NULL;
|
|
@@ -70,7 +71,7 @@ void battSOCDisplay(void);
|
|
void battErrorStateDisplay(void);
|
|
void battErrorStateDisplay(void);
|
|
void battWarningStateDisplay(void);
|
|
void battWarningStateDisplay(void);
|
|
void battLockStateDisplay(UINT8 lockState);
|
|
void battLockStateDisplay(UINT8 lockState);
|
|
-void relayControlFunc(UINT8 RingTimes);
|
|
|
|
|
|
+void relayControlFunc(float DutyRatio);
|
|
void SP_BMS_Update_Service(void);
|
|
void SP_BMS_Update_Service(void);
|
|
BOOL BattHeaterSwitch(UINT8* heaterSwitch);
|
|
BOOL BattHeaterSwitch(UINT8* heaterSwitch);
|
|
UINT16 encryptionAlgorithm (UINT16 plainText);
|
|
UINT16 encryptionAlgorithm (UINT16 plainText);
|
|
@@ -109,11 +110,12 @@ static void UartTask(void* arg)
|
|
memset(&(UartReadMsg.UartFlag),0x00,sizeof(UartReadMsgType));
|
|
memset(&(UartReadMsg.UartFlag),0x00,sizeof(UartReadMsgType));
|
|
if(UartWriteCmdHandle == NULL)//Uart控制命令传输指针
|
|
if(UartWriteCmdHandle == NULL)//Uart控制命令传输指针
|
|
{
|
|
{
|
|
- UartWriteCmdHandle = osMessageQueueNew(3,sizeof(Uart_Write_Data_Type), NULL);
|
|
|
|
|
|
+ UartWriteCmdHandle = osMessageQueueNew(1,sizeof(Uart_Write_Data_Type), NULL);
|
|
}
|
|
}
|
|
//上电起始控制区域
|
|
//上电起始控制区域
|
|
- UINT8 ret = 0x00;
|
|
|
|
|
|
+ UINT8 ret = 0x00,Ringtimes = 0;
|
|
UINT8 HeatSwitch = 0;
|
|
UINT8 HeatSwitch = 0;
|
|
|
|
+
|
|
while (1)
|
|
while (1)
|
|
{
|
|
{
|
|
switch (gProcess_Uart_Task)
|
|
switch (gProcess_Uart_Task)
|
|
@@ -135,7 +137,9 @@ static void UartTask(void* arg)
|
|
osDelay(100);
|
|
osDelay(100);
|
|
if(Sleep_flag)
|
|
if(Sleep_flag)
|
|
{
|
|
{
|
|
|
|
+ Ringtimes = 0;
|
|
PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_SLEEP);
|
|
PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_SLEEP);
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
else if(Timer_count%10==0)
|
|
else if(Timer_count%10==0)
|
|
{
|
|
{
|
|
@@ -153,16 +157,17 @@ static void UartTask(void* arg)
|
|
else
|
|
else
|
|
{
|
|
{
|
|
PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_READ);
|
|
PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_READ);
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
- if(maxCellVol>4400&&maxCellVol<6000)//继电器测试
|
|
|
|
- {
|
|
|
|
- AppDataInfo.RelayControl=TRUE;
|
|
|
|
- }
|
|
|
|
- else if(maxCellVol<3800)
|
|
|
|
- {
|
|
|
|
- AppDataInfo.RelayControl=FALSE;
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
+ if(maxCellVol>4400&&maxCellVol<6000)//继电器测试
|
|
|
|
+ {
|
|
|
|
+ AppDataInfo.RelayControl=TRUE;
|
|
|
|
+ }
|
|
|
|
+ else if(maxCellVol<4000)
|
|
|
|
+ {
|
|
|
|
+ AppDataInfo.RelayControl=FALSE;
|
|
|
|
+ }
|
|
if(UartReadMsg.Header[2]>0)
|
|
if(UartReadMsg.Header[2]>0)
|
|
{
|
|
{
|
|
uartReadSuccessFlag = true;
|
|
uartReadSuccessFlag = true;
|
|
@@ -186,6 +191,35 @@ static void UartTask(void* arg)
|
|
{
|
|
{
|
|
battWarningStateDisplay();
|
|
battWarningStateDisplay();
|
|
}
|
|
}
|
|
|
|
+ if(AppNVMData.isBattLocked==FALSE && ret==0x01)
|
|
|
|
+ {
|
|
|
|
+ relayControlFunc(0.2);
|
|
|
|
+ Ringtimes++;
|
|
|
|
+ if(Ringtimes>=30)
|
|
|
|
+ {
|
|
|
|
+ ret = 0;
|
|
|
|
+ Ringtimes = 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else if (AppNVMData.isBattLocked==TRUE && ret==0x01)
|
|
|
|
+ {
|
|
|
|
+ relayControlFunc(0.2);
|
|
|
|
+ Ringtimes++;
|
|
|
|
+ if(Ringtimes>=20)
|
|
|
|
+ {
|
|
|
|
+ ret = 0;
|
|
|
|
+ Ringtimes = 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else if(UDSSwitch==1 && Ringtimes<=50)
|
|
|
|
+ {
|
|
|
|
+ relayControlFunc(0.2);
|
|
|
|
+ Ringtimes++;
|
|
|
|
+ }
|
|
|
|
+ else if(BuzzerControl==TRUE)
|
|
|
|
+ {
|
|
|
|
+ relayControlFunc(0.2);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
currentTimerCount = Timer_count;
|
|
currentTimerCount = Timer_count;
|
|
if(BMS_Fota_update_flag)
|
|
if(BMS_Fota_update_flag)
|
|
@@ -196,7 +230,7 @@ static void UartTask(void* arg)
|
|
break;
|
|
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 && Timer_count%10==0)//try to lock lock the discharge
|
|
|
|
|
|
+ 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
|
|
{
|
|
{
|
|
#ifdef USING_PRINTF
|
|
#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);
|
|
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);
|
|
@@ -204,10 +238,9 @@ static void UartTask(void* arg)
|
|
UartWriteData.WriteCmd = 0x01;
|
|
UartWriteData.WriteCmd = 0x01;
|
|
UartWriteData.Data[0] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2]);
|
|
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] = 0x02;
|
|
- osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,1000);
|
|
|
|
- PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_READ);
|
|
|
|
|
|
+ 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 && Timer_count%10==0 ) // 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])&0x03)!=0x03) // try to unlock
|
|
{
|
|
{
|
|
#ifdef USING_PRINTF
|
|
#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);
|
|
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);
|
|
@@ -215,46 +248,28 @@ static void UartTask(void* arg)
|
|
UartWriteData.WriteCmd = 0x01;
|
|
UartWriteData.WriteCmd = 0x01;
|
|
UartWriteData.Data[0] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2]);
|
|
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] = 0x03;
|
|
- osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,1000);
|
|
|
|
- PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_READ);
|
|
|
|
- }
|
|
|
|
- if(AppNVMData.isBattLocked==FALSE && ret==0x01)
|
|
|
|
- {
|
|
|
|
- relayControlFunc(3);
|
|
|
|
- ret = 0x00;
|
|
|
|
- }
|
|
|
|
- else if (AppNVMData.isBattLocked==TRUE && ret==0x01)
|
|
|
|
- {
|
|
|
|
- relayControlFunc(2);
|
|
|
|
- ret = 0x00;
|
|
|
|
- }
|
|
|
|
- else if(BuzzerControl==TRUE && Timer_count%10==0)
|
|
|
|
- {
|
|
|
|
- relayControlFunc(1);
|
|
|
|
|
|
+ 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)//继电器断开
|
|
{
|
|
{
|
|
UartWriteData.WriteCmd = 0x03;
|
|
UartWriteData.WriteCmd = 0x03;
|
|
UartWriteData.Data[0] = 0x80;
|
|
UartWriteData.Data[0] = 0x80;
|
|
UartWriteData.Data[1] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1]);
|
|
UartWriteData.Data[1] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1]);
|
|
- osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,1000);
|
|
|
|
- PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_READ);
|
|
|
|
|
|
+ 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)//继电器闭合
|
|
{
|
|
{
|
|
UartWriteData.WriteCmd = 0x03;
|
|
UartWriteData.WriteCmd = 0x03;
|
|
UartWriteData.Data[0] = 0x00;
|
|
UartWriteData.Data[0] = 0x00;
|
|
UartWriteData.Data[1] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1]);
|
|
UartWriteData.Data[1] = 0x00|(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1]);
|
|
- osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,1000);
|
|
|
|
- PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_READ);
|
|
|
|
|
|
+ osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,0);
|
|
}
|
|
}
|
|
- if(Timer_count%50==0 && BattHeaterSwitch(&HeatSwitch)==TRUE)
|
|
|
|
|
|
+ if(BattHeaterSwitch(&HeatSwitch)==TRUE)
|
|
{
|
|
{
|
|
UartWriteData.WriteCmd = 0x02;
|
|
UartWriteData.WriteCmd = 0x02;
|
|
UartWriteData.Data[0] = 0x00;
|
|
UartWriteData.Data[0] = 0x00;
|
|
UartWriteData.Data[1] = HeatSwitch&0xFF;
|
|
UartWriteData.Data[1] = HeatSwitch&0xFF;
|
|
- osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,1000);
|
|
|
|
- PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_READ);
|
|
|
|
|
|
+ osMessageQueuePut(UartWriteCmdHandle,&UartWriteData,0,0);
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -1086,23 +1101,27 @@ void battLockStateDisplay(UINT8 lockState)
|
|
}
|
|
}
|
|
errorLightTimer++;
|
|
errorLightTimer++;
|
|
}
|
|
}
|
|
-
|
|
|
|
-void relayControlFunc(UINT8 RingTimes)
|
|
|
|
|
|
+void relayControlFunc(float DutyRatio)
|
|
{
|
|
{
|
|
- UINT8 timerCount=0;
|
|
|
|
- //printf("RingTimes=%d\n",RingTimes);
|
|
|
|
- while(timerCount<RingTimes)
|
|
|
|
|
|
+ static UINT8 BuzzerTimer = 0;
|
|
|
|
+ UINT8 BuzzerPeriod = 10;//1000ms
|
|
|
|
+ BuzzerTimer++;
|
|
|
|
+ if(BuzzerTimer<(UINT8)(BuzzerPeriod*DutyRatio))
|
|
{
|
|
{
|
|
relayControl(TRUE);
|
|
relayControl(TRUE);
|
|
- osDelay(50);
|
|
|
|
|
|
+ }
|
|
|
|
+ else if(BuzzerTimer>=(UINT8)(BuzzerPeriod*DutyRatio) && BuzzerTimer<BuzzerPeriod)
|
|
|
|
+ {
|
|
|
|
+ relayControl(FALSE);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
relayControl(FALSE);
|
|
relayControl(FALSE);
|
|
- osDelay(150);
|
|
|
|
- timerCount++;
|
|
|
|
|
|
+ BuzzerTimer = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
UINT8 decryptionAlgorithm (UINT16 cipherText)
|
|
UINT8 decryptionAlgorithm (UINT16 cipherText)
|
|
{
|
|
{
|
|
UINT16 plainText = 1;
|
|
UINT16 plainText = 1;
|