Ver Fonte

新增SOR

LAPTOP-EG88H5BE\86151 há 3 anos atrás
pai
commit
cb513383f2

+ 1 - 0
ARMCC/Makefile

@@ -36,6 +36,7 @@ obj-y             += PLAT/project/$(TARGET)/apps/qx_app/src/app.o \
 						PLAT/project/$(TARGET)/apps/qx_app/src/EmbeddedCoder_src/CDM.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/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 \

+ 1 - 0
inc/AppConfig.h

@@ -131,6 +131,7 @@ typedef struct _AppAlgorithmType
     BOOL sfmd_flg_heatCirOpenFltE;
     BOOL sfmd_flg_heatRunFltE;
 	UINT16 ihd_tm_parkTimeEE;  
+	UINT8 sorv_ohm_cellREE[28];
 } AppAlgorithmData;
 typedef struct _AppDataHeader
 {

+ 2 - 0
inc/EmbeddedCoder_inc/BCUDisp.h

@@ -120,6 +120,8 @@ extern uint16_T soed_E_nowEng;
 extern uint16_T soed_pct_nowStat;
 extern uint16_T soed_E_fullEng;
 
+extern uint8_T sorv_ohm_cellREi[cmnc_num_cellUNumMax];
+extern uint8_T sorv_ohm_cellREo[cmnc_num_cellUNumMax];
 
 
 extern boolean_T iscd_flg_flt;

+ 8 - 0
inc/EmbeddedCoder_inc/SOR.h

@@ -0,0 +1,8 @@
+#include "BCUCal.h"
+#include "BCUDisp.h"
+
+
+extern boolean_T FirstRun_SOR;
+extern void SOR_Init(void);
+extern void SOR(void);
+

+ 2 - 0
inc/EmbeddedCoder_inc/SPM.h

@@ -5,6 +5,8 @@
 #include "SOC.h"
 #include "BLC.h"
 #include "CDM.h"
+#include "SOE.h"
+#include "SOR.h"
 
 
 

+ 1 - 0
src/AppFunc.c

@@ -1419,6 +1419,7 @@ static void setDefaultBcuDataInfo(void)
 	BcuDataInfo.sohd_Q_chrgE = 0;
 	memset(BcuDataInfo.sohv_Q_packCapArrE, 0, 10 * sizeof(UINT16));
 	memset(BcuDataInfo.iscv_Q_remainCpEE, 0, cmnc_num_cellUNumMax * sizeof(UINT16));
+	memset(BcuDataInfo.iscv_Q_remainCpEE, 0, sizeof(BcuDataInfo.iscv_Q_remainCpEE));
 	BcuDataInfo.iscd_tm_totalEE = 0;
 	BcuDataInfo.sfmd_flg_iscFltEE = 0;
 	BcuDataInfo.sfmd_flg_mainCirClosFltE = 0;

+ 2 - 0
src/EmbeddedCoder_src/BCU.c

@@ -49,6 +49,7 @@ void BCU(void)
             memcpy(sohv_Q_packCapArrEi, BcuDataInfo.sohv_Q_packCapArrE, sizeof(sohv_Q_packCapArrEi));
             memcpy(sohv_Q_cellCapArrEi, BcuDataInfo.sohv_Q_cellCapArrE, sizeof(sohv_Q_cellCapArrEi));
             memcpy((iscv_Q_remainCpEi), BcuDataInfo.iscv_Q_remainCpEE, sizeof(iscv_Q_remainCpEi));
+			memcpy((sorv_ohm_cellREi), BcuDataInfo.sorv_ohm_cellREE, sizeof(sorv_ohm_cellREi));
             iscd_tm_totalEi = BcuDataInfo.iscd_tm_totalEE;
             sfmd_flg_mainCirClosFltEi = BcuDataInfo.sfmd_flg_mainCirClosFltE;
             sfmd_flg_heatCirClosFltEi = BcuDataInfo.sfmd_flg_heatCirClosFltE;
@@ -237,6 +238,7 @@ void BCUEEDataSave(void)
     memcpy(BcuDataInfo.sohv_Q_packCapArrE, sohv_Q_packCapArrEo, sizeof(sohv_Q_packCapArrEo));
     memcpy(BcuDataInfo.sohv_Q_cellCapArrE, sohv_Q_cellCapArrEo, sizeof(sohv_Q_cellCapArrEo));
     memcpy(BcuDataInfo.iscv_Q_remainCpEE, iscv_Q_remainCpEo, sizeof(iscv_Q_remainCpEo));
+	memcpy(BcuDataInfo.sorv_ohm_cellREE, sorv_ohm_cellREo, sizeof(sorv_ohm_cellREo));
     BcuDataInfo.iscd_tm_totalEE = iscd_tm_totalEo;
     BcuDataInfo.sfmd_flg_mainCirClosFltE = sfmd_flg_mainCirClosFltEo;
     BcuDataInfo.sfmd_flg_heatCirClosFltE = sfmd_flg_heatCirClosFltEo;

+ 2 - 0
src/EmbeddedCoder_src/BCUDisp.c

@@ -121,6 +121,8 @@ uint16_T soed_E_nowEng;
 uint16_T soed_pct_nowStat;
 uint16_T soed_E_fullEng;
 
+uint8_T sorv_ohm_cellREi[cmnc_num_cellUNumMax];
+uint8_T sorv_ohm_cellREo[cmnc_num_cellUNumMax];
 
 boolean_T iscd_flg_flt;
 uint16_T iscv_Q_remainCpEi[cmnc_num_cellUNumMax];

+ 72 - 0
src/EmbeddedCoder_src/SOR.c

@@ -0,0 +1,72 @@
+#include "SOR.h"
+
+
+boolean_T FirstRun_SOR;
+
+void SOR_Init(void)
+{
+    FirstRun_SOR = true;
+}
+//-------------------------------------------------------------------------
+void SOR(void)
+{
+    static uint8_T sorn_ohm_cellREE[cmnc_num_cellUNumMax];
+    static uint8_T sorn_ohm_cellREEArr[5][cmnc_num_cellUNumMax];
+    uint8_T sorn_ohm_cellRSum[cmnc_num_cellUNumMax];
+	static uint16_T sorn_V_cellU[cmnc_num_cellUNumMax];
+	static uint8_T sorn_num_ctn;
+	static int16_T sorn_I_curr;
+    uint16_T i;
+    uint16_T j;
+	socd_pct_battSoc =600;
+    //
+    if(FirstRun_SOR)
+    {
+        sorn_num_ctn = 0;
+        sorn_I_curr = sfmd_I_curr;
+        memcpy(sorn_V_cellU,sfmv_V_cellU, sizeof(sfmv_V_cellU));
+    }
+    if(FirstRun_SOR)
+    {
+        if( ArrMax((&(sorv_ohm_cellREi[0])) , cmnc_num_cellUNum) > 100)
+        {
+            memset(sorn_ohm_cellREE,0, sizeof(sorn_ohm_cellREE));
+        }
+        else
+        {
+            memcpy(sorn_ohm_cellREE,sorv_ohm_cellREi, sizeof(sorv_ohm_cellREi));
+        }
+    }
+    
+    if(socd_pct_battSoc >= 550 && socd_pct_battSoc <= 700 && sorn_num_ctn < 5)
+    {
+        if(sfmd_I_curr - sorn_I_curr > 200 || sfmd_I_curr - sorn_I_curr < -200)
+        {
+            for(i = 0;i < cmnc_num_cellUNum;i++)
+            {
+                sorn_ohm_cellREEArr[sorn_num_ctn][i] =  (uint8_T)(((int16_T)(sorn_V_cellU[i] - sfmv_V_cellU[i])) * 100/(sorn_I_curr - sfmd_I_curr));
+            }
+            sorn_num_ctn = sorn_num_ctn + 1;
+            memset(sorn_ohm_cellRSum,0, sizeof(sorn_ohm_cellRSum));
+            for(i = 0;i < cmnc_num_cellUNum;i++)
+            {
+                for(j = 0;j < sorn_num_ctn;j++)
+                {
+                    sorn_ohm_cellRSum[i] =  sorn_ohm_cellRSum[i] + sorn_ohm_cellREEArr[j][i];
+                }
+                sorn_ohm_cellREE[i] = sorn_ohm_cellRSum[i]/sorn_num_ctn;
+            }
+
+			printf("I:%d\n",sfmd_I_curr - sorn_I_curr);
+			printf("U:%d   %d\n",sorn_V_cellU[0] , sfmv_V_cellU[0]);
+			printf("U:%d\n",(int16_T)(sorn_V_cellU[0] - sfmv_V_cellU[0]));
+        } 
+    }
+    memcpy(sorv_ohm_cellREo,sorn_ohm_cellREE, sizeof(sorn_ohm_cellREE));
+	printf("0_%d %d %d %d %d\n",sorn_ohm_cellREEArr[0][0],sorn_ohm_cellREEArr[1][0],sorn_ohm_cellREEArr[2][0],sorn_ohm_cellREEArr[3][0],sorn_ohm_cellREEArr[4][0]);
+	printf("1_%d %d %d %d %d\n",sorn_ohm_cellREEArr[0][1],sorn_ohm_cellREEArr[1][1],sorn_ohm_cellREEArr[2][1],sorn_ohm_cellREEArr[3][1],sorn_ohm_cellREEArr[4][1]);
+	printf("%d  %d\n\n",sorv_ohm_cellREo[0],sorv_ohm_cellREo[1]);
+    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

@@ -9,6 +9,7 @@ void SPM_Init(void)
   CDM_Init();
   SOC_Init();
   SOE_Init();
+  SOR_Init();
   FirstRun_SPM = true;
 }
 
@@ -42,6 +43,7 @@ void SPM(void)
       CDM();
 	  SOC();
 	  SOE();
+	  SOR();
   }
   // 循环发送数组
   cand_Q_cellCap = sohv_Q_cellCapArrEo[cand_Nr_cellNr-1];