Browse Source

Merge branch 'V3-7250-QTF' into V3-V31XX-7250

# Conflicts:
#	inc/EmbeddedCoder_inc/BCUDisp.h
#	src/EmbeddedCoder_src/BCUDisp.c
#	src/EmbeddedCoder_src/CDM.c
CHENJIE-PC\QiXiang_CHENJIE 3 years ago
parent
commit
a85fa030b1
4 changed files with 343 additions and 318 deletions
  1. 150 149
      inc/EmbeddedCoder_inc/BCUDisp.h
  2. 110 110
      src/EmbeddedCoder_src/BCUDisp.c
  3. 77 54
      src/EmbeddedCoder_src/CDM.c
  4. 6 5
      src/EmbeddedCoder_src/SOC.c

+ 150 - 149
inc/EmbeddedCoder_inc/BCUDisp.h

@@ -1,149 +1,150 @@
-
-#include "rtwtypes.h"
-#include "BCUCal.h"
-
-extern uint16_T appv_V_cellU[cmnc_num_cellUNumMax]; /* 静态电压 */
-extern uint8_T appd_st_preCyc;
-
-extern uint16_T blcv_Q_reqCpEi[cmnc_num_cellUNumMax];   /*均衡需求容量 读取量(数组); */
-extern uint16_T blcv_Q_reqCpEo[cmnc_num_cellUNumMax];   /*均衡需求容量 写入量(数组); */
-extern uint32_T blcv_Q_totalCpEi[cmnc_num_cellUNumMax]; /*累计均衡容量 读取量(数组); */
-extern uint32_T blcv_Q_totalCpEo[cmnc_num_cellUNumMax]; /*累计均衡容量 写入量(数组); */
-extern boolean_T blcv_flg_excute[cmnc_num_cellUNumMax]; /*均衡执行请求标志位 (数组); */
-
-extern boolean_T ihd_flg_HVILFlt;                  /* 保护板上传的高压互锁故障 */
-extern boolean_T ihd_flg_DTCClear;                 /* 上位机发送的故障清楚指令;*/
-extern uint8_T ihd_st_authFaild;                   /* 底层诊断的认证失败故障;*/
-extern int16_T ihd_I_curr;                         /*电池包电流; */
-extern uint8_T ihd_st_chrgConnect;                 /*充电器连接状态; */
-extern uint16_T ihd_P_gas;                         /*气体浓度 */
-extern uint16_T ihd_T_ACPlugT;                     /*慢充插头温度 +40 */
-extern uint16_T ihd_T_DCPlugT;                     /*快充插头温度+40 */
-extern uint16_T ihd_T_bdtemp;                      /*板子温度 */
-extern uint16_T ihd_T_heatPanT1;                   /*加热板温度1+40 */
-extern uint16_T ihd_T_heatPanT2;                   /*加热板温度2 +40 */
-extern uint16_T ihd_T_mosT;                        /*Mos温度+40 */
-extern boolean_T ihd_flg_EESaveFlt;                /*EE存储故障 */
-extern boolean_T ihd_flg_battULowFlt;              /*保护板上传的总压欠压故障; */
-extern boolean_T ihd_flg_battUOverFlt;             /*保护板上传的总压过压故障; */
-extern boolean_T ihd_flg_cellULowFlt;              /*保护板上传的单体欠压故障; */
-extern boolean_T ihd_flg_cellUOverFlt;             /*保护板上传的单体过压故障; */
-extern boolean_T ihd_flg_chrgCurrOverFlt;          /*保护板上传的充电过流故障; */
-extern boolean_T ihd_flg_chrgModTLowFlt;           /*保护板上传的充电模组温度过低故障; */
-extern boolean_T ihd_flg_chrgModTOverFlt;          /*保护板上传的充电模组温度过高故障; */
-extern boolean_T ihd_flg_chrgMosClosFlt;           /*充电Mos失效 */
-extern boolean_T ihd_flg_chrgMosTOverFlt;          /*保护板上传的充电Mos温度过高故障; */
-extern boolean_T ihd_flg_currOpenFlt;              /*保护板上传的电流开路故障 */
-extern boolean_T ihd_flg_disChrgCurrOverFlt;       /*保护板上传的放电过流故障; */
-extern boolean_T ihd_flg_disChrgModTLowFlt;        /*保护板上传的放电模组温度过低故障; */
-extern boolean_T ihd_flg_disChrgModTOverFlt;       /*保护板上传的放电模组温度过高故障; */
-extern boolean_T ihd_flg_disChrgMosClosFlt;        /*放电Mos失效 */
-extern boolean_T ihd_flg_disChrgMosTOverFlt;       /*保护板上传的放电Mos温度过高故障; */
-extern boolean_T ihd_flg_urtRecFlt;                /*内网通讯故障 */
-extern uint16_T ihd_pct_soc;                       /*保护板SOC */
-extern uint16_T ihd_pct_soh;                       /*保护板SOH */
-extern uint8_T ihd_st_workStat;                    /*电池工作状态 */
-extern uint16_T ihd_tm_parkTime;                   /*驻车时间; */
-extern uint16_T ihv_T_modT[cmnc_num_modTNumMax];   /*模组温度(数组)+40 */
-extern uint16_T ihv_V_cellU[cmnc_num_cellUNumMax]; /*电池单体电压(数组); */
-extern boolean_T ihd_st_chrgMosControl;
-extern boolean_T ihd_st_disChrgMosControl;
-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 int16_T sfmd_I_curr;       /*处理后整包电流 */
-extern uint16_T sfmd_T_modTMax;   /*处理后模组温度最小 */
-extern uint16_T sfmd_T_modTMin;   /*处理后模组温度最大 */
-extern uint16_T sfmd_idx_modTMax; /*处理后模组温度最小 */
-extern uint16_T sfmd_idx_modTMin; /*处理后模组温度最大 */
-extern uint16_T sfmd_V_cellUAvrg; /*处理后单体电压平均 */
-extern uint16_T sfmd_V_cellUMax;  /*处理后单体电压最大 */
-extern uint16_T sfmd_V_cellUMin;  /*处理后单体电压最小 */
-extern uint16_T sfmd_idx_cellUMin;
-extern uint16_T sfmd_idx_cellUMax;
-extern boolean_T sfmd_flg_cellUDisable;             /*单体电压有效标志位 ; 0为有效;1为无效 */
-extern boolean_T sfmd_flg_currDisable;              /*电流有效标志位 ; 0为有效;1为无效 */
-extern boolean_T sfmd_flg_modTDisable;              /*模组温度有效标志位 ; 0为有效;1为无效 */
-extern uint16_T sfmd_num_fltNum;                    /*故障数量 */
-extern uint8_T sfmd_st_fltAct;                      /*故障禁止指令 */
-extern uint8_T sfmd_st_fltLevel;                    /*故障等级 */
-extern uint16_T sfmv_T_modT[cmnc_num_modTNumMax];   /*处理后模组温度 */
-extern uint16_T sfmv_V_cellU[cmnc_num_cellUNumMax]; /*处理后单体电压 */
-extern uint16_T sfmv_idx_fltCode[20];               /*诊断故障码(数组) */
-extern uint16_T sfmd_V_battU;                       /* 处理过后的总电压 */
-extern boolean_T sfmd_flg_mainCirClosFltEi;         /*主回路常闭故障读取量 */
-extern boolean_T sfmd_flg_mainCirClosFltEo;         /*主回路常闭故障写入量 */
-extern boolean_T sfmd_flg_heatCirClosFltEi;         /*加热回路常闭故障读取量 */
-extern boolean_T sfmd_flg_heatCirClosFltEo;         /*加热回路常闭故障写入量 */
-extern boolean_T sfmd_flg_heatCirOpenFltEi;         /*加热回路常开故障读取量 */
-extern boolean_T sfmd_flg_heatCirOpenFltEo;         /*加热回路常开故障写入量 */
-extern boolean_T sfmd_flg_heatRunFltEi;
-extern boolean_T sfmd_flg_heatRunFltEo;
-extern boolean_T sfmd_flg_iscFltEi;
-extern boolean_T sfmd_flg_iscFltEo;
-
-extern uint16_T socd_pct_ahSoc;        /*安时SOC; */
-extern uint16_T socd_pct_estSoc;       /*估算SOC;*/
-extern uint16_T socd_flg_EEsave;       /*实时存储标志位;*/
-extern uint16_T socd_pct_ekfSoc;       /*EKFSOC;*/
-extern uint16_T socd_pct_battSoc;      /*电池真实SOC; */
-extern uint16_T socd_pct_battSocEi;    /*电池真实SOC 读取量; */
-extern uint16_T socd_pct_battSocEo;    /*电池真实SOC 写入量; */
-extern uint16_T socd_pct_bcuSoc;       /*电池显示SOC; */
-extern uint16_T socd_pct_bcuSocEi;     /*电池显示SOC读取量; */
-extern uint16_T socd_pct_bcuSocEo;     /*电池显示SOC写入量; */
-extern uint16_T socd_pct_bcuSoc_Delay; /*电池显示SOC延时; */
-extern uint16_T socv_pct_cellSoc[cmnc_num_cellUNumMax];
-extern uint16_T socd_pct_cellBattSoc;
-extern boolean_T socd_flg_cellSocDisable;
-
-extern uint16_T sohd_Q_chrgEi;                                /*充入容量读取量; */
-extern uint16_T sohd_Q_chrgEo;                                /*充入容量写入量; */
-extern boolean_T sohd_flg_chrgEndEi;                          /*充电结束标志位读取量; */
-extern boolean_T sohd_flg_chrgEndEo;                          /*充电结束标志位写入量; */
-extern uint16_T sohd_pct_bcuSoh;                              /*电池SOH; */
-extern uint16_T sohd_pct_bcuSoh_Delay;                        /*电池SOH延时; */
-extern uint16_T sohd_tm_chrgStartStatEi;                      /*充电前静置时间读取量; */
-extern uint16_T sohd_tm_chrgStartStatEo;                      /*充电前静置时间写入量; */
-extern uint16_T sohv_Q_cellCap[cmnc_num_cellUNumMax];         /*单体容量 */
-extern uint16_T sohv_Q_cellCapArrEi[cmnc_num_cellUNumMax];    /*单体容量(数组) 读取量 */
-extern uint16_T sohv_Q_cellCapArrEo[cmnc_num_cellUNumMax];    /*单体容量(数组) 写入量 */
-extern uint16_T sohv_Q_packCapArrEi[10];                      /*10次整包容量(数组)读取量; */
-extern uint16_T sohv_Q_packCapArrEo[10];                      /*10次整包容量(数组)写入量; */
-extern uint16_T sohv_V_chrgStartStatEi[cmnc_num_cellUNumMax]; /*充电开始时刻的单体电压(数组)读取量; */
-extern uint16_T sohv_V_chrgStartStatEo[cmnc_num_cellUNumMax]; /*充电开始时刻的单体电压(数组)写入量; */
-
-extern boolean_T iscd_flg_flt;
-extern uint16_T iscv_Q_remainCpEi[cmnc_num_cellUNumMax];
-extern uint32_T iscd_tm_totalEi;
-extern uint16_T iscv_Q_remainCpEo[cmnc_num_cellUNumMax];
-extern uint32_T iscd_tm_totalEo;
-
-extern uint8_T tmsd_st_heatAct; /*热管理请求状态; */
-
-extern uint8_T cmd_st_chrgMod;        /* 充电模式  */
-extern uint8_T cmd_st_chrgSt;         /* 充电状态  */
-extern int16_T cmd_I_chrgCurrReq;     /* 充电需求电流  */
-extern uint8_T cmd_idx_chrgEndReason; /* 充电结束原因  */
-
-extern uint16_T cand_Nr_cellNr;       /*循环发送的单体编号; */
-extern uint16_T cand_Q_cellCap;       /*循环发送的单体容量; */
-extern uint16_T cand_V_chrgStartStat; /*循环发送的充电前单体电压; */
-extern uint16_T cand_Q_reqCp;         /*循环发送的单体需求均衡容量; */
-extern uint16_T cand_Q_totalCp;       /*循环发送的单体累计均衡容量; */
-
-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 test_efkSocMin;
-extern uint16_T test_efkSocMax;
-extern real_T test_UpMin;
-extern real_T test_UpMax;
-extern int16_T test_curr;
-extern uint16_T test_U;
-
-extern uint16_T test1_U[2];
-extern uint8_T FirstCellU;
+
+#include "rtwtypes.h"
+#include "BCUCal.h"
+
+extern uint16_T appv_V_cellU[cmnc_num_cellUNumMax];                        /* 静态电压 */
+extern uint8_T appd_st_preCyc;
+
+extern uint16_T blcv_Q_reqCpEi[cmnc_num_cellUNumMax];                      /*均衡需求容量 读取量(数组); */
+extern uint16_T blcv_Q_reqCpEo[cmnc_num_cellUNumMax];                      /*均衡需求容量 写入量(数组); */
+extern uint32_T blcv_Q_totalCpEi[cmnc_num_cellUNumMax];                    /*累计均衡容量 读取量(数组); */
+extern uint32_T blcv_Q_totalCpEo[cmnc_num_cellUNumMax];                    /*累计均衡容量 写入量(数组); */
+extern boolean_T blcv_flg_excute[cmnc_num_cellUNumMax];                    /*均衡执行请求标志位 (数组); */
+
+extern boolean_T ihd_flg_HVILFlt;                        /* 保护板上传的高压互锁故障 */
+extern boolean_T ihd_flg_DTCClear;                       /* 上位机发送的故障清楚指令;*/
+extern uint8_T ihd_st_authFaild;                         /* 底层诊断的认证失败故障;*/
+extern int16_T ihd_I_curr;                               /*电池包电流; */
+extern uint8_T ihd_st_chrgConnect;                       /*充电器连接状态; */
+extern uint16_T ihd_P_gas;                               /*气体浓度 */
+extern uint16_T ihd_T_ACPlugT;                           /*慢充插头温度 +40 */
+extern uint16_T ihd_T_DCPlugT;                           /*快充插头温度+40 */
+extern uint16_T ihd_T_bdtemp;                            /*板子温度 */
+extern uint16_T ihd_T_heatPanT1;                         /*加热板温度1+40 */
+extern uint16_T ihd_T_heatPanT2;                         /*加热板温度2 +40 */
+extern uint16_T ihd_T_mosT;                              /*Mos温度+40 */
+extern boolean_T ihd_flg_EESaveFlt;                      /*EE存储故障 */
+extern boolean_T ihd_flg_battULowFlt;                    /*保护板上传的总压欠压故障; */
+extern boolean_T ihd_flg_battUOverFlt;                   /*保护板上传的总压过压故障; */
+extern boolean_T ihd_flg_cellULowFlt;                    /*保护板上传的单体欠压故障; */
+extern boolean_T ihd_flg_cellUOverFlt;                   /*保护板上传的单体过压故障; */
+extern boolean_T ihd_flg_chrgCurrOverFlt;                /*保护板上传的充电过流故障; */
+extern boolean_T ihd_flg_chrgModTLowFlt;                 /*保护板上传的充电模组温度过低故障; */
+extern boolean_T ihd_flg_chrgModTOverFlt;                /*保护板上传的充电模组温度过高故障; */
+extern boolean_T ihd_flg_chrgMosClosFlt;                 /*充电Mos失效 */
+extern boolean_T ihd_flg_chrgMosTOverFlt;                /*保护板上传的充电Mos温度过高故障; */
+extern boolean_T ihd_flg_currOpenFlt;                    /*保护板上传的电流开路故障 */
+extern boolean_T ihd_flg_disChrgCurrOverFlt;             /*保护板上传的放电过流故障; */
+extern boolean_T ihd_flg_disChrgModTLowFlt;              /*保护板上传的放电模组温度过低故障; */
+extern boolean_T ihd_flg_disChrgModTOverFlt;             /*保护板上传的放电模组温度过高故障; */
+extern boolean_T ihd_flg_disChrgMosClosFlt;              /*放电Mos失效 */
+extern boolean_T ihd_flg_disChrgMosTOverFlt;             /*保护板上传的放电Mos温度过高故障; */
+extern boolean_T ihd_flg_urtRecFlt;                      /*内网通讯故障 */
+extern uint16_T ihd_pct_soc;                             /*保护板SOC */
+extern uint16_T ihd_pct_soh;                             /*保护板SOH */
+extern uint8_T ihd_st_workStat;                          /*电池工作状态 */
+extern uint16_T ihd_tm_parkTime;                         /*驻车时间; */
+extern uint16_T ihv_T_modT[cmnc_num_modTNumMax];                           /*模组温度(数组)+40 */
+extern uint16_T ihv_V_cellU[cmnc_num_cellUNumMax];                         /*电池单体电压(数组); */
+extern boolean_T ihd_st_chrgMosControl;    
+extern boolean_T ihd_st_disChrgMosControl; 
+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 int16_T sfmd_I_curr;                              /*处理后整包电流 */
+extern uint16_T sfmd_T_modTMax;                          /*处理后模组温度最小 */
+extern uint16_T sfmd_T_modTMin;                          /*处理后模组温度最大 */
+extern uint16_T sfmd_idx_modTMax;                          /*处理后模组温度最小 */
+extern uint16_T sfmd_idx_modTMin;                          /*处理后模组温度最大 */
+extern uint16_T sfmd_V_cellUAvrg;                        /*处理后单体电压平均 */
+extern uint16_T sfmd_V_cellUMax;                         /*处理后单体电压最大 */
+extern uint16_T sfmd_V_cellUMin;                         /*处理后单体电压最小 */
+extern uint16_T sfmd_idx_cellUMin;
+extern uint16_T sfmd_idx_cellUMax;
+extern boolean_T sfmd_flg_cellUDisable;                  /*单体电压有效标志位 ; 0为有效;1为无效 */
+extern boolean_T sfmd_flg_currDisable;                   /*电流有效标志位 ; 0为有效;1为无效 */
+extern boolean_T sfmd_flg_modTDisable;                   /*模组温度有效标志位 ; 0为有效;1为无效 */
+extern uint16_T sfmd_num_fltNum;                         /*故障数量 */
+extern uint8_T sfmd_st_fltAct;                           /*故障禁止指令 */
+extern uint8_T sfmd_st_fltLevel;                         /*故障等级 */
+extern uint16_T sfmv_T_modT[cmnc_num_modTNumMax];                          /*处理后模组温度 */
+extern uint16_T sfmv_V_cellU[cmnc_num_cellUNumMax];                        /*处理后单体电压 */
+extern uint16_T sfmv_idx_fltCode[20];                    /*诊断故障码(数组) */
+extern uint16_T sfmd_V_battU;                            /* 处理过后的总电压 */
+extern boolean_T sfmd_flg_mainCirClosFltEi;              /*主回路常闭故障读取量 */  
+extern boolean_T sfmd_flg_mainCirClosFltEo;              /*主回路常闭故障写入量 */  
+extern boolean_T sfmd_flg_heatCirClosFltEi;              /*加热回路常闭故障读取量 */  
+extern boolean_T sfmd_flg_heatCirClosFltEo;              /*加热回路常闭故障写入量 */  
+extern boolean_T sfmd_flg_heatCirOpenFltEi;              /*加热回路常开故障读取量 */  
+extern boolean_T sfmd_flg_heatCirOpenFltEo;              /*加热回路常开故障写入量 */  
+extern boolean_T sfmd_flg_heatRunFltEi;
+extern boolean_T sfmd_flg_heatRunFltEo;
+extern boolean_T sfmd_flg_iscFltEi;
+extern boolean_T sfmd_flg_iscFltEo;
+
+extern uint16_T socd_pct_ahSoc;                          /*安时SOC; */
+extern uint16_T socd_pct_estSoc;                         /*估算SOC;*/
+extern uint16_T socd_flg_EEsave;                         /*实时存储标志位;*/
+extern uint16_T socd_pct_ekfSoc;                         /*EKFSOC;*/
+extern uint16_T socd_pct_battSoc;                        /*电池真实SOC; */
+extern uint16_T socd_pct_battSocEi;                      /*电池真实SOC 读取量; */
+extern uint16_T socd_pct_battSocEo;                      /*电池真实SOC 写入量; */
+extern uint16_T socd_pct_bcuSoc;                         /*电池显示SOC; */
+extern uint16_T socd_pct_bcuSocEi;                       /*电池显示SOC读取量; */
+extern uint16_T socd_pct_bcuSocEo;                       /*电池显示SOC写入量; */
+extern uint16_T socd_pct_bcuSoc_Delay;                   /*电池显示SOC延时; */
+extern uint16_T socv_pct_cellSoc[cmnc_num_cellUNumMax];
+extern uint16_T socd_pct_cellBattSoc;
+extern boolean_T socd_flg_cellSocDisable;
+
+extern uint16_T sohd_Q_chrgEi;                           /*充入容量读取量; */
+extern uint16_T sohd_Q_chrgEo;                           /*充入容量写入量; */
+extern boolean_T sohd_flg_chrgEndEi;                     /*充电结束标志位读取量; */
+extern boolean_T sohd_flg_chrgEndEo;                     /*充电结束标志位写入量; */
+extern uint16_T sohd_pct_bcuSoh;                         /*电池SOH; */
+extern uint16_T sohd_pct_bcuSoh_Delay;                   /*电池SOH延时; */
+extern uint16_T sohd_tm_chrgStartStatEi;                 /*充电前静置时间读取量; */
+extern uint16_T sohd_tm_chrgStartStatEo;                 /*充电前静置时间写入量; */
+extern uint16_T sohv_Q_cellCap[cmnc_num_cellUNumMax];                      /*单体容量 */
+extern uint16_T sohv_Q_cellCapArrEi[cmnc_num_cellUNumMax];                 /*单体容量(数组) 读取量 */
+extern uint16_T sohv_Q_cellCapArrEo[cmnc_num_cellUNumMax];                 /*单体容量(数组) 写入量 */
+extern uint16_T sohv_Q_packCapArrEi[10];                 /*10次整包容量(数组)读取量; */
+extern uint16_T sohv_Q_packCapArrEo[10];                 /*10次整包容量(数组)写入量; */
+extern uint16_T sohv_V_chrgStartStatEi[cmnc_num_cellUNumMax];              /*充电开始时刻的单体电压(数组)读取量; */
+extern uint16_T sohv_V_chrgStartStatEo[cmnc_num_cellUNumMax];              /*充电开始时刻的单体电压(数组)写入量; */
+
+extern boolean_T iscd_flg_flt;
+extern uint16_T iscv_Q_remainCpEi[cmnc_num_cellUNumMax];
+extern uint32_T iscd_tm_totalEi;
+extern uint16_T iscv_Q_remainCpEo[cmnc_num_cellUNumMax];
+extern uint32_T iscd_tm_totalEo;
+
+extern uint8_T tmsd_st_heatAct;                          /*热管理请求状态; */
+
+extern uint8_T cmd_st_chrgMod;                           /* 充电模式  */
+extern uint8_T cmd_st_chrgSt;                            /* 充电状态  */
+extern int16_T cmd_I_chrgCurrReq;                       /* 充电需求电流  */
+extern uint8_T cmd_idx_chrgEndReason;                    /* 充电结束原因  */
+
+extern uint16_T cand_Nr_cellNr;                          /*循环发送的单体编号; */
+extern uint16_T cand_Q_cellCap;                          /*循环发送的单体容量; */
+extern uint16_T cand_V_chrgStartStat;                    /*循环发送的充电前单体电压; */
+extern uint16_T cand_Q_reqCp;                            /*循环发送的单体需求均衡容量; */
+extern uint16_T cand_Q_totalCp;                          /*循环发送的单体累计均衡容量; */
+
+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 test_efkSocMin;
+extern uint16_T test_efkSocMax;
+extern real_T test_UpMin;
+extern real_T test_UpMax;
+extern int16_T test_curr[10];
+extern uint16_T test_U1[10];
+extern uint16_T test_U2[10];
+
+
+

+ 110 - 110
src/EmbeddedCoder_src/BCUDisp.c

@@ -5,115 +5,115 @@
 uint16_T appv_V_cellU[cmnc_num_cellUNumMax];
 uint8_T appd_st_preCyc;
 
-uint16_T blcv_Q_reqCpEi[cmnc_num_cellUNumMax];   /*均衡需求容量 读取量(数组); */
-uint16_T blcv_Q_reqCpEo[cmnc_num_cellUNumMax];   /*均衡需求容量 写入量(数组); */
-uint32_T blcv_Q_totalCpEi[cmnc_num_cellUNumMax]; /*累计均衡容量 读取量(数组); */
-uint32_T blcv_Q_totalCpEo[cmnc_num_cellUNumMax]; /*累计均衡容量 写入量(数组); */
-boolean_T blcv_flg_excute[cmnc_num_cellUNumMax]; /*均衡执行请求标志位 (数组) */
+uint16_T blcv_Q_reqCpEi[cmnc_num_cellUNumMax];                      /*均衡需求容量 读取量(数组); */
+uint16_T blcv_Q_reqCpEo[cmnc_num_cellUNumMax];                      /*均衡需求容量 写入量(数组); */
+uint32_T blcv_Q_totalCpEi[cmnc_num_cellUNumMax];                    /*累计均衡容量 读取量(数组); */
+uint32_T blcv_Q_totalCpEo[cmnc_num_cellUNumMax];                    /*累计均衡容量 写入量(数组); */
+boolean_T blcv_flg_excute[cmnc_num_cellUNumMax];                    /*均衡执行请求标志位 (数组) */
 
 boolean_T ihd_flg_HVILFlt;
 boolean_T ihd_flg_DTCClear;
-uint8_T ihd_st_authFaild;
-int16_T ihd_I_curr;                         /*电池包电流; */
-uint8_T ihd_st_chrgConnect;                 /*充电器连接状态; */
-uint16_T ihd_P_gas;                         /*气体浓度 */
-uint16_T ihd_T_ACPlugT;                     /*慢充插头温度 +40 */
-uint16_T ihd_T_DCPlugT;                     /*快充插头温度+40 */
-uint16_T ihd_T_bdtemp;                      /*板子温度 */
-uint16_T ihd_T_heatPanT1;                   /*加热板温度1+40 */
-uint16_T ihd_T_heatPanT2;                   /*加热板温度2 +40 */
-uint16_T ihd_T_mosT;                        /*Mos温度+40 */
-boolean_T ihd_flg_EESaveFlt;                /*EE存储故障 */
-boolean_T ihd_flg_battULowFlt;              /*保护板上传的总压欠压故障; */
-boolean_T ihd_flg_battUOverFlt;             /*保护板上传的总压过压故障; */
-boolean_T ihd_flg_cellULowFlt;              /*保护板上传的单体欠压故障; */
-boolean_T ihd_flg_cellUOverFlt;             /*保护板上传的单体过压故障; */
-boolean_T ihd_flg_chrgCurrOverFlt;          /*保护板上传的充电过流故障; */
-boolean_T ihd_flg_chrgModTLowFlt;           /*保护板上传的充电模组温度过低故障; */
-boolean_T ihd_flg_chrgModTOverFlt;          /*保护板上传的充电模组温度过高故障; */
-boolean_T ihd_flg_chrgMosClosFlt;           /*充电Mos失效 */
-boolean_T ihd_flg_chrgMosTOverFlt;          /*保护板上传的充电Mos温度过高故障; */
-boolean_T ihd_flg_currOpenFlt;              /*保护板上传的电流开路故障 */
-boolean_T ihd_flg_disChrgCurrOverFlt;       /*保护板上传的放电过流故障; */
-boolean_T ihd_flg_disChrgModTLowFlt;        /*保护板上传的放电模组温度过低故障; */
-boolean_T ihd_flg_disChrgModTOverFlt;       /*保护板上传的放电模组温度过高故障; */
-boolean_T ihd_flg_disChrgMosClosFlt;        /*放电Mos失效 */
-boolean_T ihd_flg_disChrgMosTOverFlt;       /*保护板上传的放电Mos温度过高故障; */
-boolean_T ihd_flg_urtRecFlt;                /*内网通讯故障 */
-uint16_T ihd_pct_soc;                       /*保护板SOC */
-uint16_T ihd_pct_soh;                       /*保护板SOH */
-uint8_T ihd_st_workStat;                    /*电池工作状态 */
-uint16_T ihd_tm_parkTime;                   /*驻车时间; */
-uint16_T ihv_T_modT[cmnc_num_modTNumMax];   /*模组温度(数组)+40 */
-uint16_T ihv_V_cellU[cmnc_num_cellUNumMax]; /*电池单体电压(数组); */
-boolean_T ihd_st_chrgMosControl;            /* Mos控制指令 ;0-断开,1-导通*/
-boolean_T ihd_st_disChrgMosControl;
-boolean_T ihd_st_relayControl;
-uint8_T ihd_st_heatForceControl;
-uint8_T ihd_st_EOLState;
+uint8_T ihd_st_authFaild;                         
+int16_T ihd_I_curr;                               /*电池包电流; */
+uint8_T ihd_st_chrgConnect;                       /*充电器连接状态; */
+uint16_T ihd_P_gas;                               /*气体浓度 */
+uint16_T ihd_T_ACPlugT;                           /*慢充插头温度 +40 */
+uint16_T ihd_T_DCPlugT;                           /*快充插头温度+40 */
+uint16_T ihd_T_bdtemp;                            /*板子温度 */
+uint16_T ihd_T_heatPanT1;                         /*加热板温度1+40 */
+uint16_T ihd_T_heatPanT2;                         /*加热板温度2 +40 */
+uint16_T ihd_T_mosT;                              /*Mos温度+40 */
+boolean_T ihd_flg_EESaveFlt;                      /*EE存储故障 */
+boolean_T ihd_flg_battULowFlt;                    /*保护板上传的总压欠压故障; */
+boolean_T ihd_flg_battUOverFlt;                   /*保护板上传的总压过压故障; */
+boolean_T ihd_flg_cellULowFlt;                    /*保护板上传的单体欠压故障; */
+boolean_T ihd_flg_cellUOverFlt;                   /*保护板上传的单体过压故障; */
+boolean_T ihd_flg_chrgCurrOverFlt;                /*保护板上传的充电过流故障; */
+boolean_T ihd_flg_chrgModTLowFlt;                 /*保护板上传的充电模组温度过低故障; */
+boolean_T ihd_flg_chrgModTOverFlt;                /*保护板上传的充电模组温度过高故障; */
+boolean_T ihd_flg_chrgMosClosFlt;                 /*充电Mos失效 */
+boolean_T ihd_flg_chrgMosTOverFlt;                /*保护板上传的充电Mos温度过高故障; */
+boolean_T ihd_flg_currOpenFlt;                    /*保护板上传的电流开路故障 */
+boolean_T ihd_flg_disChrgCurrOverFlt;             /*保护板上传的放电过流故障; */
+boolean_T ihd_flg_disChrgModTLowFlt;              /*保护板上传的放电模组温度过低故障; */
+boolean_T ihd_flg_disChrgModTOverFlt;             /*保护板上传的放电模组温度过高故障; */
+boolean_T ihd_flg_disChrgMosClosFlt;              /*放电Mos失效 */
+boolean_T ihd_flg_disChrgMosTOverFlt;             /*保护板上传的放电Mos温度过高故障; */
+boolean_T ihd_flg_urtRecFlt;                      /*内网通讯故障 */
+uint16_T ihd_pct_soc;                             /*保护板SOC */
+uint16_T ihd_pct_soh;                             /*保护板SOH */
+uint8_T ihd_st_workStat;                          /*电池工作状态 */
+uint16_T ihd_tm_parkTime;                         /*驻车时间; */
+uint16_T ihv_T_modT[cmnc_num_modTNumMax];                           /*模组温度(数组)+40 */
+uint16_T ihv_V_cellU[cmnc_num_cellUNumMax];                         /*电池单体电压(数组); */
+boolean_T ihd_st_chrgMosControl;                  /* Mos控制指令 ;0-断开,1-导通*/
+boolean_T ihd_st_disChrgMosControl; 
+boolean_T ihd_st_relayControl;    
+uint8_T ihd_st_heatForceControl;             
+uint8_T ihd_st_EOLState;                   
 boolean_T ihd_flg_urtRecFlg;
 
-int16_T sfmd_I_curr;       /*处理后整包电流 */
-uint16_T sfmd_T_modTMax;   /*处理后模组温度最小 */
-uint16_T sfmd_T_modTMin;   /*处理后模组温度最大 */
-uint16_T sfmd_idx_modTMax; /*处理后模组温度最小 */
-uint16_T sfmd_idx_modTMin; /*处理后模组温度最大 */
-uint16_T sfmd_V_cellUAvrg; /*处理后单体电压平均 */
-uint16_T sfmd_V_cellUMax;  /*处理后单体电压最大 */
-uint16_T sfmd_V_cellUMin;  /*处理后单体电压最小 */
+int16_T sfmd_I_curr;                              /*处理后整包电流 */
+uint16_T sfmd_T_modTMax;                          /*处理后模组温度最小 */
+uint16_T sfmd_T_modTMin;                          /*处理后模组温度最大 */
+uint16_T sfmd_idx_modTMax;                          /*处理后模组温度最小 */
+uint16_T sfmd_idx_modTMin;                          /*处理后模组温度最大 */
+uint16_T sfmd_V_cellUAvrg;                        /*处理后单体电压平均 */
+uint16_T sfmd_V_cellUMax;                         /*处理后单体电压最大 */
+uint16_T sfmd_V_cellUMin;                         /*处理后单体电压最小 */
 uint16_T sfmd_idx_cellUMin;
 uint16_T sfmd_idx_cellUMax;
-boolean_T sfmd_flg_cellUDisable;             /*单体电压有效标志位 ; 0为有效;1为无效 */
-boolean_T sfmd_flg_currDisable;              /*电流有效标志位 ; 0为有效;1为无效 */
-boolean_T sfmd_flg_modTDisable;              /*模组温度有效标志位 ; 0为有效;1为无效 */
-uint16_T sfmd_num_fltNum;                    /*故障数量 */
-uint8_T sfmd_st_fltAct;                      /*故障禁止指令 */
-uint8_T sfmd_st_fltLevel;                    /*故障等级 */
-uint16_T sfmv_T_modT[cmnc_num_modTNumMax];   /*处理后模组温度 */
-uint16_T sfmv_V_cellU[cmnc_num_cellUNumMax]; /*处理后单体电压 */
-uint16_T sfmv_idx_fltCode[20];               /*诊断故障码(数组) */
-uint16_T sfmd_V_battU;
-boolean_T sfmd_flg_mainCirClosFltEi; /*主回路常闭故障读取量 */
-boolean_T sfmd_flg_mainCirClosFltEo; /*主回路常闭故障写入量 */
-boolean_T sfmd_flg_heatCirClosFltEi; /*加热回路常闭故障读取量 */
-boolean_T sfmd_flg_heatCirClosFltEo; /*加热回路常闭故障写入量 */
-boolean_T sfmd_flg_heatCirOpenFltEi; /*加热回路常开故障读取量 */
-boolean_T sfmd_flg_heatCirOpenFltEo; /*加热回路常开故障写入量 */
+boolean_T sfmd_flg_cellUDisable;                  /*单体电压有效标志位 ; 0为有效;1为无效 */
+boolean_T sfmd_flg_currDisable;                   /*电流有效标志位 ; 0为有效;1为无效 */
+boolean_T sfmd_flg_modTDisable;                   /*模组温度有效标志位 ; 0为有效;1为无效 */
+uint16_T sfmd_num_fltNum;                         /*故障数量 */
+uint8_T sfmd_st_fltAct;                           /*故障禁止指令 */
+uint8_T sfmd_st_fltLevel;                         /*故障等级 */
+uint16_T sfmv_T_modT[cmnc_num_modTNumMax];                          /*处理后模组温度 */
+uint16_T sfmv_V_cellU[cmnc_num_cellUNumMax];                        /*处理后单体电压 */
+uint16_T sfmv_idx_fltCode[20];                    /*诊断故障码(数组) */
+uint16_T sfmd_V_battU;  
+boolean_T sfmd_flg_mainCirClosFltEi;              /*主回路常闭故障读取量 */  
+boolean_T sfmd_flg_mainCirClosFltEo;              /*主回路常闭故障写入量 */  
+boolean_T sfmd_flg_heatCirClosFltEi;              /*加热回路常闭故障读取量 */  
+boolean_T sfmd_flg_heatCirClosFltEo;              /*加热回路常闭故障写入量 */  
+boolean_T sfmd_flg_heatCirOpenFltEi;              /*加热回路常开故障读取量 */  
+boolean_T sfmd_flg_heatCirOpenFltEo;              /*加热回路常开故障写入量 */  
 boolean_T sfmd_flg_heatRunFltEi;
 boolean_T sfmd_flg_heatRunFltEo;
 boolean_T sfmd_flg_iscFltEi;
 boolean_T sfmd_flg_iscFltEo;
 
-uint16_T socd_pct_ahSoc;        /*安时SOC; */
-uint16_T socd_pct_estSoc;       /*估算SOC;*/
-uint16_T socd_flg_EEsave;       /*实时存储标志位;*/
-uint16_T socd_pct_ekfSoc;       /*EKFSOC;*/
-uint16_T socd_pct_battSoc;      /*电池真实SOC; */
-uint16_T socd_pct_battSocEi;    /*电池真实SOC 读取量; */
-uint16_T socd_pct_battSocEo;    /*电池真实SOC 写入量; */
-uint16_T socd_pct_bcuSoc;       /*电池显示SOC; */
-uint16_T socd_pct_bcuSocEi;     /*电池显示SOC读取量; */
-uint16_T socd_pct_bcuSocEo;     /*电池显示SOC写入量; */
-uint16_T socd_pct_bcuSoc_Delay; /*电池显示SOC延时; */
+uint16_T socd_pct_ahSoc;                          /*安时SOC; */
+uint16_T socd_pct_estSoc;                         /*估算SOC;*/
+uint16_T socd_flg_EEsave;                         /*实时存储标志位;*/
+uint16_T socd_pct_ekfSoc;                         /*EKFSOC;*/
+uint16_T socd_pct_battSoc;                        /*电池真实SOC; */
+uint16_T socd_pct_battSocEi;                      /*电池真实SOC 读取量; */
+uint16_T socd_pct_battSocEo;                      /*电池真实SOC 写入量; */
+uint16_T socd_pct_bcuSoc;                         /*电池显示SOC; */
+uint16_T socd_pct_bcuSocEi;                       /*电池显示SOC读取量; */
+uint16_T socd_pct_bcuSocEo;                       /*电池显示SOC写入量; */
+uint16_T socd_pct_bcuSoc_Delay;                   /*电池显示SOC延时; */
 uint16_T socv_pct_cellSoc[cmnc_num_cellUNumMax];
 uint16_T socd_pct_cellBattSoc;
 boolean_T socd_flg_cellSocDisable;
 
-uint16_T sohd_Q_chrgEi;                                /*充入容量读取量; */
-uint16_T sohd_Q_chrgEo;                                /*充入容量写入量; */
-boolean_T sohd_flg_chrgEndEi;                          /*充电结束标志位读取量; */
-boolean_T sohd_flg_chrgEndEo;                          /*充电结束标志位写入量; */
-uint16_T sohd_pct_bcuSoh;                              /*电池SOH; */
-uint16_T sohd_pct_bcuSoh_Delay;                        /*电池SOH延时; */
-uint16_T sohd_tm_chrgStartStatEi;                      /*充电前静置时间读取量; */
-uint16_T sohd_tm_chrgStartStatEo;                      /*充电前静置时间写入量; */
-uint16_T sohv_Q_cellCap[cmnc_num_cellUNumMax];         /*单体容量 */
-uint16_T sohv_Q_cellCapArrEi[cmnc_num_cellUNumMax];    /*单体容量(数组) 读取量 */
-uint16_T sohv_Q_cellCapArrEo[cmnc_num_cellUNumMax];    /*单体容量(数组) 写入量 */
-uint16_T sohv_Q_packCapArrEi[10];                      /*10次整包容量(数组)读取量; */
-uint16_T sohv_Q_packCapArrEo[10];                      /*10次整包容量(数组)写入量; */
-uint16_T sohv_V_chrgStartStatEi[cmnc_num_cellUNumMax]; /*充电开始时刻的单体电压(数组)读取量; */
-uint16_T sohv_V_chrgStartStatEo[cmnc_num_cellUNumMax]; /*充电开始时刻的单体电压(数组)写入量; */
+uint16_T sohd_Q_chrgEi;                           /*充入容量读取量; */
+uint16_T sohd_Q_chrgEo;                           /*充入容量写入量; */
+boolean_T sohd_flg_chrgEndEi;                     /*充电结束标志位读取量; */
+boolean_T sohd_flg_chrgEndEo;                     /*充电结束标志位写入量; */
+uint16_T sohd_pct_bcuSoh;                         /*电池SOH; */
+uint16_T sohd_pct_bcuSoh_Delay;                   /*电池SOH延时; */
+uint16_T sohd_tm_chrgStartStatEi;                 /*充电前静置时间读取量; */
+uint16_T sohd_tm_chrgStartStatEo;                 /*充电前静置时间写入量; */
+uint16_T sohv_Q_cellCap[cmnc_num_cellUNumMax];                      /*单体容量 */
+uint16_T sohv_Q_cellCapArrEi[cmnc_num_cellUNumMax];                 /*单体容量(数组) 读取量 */
+uint16_T sohv_Q_cellCapArrEo[cmnc_num_cellUNumMax];                 /*单体容量(数组) 写入量 */
+uint16_T sohv_Q_packCapArrEi[10];                 /*10次整包容量(数组)读取量; */
+uint16_T sohv_Q_packCapArrEo[10];                 /*10次整包容量(数组)写入量; */
+uint16_T sohv_V_chrgStartStatEi[cmnc_num_cellUNumMax];              /*充电开始时刻的单体电压(数组)读取量; */
+uint16_T sohv_V_chrgStartStatEo[cmnc_num_cellUNumMax];              /*充电开始时刻的单体电压(数组)写入量; */
 
 boolean_T iscd_flg_flt;
 uint16_T iscv_Q_remainCpEi[cmnc_num_cellUNumMax];
@@ -121,21 +121,21 @@ uint32_T iscd_tm_totalEi;
 uint16_T iscv_Q_remainCpEo[cmnc_num_cellUNumMax];
 uint32_T iscd_tm_totalEo;
 
-uint8_T tmsd_st_heatAct; /*热管理请求状态; */
+uint8_T tmsd_st_heatAct;                          /*热管理请求状态; */
 
-uint8_T cmd_st_chrgMod;        /* 充电模式  */
-uint8_T cmd_st_chrgSt;         /* 充电状态  */
-int16_T cmd_I_chrgCurrReq;     /* 充电需求电流  */
-uint8_T cmd_idx_chrgEndReason; /* 充电结束原因  */
+uint8_T cmd_st_chrgMod;                           /* 充电模式  */
+uint8_T cmd_st_chrgSt;                            /* 充电状态  */
+int16_T cmd_I_chrgCurrReq;                       /* 充电需求电流  */
+uint8_T cmd_idx_chrgEndReason;                    /* 充电结束原因  */
+        
+uint16_T cand_Nr_cellNr;                          /*循环发送的单体编号; */
+uint16_T cand_Q_cellCap;                          /*循环发送的单体容量; */
+uint16_T cand_V_chrgStartStat;                    /*循环发送的充电前单体电压; */
+uint16_T cand_Q_reqCp;                            /*循环发送的单体需求均衡容量; */
+uint16_T cand_Q_totalCp;                          /*循环发送的单体累计均衡容量; */
 
-uint16_T cand_Nr_cellNr;       /*循环发送的单体编号; */
-uint16_T cand_Q_cellCap;       /*循环发送的单体容量; */
-uint16_T cand_V_chrgStartStat; /*循环发送的充电前单体电压; */
-uint16_T cand_Q_reqCp;         /*循环发送的单体需求均衡容量; */
-uint16_T cand_Q_totalCp;       /*循环发送的单体累计均衡容量; */
-
-int16_T cdmv_V_deltOCV[cmnc_num_cellUNumMax] = {0};
-int16_T cdmv_ohm_deltR[cmnc_num_cellUNumMax] = {0};
+int16_T  cdmv_V_deltOCV[cmnc_num_cellUNumMax] ;
+int16_T  cdmv_ohm_deltR[cmnc_num_cellUNumMax] ;
 boolean_T cdmd_flg_deltOCVDisable;
 
 uint16_T test_efkSocMin;
@@ -144,7 +144,7 @@ real_T test_UpMin;
 real_T test_UpMax;
 uint16_T test_ekfSoc;
 uint16_T test_ekfSoc0;
-int16_T test_curr;
-uint16_T test_U;
-uint16_T test1_U[2];
-uint8_T FirstCellU = 0;
+int16_T test_curr[10] ={255};
+uint16_T test_U1[10]={5000};
+uint16_T test_U2[10]={5000};
+

+ 77 - 54
src/EmbeddedCoder_src/CDM.c

@@ -1,5 +1,6 @@
 #include "CDM.h"
 
+
 static boolean_T FirstRun_CDM;
 
 void CDM_Init(void)
@@ -7,6 +8,7 @@ void CDM_Init(void)
     FirstRun_CDM = true;
 }
 
+
 void CDM(void)
 {
     real_T cmdn_V_cellUDelt[cmnc_num_cellUNumMax];
@@ -14,103 +16,124 @@ void CDM(void)
     static 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 deltaES[cmnc_num_cellUNumMax];
     static real_T deltaRS[cmnc_num_cellUNumMax];
     static real_T 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 int16_T sfmd_I_curr_Delay;
+	static uint8_T Cnt;
+	static uint8_T TestCnt[28];
+	uint8_T TestCntmax;
     //
-    if (ihd_st_workStat_Delay == 2 && ihd_st_workStat != 2)
+    if(ihd_st_workStat_Delay == 2 && ihd_st_workStat != 2)
     {
         FirstRun_CDM = true;
     }
     ihd_st_workStat_Delay = ihd_st_workStat;
-    //
+	//
     if (FirstRun_CDM)
     {
-        for (i = 0; i < cmnc_num_cellUNum; i++)
+        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;
-            deltaE[i] = 0;
-            deltaR[i] = 0;
-            deltaES[i] = 0;
+            deltaE[i] =  0;
+            deltaR[i] =  0;
+			deltaES[i] = 0;
             deltaRS[i] = 0;
-            Cnt = 0;
-            test_curr = 0;
-            test_U = 5000;
+			Cnt = 0;
+			TestCnt[i]= 0;
+			TestCntmax=0;
         }
     }
     //
-    if (ihd_st_workStat != 2 && (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 != 2 &&  (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))
     {
-        for (i = 0; i < cmnc_num_cellUNum; i++)
+        for (i = 0;i < cmnc_num_cellUNum;i++)
         {
-            cmdn_V_cellUDelt[i] = (real_T)(sfmv_V_cellU[i] - sfmd_V_cellUAvrg) * 0.001;
+            cmdn_V_cellUDelt[i] = (real_T)(sfmv_V_cellU[i]  - sfmd_V_cellUAvrg) * 0.001;
         }
-        cdmn_I_curr = (real_T)sfmd_I_curr * 0.1;
+        cdmn_I_curr = (real_T) sfmd_I_curr * 0.1;
         //
         cdmd_flg_deltOCVDisable = false;
-        for (i = 0; i < cmnc_num_cellUNum; i++)
+        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] = (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);
             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];
-            P[0][i] = ((1 - K[0]) * P[0][i] - P[2][i] * K[0] * cdmn_I_curr) / Lambda;
-            P[1][i] = ((1 - K[0]) * P[1][i] - P[3][i] * K[0] * cdmn_I_curr) / Lambda;
-            P[2][i] = (-K[1] * P[0][i] + P[2][i] * (1 - K[1] * cdmn_I_curr)) / Lambda;
-            P[3][i] = (-K[1] * P[1][i] + P[3][i] * (1 - K[1] * cdmn_I_curr)) / Lambda;
-
-            if (arf[i] > 0.04 || arf[i] < -0.04)
+            P[0][i] = ((1 -K[0])* P[0][i] -P[2][i] *  K[0] * cdmn_I_curr) /Lambda;
+            P[1][i] = ((1 -K[0])* P[1][i] -P[3][i] *  K[0] * cdmn_I_curr) /Lambda;
+            P[2][i] = (-K[1] *P[0][i] +P[2][i] * (1 - K[1] * cdmn_I_curr))/Lambda;
+            P[3][i] = (-K[1] *P[1][i] +P[3][i] * (1 - K[1] * cdmn_I_curr))/Lambda;
+			
+			if(arf[i] > 0.04 || arf[i] < -0.04)
             {
-                cdmd_flg_deltOCVDisable = true;
+                cdmd_flg_deltOCVDisable = true;   
             }
-        }
+	    }
         //
-        Cnt = Cnt + 1;
-
-        for (i = 0; i < cmnc_num_cellUNum; i++)
-        {
+		Cnt = Cnt + 1;
+        TestCntmax=0;
+        for (i = 0;i < cmnc_num_cellUNum;i++)
+        {   
             deltaES[i] = deltaES[i] + deltaE[i];
-            deltaRS[i] = deltaRS[i] + deltaR[i];
-            if (deltaR[i] > 0.005 && test_U == 5000)
-            {
-                test_curr = ihd_I_curr;
-                test_U = ihv_V_cellU[i];
-            }
+			deltaRS[i] = deltaRS[i] + deltaR[i];
+			 if(deltaR[i] > 0.005)
+			{
+                 TestCnt[i] = (TestCnt[i]+1) >200 ?200:(TestCnt[i]+1);
+		    }
+			if(TestCntmax < TestCnt[i])
+			{
+              TestCntmax = TestCnt[i];
+			}
         }
-
-        if (Cnt >= 10)
+        if(TestCntmax < 5)
         {
-            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);
-                deltaES[i] = 0;
-                deltaRS[i] = 0;
-            }
-            Cnt = 0;
+		    for(i=0;i<9;i++)
+		  	{
+               test_curr[i]=test_curr[i+1];
+			   test_U1[i]=test_U1[i+1];
+			   test_U2[i]=test_U2[i+1];
+		  	}
+		       test_curr[9]=sfmd_I_curr;
+			   test_U1[9]=sfmd_V_cellUMax;
+			   test_U2[9]=sfmd_V_cellUMin;
         }
+
+
+
+		
+		if (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);
+			     deltaES[i] = 0;
+                 deltaRS[i] = 0;
+
+             }
+		     Cnt = 0;
+		}
     }
     else
     {
         cdmd_flg_deltOCVDisable = true;
     }
-    //printf("u_:%f %f %f\n",arf[0],arf[1],arf[2]);
-    //printf("E_:%d %d %d\n",cdmv_V_deltOCV[0],cdmv_V_deltOCV[1],cdmv_V_deltOCV[2]);
-    //printf("R_:%d %d %d\n",cdmv_ohm_deltR[0],cdmv_ohm_deltR[1],cdmv_ohm_deltR[2]);
-    //printf("\n");
-    cdmd_flg_deltOCVDisable = true; ////////
-    sfmd_I_curr_Delay = sfmd_I_curr;
+	//printf("u_:%f %f %f\n",arf[0],arf[1],arf[2]);
+	//printf("E_:%d %d %d\n",cdmv_V_deltOCV[0],cdmv_V_deltOCV[1],cdmv_V_deltOCV[2]);
+	//printf("R_:%d %d %d\n",cdmv_ohm_deltR[0],cdmv_ohm_deltR[1],cdmv_ohm_deltR[2]);
+	//printf("\n");
+	cdmd_flg_deltOCVDisable = true;  ////////
+	sfmd_I_curr_Delay = sfmd_I_curr;
     FirstRun_CDM = false;
+	
 }

+ 6 - 5
src/EmbeddedCoder_src/SOC.c

@@ -636,7 +636,7 @@ void SOC(void)
         //
         if (fulFlg)
         {
-            socd_pct_bcuSoc = socc_pct_battSocUp;
+            socd_pct_bcuSoc = 1000;
         }
         else
         {
@@ -674,8 +674,8 @@ void SOC(void)
 
 
     //===================================================================
-    //------------------EEsave
-    //==================================================================
+    //------------------EEsave-------------------------------------------
+    //================================================================================================
 
     if ((int16_T)(socd_pct_battSoc - socd_pct_battSoc_save) > 10 || (int16_T)(socd_pct_battSoc - socd_pct_battSoc_save) < -10 || (int16_T)(socd_pct_bcuSoc - socd_pct_bcuSoc_save) > 10 || (int16_T)(socd_pct_bcuSoc - socd_pct_bcuSoc_save) < -10 )
     {
@@ -691,8 +691,9 @@ void SOC(void)
 	
     FirstRun_SOC = false;
 }
-
-//-------------------------------------------------------------------------
+//===================================================================================================================
+//----------------------------function-------------------------------------------------------------------------------
+//===================================================================================================================
 real_T docvmath(real_T soc)
 {
     real_T docv;