Jelajahi Sumber

增加BMS通讯中断恢复,防止仪表进入设置界面导致的通信故障不能恢复;新增变量uwRemainDistanceCal用于存储原续航里程,通信故障恢复后恢复续航里程显示

Ye Jin 1 tahun lalu
induk
melakukan
eca8d46220
1 mengubah file dengan 13 tambahan dan 4 penghapusan
  1. 13 4
      User project/3.BasicFunction/Source/canAppl.c

+ 13 - 4
User project/3.BasicFunction/Source/canAppl.c

@@ -60,6 +60,7 @@ UBYTE                    MC_WorkMode;
 UBYTE                    MC_BC_COM = 0;
 static LPF_OUT                    BMS_swCurIdcLpf;
 static BOOL blBMSCommFault = FALSE;
+static UWORD uwRemainDistanceCal;
 
 void Can_voUpdateMC_UpcInfo(void)
 {
@@ -260,7 +261,7 @@ void Can_voInitMC_Run(void)
     BMS_VoltEstimat.uwInterResistpu = (UWORD)(((ULONG)1700 << 15) / cof_uwRbOm);     // Q15 0.1mOhm BMS internal resistance 150mOhm + 20mOhm
     mth_voLPFilterCoef(1000000 / 100, EVENT_1MS_HZ, &BMS_swCurIdcLpf.uwKx); // 100Hz
     
-    MC_RunInfo.RemainDistance = 0xffff;                           // init invalid value
+    uwRemainDistanceCal = 0xffff;                           // init invalid value
 }
 
 void Can_voMC_Run_1ms(void) /* parasoft-suppress METRICS-28 "本项目圈复杂度无法更改,后续避免" */
@@ -601,6 +602,10 @@ void Can_voMC_Run_200ms(void)
     {
         blBMSCommFault = TRUE;       // communication abnormal
     }
+    else
+    {
+        blBMSCommFault = FALSE;       // communication normal
+    }
     
     Can_GearSt_switch();
     SizeMCUP = sizeof(MC_UpcInfo.stAssistInfo);
@@ -672,12 +677,12 @@ void Can_voMC_Run_200ms(void)
         {
             MC_RunInfo.PowerPerKm =
                     (UBYTE)(*(&cp_stHistoryPara.uwG1AvgPwrConsumption + (cp_stBikeRunInfoPara.uwBikeGear - 1)) / 10); //平均功耗 0.01Ah/km  /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
-            MC_RunInfo.RemainDistance = BMS_RunInfo.RC / MC_RunInfo.PowerPerKm / 10;
+            uwRemainDistanceCal = BMS_RunInfo.RC / MC_RunInfo.PowerPerKm / 10;
         }
         else
         {
             MC_RunInfo.PowerPerKm = 0;         
-            MC_RunInfo.RemainDistance = 0xffff;                           //invalid value
+            uwRemainDistanceCal = 0xffff;                           //invalid value
         }
 
         cp_stBikeRunInfoPara.BMSRestChargeLast = BMS_RunInfo.RC;
@@ -693,6 +698,10 @@ void Can_voMC_Run_200ms(void)
     {
         MC_RunInfo.RemainDistance = 0xeeee;             /* no bms info*/
     }
+    else
+    {
+        MC_RunInfo.RemainDistance = uwRemainDistanceCal;
+    }
     
     MC_RunInfo.T_PCB = (UBYTE)adc_stUpOut.PCBTemp + (UBYTE)40;                    //>PCB温度 +40℃
     MC_RunInfo.T_Coil = (UBYTE)adc_stUpOut.PCBTemp + (UBYTE)40;                   //绕组温度 +40℃
@@ -837,7 +846,7 @@ void Can_RemainTrip_Cal(void)
                     uwCruisCoef = 4096;
                 }
                 
-                MC_RunInfo.RemainDistance = BMS_RunInfo.RC / MC_RunInfo.PowerPerKm / 10;
+                uwRemainDistanceCal = BMS_RunInfo.RC / MC_RunInfo.PowerPerKm / 10;
             }
         }
     }