Просмотр исходного кода

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

# Conflicts:
#	inc/AppConfig.h
#	src/EmbeddedCoder_src/BCUCal.c
CHENJIE-PC\QiXiang_CHENJIE 3 лет назад
Родитель
Сommit
1f450f3e9c

+ 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 \

+ 26 - 25
inc/AppConfig.h

@@ -2,26 +2,26 @@
  * @Author       : ChenJie
  * @Date         : 2021-10-14 09:27:15
  * @LastEditors  : ChenJie
- * @LastEditTime : 2021-12-06 14:51:23
+ * @LastEditTime : 2021-12-01 17:43:01
  * @Description  : App Config H file 配置文件,可以针对不同参数进行更改
  * @FilePath     : \PLAT\project\ec616_0h00\apps\qx_app\inc\AppConfig.h
  */
 
 #ifndef APPCONFIG_H
 #define APPCONFIG_H
-#define BMS_MANUFACTURE (2)            // BMS制造商表示1-超力源,2-美顺
-#define BMS_INFO (3)                   // 1-1表示超力源4830,1-2表示超力源6060,2-1表示美顺4830,2-2表示美顺6060 2-3表示美顺7250
-#define DATA_MODULE_TYPE (1)           // 1表示NB模块,2表示4G cat1
-#define EOLSTATE (0)                   // 1表示下线检测跳过,使用默认值,0表示使用下线检测
+#define BMS_MANUFACTURE (2)            //BMS制造商表示1-超力源,2-美顺
+#define BMS_INFO (3)                   //1-1表示超力源4830,1-2表示超力源6060,2-1表示美顺4830,2-2表示美顺6060 2-3表示美顺7250
+#define DATA_MODULE_TYPE (1)           //1表示NB模块,2表示4G cat1
+#define EOLSTATE (0)                   //1表示下线检测跳过,使用默认值,0表示使用下线检测
 #define DEFAULT_SN "RLTEST00000000001" //默认上传的SN编码
-#define APPSWVERSION 0x0301003E        //数据模块软件版本号
+#define APPSWVERSION 0x0301FF3C        //数据模块软件版本号
 #define RELAYCONFIG 1                  //继电器配置
 #define TCP_ADD "iotp.fast-fun.cn"     //数据上传的地址
 #define TCP_PORT 8712                  //数据上传的端口
 
-#define NB_OTHER_TEMP_NUM (4)   // NB采集的温度个数
+#define NB_OTHER_TEMP_NUM (4)   //NB采集的温度个数
 #define HWVERSION 0x0102        //硬件主版本,现为V1.2板
-#define BLSWVERSION 0x01020000  // BootLoader版本号V1.2.0.0
+#define BLSWVERSION 0x01020000  //BootLoader版本号V1.2.0.0
 #define DRVSWVERSION 0x01050000 //驱动层版本号V1.4.0.0  驱动层1.5.0.0,增加了三轴
 
 #define APP_CONFIG_FILE_NAME "qxappconfig.nvm"
@@ -49,27 +49,27 @@
 #define TCP_CONCMD_SYM 0x82
 /*----------------end----------------*/
 
-// encrypt methord
+//encrypt methord
 #define TCP_ENCPT_ENABLE 0x00
 #define TCP_ENCPT_DISABLE 0x01
 
-// message type mark 0x02上报数据单元定义区
+//message type mark 0x02上报数据单元定义区
 #define BATTMSG 0x80
 #define GPSMSG 0x82
 #define STATESMSG 0x85
 #define VERSIONMSG 0x86
 #define DEBUGMSG 0x8C
 
-// BMS升级区定义
-#define FLASH_BMS_FOTA_START_ADDR 0x2E6000 // BMS升级文件存储起始地址
-#define FLASH_BMS_FOTA_LEN 0x32000         // BMS升级文件存储长度 = =200k
-#define FLASH_BMS_FOTA_END_ADDR 0x318000   // BMS升级文件存储结束地址
-// declear struct vars   结构体变量定义
+//BMS升级区定义
+#define FLASH_BMS_FOTA_START_ADDR 0x2E6000 //BMS升级文件存储起始地址
+#define FLASH_BMS_FOTA_LEN 0x32000         //BMS升级文件存储长度 = =200k
+#define FLASH_BMS_FOTA_END_ADDR 0x318000   //BMS升级文件存储结束地址
+//declear struct vars   结构体变量定义
 typedef struct _AppConfigDataType //该结构体只允许下线检测写入
 {
     BOOL appDataModify;        //数据更改标志位
     UINT8 battSN[BATT_SN_LEN]; //电池SN号码
-    BOOL isBattLocked;         // 0:not locked;	1:locked  //暂时取消没有使用
+    BOOL isBattLocked;         //0:not locked;	1:locked  //暂时取消没有使用
     UINT8 reserved1;           //
     UINT8 reserved2;           //电池温度个数
     UINT8 reserved3;           //电池电压串数
@@ -77,13 +77,13 @@ typedef struct _AppConfigDataType //该结构体只允许下线检测写入
     UINT8 reserved5;
     UINT32 reserved6;
     UINT32 reserved7;
-    UINT32 reserved8; // APP软件版本
+    UINT32 reserved8; //APP软件版本
     UINT8 EOLState;
 } AppConfigDataType;
 
 typedef struct _AppConfigDataHeader
 {
-    UINT16 fileBodySize; // file body size, not include size of header;
+    UINT16 fileBodySize; //file body size, not include size of header;
     UINT8 checkSum;
 } AppConfigDataHeader;
 
@@ -121,25 +121,26 @@ typedef struct _AppAlgorithmType
     BOOL sohd_flg_chrgEndE;           //充电结束标志位读取量;
     UINT16 sohv_V_chrgStartStatE[28]; //充电开始时刻的单体电压(数组)读取量;
     UINT16 sohd_Q_chrgE;              //充入容量读取量;
-    UINT16 sohv_Q_packCapArrE[10];    // 10次整包容量(数组)读取量;
+    UINT16 sohv_Q_packCapArrE[10];    //10次整包容量(数组)读取量;
     UINT16 sohv_Q_cellCapArrE[28];    //
-    UINT16 iscv_Q_remainCpEE[28];
-    UINT32 iscd_tm_totalEE;
-    BOOL sfmd_flg_iscFltEE;
+    UINT16 iscv_Q_remainCpE[28];
+    UINT32 iscd_tm_totalE;
+    BOOL sfmd_flg_iscFltE;
     BOOL sfmd_flg_mainCirClosFltE;
     BOOL sfmd_flg_heatCirClosFltE;
     BOOL sfmd_flg_heatCirOpenFltE;
     BOOL sfmd_flg_heatRunFltE;
-    UINT16 ihd_tm_parkTimeEE;
+	UINT16 ihd_tm_parkTimeE;  
+	UINT16 sorv_ohm_cellRE[28];
 } AppAlgorithmData;
 typedef struct _AppDataHeader
 {
-    UINT16 fileBodySize; // file body size, not include size of header;
+    UINT16 fileBodySize; //file body size, not include size of header;
     UINT8 checkSum;
 } AppDataHeader;
 typedef struct _BCUDataHeader
 {
-    UINT16 fileBodySize; // file body size, not include size of header;
+    UINT16 fileBodySize; //file body size, not include size of header;
     UINT8 checkSum;
 } BcuDataHeader;
 typedef struct AppSocketConnectionContext_Tag

+ 4 - 5
inc/EmbeddedCoder_inc/BCUDisp.h

@@ -120,7 +120,9 @@ extern uint16_T soed_E_nowEng;
 extern uint16_T soed_pct_nowStat;
 extern uint16_T soed_E_fullEng;
 
-
+extern uint16_T sorv_ohm_cellREi[cmnc_num_cellUNumMax];
+extern uint16_T sorv_ohm_cellREo[cmnc_num_cellUNumMax];
+extern uint16_T sorv_ohm_cellR[cmnc_num_cellUNumMax];
 
 extern boolean_T iscd_flg_flt;
 extern uint16_T iscv_Q_remainCpEi[cmnc_num_cellUNumMax];
@@ -145,10 +147,7 @@ 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 uint16_T test_cellCap[cmnc_num_cellUNumMax];
 extern uint16_T test_countEn;
 

+ 116 - 116
inc/EmbeddedCoder_inc/SFM.h

@@ -1,116 +1,116 @@
-#include "rtwtypes.h"
-#include "BCUCal.h"
-#include "BCUDisp.h"
-#include <math.h>
-extern boolean_T FirstRun_SFM;
-
-extern void SFM_Init(void);
-extern void SFM(void);
-
-typedef struct
-{
-    uint8_T fltNum81;
-    uint8_T recNum81;
-    uint8_T fltNum82;
-    uint8_T recNum82;
-    uint8_T fltNum83;
-    uint8_T recNum83;
-    uint8_T fltNum84;
-    uint8_T recNum84;
-    uint8_T fltNum85;
-    uint8_T recNum85;
-    uint8_T fltNum86;
-    uint8_T recNum86;
-    uint8_T fltNum87;
-    uint8_T recNum87;
-    uint8_T fltNum88;
-    uint8_T recNum88;
-    uint8_T fltNum89;
-    uint8_T recNum89;
-    uint8_T fltNum90;
-    uint8_T recNum90;
-    uint8_T fltNum97;
-    uint8_T recNum97;
-    uint8_T fltNum98;
-    uint8_T recNum98;
-    uint8_T fltNum99;
-    uint8_T recNum99;
-    uint8_T fltNum100;
-    uint8_T recNum100;
-    uint8_T fltNum101;
-    uint8_T recNum101;
-    uint8_T fltNum102;
-    uint8_T recNum102;
-    uint8_T fltNum103;
-    uint8_T recNum103;
-    uint8_T fltNum104;
-    uint8_T recNum104;
-    uint8_T fltNum105;
-    uint8_T recNum105;
-    uint8_T fltNum106;
-    uint8_T recNum106;
-    uint8_T fltNum107;
-    uint8_T recNum107;
-    uint8_T fltNum108;
-    uint8_T recNum108;
-    uint8_T fltNum109;
-    uint8_T recNum109;
-    uint8_T fltNum110;
-    uint8_T recNum110;
-    uint8_T fltNum111;
-    uint8_T recNum111;
-    uint8_T fltNum112;
-    uint8_T recNum112;
-    uint8_T fltNum113;
-    uint8_T recNum113;
-    uint8_T fltNum114;
-    uint8_T recNum114;
-    uint8_T fltNum115_1;
-    uint8_T recNum115_1;
-    uint8_T fltNum115_2;
-    uint8_T recNum115_2;
-    uint8_T fltNum116_1;
-    uint8_T recNum116_1;
-    uint8_T fltNum116_2;
-    uint8_T recNum116_2;
-    uint8_T fltNum131;
-    uint8_T recNum131;
-    uint8_T fltNum132;
-    uint8_T recNum132;
-} DiagThrstruct;
-
-typedef struct
-{
-    uint16_T N22;
-    uint16_T N24;
-    uint16_T N32;
-    uint16_T N33;
-    uint16_T N34;
-    uint16_T N54;
-    uint16_T N56;
-    uint16_T N57;
-    uint16_T N58;
-    uint16_T N59;
-    uint16_T N62;
-    uint16_T N64;
-    uint16_T N65;
-    uint16_T N66;
-    uint16_T N67;
-    uint16_T N151;
-    uint16_T N152;
-    uint16_T N153;
-    uint16_T N154;
-    uint16_T N155;
-    uint16_T N156;
-    uint16_T N157;
-    uint16_T N158;
-    uint16_T N159;
-    uint16_T N160;
-    uint16_T N161;
-    uint16_T N162;
-    uint16_T N179;
-} DiagTimestruct;
-
-extern boolean_T DiagThrSystem1(boolean_T Enable, boolean_T precondition, uint16_T Input, uint16_T fltThr, uint16_T recThr, uint8_T fltNumThr, uint8_T recNumThr, uint8_T *fltNum, uint8_T *recNum, boolean_T *fitFlg);
-extern boolean_T DiagThrSystem2(boolean_T Enable, boolean_T precondition, uint16_T Input, uint16_T fltThr, uint16_T recThr, uint8_T fltNumThr, uint8_T recNumThr, uint8_T *fltNum, uint8_T *recNum, boolean_T *fitFlg);
-extern boolean_T JudgeTimeSystem(boolean_T Enable, boolean_T Input, uint16_T *N, uint16_T Thr);
+#include "rtwtypes.h"
+#include "BCUCal.h"
+#include "BCUDisp.h"
+#include <math.h>
+extern boolean_T FirstRun_SFM;
+
+extern void SFM_Init(void);
+extern void SFM(void);
+
+typedef struct
+{
+    uint8_T fltNum81;
+    uint8_T recNum81;
+    uint8_T fltNum82;
+    uint8_T recNum82;
+    uint8_T fltNum83;
+    uint8_T recNum83;
+    uint8_T fltNum84;
+    uint8_T recNum84;
+    uint8_T fltNum85;
+    uint8_T recNum85;
+    uint8_T fltNum86;
+    uint8_T recNum86;
+    uint8_T fltNum87;
+    uint8_T recNum87;
+    uint8_T fltNum88;
+    uint8_T recNum88;
+    uint8_T fltNum89;
+    uint8_T recNum89;
+    uint8_T fltNum90;
+    uint8_T recNum90;
+    uint8_T fltNum97;
+    uint8_T recNum97;
+    uint8_T fltNum98;
+    uint8_T recNum98;
+    uint8_T fltNum99;
+    uint8_T recNum99;
+    uint8_T fltNum100;
+    uint8_T recNum100;
+    uint8_T fltNum101;
+    uint8_T recNum101;
+    uint8_T fltNum102;
+    uint8_T recNum102;
+    uint8_T fltNum103;
+    uint8_T recNum103;
+    uint8_T fltNum104;
+    uint8_T recNum104;
+    uint8_T fltNum105;
+    uint8_T recNum105;
+    uint8_T fltNum106;
+    uint8_T recNum106;
+    uint8_T fltNum107;
+    uint8_T recNum107;
+    uint8_T fltNum108;
+    uint8_T recNum108;
+    uint8_T fltNum109;
+    uint8_T recNum109;
+    uint8_T fltNum110;
+    uint8_T recNum110;
+    uint8_T fltNum111;
+    uint8_T recNum111;
+    uint8_T fltNum112;
+    uint8_T recNum112;
+    uint8_T fltNum113;
+    uint8_T recNum113;
+    uint8_T fltNum114;
+    uint8_T recNum114;
+    uint8_T fltNum115_1;
+    uint8_T recNum115_1;
+    uint8_T fltNum115_2;
+    uint8_T recNum115_2;
+    uint8_T fltNum116_1;
+    uint8_T recNum116_1;
+    uint8_T fltNum116_2;
+    uint8_T recNum116_2;
+    uint8_T fltNum131;
+    uint8_T recNum131;
+    uint8_T fltNum132;
+    uint8_T recNum132;
+} DiagThrstruct;
+
+typedef struct
+{
+    uint16_T N22;
+    uint16_T N24;
+    uint16_T N32;
+    uint16_T N33;
+    uint16_T N34;
+    uint16_T N54;
+    uint16_T N56;
+    uint16_T N57;
+    uint16_T N58;
+    uint16_T N59;
+    uint16_T N62;
+    uint16_T N64;
+    uint16_T N65;
+    uint16_T N66;
+    uint16_T N67;
+    uint16_T N151;
+    uint16_T N152;
+    uint16_T N153;
+    uint16_T N154;
+    uint16_T N155;
+    uint16_T N156;
+    uint16_T N157;
+    uint16_T N158;
+    uint16_T N159;
+    uint16_T N160;
+    uint16_T N161;
+    uint16_T N162;
+    uint16_T N179;
+} DiagTimestruct;
+
+extern boolean_T DiagThrSystem1(boolean_T Enable, boolean_T precondition, uint16_T Input, uint16_T fltThr, uint16_T recThr, uint8_T fltNumThr, uint8_T recNumThr, uint8_T *fltNum, uint8_T *recNum, boolean_T *fitFlg);
+extern boolean_T DiagThrSystem2(boolean_T Enable, boolean_T precondition, uint16_T Input, uint16_T fltThr, uint16_T recThr, uint8_T fltNumThr, uint8_T recNumThr, uint8_T *fltNum, uint8_T *recNum, boolean_T *fitFlg);
+extern boolean_T JudgeTimeSystem(boolean_T Enable, boolean_T Input, uint16_T *N, uint16_T Thr);


+ 1 - 0
inc/EmbeddedCoder_inc/SOC.h

@@ -1,5 +1,6 @@
 
 #include <math.h>
+#include <numeric.h>
 #include "BCUCal.h"
 #include "BCUDisp.h"
 extern boolean_T FirstRun_SOC;

+ 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"
 
 
 

+ 12 - 27
src/AppFunc.c

@@ -1408,24 +1408,25 @@ static void setDefaultBcuDataInfo(void)
 {
 	memset(&BcuDataInfo, 0x00, sizeof(BcuDataInfo));
 	BcuDataInfo.appDataModify = false;
-	memset(BcuDataInfo.blcv_Q_totalCpE, 0x00, cmnc_num_cellUNumMax * sizeof(UINT32));
-	memset(BcuDataInfo.blcv_Q_reqCpE, 0x00, cmnc_num_cellUNumMax * sizeof(UINT16));
+	memset(BcuDataInfo.blcv_Q_totalCpE, 0x00, sizeof(BcuDataInfo.blcv_Q_totalCpE));
+	memset(BcuDataInfo.blcv_Q_reqCpE, 0x00, sizeof(BcuDataInfo.blcv_Q_reqCpE));
 	BcuDataInfo.socd_pct_bcuSocE = 1200;
 	BcuDataInfo.socd_pct_battSocE = 1200;
 	BcuDataInfo.sohd_tm_chrgStartStatE = 0;
 	BcuDataInfo.sohd_flg_chrgEndE = 0;
-	memset(BcuDataInfo.sohv_Q_cellCapArrE, 0, cmnc_num_cellUNumMax * sizeof(UINT16));
-	memset(BcuDataInfo.sohv_V_chrgStartStatE, 0, cmnc_num_cellUNumMax * sizeof(UINT16));
+	memset(BcuDataInfo.sohv_V_chrgStartStatE, 0, sizeof(BcuDataInfo.sohv_V_chrgStartStatE));
 	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));
-	BcuDataInfo.iscd_tm_totalEE = 0;
-	BcuDataInfo.sfmd_flg_iscFltEE = 0;
+	memset(BcuDataInfo.sohv_Q_packCapArrE, 0, sizeof(BcuDataInfo.sohv_Q_packCapArrE));
+	memset(BcuDataInfo.sohv_Q_cellCapArrE, 0, sizeof(BcuDataInfo.sohv_Q_cellCapArrE));
+	memset(BcuDataInfo.iscv_Q_remainCpE, 0, sizeof(BcuDataInfo.iscv_Q_remainCpE));
+	memset(BcuDataInfo.sorv_ohm_cellRE, 0, sizeof(BcuDataInfo.sorv_ohm_cellRE));
+	BcuDataInfo.iscd_tm_totalE = 0;
+	BcuDataInfo.sfmd_flg_iscFltE = 0;
 	BcuDataInfo.sfmd_flg_mainCirClosFltE = 0;
 	BcuDataInfo.sfmd_flg_heatCirClosFltE = 0;
 	BcuDataInfo.sfmd_flg_heatCirOpenFltE = 0;
 	BcuDataInfo.sfmd_flg_heatRunFltE = 0;
-	BcuDataInfo.ihd_tm_parkTimeEE = 0;
+	BcuDataInfo.ihd_tm_parkTimeE = 0;
 	return;
 }
 /**
@@ -2115,14 +2116,7 @@ void CANEncodeFunction(UINT32 ID, UINT8 *msgData)
 		*(UINT8 *)(msgData + 7) = reservedSignal8 & 0xFF;
 		break;
 	case 0x7CF:
-		reservedSignal1 = socd_pct_vcuSoc & 0xFF;
-		reservedSignal2 = (socd_pct_vcuSoc >> 8) & 0xFF;
-		reservedSignal3 = test_efkSocMin & 0xFF;
-		reservedSignal4 = (test_efkSocMin >> 8) & 0xFF;
-		reservedSignal5 = test_efkSocMax & 0xFF;
-		reservedSignal6 = (test_efkSocMax >> 8) & 0xFF;
-		reservedSignal7 = 0 & 0xFF;
-		reservedSignal8 = (0 >> 8) & 0xFF;
+
 		*(UINT8 *)(msgData + 0) = reservedSignal1 & 0xFF;
 		*(UINT8 *)(msgData + 1) = reservedSignal2 & 0xFF;
 		*(UINT8 *)(msgData + 2) = reservedSignal3 & 0xFF;
@@ -2133,16 +2127,7 @@ void CANEncodeFunction(UINT32 ID, UINT8 *msgData)
 		*(UINT8 *)(msgData + 7) = reservedSignal8 & 0xFF;
 		break;
 	case 0x7D0:
-		UINT32 temp1 = (UINT32)(test_UpMin * 100000);
-		UINT32 temp2 = (UINT32)(test_UpMax * 100000);
-		reservedSignal1 = temp1 & 0xFF;
-		reservedSignal2 = (temp1 >> 8) & 0xFF;
-		reservedSignal3 = (temp1 >> 16) & 0xFF;
-		reservedSignal4 = (temp1 >> 24) & 0xFF;
-		reservedSignal5 = temp2 & 0xFF;
-		reservedSignal6 = (temp2 >> 8) & 0xFF;
-		reservedSignal7 = (temp2 >> 16) & 0xFF;
-		reservedSignal8 = (temp2 >> 24) & 0xFF;
+
 		*(UINT8 *)(msgData + 0) = reservedSignal1 & 0xFF;
 		*(UINT8 *)(msgData + 1) = reservedSignal2 & 0xFF;
 		*(UINT8 *)(msgData + 2) = reservedSignal3 & 0xFF;

+ 12 - 10
src/EmbeddedCoder_src/BCU.c

@@ -48,14 +48,15 @@ void BCU(void)
             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;
+            memcpy(iscv_Q_remainCpEi, BcuDataInfo.iscv_Q_remainCpE, sizeof(iscv_Q_remainCpEi));
+			memcpy(sorv_ohm_cellREi, BcuDataInfo.sorv_ohm_cellRE, sizeof(sorv_ohm_cellREi));
+            iscd_tm_totalEi = BcuDataInfo.iscd_tm_totalE;
             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_tm_parkTime = BcuDataInfo.ihd_tm_parkTimeEE;
+            sfmd_flg_iscFltEi = BcuDataInfo.sfmd_flg_iscFltE;
+			ihd_tm_parkTime = BcuDataInfo.ihd_tm_parkTimeE;
             ihd_st_EOLState = AppNVMData.EOLState;
 
             PROC_BCU_STATE_SWITCH(PROCESS_STATE_WORK);
@@ -155,7 +156,7 @@ void BCU(void)
                         appd_st_preCyc = 0;
                     }
 					
-					BcuDataInfo.ihd_tm_parkTimeEE = 0;
+					BcuDataInfo.ihd_tm_parkTimeE = 0;
                     BcuDataInfo.appDataModify = TRUE;
                 }
                 osDelay(100);
@@ -176,12 +177,12 @@ void BCU(void)
                 }
 				if (TimeCounter % 1000 == 0)
                 {
-                    BcuDataInfo.ihd_tm_parkTimeEE = ihd_tm_parkTime;
+                    BcuDataInfo.ihd_tm_parkTimeE = ihd_tm_parkTime;
                     BcuDataInfo.appDataModify = TRUE;
                 }
                 if (gProcess_app == WORK)
                 {
-                    BcuDataInfo.ihd_tm_parkTimeEE = ihd_tm_parkTime;
+                    BcuDataInfo.ihd_tm_parkTimeE = ihd_tm_parkTime;
                     BcuDataInfo.appDataModify = TRUE;
                     PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT);
                     break;
@@ -236,12 +237,13 @@ void BCUEEDataSave(void)
     BcuDataInfo.sohd_Q_chrgE = sohd_Q_chrgEo;
     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));
-    BcuDataInfo.iscd_tm_totalEE = iscd_tm_totalEo;
+    memcpy(BcuDataInfo.iscv_Q_remainCpE, iscv_Q_remainCpEo, sizeof(iscv_Q_remainCpEo));
+	memcpy(BcuDataInfo.sorv_ohm_cellRE, sorv_ohm_cellREo, sizeof(sorv_ohm_cellREo));
+    BcuDataInfo.iscd_tm_totalE = iscd_tm_totalEo;
     BcuDataInfo.sfmd_flg_mainCirClosFltE = sfmd_flg_mainCirClosFltEo;
     BcuDataInfo.sfmd_flg_heatCirClosFltE = sfmd_flg_heatCirClosFltEo;
     BcuDataInfo.sfmd_flg_heatCirOpenFltE = sfmd_flg_heatCirOpenFltEo;
     BcuDataInfo.sfmd_flg_heatRunFltE = sfmd_flg_heatRunFltEo;
-    BcuDataInfo.sfmd_flg_iscFltEE = sfmd_flg_iscFltEo;
+    BcuDataInfo.sfmd_flg_iscFltE = sfmd_flg_iscFltEo;
     BcuDataInfo.appDataModify = TRUE;
 }

+ 7 - 9
src/EmbeddedCoder_src/BCUDisp.c

@@ -44,8 +44,8 @@ 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];                         /*电池单体电压(数组); */
+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;    
@@ -121,6 +121,9 @@ uint16_T soed_E_nowEng;
 uint16_T soed_pct_nowStat;
 uint16_T soed_E_fullEng;
 
+uint16_T sorv_ohm_cellREi[cmnc_num_cellUNumMax];
+uint16_T sorv_ohm_cellREo[cmnc_num_cellUNumMax];
+uint16_T sorv_ohm_cellR[cmnc_num_cellUNumMax];
 
 boolean_T iscd_flg_flt;
 uint16_T iscv_Q_remainCpEi[cmnc_num_cellUNumMax];
@@ -131,7 +134,7 @@ uint32_T iscd_tm_totalEo;
 uint8_T tmsd_st_heatAct;                          /*热管理请求状态; */
 
 uint8_T cmd_st_chrgMod;                           /* 充电模式  */
-uint8_T cmd_st_chrgSt;                            /* 充电状态  */
+uint8_T cmd_st_chrgSt;                           /* 充电状态  */
 int16_T cmd_I_chrgCurrReq;                       /* 充电需求电流  */
 uint8_T cmd_idx_chrgEndReason;                    /* 充电结束原因  */
         
@@ -145,12 +148,7 @@ 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;
-uint16_T test_efkSocMax;
-real_T test_UpMin;
-real_T test_UpMax;
-uint16_T test_ekfSoc;
-uint16_T test_ekfSoc0;
+
 uint16_T test_cellCap[cmnc_num_cellUNumMax] ;
 uint16_T test_countEn;
 

+ 4 - 4
src/EmbeddedCoder_src/CDM.c

@@ -26,7 +26,7 @@ void CDM(void)
     static uint8_T Cnt;
 
     //
-    if (ihd_st_workStat_Delay == 2 && ihd_st_workStat != 2)
+    if (ihd_st_workStat_Delay != 1 && ihd_st_workStat == 1)
     {
         FirstRun_CDM = true;
     }
@@ -49,7 +49,7 @@ void CDM(void)
         }
     }
     //
-    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 == 1) //&&  (sfmd_I_curr_Delay - sfmd_I_curr > 10 ||sfmd_I_curr_Delay - sfmd_I_curr < -10 ||sfmd_I_curr_Delay ==0 && sfmd_I_curr == 0))
     {
         for (i = 0; i < cmnc_num_cellUNum; i++)
         {
@@ -102,9 +102,9 @@ void CDM(void)
     else
     {
         cdmd_flg_deltOCVDisable = true;
+		memset(cdmv_V_deltOCV,0,sizeof(cdmv_V_deltOCV));
+		memset(cdmv_ohm_deltR,0,sizeof(cdmv_V_deltOCV));
     }
-
-    //cdmd_flg_deltOCVDisable = true;  ////////
     sfmd_I_curr_Delay = sfmd_I_curr;
     FirstRun_CDM = false;
 }

+ 13 - 10
src/EmbeddedCoder_src/SOC.c

@@ -19,6 +19,7 @@ void SOC(void)
     static uint16_T socn_pct_battSocEE;
     static uint16_T socn_pct_bcuSocEE;
     static uint16_T socn_Q_cap;
+	//static int16_T socn_ohm_cellRAvrg;
     //
     real_T Q;
     real_T battcurr;
@@ -147,6 +148,7 @@ void SOC(void)
             socn_pct_battSocEE = look1_iu16lu16n16tu16_binlcase(sfmd_V_cellUAvrg, (&(cmnm_V_ocv[0])), (&(cmnm_pct_soc[0])), 12U);
         }
         socn_Q_cap = (uint16_T)((uint16_T)((uint32_T)sohd_pct_bcuSoh * cmnc_Q_ratedCp / 2000U) << 1);
+		//socn_ohm_cellRAvrg = ArrMean(&sorv_ohm_cellREi[0], cmnc_num_cellUNum);
     }
 	
     //printf("1----  battSocEi:%d,bcuSocEi:%d,battSocEE:%d,bcuSocEE:%d\n",socd_pct_battSocEi,socd_pct_bcuSocEi,socn_pct_battSocEE,socn_pct_bcuSocEE);
@@ -218,7 +220,7 @@ void SOC(void)
     //输出
     EKFSOCMin = (uint16_T)(soc_Min_Delay * 10);
     socn_flg_ekfInvalidMin = (deltU > 0.01) || (deltU < -0.01);
-    //printf("2----soc:%f,Up:%f,U:%d,deltU:%f,K[0]:%f,K[1]:%f\n",soc_Min_Delay,Up_Min_Delay,sfmd_V_cellUMin,deltU,K[0],K[1]);  
+    //printf("2----socmin:%f,U:%d,R:%f\n",soc_Min_Delay,sfmd_V_cellUMin,Ro);
 	//------------------------EKFSOCmax-----------------------------------
     if (FirstRun_SOC)
     {
@@ -231,7 +233,7 @@ void SOC(void)
     }
     // 参数查表
     ocv = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Max_Delay * 10), (&(cmnm_pct_soc[0])), (&(cmnm_V_ocv[0])),   12U) * 0.001;
-    Ro  = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Max_Delay * 10), (&(cmnm_pct_soc[0])), (&(cmnm_R_ohm[0])),   12U) * 0.001 * 0.001;
+    Ro  = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Max_Delay * 10), (&(cmnm_pct_soc[0])), (&(cmnm_R_ohm[0])),   12U) * 0.001 * 0.001 ;
     Rp  = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Max_Delay * 10), (&(cmnm_pct_soc[0])), (&(cmnm_R_polar[0])), 12U) * 0.001 * 0.001;
     C   = (real_T)look1_iu16lu16n16tu16_binlcase((uint16_T)(soc_Max_Delay * 10), (&(cmnm_pct_soc[0])), (&(cmnm_F_polar[0])), 12U) * 0.001 * 1000;
     A[0] = 1;
@@ -281,7 +283,7 @@ void SOC(void)
     //输出
     EKFSOCMax = (uint16_T)(soc_Max_Delay * 10);
     socn_flg_ekfInvalidMax = (deltU > 0.01) || (deltU < -0.01);
-    //printf("4----soc:%f,Up:%f,U:%d,deltU:%f,K[0]:%f,K[1]:%f\n",soc_Max_Delay,Up_Max_Delay,sfmd_V_cellUMax,deltU,K[0],K[1]);
+    //printf("4----socmax:%f,U:%d,R:%f\n\n",soc_Max_Delay,sfmd_V_cellUMax,Ro);
     //-----------------------EKFSOC----------------------------------------
     socn_flg_ekfInvalid = socn_flg_ekfInvalidMax || socn_flg_ekfInvalidMin;
     if (EKFSOCMax > 800)
@@ -581,8 +583,7 @@ void SOC(void)
     
     //===============================================================================================================================================================
     ////////////////////////////////////////////////BCUSOC///////////////////////////////////////////////////////////////////////////////////////////////////////////
-    //===============================================================================================================================================================
-    
+    //=============================================================================================================================================================== 
     if (sfmd_I_curr < 10 && sfmd_I_curr > -10)
     {
         statCntl = (statCntl + 1) > 250 ? 250 : (statCntl + 1);
@@ -593,7 +594,7 @@ void SOC(void)
     }
     statFlg = statCntl > 2;
     
-    Flg = (FirstRun_SOC || (ihd_st_chrgSta_Delay == 2 && ihd_st_workStat != 2) || (ihd_st_chrgSta_Delay != 2 && ihd_st_workStat == 2) || ((int16_T)(socd_pct_battSoc  - socd_pct_battSoc_Delay) > 10 || (int16_T)(socd_pct_battSoc - socd_pct_battSoc_Delay) < -10) || statFlg);
+    Flg = (FirstRun_SOC || (ihd_st_chrgSta_Delay == 2 && ihd_st_workStat != 2) || (ihd_st_chrgSta_Delay != 2 && ihd_st_workStat == 2) || ((int16_T)(socd_pct_battSoc  - socd_pct_battSoc_Delay) > 5 || (int16_T)(socd_pct_battSoc - socd_pct_battSoc_Delay) < -5) || statFlg);
     
     ihd_st_chrgSta_Delay = ihd_st_workStat;
     socd_pct_battSoc_Delay = socd_pct_battSoc;
@@ -669,16 +670,18 @@ void SOC(void)
             onceFlg_dischrg = false;
             socd_pct_bcuSoc = 2000;
         }
-        
         socd_pct_bcuSoc = SOCfitSystem(bcuSoc, &socd_pct_bcuSoc, 1);
         //printf("11-----x:[%d-%d-%d],y:[%d-%d-%d],bcusoc:%d,socd_pct_bcuSoc:%d\n",x[0],x[1],x[2],y[0],y[1],y[2],bcuSoc,socd_pct_bcuSoc);
     }
-    //
     socd_pct_bcuSocEo = socd_pct_bcuSoc;
+
+	//=======================================VCUSOC========================================================================================
+	
     socd_pct_vcuSoc =  (uint16_T)((uint32_T)((socd_pct_bcuSoc - socc_pct_battSocLow) * 1000) / (socc_pct_battSocUp - socc_pct_battSocLow)); 
+	
     //printf("BattSOC:%d,BCUSOC:%d,VcuSoc:%d\n",socd_pct_battSoc,socd_pct_bcuSoc,socd_pct_vcuSoc);
-    //===================================================================
-    //------------------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 )
     {

+ 66 - 0
src/EmbeddedCoder_src/SOR.c

@@ -0,0 +1,66 @@
+#include "SOR.h"
+
+
+boolean_T FirstRun_SOR;
+
+void SOR_Init(void)
+{
+    FirstRun_SOR = true;
+}
+//-------------------------------------------------------------------------
+void SOR(void)
+{
+    static uint16_T sorn_ohm_cellREE[cmnc_num_cellUNumMax];
+    static uint16_T sorn_ohm_cellREEArr[5][cmnc_num_cellUNumMax];
+    uint16_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) > 65000)
+        {
+            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] = (uint16_T)( ((real_T)(sorn_V_cellU[i] - sfmv_V_cellU[i]) * 0.001) / ((real_T)(sorn_I_curr - sfmd_I_curr) * 0.1) * 1000000 );
+            }
+            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;
+            }
+        } 
+    }
+    memcpy(sorv_ohm_cellREo,sorn_ohm_cellREE, sizeof(sorn_ohm_cellREE));
+	sorn_I_curr = sfmd_I_curr;
+    memcpy(sorn_V_cellU,sfmv_V_cellU, sizeof(sfmv_V_cellU));
+    FirstRun_SOR = false;
+}

+ 2 - 0
src/EmbeddedCoder_src/SPM.c

@@ -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];