瀏覽代碼

【V3.1.0.50】CDM修改

CHENJIE-PC\QiXiang_CHENJIE 3 年之前
父節點
當前提交
a38d0ff297
共有 7 個文件被更改,包括 406 次插入401 次删除
  1. 2 2
      inc/AppConfig.h
  2. 149 149
      inc/EmbeddedCoder_inc/BCUDisp.h
  3. 1 1
      src/AppSignal.c
  4. 2 2
      src/AppTaskTcp.c
  5. 143 139
      src/EmbeddedCoder_src/BCU.c
  6. 108 107
      src/EmbeddedCoder_src/BCUDisp.c
  7. 1 1
      src/EmbeddedCoder_src/CDM.c

+ 2 - 2
inc/AppConfig.h

@@ -2,7 +2,7 @@
  * @Author       : ChenJie
  * @Date         : 2021-10-14 09:27:15
  * @LastEditors  : ChenJie
- * @LastEditTime : 2021-11-23 10:22:34
+ * @LastEditTime : 2021-11-23 11:54:43
  * @Description  : App Config H file 配置文件,可以针对不同参数进行更改
  * @FilePath     : \PLAT\project\ec616_0h00\apps\qx_app\inc\AppConfig.h
  */
@@ -14,7 +14,7 @@
 #define DATA_MODULE_TYPE (1)           //1表示NB模块,2表示4G cat1
 #define EOLSTATE (0)                   //1表示下线检测跳过,使用默认值,0表示使用下线检测
 #define DEFAULT_SN "RLTEST00000000001" //默认上传的SN编码
-#define APPSWVERSION 0x03010031        //数据模块软件版本号
+#define APPSWVERSION 0x03010032        //数据模块软件版本号
 #define RELAYCONFIG 1                  //继电器配置
 #define TCP_ADD "iotp.fast-fun.cn"     //数据上传的地址
 #define TCP_PORT 8712                  //数据上传的端口

+ 149 - 149
inc/EmbeddedCoder_inc/BCUDisp.h

@@ -1,149 +1,149 @@
-
-#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;
-
-
-
+
+#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;

+ 1 - 1
src/AppSignal.c

@@ -3,7 +3,7 @@
  * @Date         : 2021-10-14 09:27:15
  * @Version      : V3.0
  * @LastEditors  : ChenJie
- * @LastEditTime : 2021-11-12 16:11:30
+ * @LastEditTime : 2021-11-23 11:58:51
  * @Description  : Global variable definition c file,此文件存放App使用到的全局变量
  * @FilePath     : \PLAT\project\ec616_0h00\apps\qx_app\src\AppSignal.c
  */

+ 2 - 2
src/AppTaskTcp.c

@@ -584,9 +584,9 @@ static void TcpDataInfoAssembleSend()
             {
                 temp = max(temp, cdmv_ohm_deltR[i]);
             }
-            sprintf((char *)rbuf, "B-%d,%d,%d,%d,%d,%d,%d,%d,%d,,%d,%d,,\
+            sprintf((char *)rbuf, "B-%d,%d,%d,%d,%d,%d,%d,%d,%d,,%d,%d,,%d,%d,,\
                                 %d,%d,%d",
-                    socd_pct_ahSoc, socd_pct_ekfSoc, socd_pct_estSoc, socd_pct_battSoc, socd_pct_bcuSoc, battSOC * 10, socd_pct_cellBattSoc, sohv_Q_packCapArrEo[9], temp, test_curr, test_U,
+                    socd_pct_ahSoc, socd_pct_ekfSoc, socd_pct_estSoc, socd_pct_battSoc, socd_pct_bcuSoc, battSOC * 10, socd_pct_cellBattSoc, sohv_Q_packCapArrEo[9], temp, test_curr, test_U, test1_U[0], test1_U[1],
                     battI - 10000, maxCellVol, minCellVol);
         }
         Debugcounter++;

+ 143 - 139
src/EmbeddedCoder_src/BCU.c

@@ -28,164 +28,168 @@ void BCU(void)
         }
         //printf("RecvCounter:%d\n ",RecvCounter);
     }
-    
+
     PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT);
     while (TRUE)
     {
         switch (gProcess_Bcu_Task)
         {
-            //=========================初始化===============================
-            case PROCESS_STATE_INIT:
+        //=========================初始化===============================
+        case PROCESS_STATE_INIT:
+        {
+            BCU_Init();
+            memcpy(blcv_Q_totalCpEi, BcuDataInfo.blcv_Q_totalCpE, sizeof(blcv_Q_totalCpEi));
+            memcpy(blcv_Q_reqCpEi, BcuDataInfo.blcv_Q_reqCpE, sizeof(blcv_Q_reqCpEi));
+            socd_pct_bcuSocEi = BcuDataInfo.socd_pct_bcuSocE;
+            socd_pct_battSocEi = BcuDataInfo.socd_pct_battSocE;
+            sohd_tm_chrgStartStatEi = BcuDataInfo.sohd_tm_chrgStartStatE;
+            sohd_flg_chrgEndEi = BcuDataInfo.sohd_flg_chrgEndE;
+            memcpy(sohv_V_chrgStartStatEi, BcuDataInfo.sohv_V_chrgStartStatE, sizeof(sohv_V_chrgStartStatEi));
+            sohd_Q_chrgEi = BcuDataInfo.sohd_Q_chrgE;
+            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));
+            iscd_tm_totalEi = BcuDataInfo.iscd_tm_totalEE;
+            sfmd_flg_mainCirClosFltEi = BcuDataInfo.sfmd_flg_mainCirClosFltE;
+            sfmd_flg_heatCirClosFltEi = BcuDataInfo.sfmd_flg_heatCirClosFltE;
+            sfmd_flg_heatCirOpenFltEi = BcuDataInfo.sfmd_flg_heatCirOpenFltE;
+            sfmd_flg_heatRunFltEi = BcuDataInfo.sfmd_flg_heatRunFltE;
+            sfmd_flg_iscFltEi = BcuDataInfo.sfmd_flg_iscFltEE;
+            ihd_st_EOLState = AppNVMData.EOLState;
+
+            PROC_BCU_STATE_SWITCH(PROCESS_STATE_WORK);
+            break;
+        }
+        //============================工作模式==========================
+        case PROCESS_STATE_WORK:
+        {
+            while (TRUE)
             {
-                BCU_Init();
-                memcpy(blcv_Q_totalCpEi, BcuDataInfo.blcv_Q_totalCpE, sizeof(blcv_Q_totalCpEi));
-                memcpy(blcv_Q_reqCpEi, BcuDataInfo.blcv_Q_reqCpE, sizeof(blcv_Q_reqCpEi));
-                socd_pct_bcuSocEi = BcuDataInfo.socd_pct_bcuSocE;
-                socd_pct_battSocEi = BcuDataInfo.socd_pct_battSocE;
-                sohd_tm_chrgStartStatEi = BcuDataInfo.sohd_tm_chrgStartStatE;
-                sohd_flg_chrgEndEi = BcuDataInfo.sohd_flg_chrgEndE;
-                memcpy(sohv_V_chrgStartStatEi, BcuDataInfo.sohv_V_chrgStartStatE, sizeof(sohv_V_chrgStartStatEi));
-                sohd_Q_chrgEi = BcuDataInfo.sohd_Q_chrgE;
-                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));
-                iscd_tm_totalEi = BcuDataInfo.iscd_tm_totalEE;
-                sfmd_flg_mainCirClosFltEi = BcuDataInfo.sfmd_flg_mainCirClosFltE;
-                sfmd_flg_heatCirClosFltEi = BcuDataInfo.sfmd_flg_heatCirClosFltE;
-                sfmd_flg_heatCirOpenFltEi = BcuDataInfo.sfmd_flg_heatCirOpenFltE;
-                sfmd_flg_heatRunFltEi = BcuDataInfo.sfmd_flg_heatRunFltE;
-                sfmd_flg_iscFltEi = BcuDataInfo.sfmd_flg_iscFltEE;
-                ihd_st_EOLState = AppNVMData.EOLState;
-                
-                
-                PROC_BCU_STATE_SWITCH(PROCESS_STATE_WORK);
-                break;
+                if (UartRecvFlag == 1 || RecvCounter >= 15)
+                {
+                    RecvCounter = 0;
+                    break;
+                }
+                else
+                {
+                    RecvCounter++;
+                    osDelay(1000);
+                }
             }
-            //============================工作模式==========================
-            case PROCESS_STATE_WORK:
+
+            while (TRUE)
             {
-                 while (TRUE)
-                 {
-                      if (UartRecvFlag == 1 || RecvCounter >= 15)
-                      {
-                           RecvCounter = 0;
-                           break;
-                       }
-                      else
-                     {
-                          RecvCounter++;
-                          osDelay(1000);
-                     }
-                 }
-			
-                while (TRUE)
-                {   			    
-                    if (TimeCounter % 10 == 0)
+                if (TimeCounter % 10 == 0)
+                {
+                    if (gProcess_app == LISTEN)
                     {
-                        if (gProcess_app == LISTEN)
-                        {
-                            PROC_BCU_STATE_SWITCH(PROCESS_STATE_SLEEP);
-                            break;
-                        }
-                        //
-                        
-                        //数据获取
-                        ihd_I_curr = (int16_T)(-(battI - 10000));
-                        memcpy(ihv_V_cellU, battCellU, sizeof(battCellU));
-                        for (i = 0; i < cmnc_num_modTNum; i++)
-                        {
-                            ihv_T_modT[i] = battCellTemp[i];
-                        }
-                        ihd_T_mosT = MOSTemp;
-                        ihd_T_DCPlugT = fastChargeTemp;
-                        ihd_T_ACPlugT = normalChargeTemp;
-                        ihd_T_heatPanT1 = heatTemp1;
-                        ihd_T_heatPanT2 = heatTemp2;
-                        ihd_pct_soc = battSOC * 10;
-                        ihd_pct_soh = battSOH * 10;
-                        ihd_flg_HVILFlt = Lockstatus;
-                        ihd_st_workStat = BattWorkStateDelay;
-                        ihd_flg_urtRecFlt = UartErrorFlag;
-                        ihd_flg_urtRecFlg = UartRecvFlag;
-                        ihd_st_chrgConnect = chargerConnectState;
-                        ihd_flg_cellULowFlt = ((battWarningState)&0x01) == 1;
-                        ihd_flg_battULowFlt = ((battWarningState >> 1) & 0x01) == 1;
-                        ihd_flg_cellUOverFlt = ((battWarningState >> 2) & 0x01) == 1;
-                        ihd_flg_battUOverFlt = ((battWarningState >> 3) & 0x01) == 1;
-                        ihd_flg_disChrgCurrOverFlt = ((battWarningState >> 4) & 0x01) == 1;
-                        ihd_flg_chrgCurrOverFlt = ((battWarningState >> 5) & 0x01) == 1;
-                        ihd_flg_disChrgModTOverFlt = ((battWarningState >> 6) & 0x01) == 1;
-                        ihd_flg_chrgModTOverFlt = ((battWarningState >> 7) & 0x01) == 1;
-                        ihd_flg_chrgMosTOverFlt = ((battWarningState >> 11) & 0x01) == 1;
-                        ihd_flg_disChrgMosClosFlt = ((battWarningState >> 18) & 0x01) == 1;
-                        ihd_flg_chrgMosClosFlt = ((battWarningState >> 19) & 0x01) == 1;
-                        ihd_flg_disChrgModTLowFlt = ((battWarningState >> 22) & 0x01) == 1;
-                        ihd_flg_chrgModTLowFlt = ((battWarningState >> 23) & 0x01) == 1;
-                        ihd_flg_currOpenFlt = 0;
-                        ihd_st_heatForceControl = HeatForceControl;
-                        ihd_st_chrgMosControl = ChargeForbiddenControl == 0;
-                        ihd_st_disChrgMosControl = DisChargeForbiddenControl == 0;
-                        ihd_st_relayControl = RelayForbiddenControl == 0;
-                        //ihd_flg_DTCClear = 1;   //////clear
-                        //调用算法
-                        SFM();
-                        TMS();
-                        CM();
-                        SPM();
-                        ISC();
-                        //实时存储
-                        if (socd_flg_EEsave == 1 || ihd_flg_DTCClear)
-                        {
-                            BCUEEDataSave();
-                            ihd_flg_DTCClear = false;
-                        }
+                        PROC_BCU_STATE_SWITCH(PROCESS_STATE_SLEEP);
+                        break;
+                    }
+                    //
 
-						//
-                        if (BattWorkStateDelay == 0 && battI == 10000)
-                        {
-                            memcpy(appv_V_cellU, battCellU, sizeof(appv_V_cellU));
-                        }
-                        
-                        if (ihd_tm_parkTime >= cmnc_tm_parkTime && battI == 10000)
-                        {
-                            appd_st_preCyc = 1 ;
-                        }
-                        else
-                        {
-                            appd_st_preCyc = 0;
-                        }
-     
+                    //数据获取
+                    ihd_I_curr = (int16_T)(-(battI - 10000));
+                    memcpy(ihv_V_cellU, battCellU, sizeof(battCellU));
+                    if (FirstCellU == 0)
+                    {
+                        test1_U[0] = ihv_V_cellU[0];
+                        test1_U[1] = ihv_V_cellU[1];
+                        FirstCellU = 1;
                     }
-                    osDelay(100);
-                }
-                break;
-            }
-            //======================休眠模式===============================
-            case PROCESS_STATE_SLEEP:
-            {
-                BCUEEDataSave();
-                ihd_tm_parkTime = 0;
-                while (TRUE)
-                {
-                    if (TimeCounter % 10 == 0)
+                    for (i = 0; i < cmnc_num_modTNum; i++)
                     {
-                        ihd_tm_parkTime++;
-                       
+                        ihv_T_modT[i] = battCellTemp[i];
                     }
-                    if (gProcess_app == WORK)
+                    ihd_T_mosT = MOSTemp;
+                    ihd_T_DCPlugT = fastChargeTemp;
+                    ihd_T_ACPlugT = normalChargeTemp;
+                    ihd_T_heatPanT1 = heatTemp1;
+                    ihd_T_heatPanT2 = heatTemp2;
+                    ihd_pct_soc = battSOC * 10;
+                    ihd_pct_soh = battSOH * 10;
+                    ihd_flg_HVILFlt = Lockstatus;
+                    ihd_st_workStat = BattWorkStateDelay;
+                    ihd_flg_urtRecFlt = UartErrorFlag;
+                    ihd_flg_urtRecFlg = UartRecvFlag;
+                    ihd_st_chrgConnect = chargerConnectState;
+                    ihd_flg_cellULowFlt = ((battWarningState)&0x01) == 1;
+                    ihd_flg_battULowFlt = ((battWarningState >> 1) & 0x01) == 1;
+                    ihd_flg_cellUOverFlt = ((battWarningState >> 2) & 0x01) == 1;
+                    ihd_flg_battUOverFlt = ((battWarningState >> 3) & 0x01) == 1;
+                    ihd_flg_disChrgCurrOverFlt = ((battWarningState >> 4) & 0x01) == 1;
+                    ihd_flg_chrgCurrOverFlt = ((battWarningState >> 5) & 0x01) == 1;
+                    ihd_flg_disChrgModTOverFlt = ((battWarningState >> 6) & 0x01) == 1;
+                    ihd_flg_chrgModTOverFlt = ((battWarningState >> 7) & 0x01) == 1;
+                    ihd_flg_chrgMosTOverFlt = ((battWarningState >> 11) & 0x01) == 1;
+                    ihd_flg_disChrgMosClosFlt = ((battWarningState >> 18) & 0x01) == 1;
+                    ihd_flg_chrgMosClosFlt = ((battWarningState >> 19) & 0x01) == 1;
+                    ihd_flg_disChrgModTLowFlt = ((battWarningState >> 22) & 0x01) == 1;
+                    ihd_flg_chrgModTLowFlt = ((battWarningState >> 23) & 0x01) == 1;
+                    ihd_flg_currOpenFlt = 0;
+                    ihd_st_heatForceControl = HeatForceControl;
+                    ihd_st_chrgMosControl = ChargeForbiddenControl == 0;
+                    ihd_st_disChrgMosControl = DisChargeForbiddenControl == 0;
+                    ihd_st_relayControl = RelayForbiddenControl == 0;
+                    //ihd_flg_DTCClear = 1;   //////clear
+                    //调用算法
+                    SFM();
+                    TMS();
+                    CM();
+                    SPM();
+                    ISC();
+                    //实时存储
+                    if (socd_flg_EEsave == 1 || ihd_flg_DTCClear)
                     {
-                        PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT);
-                        break;
+                        BCUEEDataSave();
+                        ihd_flg_DTCClear = false;
+                    }
+
+                    //
+                    if (BattWorkStateDelay == 0 && battI == 10000)
+                    {
+                        memcpy(appv_V_cellU, battCellU, sizeof(appv_V_cellU));
+                    }
+
+                    if (ihd_tm_parkTime >= cmnc_tm_parkTime && battI == 10000)
+                    {
+                        appd_st_preCyc = 1;
+                    }
+                    else
+                    {
+                        appd_st_preCyc = 0;
                     }
-                    osDelay(100);
                 }
-                break;
+                osDelay(100);
             }
-            default:
+            break;
+        }
+        //======================休眠模式===============================
+        case PROCESS_STATE_SLEEP:
+        {
+            BCUEEDataSave();
+            ihd_tm_parkTime = 0;
+            FirstCellU = 0;
+            while (TRUE)
             {
-                PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT);
-                break;
+                if (TimeCounter % 10 == 0)
+                {
+                    ihd_tm_parkTime++;
+                }
+                if (gProcess_app == WORK)
+                {
+                    PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT);
+                    break;
+                }
+                osDelay(100);
             }
+            break;
+        }
+        default:
+        {
+            PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT);
+            break;
+        }
         }
     }
 }

+ 108 - 107
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;                    /* 充电结束原因  */
-        
-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;                          /*循环发送的单体累计均衡容量; */
+uint8_T cmd_st_chrgMod;        /* 充电模式  */
+uint8_T cmd_st_chrgSt;         /* 充电状态  */
+int16_T cmd_I_chrgCurrReq;     /* 充电需求电流  */
+uint8_T cmd_idx_chrgEndReason; /* 充电结束原因  */
 
-int16_T  cdmv_V_deltOCV[cmnc_num_cellUNumMax] ;
-int16_T  cdmv_ohm_deltR[cmnc_num_cellUNumMax] ;
+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};
 boolean_T cdmd_flg_deltOCVDisable;
 
 uint16_T test_efkSocMin;
@@ -146,4 +146,5 @@ 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;

+ 1 - 1
src/EmbeddedCoder_src/CDM.c

@@ -83,7 +83,7 @@ void CDM(void)
         {
             deltaES[i] = deltaES[i] + deltaE[i];
             deltaRS[i] = deltaRS[i] + deltaR[i];
-            if (deltaR[i] > 5000 && test_U == 5000)
+            if (deltaR[i] > 0.005 && test_U == 5000)
             {
                 test_curr = ihd_I_curr;
                 test_U = ihv_V_cellU[i];