|
@@ -26,7 +26,7 @@ static void appBeforeSlp1(void *pdata, slpManLpState state);
|
|
|
static void appAfterSlp1(void *pdata, slpManLpState state);
|
|
|
static void appBeforeSlp2(void *pdata, slpManLpState state);
|
|
|
static void appAfterSlp2(void *pdata, slpManLpState state);
|
|
|
-
|
|
|
+static void BattWorkDelayFunc(UINT8 battWorkCurrentState);
|
|
|
UINT8 MainSlpHandler = 0xff; //主线程睡眠句柄
|
|
|
static void MainTask(void *arg)
|
|
|
{
|
|
@@ -65,6 +65,8 @@ static void MainTask(void *arg)
|
|
|
}
|
|
|
xTimerStart(monitor_timer, 0);
|
|
|
UINT32 DignoseCounter = 0;
|
|
|
+ UINT8 BattWorkState = 0;
|
|
|
+ INT16 BattI = 0;
|
|
|
while (true)
|
|
|
{
|
|
|
switch (gProcess_Main_Task)
|
|
@@ -88,6 +90,20 @@ static void MainTask(void *arg)
|
|
|
DignoseCounter = TimeCounter;
|
|
|
if (TimeCounter % 10 == 0)
|
|
|
{
|
|
|
+ BattI = (INT16)(packTotalCurr - 10000U);
|
|
|
+ if (BattI > 50) //电流大于5A认为放电
|
|
|
+ {
|
|
|
+ BattWorkState = BATT_DISCHARGE_SYM; //discharge
|
|
|
+ }
|
|
|
+ else if (BattI < -50) //电流大于-5A认为充电
|
|
|
+ {
|
|
|
+ BattWorkState = BATT_CHARGE_SYM; //charge
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ BattWorkState = BATT_IDLE_SYM; //stop
|
|
|
+ }
|
|
|
+ BattWorkDelayFunc(BattWorkState);
|
|
|
// UINT32 space = osMessageQueueGetSpace(CanRecvHandle);
|
|
|
// printf("space=\t%d\n", space);
|
|
|
//BattWorkDelayFunc(battWorkState);
|
|
@@ -306,4 +322,51 @@ static void appAfterSlp2(void *pdata, slpManLpState state)
|
|
|
#ifdef USING_PRINTF
|
|
|
printf("sleep2 failed:%d \n", state);
|
|
|
#endif
|
|
|
+}
|
|
|
+static void BattWorkDelayFunc(UINT8 battWorkCurrentState)
|
|
|
+{
|
|
|
+ static UINT8 workDelayCounter = 0;
|
|
|
+
|
|
|
+ if (battWorkCurrentState == BATT_IDLE_SYM && BattWorkStateDelay == BATT_DISCHARGE_SYM) //从放电转静置 60s延时
|
|
|
+ {
|
|
|
+ workDelayCounter++;
|
|
|
+ if (workDelayCounter >= 60)
|
|
|
+ {
|
|
|
+ workDelayCounter = 0;
|
|
|
+ BattWorkStateDelay = battWorkCurrentState;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (battWorkCurrentState == BATT_IDLE_SYM && BattWorkStateDelay == BATT_CHARGE_SYM) //从充电转静置60s延时
|
|
|
+ {
|
|
|
+ workDelayCounter++;
|
|
|
+ if (workDelayCounter >= 60)
|
|
|
+ {
|
|
|
+ workDelayCounter = 0;
|
|
|
+ BattWorkStateDelay = battWorkCurrentState;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (battWorkCurrentState == BATT_DISCHARGE_SYM && BattWorkStateDelay != BATT_DISCHARGE_SYM) //从 充电或者静置 转放电 1s延时
|
|
|
+ {
|
|
|
+ workDelayCounter++;
|
|
|
+ if (workDelayCounter >= 1)
|
|
|
+ {
|
|
|
+ workDelayCounter = 0;
|
|
|
+ BattWorkStateDelay = battWorkCurrentState;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (battWorkCurrentState == BATT_CHARGE_SYM && BattWorkStateDelay != BATT_CHARGE_SYM) //从 放电或者静置 转充电 1s延时
|
|
|
+ {
|
|
|
+ workDelayCounter++;
|
|
|
+ if (workDelayCounter >= 1)
|
|
|
+ {
|
|
|
+ workDelayCounter = 0;
|
|
|
+ BattWorkStateDelay = battWorkCurrentState;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ BattWorkStateDelay = battWorkCurrentState;
|
|
|
+ workDelayCounter = 0;
|
|
|
+ }
|
|
|
+ return;
|
|
|
}
|