Browse Source

新增在线参数辨识

LAPTOP-EG88H5BE\86151 3 years ago
parent
commit
4ede040b21

+ 1 - 0
ARMCC/Makefile

@@ -37,6 +37,7 @@ obj-y             += PLAT/project/$(TARGET)/apps/qx_app/src/app.o \
 						PLAT/project/$(TARGET)/apps/qx_app/src/EmbeddedCoder_src/ISC.o \
 						PLAT/project/$(TARGET)/apps/qx_app/src/EmbeddedCoder_src/SOE.o \
 						PLAT/project/$(TARGET)/apps/qx_app/src/EmbeddedCoder_src/SOR.o \
+						PLAT/project/$(TARGET)/apps/qx_app/src/EmbeddedCoder_src/PIM.o \
 						PLAT/project/$(TARGET)/apps/qx_app/src/EmbeddedCoder_src/look1_is16lu16n16tu16_binlcase.o \
 						PLAT/project/$(TARGET)/apps/qx_app/src/EmbeddedCoder_src/look1_iu16lu16n16tu16_binlcase.o \
 						PLAT/project/$(TARGET)/apps/qx_app/src/EmbeddedCoder_src/BCUCal.o \

+ 5 - 1
inc/EmbeddedCoder_inc/BCUDisp.h

@@ -147,10 +147,14 @@ extern int16_T  cdmv_V_deltOCV[cmnc_num_cellUNumMax];
 extern int16_T  cdmv_ohm_deltR[cmnc_num_cellUNumMax];
 extern boolean_T cdmd_flg_deltOCVDisable;
 
+extern uint16_T pimd_V_ocv;
+extern uint16_T pimd_R_ohm;
+extern uint16_T pimd_R_polar;
+extern uint16_T pimd_F_polar;
 
 extern uint16_T test_cellCap[cmnc_num_cellUNumMax];
 extern uint16_T test_countEn;
 
-
+extern real_T test_Data[614][2];
 
 

+ 9 - 0
inc/EmbeddedCoder_inc/PIM.h

@@ -0,0 +1,9 @@
+#include "rtwtypes.h"
+#include <math.h>
+#include "BCUCal.h"
+#include "BCUDisp.h"
+extern boolean_T FirstRun_PIM;
+
+extern void PIM_Init(void);
+extern void PIM(void);
+

+ 1 - 1
src/EmbeddedCoder_src/BCUCal.c

@@ -10,7 +10,7 @@ const uint16_T cmnc_Q_ratedCp = 500U;
 const uint16_T cmnc_num_cellUNum = 20U;                                                                                                   /* 电压采样点实际个数; */
 const uint16_T cmnc_num_modTNum = 4U;                                                                                                     /* 温度采样点实际个数; */
 const uint16_T cmnc_tm_parkTime = 1800U;                                                                                                  /* 静置时间阈值; */
-const uint16_T cmnm_F_polar[13] = {1152U, 4862U, 12567U, 20299U, 23334U, 22612U, 23075U, 17084U, 14510U, 15551U, 17127U, 17475U, 20043U}; /* 电池放电参数的C数组; */
+const uint16_T cmnm_F_polar[13] = {5708U, 10079U, 18901U, 24298U, 25621U, 24240U, 26329U, 29043U, 23753U, 25286U, 25622U, 25968U, 28782U}; /* 电池放电参数的RC数组; */
 const uint16_T cmnm_R_ohm[13] = {2364U, 2284U, 2234U, 2166U, 2128U, 2111U, 2090U, 2077U, 2077U, 2072U, 2085U, 2090U, 2077U};              /* 电池放电参数的Ro数组; */
 const uint16_T cmnm_R_polar[13] = {4955U, 2073U, 1504U, 1197U, 1098U, 1072U, 1141U, 1700U, 1637U, 1626U, 1496U, 1486U, 1436U};            /* 电池放电参数的Rp数组; */
 const uint16_T cmnm_V_ocv[13] = {3327U, 3453U, 3487U, 3563U, 3617U, 3652U, 3700U, 3791U, 3897U, 4006U, 4129U, 4197U, 4276U};              /* 电池放电参数的OCV数组; */

+ 4 - 0
src/EmbeddedCoder_src/BCUDisp.c

@@ -148,6 +148,10 @@ int16_T  cdmv_V_deltOCV[cmnc_num_cellUNumMax] = {0};
 int16_T  cdmv_ohm_deltR[cmnc_num_cellUNumMax] = {0};
 boolean_T cdmd_flg_deltOCVDisable;
 
+uint16_T pimd_V_ocv;
+uint16_T pimd_R_ohm;
+uint16_T pimd_R_polar;
+uint16_T pimd_F_polar;
 
 uint16_T test_cellCap[cmnc_num_cellUNumMax] ;
 uint16_T test_countEn;

+ 31 - 30
src/EmbeddedCoder_src/CDM.c

@@ -11,19 +11,18 @@ void CDM(void)
 {
     real_T cmdn_V_cellUDelt[cmnc_num_cellUNumMax];
     real_T cdmn_I_curr;
-    static real_T P[4][cmnc_num_cellUNumMax];
-    real_T P1[4][cmnc_num_cellUNumMax];
+    static real_T cdmn_M_P[4][cmnc_num_cellUNumMax];
+    real_T P[4][cmnc_num_cellUNumMax];
     static real_T deltaE[cmnc_num_cellUNumMax];
     static real_T deltaR[cmnc_num_cellUNumMax];
     static real_T deltaES[cmnc_num_cellUNumMax];
     static real_T deltaRS[cmnc_num_cellUNumMax];
-    static real_T Lambda;
+    static real_T cdmn_f_Lambda;
     real_T K[2];
     real_T arf[cmnc_num_cellUNumMax];
     uint16_T i;
     static uint8_T ihd_st_workStat_Delay;
-    static int16_T sfmd_I_curr_Delay;
-    static uint8_T Cnt;
+    static uint8_T cdmn_N_Cnt;
 
     //
     if (ihd_st_workStat_Delay != 1 && ihd_st_workStat == 1)
@@ -36,20 +35,20 @@ void CDM(void)
     {
         for (i = 0; i < cmnc_num_cellUNum; i++)
         {
-            P[0][i] = 10;
-            P[1][i] = 0;
-            P[2][i] = 0;
-            P[3][i] = 10;
-            Lambda = 0.991;
+            cdmn_M_P[0][i] = 10;
+            cdmn_M_P[1][i] = 0;
+            cdmn_M_P[2][i] = 0;
+            cdmn_M_P[3][i] = 10;
+            cdmn_f_Lambda = 0.991;
             deltaE[i] = 0;
             deltaR[i] = 0;
             deltaES[i] = 0;
             deltaRS[i] = 0;
-            Cnt = 0;
+            cdmn_N_Cnt = 0;
         }
     }
     //
-    if (ihd_st_workStat == 1) //&&  (sfmd_I_curr_Delay - sfmd_I_curr > 10 ||sfmd_I_curr_Delay - sfmd_I_curr < -10 ||sfmd_I_curr_Delay ==0 && sfmd_I_curr == 0))
+    if (ihd_st_workStat == 1) 
     {
         for (i = 0; i < cmnc_num_cellUNum; i++)
         {
@@ -60,51 +59,53 @@ void CDM(void)
         cdmd_flg_deltOCVDisable = false;
         for (i = 0; i < cmnc_num_cellUNum; i++)
         {
-            K[0] = (P[0][i] + cdmn_I_curr * P[1][i]) / (Lambda + P[0][i] + cdmn_I_curr * P[2][i] + (P[1][i] + cdmn_I_curr * P[3][i]) * cdmn_I_curr);
-            K[1] = (P[2][i] + cdmn_I_curr * P[3][i]) / (Lambda + P[0][i] + cdmn_I_curr * P[2][i] + (P[1][i] + cdmn_I_curr * P[3][i]) * cdmn_I_curr);
+            K[0] = (cdmn_M_P[0][i] + cdmn_I_curr * cdmn_M_P[1][i]) / (cdmn_f_Lambda + cdmn_M_P[0][i] + cdmn_I_curr * cdmn_M_P[2][i] + (cdmn_M_P[1][i] + cdmn_I_curr * cdmn_M_P[3][i]) * cdmn_I_curr);
+            K[1] = (cdmn_M_P[2][i] + cdmn_I_curr * cdmn_M_P[3][i]) / (cdmn_f_Lambda + cdmn_M_P[0][i] + cdmn_I_curr * cdmn_M_P[2][i] + (cdmn_M_P[1][i] + cdmn_I_curr * cdmn_M_P[3][i]) * cdmn_I_curr);
             arf[i] = cmdn_V_cellUDelt[i] - (deltaE[i] + cdmn_I_curr * deltaR[i]);
             deltaE[i] = deltaE[i] + K[0] * arf[i];
             deltaR[i] = deltaR[i] + K[1] * arf[i];
-            P1[0][i] = ((1 - K[0]) * P[0][i] - P[2][i] * K[0] * cdmn_I_curr) / Lambda;
-            P1[1][i] = ((1 - K[0]) * P[1][i] - P[3][i] * K[0] * cdmn_I_curr) / Lambda;
-            P1[2][i] = (-K[1] * P[0][i] + P[2][i] * (1 - K[1] * cdmn_I_curr)) / Lambda;
-            P1[3][i] = (-K[1] * P[1][i] + P[3][i] * (1 - K[1] * cdmn_I_curr)) / Lambda;
+            P[0][i] = ((1 - K[0]) * cdmn_M_P[0][i] - cdmn_M_P[2][i] * K[0] * cdmn_I_curr)  / cdmn_f_Lambda;
+            P[1][i] = ((1 - K[0]) * cdmn_M_P[1][i] - cdmn_M_P[3][i] * K[0] * cdmn_I_curr)  / cdmn_f_Lambda;
+            P[2][i] = (-K[1] * cdmn_M_P[0][i] + cdmn_M_P[2][i] * (1 - K[1] * cdmn_I_curr)) / cdmn_f_Lambda;
+            P[3][i] = (-K[1] * cdmn_M_P[1][i] + cdmn_M_P[3][i] * (1 - K[1] * cdmn_I_curr)) / cdmn_f_Lambda;
 
-            P[0][i] = P1[0][i];
-            P[1][i] = P1[1][i];
-            P[2][i] = P1[2][i];
-            P[3][i] = P1[3][i];
+            cdmn_M_P[0][i] = P[0][i];
+            cdmn_M_P[1][i] = P[1][i];
+            cdmn_M_P[2][i] = P[2][i];
+            cdmn_M_P[3][i] = P[3][i];
             if (arf[i] > 0.04 || arf[i] < -0.04)
             {
                 cdmd_flg_deltOCVDisable = true;
             }
         }
         //
-        Cnt = Cnt + 1;
+        cdmn_N_Cnt = cdmn_N_Cnt + 1;
         for (i = 0; i < cmnc_num_cellUNum; i++)
         {
             deltaES[i] = deltaES[i] + deltaE[i];
             deltaRS[i] = deltaRS[i] + deltaR[i];
         }
 
-        if (Cnt >= 10)
+        if (cdmn_N_Cnt >= 10)
         {
             for (i = 0; i < cmnc_num_cellUNum; i++)
             {
-                cdmv_V_deltOCV[i] = (int16_T)(deltaES[i] / Cnt * 1000);
-                cdmv_ohm_deltR[i] = (int16_T)(deltaRS[i] / Cnt * 1000 * 1000);
+                cdmv_V_deltOCV[i] = (int16_T)(deltaES[i] / cdmn_N_Cnt * 1000);
+                cdmv_ohm_deltR[i] = (int16_T)(deltaRS[i] / cdmn_N_Cnt * 1000 * 1000);
                 deltaES[i] = 0;
                 deltaRS[i] = 0;
             }
-            Cnt = 0;
+            cdmn_N_Cnt = 0;
         }
     }
     else
     {
         cdmd_flg_deltOCVDisable = true;
 		memset(cdmv_V_deltOCV,0,sizeof(cdmv_V_deltOCV));
-		memset(cdmv_ohm_deltR,0,sizeof(cdmv_V_deltOCV));
+		memset(cdmv_ohm_deltR,0,sizeof(cdmv_ohm_deltR));
     }
-    sfmd_I_curr_Delay = sfmd_I_curr;
+	
     FirstRun_CDM = false;
-}
+}
+
+

+ 1 - 1
src/EmbeddedCoder_src/ISC.c

@@ -1,5 +1,5 @@
 #include "ISC.h"
-#include "look1_is16lu16n16tu16_binlcase.h"
+#include "look1_iu16lu16n16tu16_binlcase.h"
 
 boolean_T FirstRun_ISC;
 

+ 179 - 0
src/EmbeddedCoder_src/PIM.c

@@ -0,0 +1,179 @@
+#include "PIM.h"
+
+static boolean_T FirstRun_PIM;
+#define pimd_L_rls 101
+
+void PIM_Init(void)
+{
+    FirstRun_PIM = true;
+}
+
+void PIM(void)
+{
+    static uint8_T ihd_st_workStat_Delay;
+    uint16_T i;
+    uint16_T j;
+    static uint16_T pimn_V_volt[pimd_L_rls];
+    static int16_T  pimn_I_curr[pimd_L_rls];
+    static real_T  pimn_V_ocv;
+    static real_T  pimn_R_ohm;
+    static real_T  pimn_R_polar;
+    static real_T  pimn_F_polar;
+    
+    static uint16_T pimn_N_ctn;
+    static real_T pimn_M_P[4][4];
+    static real_T theta[4];
+    real_T P[4][4];
+    real_T A[4];
+    real_T K[4];
+    real_T S[4];
+    real_T temp;
+    //重置
+    if (ihd_st_workStat_Delay != 1 && ihd_st_workStat == 1)
+    {
+        FirstRun_PIM = true;
+    }
+    
+    
+    //限定记忆长度
+    if (FirstRun_PIM)
+    {
+        for (i = 0; i < pimd_L_rls; i++)
+        {
+            pimn_V_volt[i] = sfmv_V_cellU[0];
+            pimn_I_curr[i] = sfmd_I_curr;
+        }
+	}
+    else
+    {
+        for (i = 0; i < pimd_L_rls - 1; i++)
+        {
+            pimn_V_volt[i]  = pimn_V_volt[i+1];
+            pimn_I_curr[i] = pimn_I_curr[i+1];
+        }
+        pimn_V_volt[i] = sfmv_V_cellU[0];
+        pimn_I_curr[i] = sfmd_I_curr;
+    }
+
+    
+    //初值
+    if (FirstRun_PIM)
+    {
+        pimn_M_P[0][0] = 10; pimn_M_P[0][1] =  0;  pimn_M_P[0][2] =  0;  pimn_M_P[0][3] =  0;
+        pimn_M_P[1][0] =  0; pimn_M_P[1][1] = 10;  pimn_M_P[1][2] =  0;  pimn_M_P[1][3] =  0;
+        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;
+        
+    }
+    //
+    if(ihd_st_workStat_Delay == 1)
+    {
+        pimn_N_ctn = pimn_N_ctn + 1;
+        //输入
+        A[0] = (real_T)pimn_V_volt[pimd_L_rls - 2] * 0.001;
+        A[1] = (real_T)pimn_I_curr[pimd_L_rls - 1] * 0.1;
+        A[2] =-(real_T)pimn_I_curr[pimd_L_rls - 2] * 0.1;
+        A[3] = 1;
+        //参数形变
+        temp = exp(- (pimn_R_ohm + pimn_R_polar)/pimn_R_ohm/pimn_F_polar);
+        theta[0] = 1- pimn_R_ohm * (1 - temp)/(pimn_R_ohm + pimn_R_polar);
+        theta[1] = pimn_R_ohm;
+        theta[2] = pimn_R_ohm * temp;
+        theta[3] = (1 -theta[0]) * pimn_V_ocv;
+
+        //增益矩阵
+        temp =  (A[0] * pimn_M_P[0][0] +A[1] * pimn_M_P[1][0] + A[2] * pimn_M_P[2][0] + A[3] * pimn_M_P[3][0]) * A[0] +
+                (A[0] * pimn_M_P[0][1] +A[1] * pimn_M_P[1][1] + A[2] * pimn_M_P[2][1] + A[3] * pimn_M_P[3][1]) * A[1] +
+                (A[0] * pimn_M_P[0][2] +A[1] * pimn_M_P[1][2] + A[2] * pimn_M_P[2][2] + A[3] * pimn_M_P[3][2]) * A[2] +
+                (A[0] * pimn_M_P[0][3] +A[1] * pimn_M_P[1][3] + A[2] * pimn_M_P[2][3] + A[3] * pimn_M_P[3][3]) * A[3];
+        for(i = 0;i < 4;i++)
+        {
+            K[i] = (pimn_M_P[i][0] * A[0] + pimn_M_P[i][1] * A[1] + pimn_M_P[i][2] * A[2] + pimn_M_P[i][3] * A[3])/(1 + temp);
+        }
+        //参数更新
+        temp = (real_T)pimn_V_volt[pimd_L_rls - 1] * 0.001 - (theta[0] * A[0] + theta[1] * A[1] + theta[2] * A[2] + theta[3] * A[3]);
+        for(i = 0;i < 4;i++)
+        {
+            theta[i] = theta[i] + K[i] * temp;
+        }
+        //协方差更新
+        for(i = 0;i < 4;i++)
+        {
+            for(j = 0;j < 4;j++)
+            {
+                P[i][j] = pimn_M_P[i][j] - K[i] * (A[0] * pimn_M_P[0][j] + A[1] * pimn_M_P[1][j] + A[2] * pimn_M_P[2][j] + A[3] * pimn_M_P[3][j]);
+            }
+
+        }
+		
+        //传递下循环
+        for(i = 0;i < 4;i++)
+        {
+            for(j = 0;j < 4;j++)
+            {
+                pimn_M_P[i][j] = P[i][j];
+            }
+            
+        }
+        
+        //=======================================================================
+        if(pimn_N_ctn > pimd_L_rls)
+        {
+            //输入
+            A[0] = (real_T)pimn_V_volt[0] * 0.001;
+            A[1] = (real_T)pimn_I_curr[1] * 0.1;
+            A[2] =-(real_T)pimn_I_curr[0] * 0.1;
+            A[3] = 1;
+
+            //增益矩阵
+            temp =  (A[0] * pimn_M_P[0][0] +A[1] * pimn_M_P[1][0] + A[2] * pimn_M_P[2][0] + A[3] * pimn_M_P[3][0]) * A[0] +
+                    (A[0] * pimn_M_P[0][1] +A[1] * pimn_M_P[1][1] + A[2] * pimn_M_P[2][1] + A[3] * pimn_M_P[3][1]) * A[1] +
+                    (A[0] * pimn_M_P[0][2] +A[1] * pimn_M_P[1][2] + A[2] * pimn_M_P[2][2] + A[3] * pimn_M_P[3][2]) * A[2] +
+                    (A[0] * pimn_M_P[0][3] +A[1] * pimn_M_P[1][3] + A[2] * pimn_M_P[2][3] + A[3] * pimn_M_P[3][3]) * A[3];
+            for(i = 0;i <4;i++)
+            {
+                K[i] = (pimn_M_P[i][0] * A[0] + pimn_M_P[i][1] * A[1] + pimn_M_P[i][2] * A[2] + pimn_M_P[i][3] * A[3])/(1 + temp);
+            }
+
+            //协方差更新
+            for(i = 0;i < 4;i++)
+            {
+                for(j = 0;j < 4;j++)
+                {
+                    P[i][j] = pimn_M_P[i][j] + K[i] * (A[0] * pimn_M_P[0][j] + A[1] * pimn_M_P[1][j] + A[2] * pimn_M_P[2][j] + A[3] * pimn_M_P[3][j]);
+                }
+            }
+            //传递下一循环
+            for(i = 0;i < 4;i++)
+            {
+                for(j = 0;j < 4;j++)
+                {
+                    pimn_M_P[i][j] = P[i][j];
+                }
+                
+            }
+        }
+        //参数求解
+        pimn_V_ocv   = theta[3]/(1 - theta[0]);
+        pimn_R_ohm   = theta[1];
+        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_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;
+    FirstRun_PIM = false; 
+}
+
+
+

+ 10 - 10
src/EmbeddedCoder_src/SOC.c

@@ -30,7 +30,7 @@ void SOC(void)
     real_T ocv;
     real_T Ro;
     real_T Rp;
-    real_T C;
+    real_T RC;
     real_T deltU;
 	real_T UL;
     real_T A[4];
@@ -172,14 +172,14 @@ void SOC(void)
     ocv = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Min_Delay * 10), (&(cmnm_pct_soc[0])), (&(cmnm_V_ocv[0])),   12U) * 0.001;
     Ro  = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Min_Delay * 10), (&(cmnm_pct_soc[0])), (&(cmnm_R_ohm[0])),   12U) * 0.001 * 0.001;
     Rp  = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Min_Delay * 10), (&(cmnm_pct_soc[0])), (&(cmnm_R_polar[0])), 12U) * 0.001 * 0.001;
-    C   = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Min_Delay * 10), (&(cmnm_pct_soc[0])), (&(cmnm_F_polar[0])), 12U) * 0.001 * 1000;
+    RC   = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Min_Delay * 10),(&(cmnm_pct_soc[0])), (&(cmnm_F_polar[0])), 12U) * 0.001;
     A[0] = 1;
     A[1] = 0;
     A[2] = 0;
-    A[3] = exp(-1 / (Rp * C));
+    A[3] = exp(-1 / RC);
     
     B[0] = 1 / Q / 3600 * 100;
-    B[1] = Rp * (1 - exp(-1 / (Rp * C)));
+    B[1] = Rp * (1 - exp(-1 / RC));
     
     H[0] = docvmath(soc_Min_Delay);
     H[1] = 1;
@@ -235,14 +235,14 @@ void SOC(void)
     ocv = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Max_Delay * 10), (&(cmnm_pct_soc[0])), (&(cmnm_V_ocv[0])),   12U) * 0.001;
     Ro  = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Max_Delay * 10), (&(cmnm_pct_soc[0])), (&(cmnm_R_ohm[0])),   12U) * 0.001 * 0.001 ;
     Rp  = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Max_Delay * 10), (&(cmnm_pct_soc[0])), (&(cmnm_R_polar[0])), 12U) * 0.001 * 0.001;
-    C   = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Max_Delay * 10), (&(cmnm_pct_soc[0])), (&(cmnm_F_polar[0])), 12U) * 0.001 * 1000;
+    RC   = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Max_Delay * 10),(&(cmnm_pct_soc[0])), (&(cmnm_F_polar[0])), 12U) * 0.001;
     A[0] = 1;
     A[1] = 0;
     A[2] = 0;
-    A[3] = exp(-1 / (Rp * C));
+    A[3] = exp(-1 / RC);
     
     B[0] = 1 / Q / 3600 * 100;
-    B[1] = Rp * (1 - exp(-1 / (Rp * C)));
+    B[1] = Rp * (1 - exp(-1 / RC));
     
     H[0] = docvmath(soc_Max_Delay);
     H[1] = 1;
@@ -316,14 +316,14 @@ void SOC(void)
     ocv = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Avrg_Delay * 10), (&(cmnm_pct_soc[0])), (&(cmnm_V_ocv[0])),   12U) * 0.001;
     Ro  = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Avrg_Delay * 10), (&(cmnm_pct_soc[0])), (&(cmnm_R_ohm[0])),   12U) * 0.001 * 0.001;
     Rp  = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Avrg_Delay * 10), (&(cmnm_pct_soc[0])), (&(cmnm_R_polar[0])), 12U) * 0.001 * 0.001;
-    C   = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Avrg_Delay * 10), (&(cmnm_pct_soc[0])), (&(cmnm_F_polar[0])), 12U) * 0.001 * 1000;
+    RC   = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Avrg_Delay * 10),(&(cmnm_pct_soc[0])), (&(cmnm_F_polar[0])), 12U) * 0.001 ;
     A[0] = 1;
     A[1] = 0;
     A[2] = 0;
-    A[3] = exp(-1 / (Rp * C));
+    A[3] = exp(-1 / RC);
     
     B[0] = 1 / Q / 3600 * 100;
-    B[1] = Rp * (1 - exp(-1 / (Rp * C)));
+    B[1] = Rp * (1 - exp(-1 / RC));
     
     H[0] = docvmath(soc_Avrg_Delay);
     H[1] = 1;

+ 3 - 1
src/EmbeddedCoder_src/SOR.c

@@ -18,7 +18,7 @@ void SOR(void)
 	static int16_T sorn_I_curr;
     uint16_T i;
     uint16_T j;
-	socd_pct_battSoc = 600;
+	
     //
     if(FirstRun_SOR)
     {
@@ -59,7 +59,9 @@ void SOR(void)
             }
         } 
     }
+	memcpy(sorv_ohm_cellR,sorn_ohm_cellREE, sizeof(sorn_ohm_cellREE));
     memcpy(sorv_ohm_cellREo,sorn_ohm_cellREE, sizeof(sorn_ohm_cellREE));
+	
 	sorn_I_curr = sfmd_I_curr;
     memcpy(sorn_V_cellU,sfmv_V_cellU, sizeof(sfmv_V_cellU));
     FirstRun_SOR = false;

+ 2 - 0
src/EmbeddedCoder_src/SPM.c

@@ -8,6 +8,7 @@ void SPM_Init(void)
   BLC_Init();
   CDM_Init();
   SOC_Init();
+  PIM_Init();
   SOE_Init();
   SOR_Init();
   FirstRun_SPM = true;
@@ -42,6 +43,7 @@ void SPM(void)
   {
       CDM();
 	  SOC();
+	  PIM();
 	  SOE();
 	  SOR();
   }