Преглед изворни кода

充电结束重启后SOH计算逻辑更改

LAPTOP-EG88H5BE\86151 пре 3 година
родитељ
комит
a5ff8296bc

+ 1 - 0
inc/EmbeddedCoder_inc/BCUDisp.h

@@ -52,6 +52,7 @@ extern boolean_T ihd_st_relayControl;
 extern uint8_T ihd_st_heatForceControl;
 extern uint8_T ihd_st_EOLState;
 extern boolean_T ihd_flg_urtRecFlg;
+extern uint8_T ihd_st_reSet;
 
 extern int16_T sfmd_I_curr;                              /*处理后整包电流 */
 extern uint16_T sfmd_T_modTMax;                          /*处理后模组温度最小 */

+ 2 - 1
src/EmbeddedCoder_src/BCU.c

@@ -93,6 +93,7 @@ void BCU(void)
                     // printf("time:%d\n",ihd_tm_parkTime);
                     //
                     //数据获取
+                    ihd_st_reSet = SysResetFlag;
                     ihd_I_curr = (int16_T)(-(battI - 10000));
                     memcpy(ihv_V_cellU, battCellU, sizeof(battCellU));
                     for (i = 0; i < cmnc_num_modTNum; i++)
@@ -175,7 +176,7 @@ void BCU(void)
                 if (TimeCounter % 10 == 0)
                 {
                     ihd_tm_parkTime++;
-                    // printf("time:%d\n",ihd_tm_parkTime);
+                    //printf("time:%d\n",ihd_tm_parkTime);
                 }
                 if (TimeCounter % 1000 == 0)
                 {

+ 1 - 0
src/EmbeddedCoder_src/BCUDisp.c

@@ -52,6 +52,7 @@ boolean_T ihd_st_relayControl;
 uint8_T ihd_st_heatForceControl;             
 uint8_T ihd_st_EOLState;                   
 boolean_T ihd_flg_urtRecFlg;
+uint8_T ihd_st_reSet;
 
 int16_T sfmd_I_curr;                              /*处理后整包电流 */
 uint16_T sfmd_T_modTMax;                          /*处理后模组温度最小 */

+ 4 - 3
src/EmbeddedCoder_src/CDM.c

@@ -21,15 +21,15 @@ void CDM(void)
     real_T K[2];
     real_T arf[cmnc_num_cellUNumMax];
     uint16_T i;
-    static uint8_T ihd_st_workStat_Delay;
+    static uint8_T cmdn_st_workStat_Delay;
     static uint8_T cdmn_N_Cnt;
 
     //
-    if (ihd_st_workStat_Delay != 1 && ihd_st_workStat == 1)
+    if (cmdn_st_workStat_Delay != 1 && ihd_st_workStat == 1)
     {
         FirstRun_CDM = true;
     }
-    ihd_st_workStat_Delay = ihd_st_workStat;
+    
     //
     if (FirstRun_CDM)
     {
@@ -106,6 +106,7 @@ void CDM(void)
     }
 	
     FirstRun_CDM = false;
+	cmdn_st_workStat_Delay = ihd_st_workStat;
 }
 
 

+ 11 - 13
src/EmbeddedCoder_src/PIM.c

@@ -10,7 +10,7 @@ void PIM_Init(void)
 
 void PIM(void)
 {
-    static uint8_T ihd_st_workStat_Delay;
+    static uint8_T pimn_st_workStat_Delay;
     uint16_T i;
     uint16_T j;
     static uint16_T pimn_V_volt[pimd_L_rls];
@@ -29,12 +29,11 @@ void PIM(void)
     real_T S[4];
     real_T temp;
     //重置
-    if (ihd_st_workStat_Delay != 1 && ihd_st_workStat == 1)
+    if (pimn_st_workStat_Delay != 1 && ihd_st_workStat == 1)
     {
         FirstRun_PIM = true;
     }
     
-    
     //限定记忆长度
     if (FirstRun_PIM)
     {
@@ -64,15 +63,14 @@ void PIM(void)
         pimn_M_P[2][0] =  0; pimn_M_P[2][1] =  0;  pimn_M_P[2][2] = 10;  pimn_M_P[2][3] =  0;
         pimn_M_P[3][0] =  0; pimn_M_P[3][1] =  0;  pimn_M_P[3][2] =  0;  pimn_M_P[3][3] = 10;
         
-        pimn_V_ocv   = 3.6;
-        pimn_R_ohm   = 0.002;
-        pimn_R_polar = 0.001;
-        pimn_F_polar = 10;
-        pimn_N_ctn = 0;
-        
+        pimn_V_ocv   = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(socd_pct_battSoc * 10), (&(cmnm_pct_soc[0])), (&(cmnm_V_ocv[0])),    12U) * 0.001;
+        pimn_R_ohm   = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(socd_pct_battSoc * 10), (&(cmnm_pct_soc[0])), (&(cmnm_R_ohm[0])),    12U) * 0.001 * 0.001;
+        pimn_R_polar = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(socd_pct_battSoc * 10), (&(cmnm_pct_soc[0])), (&(cmnm_R_polar[0])), 12U) * 0.001 * 0.001;
+        pimn_F_polar = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(socd_pct_battSoc * 10), (&(cmnm_pct_soc[0])),  (&(cmnm_F_polar[0])), 12U) * 0.001;
+        pimn_N_ctn = 0;     
     }
     //
-    if(ihd_st_workStat_Delay == 1)
+    if(pimn_st_workStat_Delay == 1)
     {
         pimn_N_ctn = pimn_N_ctn + 1;
         //输入
@@ -165,13 +163,13 @@ void PIM(void)
         pimn_R_polar = (theta[1] - theta[2])/(1 - theta[0]) - theta[1];
         pimn_F_polar = theta[2] * theta[1] > 0 ?  (pimn_R_ohm + pimn_R_polar)/pimn_R_ohm/ (-log(theta[2]/theta[1])) : (pimn_R_ohm + pimn_R_polar)/pimn_R_ohm;
         
-        pimd_V_ocv   = (uint16_T)(pimn_V_ocv * 1000);
-        pimd_R_ohm   = (uint16_T)(pimn_R_ohm * 1000 * 1000);
+        pimd_V_ocv   = (uint16_T)(pimn_V_ocv   * 1000);
+        pimd_R_ohm   = (uint16_T)(pimn_R_ohm   * 1000 * 1000);
         pimd_R_polar = (uint16_T)(pimn_R_polar * 1000 * 1000);
         pimd_F_polar = (uint16_T)(pimn_F_polar * 1000);
     }
     //
-    ihd_st_workStat_Delay = ihd_st_workStat;
+    pimn_st_workStat_Delay = ihd_st_workStat;
     FirstRun_PIM = false; 
 }
 

+ 29 - 17
src/EmbeddedCoder_src/SOH.c

@@ -35,7 +35,7 @@ void SOH(void)
     uint16_T SumQ;
     //
     static uint16_T sohn_V_chrgStartStat[cmnc_num_cellUNumMax];
-    static uint8_T ihd_st_workStat_Delay;
+    static uint8_T sohn_st_workStat_Delay;
     static boolean_T sohn_flg_chrgEnd_Delay;
     boolean_T sohn_flg_chrgEnd;
     //
@@ -51,12 +51,25 @@ void SOH(void)
         sfmn_flg_currFlt_keep = false;
         sohn_flg_currFlt = false;
         Ahincr = 0;
-        ihd_st_workStat_Delay = 0;
-        sohn_flg_chrgEnd_Delay = false;
-		memset(sohv_V_chrgStartStatEo,0, sizeof(sohv_V_chrgStartStatEo));
-		sohd_Q_chrgEo = 0 ;
-		sohd_flg_chrgEndEo = false;
+        sohn_st_workStat_Delay = 0;
+		if(ihd_st_reSet == 1)
+		{
+           memcpy(sohv_V_chrgStartStatEo,sohv_V_chrgStartStatEi, sizeof(sohv_V_chrgStartStatEo));
+	       sohd_Q_chrgEo = sohd_Q_chrgEi;
+	       sohd_flg_chrgEndEo = sohd_flg_chrgEndEi; 
+		}
+		else
+		{
+		   memset(sohv_V_chrgStartStatEo,0, sizeof(sohv_V_chrgStartStatEo));
+		   sohd_Q_chrgEo = 0 ;
+		   sohd_flg_chrgEndEo = 0; 
+
+		}
+		
     }
+  
+
+
 	
     if(FirstRun_SOH)
     {
@@ -156,7 +169,7 @@ void SOH(void)
              memcpy(sohv_Q_cellCapArrEo,sohn_Q_cellCapArrEE, sizeof(sohv_Q_cellCapArrEo));
          }
 		 memcpy(sohv_Q_cellCap,sohv_Q_cellCapArrEo, sizeof(sohv_Q_cellCapArrEo));
-        // printf("sohv_Q_cellCapArrEo[16]:%d,update:%d,En:%d\n",sohv_Q_cellCapArrEo[16],sohn_flg_update,sohn_flg_countEn);
+
  
          SumQ = 0;
          for(i = 0; i < 10;i++)
@@ -180,7 +193,7 @@ void SOH(void)
          memcpy(sohn_V_chrgStartStat,sfmv_V_cellU, sizeof(sfmv_V_cellU));
      }
      //
-     if((ihd_st_workStat == 2) && (ihd_st_workStat_Delay != 2))
+     if((ihd_st_workStat == 2) && (sohn_st_workStat_Delay != 2))
      {
         memcpy(sohv_V_chrgStartStatEo,sohn_V_chrgStartStat, sizeof(sohv_V_chrgStartStatEo));
      }
@@ -211,23 +224,22 @@ void SOH(void)
 	 //=======================================================================================
     //----------------------充电结速信息------------------------------------------------------
     //=======================================================================================
-    if((ihd_st_workStat != 2) && (ihd_st_workStat_Delay == 2))
+    if((ihd_st_workStat != 2) && (sohn_st_workStat_Delay == 2))
     {
-       sohn_flg_chrgEnd = true; 
+       sohd_flg_chrgEndEo = true; 
     }
     else
     {
-      sohn_flg_chrgEnd = ( sfmd_I_curr < 10 && sfmd_I_curr > -10) && sohn_flg_chrgEnd_Delay;
+      sohd_flg_chrgEndEo = ( sfmd_I_curr < 10 && sfmd_I_curr > -10) && sohd_flg_chrgEndEo;
     }
-	
-    sohn_flg_chrgEnd_Delay = sohn_flg_chrgEnd;
-    sohd_flg_chrgEndEo =  !sohn_flg_currFlt && sohn_flg_chrgEnd;
-    ihd_st_workStat_Delay = ihd_st_workStat;
+    sohd_flg_chrgEndEo =  !sohn_flg_currFlt && sohd_flg_chrgEndEo;
+
+    //
+    sohn_st_workStat_Delay = ihd_st_workStat;
 	FirstRun_SOH = false;	
-	//printf("sohd_flg_chrgEndEo:%d\n",sohd_flg_chrgEndEo);
+	
 }
 
-
 ////////////////////////////////////////////////////////////////
 uint16_T  ArrMax(uint16_T *Data, uint16_T m)
 {