浏览代码

滑板底盘项目

LAPTOP-KB7QFH2U\ChenJie-PC 2 年之前
父节点
当前提交
3ff89729a2
共有 6 个文件被更改,包括 1552 次插入1238 次删除
  1. 4 4
      .settings/language.settings.xml
  2. 119 221
      src/AppGlobalVar.c
  3. 52 199
      src/AppGlobalVar.h
  4. 1176 620
      src/AppTaskCan.c
  5. 200 193
      src/AppTaskUart1.c
  6. 1 1
      src/USER_CONFIG.h

+ 4 - 4
.settings/language.settings.xml

@@ -5,7 +5,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="322312694927359922" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="317783601230043299" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -16,7 +16,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="322312694927359922" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="317783601230043299" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -27,7 +27,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="322312694927359922" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="317783601230043299" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -38,7 +38,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="322312694927359922" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="317783601230043299" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>

+ 119 - 221
src/AppGlobalVar.c

@@ -42,10 +42,10 @@ sint8 SocketId = -1;
 sint8 RegChkRet = 0;
 char WebSiteIp[20] = {0};
 uint8 TcpWorkState = 0;
-  const char WebSiteName[] = "\"iotp.fast-fun.cn\"";
-  const uint16 WebSitePort = 8712;
-//const char WebSiteName[] = "\"oss.li-ai.com.cn\"";
-//const uint16 WebSitePort = 8712;
+const char WebSiteName[] = "\"iotp.fast-fun.cn\"";
+const uint16 WebSitePort = 8712;
+// const char WebSiteName[] = "\"oss.li-ai.com.cn\"";
+// const uint16 WebSitePort = 8712;
 
 #define EEP_START_SEC_VAR_INIT_8_NO_CACHEABLE
 #include "Eep_MemMap.h"
@@ -54,7 +54,7 @@ AppConfigBody AppConfigInfo = {false, true, {defaultSn}, {0}};
 #include "Eep_MemMap.h"
 
 /*以下变量均为App_CAN相关变量*/
-#ifdef APP_CAN_ENABLE
+
 // VCU相关
 uint8 vehicleStatus = 0;
 uint8 bmsHVOn = 0;
@@ -76,223 +76,121 @@ uint8 dischargeLockSignal = 0;
 uint8 chargeLockSignal = 0;
 uint8 chargeFlag = 0;
 // Bcu相关
-UINT32 BcuInTable[28] = {
-	0x1801D0F3,
-	0x1801D8F3,
-	0x1880D0F3,
-	0x1881D0F3,
-	0x1882D0F3,
-	0x1883D0F3,
-	0x1884D0F3,
-	0x1885D0F3,
-	0x1886D0F3,
-	0x1887D0F3,
-	0x1888D0F3,
-	0x1889D0F3,
-	0x188AD0F3,
-	0x18C1D0F3,
-	0x18C2D0F3,
-	0x18E1D0F3,
-	0x18E2D0F3,
-	0x18E3D0F3,
-	0x18E4D0F3,
-	0x18E5D0F3,
-	0x18E6D0F3,
-	0x18F1D0F3,
-	0x18F2D0F3,
-	0x18F3D0F3,
-	0x18F4D0F3,
-	0x18F5D0F3,
-	0x18FF45F4,
-	0x18FFC13A,
+UINT32 canMsgNoRecvCounter = 0;
+
+UINT32 BcuInTable[71] = {
+	0x721,
+	0x830,
+	0x831,
+	0x832,
+	0x833,
+	0x834,
+	0x835,
+	0x837,
+	0x840,
+	0x841,
+	0x842,
+	0x843,
+	0x844,
+	0x845,
+	0x846,
+	0x847,
+	0x848,
+	0x849,
+	0x84A,
+	0x84B,
+	0x84C,
+	0x84D,
+	0x84E,
+	0x84F,
+	0x850,
+	0x851,
+	0x852,
+	0x853,
+	0x854,
+	0x855,
+	0x856,
+	0x857,
+	0x858,
+	0x859,
+	0x85A,
+	0x85B,
+	0x85C,
+	0x85D,
+	0x85E,
+	0x85F,
+	0x860,
+	0x861,
+	0x862,
+	0x863,
+	0x864,
+	0x865,
+	0x866,
+	0x867,
+	0x868,
+	0x869,
+	0x86A,
+	0x86B,
+	0x86C,
+	0x86D,
+	0x86E,
+	0x86F,
+	0x870,
+	0x871,
+	0x872,
+	0x873,
+	0x874,
+	0x875,
+	0x876,
+	0x877,
+	0x878,
+	0x879,
+	0x87A,
+	0x87B,
+	0x87C,
+	0x87D,
+	0x87E,
 };
-BOOL BcuRxShortError[28];
-BOOL BcuRxLongError[28];
-UINT8 BcuRxErrorCounter[28];
-UINT8 BcuRxFlag[28];
+BOOL BcuRxShortError[71];
+BOOL BcuRxLongError[71];
+UINT8 BcuRxErrorCounter[71];
+UINT8 BcuRxFlag[71];
 /************************************************************
  *BCU->4G解码变量存放区
  ************************************************************/
-UINT8 BMS_ReqVIN = 0x00;						//是否请求VIN码,0:预留;1:请求VIN;2:不请求VIN;3:无效;,Re-1,Off-0,
-UINT8 BMS_ReqHVOff = 0x00;						//是否请求下高压,0:预留;1:请求下高压;2:不请求下高压;3:无效;,Re-1,Off-0,
-UINT8 BMS_ProtocolEditionH = 0x00;				//通讯协议版本高位(例 : 版本为3 .1, 则此处发3),	, Re - 1, Off - 0,
-UINT8 BMS_ProtocolEditionL = 0x00;				//通讯协议版本低位(例 : 版本为3 .1, 则此处发1),	, Re - 1, Off - 0,
-UINT8 BMS_CharDevNum = 0x00;					//可充电装置系统序号(BMS是整车中可充电装置系统中的第几个, 需要整车告知),1,Re-1,Off-0,
-UINT8 BMS_FtPosRly = 0x00;						//主正继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtNegRly = 0x00;						//主负继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtPosCharRly1 = 0x00;					//充正1继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtNegCharRly1 = 0x00;					//充负1继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtPosCharRly2 = 0x00;					//充正2继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtNegCharRly2 = 0x00;					//充负2继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtHeatRly1 = 0x00;					//加热1/正继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtHeatRly2 = 0x00;					//加热2/负继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_StPosRly = 0x00;						//主正继电器状态(如继电器状态由BMS检测),0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
-UINT8 BMS_StNegRly = 0x00;						//主负继电器状态(如继电器状态由BMS检测),0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
-UINT8 BMS_StPreCharRly = 0x00;					//预充继电器状态,0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
-UINT8 BMS_StPosCharRly1 = 0x00;					//直流充正继电器1状态,0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
-UINT8 BMS_StNegCharRly1 = 0x00;					//直流充负继电器1状态,0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
-UINT8 BMS_StPosCharRly2 = 0x00;					//直流充正继电器2状态,0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
-UINT8 BMS_StNegCharRly2 = 0x00;					//直流充负继电器2状态,0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
-UINT8 BMS_FtAuxRelayWeld = 0x00;				//附件继电器粘连故障(保留),0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_BraOpenCirc = 0x00;					//支路断路故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtBackCharCurrOutLim = 0x00;			//回充电流超限报警,0:正常1 : 1级 轻微故障 2 : 2级 较严重故障 3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtPosRlyOpen = 0x00;					//主正继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtNegRlyOpen = 0x00;					//主负继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtPosCharRly1Open = 0x00;				//直流充电正1继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtPosCharRly2Open = 0x00;				//直流充电正2继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtNegCharRly1Open = 0x00;				//直流充电负1继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtNegCharRly2Open = 0x00;				//直流充电负2继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtTMSContClose = 0x00;				//加热膜或TMS接触器无法断开报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtTMSContOpen = 0x00;					//加热膜或TMS接触器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtTMS = 0x00;							//热管理系统故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_Ft24VSpy = 0x00;						// BMS 24V供电异常报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtPACKSelfProt = 0x00;				//电池包自保护报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtCharSockTempOver = 0x00;			//充电插座过温报警,0:正常1 : 1级 轻微故障 2 : 2级 较严重故障 3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtTempOutCtrl = 0x00;					//热失控报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_StPosHeatRly = 0x00;					//加热正继电器状态,0:保留;1:开启;2:闭合;3:无效,Re-1,Off-0,
-UINT8 BMS_StNegHeatRly = 0x00;					//加热负继电器状态,0:保留;1:开启;2:闭合;3:无效,Re-1,Off-0,
-UINT8 BMS_CharSysNum = 0x00;					//可充电储能子系统总数(保留),,Re-1,Off-0,
-UINT8 BMS_FtCode = 0x00;						//电池系统故障码,详见附表电池系统故障码列表,Re-1,Off-0,
-UINT8 BMS_ST1CheckSum = 0x00;					// B2V_ST1的CheckSum,Byte0=Byte1 XOR Byte2 XOR Byte3 XOR Byte4 XOR Byte5 XOR Byte6 XOR Byte7,Re-1,Off-0,
-UINT8 BMS_ST1Counter = 0x00;					// B2V_ST1的生命信号,0~14循环,15:信号无效,Re-1,Off-0,
-UINT8 BMS_Mode = 0x00;							// BMS当前状态,0:预留;1:高压上电;2:高压下电;3:无效;,Re-1,Off-0,
-UINT8 BMS_AuxRlySt = 0x00;						//附件继电器状态,0:开启;1:闭合;,Re-1,Off-0,
-UINT8 BMS_BattBalaSt = 0x00;					// BMS当前均衡状态,0:未开启均衡;1:开启均衡;,Re-1,Off-0,
-UINT8 BMS_CharGunSt = 0x00;						//直流充电枪连接状态,0:未连接1 : 连接, Re - 1, Off - 0,
-UINT8 BMS_CharMode = 0x00;						// BMS当前充电模式,0:预留1 : 直流充电 2 : 交流充电 3 : 其他充电, Re - 1, Off - 0,
-UINT8 BMS_CharSt = 0x00;						//充电状态,0:可以充电1 : 正在充电 2 : 充电结束 3 : 充电故障, Re - 1, Off - 0,
-UINT8 BMS_FtLvl = 0x00;							//当前最高故障等级,0:正常1 : 1级 轻微故障 2 : 2级 较严重故障 3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtCellTempDiff = 0x00;				//电芯温差异常报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtCellTempHigh = 0x00;				//电芯温度过高报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtPACKOverVolt = 0x00;				// PACK过压报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtPACKUndeVolt = 0x00;				// PACK欠压报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtSOCLow = 0x00;						// SOC过低报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtCellOverVolt = 0x00;				//单体电压过高报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtCellUndeVolt = 0x00;				//单体电压欠压报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtIns = 0x00;							//绝缘报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtCellOverVoltDiff = 0x00;			//单体压差过大,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtCharCurrOver = 0x00;				//充电电流过大报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtDisCharCurrOver = 0x00;				//放电电流过大报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtCellTempLow = 0x00;					//电芯温度过低报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtBranVoltDifOver = 0x00;				//支路压差过大报警(存在并联支路的系统),0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtBMSHardWare = 0x00;					// BMS硬件故障,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtSOCHigh = 0x00;						// SOC过高报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtSOCJump = 0x00;						// SOC跳变报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtInCom = 0x00;						// BMS内部通信故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtSysMism = 0x00;						// BMS/可充电储能系统不匹配报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtHvIntLock = 0x00;					//高压互锁报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtSmoke = 0x00;						//火警探测器故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtFire = 0x00;						//电池包火灾报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtNum = 0x00;							// BMS当前发生的故障总数目(包括GB32960中规定的故障数目),,Re-1,Off-0,
-UINT8 BMS_PackSOC = 0x00;						//电池包SOC,,Re-0.4,Off-0,
-UINT8 BMS_PackSOH = 0x00;						//电池包SOH,,Re-0.4,Off-0,
-UINT8 BMS_MaxCellTemp = 0x00;					//单体最高温度,,Re-1,Off--50,℃
-UINT8 BMS_MinCellTemp = 0x00;					//单体最低温度,,Re-1,Off--50,℃
-UINT8 BMS_AverCellTemp = 0x00;					//单体平均温度,,Re-1,Off--50,℃
-UINT8 BMS_MaxCellTempCSC = 0x00;				//最高温度电芯所在子系统(CSC)编号,范围(1~255),Re-1,Off-0,
-UINT8 BMS_MaxCellTempNum = 0x00;				//最高温度电芯所在子系统(CSC)内温度探针编号,范围(1~255),Re-1,Off-0,
-UINT8 BMS_MinCellTempCSC = 0x00;				//最低温度电芯所在子系统(CSC)编号,范围(1~255),Re-1,Off-0,
-UINT8 BMS_MinCellTempNum = 0x00;				//最低温度电芯所在子系统(CSC)内温度探针编号,范围(1~255),Re-1,Off-0,
-UINT8 BMS_MaxCellVoltCSC = 0x00;				//最高电压电芯所在子系统(CSC)编号,范围(1~255),Re-1,Off-0,
-UINT8 BMS_MaxCellVoltNum = 0x00;				//最高电压电芯所在子系统(CSC)内单体编号,范围(1~255),Re-1,Off-0,
-UINT8 BMS_MinCellVoltCSC = 0x00;				//最低电压电芯所在子系统(CSC)编号,范围(1~255),Re-1,Off-0,
-UINT8 BMS_MinCellVoltNum = 0x00;				//最低电压电芯所在子系统(CSC)内单体编号,范围(1~255),Re-1,Off-0,
-UINT8 BMS_InsDeteSt = 0x00;						// BMS绝缘检测状态,0:停止检测;1:激活检测;,Re-1,Off-0,
-UINT8 BMS_FtCharInsLow = 0x00;					//充电绝缘阻值低,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtCurrSenr = 0x00;					//电流传感器故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtHeatingFilm = 0x00;					//加热膜加热回路故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtMainLoopPreChar = 0x00;				//主回路预充或预检故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtAuxLoopPreChar = 0x00;				//辅件回路预充或预检故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtACANLost = 0x00;					// ACAN/整车CAN通讯故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtDCDC = 0x00;						// BMS-DC-DC故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtSOCDif = 0x00;						// SOC差异过大,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtCellOverDisChar = 0x00;				//电芯过放故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtCharOver = 0x00;					//车载储能装置过充报警,0:正常;1:1级 轻微故障;2:2级 较严重故障3 : 10级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtContDisCharCurrOverLoad = 0x00;		//持续回充过流故障,0:正常;1:1级 轻微故障;2:2级 较严重故障3 : 10级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtContCharCurrOverLoad = 0x00;		//持续放电过流故障,0:正常;1:1级 轻微故障;2:2级 较严重故障3 : 10级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_Gun1DCNegTemp = 0x00;					//充电口1负温感值,,Re-1,Off--40,℃
-UINT8 BMS_Gun1DCPosTemp = 0x00;					//充电口1正温感值,,Re-1,Off--40,℃
-UINT8 BMS_Gun2DCNegTemp = 0x00;					//充电口2负温感值,,Re-1,Off--40,℃
-UINT8 BMS_Gun2DCPosTemp = 0x00;					//充电口2正温感值,,Re-1,Off--40,℃
-UINT8 BMS_CurrHeatSt = 0x00;					//当前加热状态,0:未加热;1:加热中;2:预留;3:无效;,Re-1,Off-0,
-UINT8 BMS_CurrCoolSt = 0x00;					//当前冷却状态,0:未冷却;1:冷却中;2:预留;3:无效;,Re-1,Off-0,
-UINT8 BMS_FtCharCnct = 0x00;					//插枪连接信号异常,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtOverDisCharCurrDuringChar = 0x00;	//充电时放电电流过大,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtCharNTC = 0x00;						//充电插座NTC故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtELock = 0x00;						//电子锁故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_CellVoltFramNum = 0x00;				//单体电压帧序号,有效值1~255,Re-1,Off-0,
-UINT8 BMS_CellTempFramNum = 0x00;				//温度帧序号,有效值1~255,Re-1,Off-0,
-UINT8 BMS_CSC_Code = 0x00;						//子系统编号CSC,有效值1~255,Re-1,Off-0,
-UINT8 BMS_CellTemp[BMS_TEMP_MAX_NUM] = {0x00};	//当前CSC下的第N个探针的温度,255 "Invalid" 0xFF 无效有效值 0 ~254, 单位 ℃, 范围(-50 ~204)℃, , Re - 1, Off-- 50,℃
-UINT8 BMS_Checksum = 0x00;						//电池编码信息1的CheckSum,Byte0=Byte1 XOR Byte2 XOR Byte3 XOR Byte4 XOR Byte5 XOR Byte6 XOR Byte7,Re-1,Off-0,
-UINT8 BMS_PackComp = 0x00;						//电池厂家,1:"CATL" 2:"Li Shen" 3:"MGL" 4:"SAMSUN" 5:"LG",Re-1,Off-0,
-UINT8 BMS_BattCodeLeng = 0x00;					//电池编码长度,0:Do not transmit this Code,Re-1,Off-0,
-UINT8 BMS_SN[27] = {0x00};						//电池编码(SN)字符1(ASCII),,Re-1,Off-0,
-UINT8 BMS_BattType = 0x00;						//电池类型,1:铅酸电池; 2:镍氢电池; 3:磷酸铁锂电池; 4:锰酸锂电池; 5:钴酸锂电池; 6:三元材料电池; 7:聚合物锂离子电池; 8:钛酸锂电池; 9:超级电容; 10~13:保留; 14:燃料电池;15:保留,Re-1,Off-0,
-UINT8 BMS_CoolType = 0x00;						//电池冷却方式,0:其他冷却方式1 : 自然冷却 2 : 风扇冷却 3 : 水冷却, Re - 1, Off - 0,
-UINT8 BMS_CSC_Total = 0x00;						//电池系统中CSC总的数目,,Re-1,Off-0,
-UINT8 BMS_CellVoltLevel = 0x00;					//单体平台电压(非实时变化的值),有效值0~5V;  255 "Signal Invalid" 0xFF 无效,Re-0.1,Off-0,V
-UINT8 BMS_CellMinVolt = 0x00;					//单体可用最低电压(非实时变化的值),有效值0~5V;  255 "Signal Invalid" 0xFF 无效,Re-0.1,Off-0,V
-UINT8 BMS_CellMaxVolt = 0x00;					//单体可用最高电压(非实时变化的值),有效值0~5V;  255 "Signal Invalid" 0xFF 无效,Re-0.1,Off-0,V
-UINT8 BMS_HVBranNum = 0x00;						//电池系统高压支路数,,Re-1,Off-0,
-UINT8 BMS_SingleHVBranchCellNum = 0x00;			//电池系统单支路电芯数,,Re-1,Off-0,
-UINT8 BMS_ReqMode = 0x00;						// BMS请求设定模式,0:关机模式1 : 制冷模式 2 : 制热模式 3 : 自循环模式, Re - 1, Off - 0,
-UINT8 BMS_HVCmd = 0x00;							//高压请求,0:请求上高压1 : 请求下高压, Re - 1, Off - 0,
-UINT8 BMS_ChgSts = 0x00;						//充电状态,0:非充电1 : 充电, Re - 1, Off - 0,
-UINT8 BMS_HVRelaySts = 0x00;					// BMS高压继电器状态,0:断开状态; 1:闭合状态; 2~3:无效,Re-1,Off-0,
-UINT8 BMS_SetTemp = 0x00;						//设定温度,,Re-1,Off--40,
-UINT8 BMS_Life = 0x00;							// BMS生命帧,,Re-1,Off-0,
-UINT8 BMS_CRC = 0x00;							// CRC校验值,,Re-1,Off-0,
-UINT8 TMS_WorkStatus = 0x00;					// TMS工作状态,0:关机模式1 : 制冷模式 2 : 制热模式 3 : 自循环模式, Re - 1, Off - 0,
-UINT8 TMS_HVRelayST = 0x00;						// TMS高压继电器状态,0:断开状态; 1:闭合状态; 2~3:无效,Re-1,Off-0,
-UINT8 TMS_OutletTemp = 0x00;					//出水温度(机组到电池),255:无效,Re-1,Off--40,
-UINT8 TMS_InletTemp = 0x00;						//回水温度(电池到机组),255:无效,Re-1,Off--40,
-UINT8 TMS_ErrCode = 0x00;						// TMS故障码,0:无故障; 出现 1 种以上循环发送,Re-1,Off-0,
-UINT8 TMS_FaultLevel = 0x00;					// TMS故障码等级,0:无效1 : 1级故障 2 : 2级故障 3 : 3级故障, Re - 1, Off - 0,
-UINT16 BMS_SoftwareVersion = 0x00;				//软件版本号:RyyyBzzz(R为软件版本、B为测试版本、正式版本不带B)  ,yyy:0~254,精度1,255:无效,不显示;zzz:0~254,精度1,255:无效,不显示;
-UINT16 BMS_HardwareVersion = 0x00;				//硬件版本号:VyyyBzzz(V为硬件版本、B为测试版本、正式版本不带B)  ,,Re-1,Off-0,
-UINT16 BMS_PackCurr = 0x00;						//电池包总电流,充电为负值,放电为正值,,Re-0.1,Off--1000,A
-UINT16 BMS_MaxCharCurr = 0x00;					//电池包最大回充电流,,Re-0.1,Off--1000,A
-UINT16 BMS_MaxDisCharCurr = 0x00;				//电池包最大放电电流,,Re-0.1,Off--1000,A
-UINT16 BMS_PosIns = 0x00;						//母线正对车体绝缘电阻,,Re-1,Off-0,KΩ
-UINT16 BMS_NegIns = 0x00;						//母线负对车体绝缘电阻,,Re-1,Off-0,KΩ
-UINT16 BMS_BattVolt = 0x00;						//电池包内侧电压,,Re-0.1,Off-0,V
-UINT16 BMS_LinkVolt = 0x00;						//电池包外侧电压,,Re-0.1,Off-0,V
-UINT16 BMS_MaxCellVolt = 0x00;					//单体最高电压值,,Re-0.001,Off-0,V
-UINT16 BMS_AverCellVolt = 0x00;					//电芯电压平均值,,Re-0.001,Off-0,V
-UINT16 BMS_MinCellVolt = 0x00;					//电芯最低电压值,,Re-0.001,Off-0,V
-UINT16 BMS_ContChrgCurr = 0x00;					// BMS允许的持续回充电流,,Re-0.1,Off-0,A
-UINT16 BMS_ContDisCharCurr = 0x00;				// BMS允许的持续放电电流,,Re-0.1,Off--1000,A
-UINT16 BMS_CharReqVolt = 0x00;					//充电所需电压(交流),,Re-0.1,Off-0,V
-UINT16 BMS_CharReqCurr = 0x00;					//充电所需电流(交流),,Re-0.1,Off--1000,A
-UINT16 BMS_SysInsRes = 0x00;					//系统绝缘电阻,,Re-1,Off-0,KΩ
-UINT16 BMS_MaxDisCharPwr = 0x00;				//最大允许放电功率,,Re-0.1,Off-0,kw
-UINT16 BMS_MaxCharPwr = 0x00;					//最大允许充电功率,,Re-0.1,Off-0,kw
-UINT16 BMS_ContDisCharPwr = 0x00;				// BMS允许的持续放电功率,,Re-0.1,Off-0,kw
-UINT16 BMS_ContCharPwr = 0x00;					// BMS允许的持续充电功率,,Re-0.1,Off-0,kw
-UINT16 BMS_InstEngyCons = 0x00;					//动力电池瞬时百公里能耗,,Re-0.1,Off-0,kwh
-UINT16 BMS_TotalEngyCons = 0x00;				//动力电池总/平均百公里能耗,,Re-0.1,Off-0,kwh
-UINT16 BMS_SOE = 0x00;							//剩余电量,,Re-0.01,Off-0,kwh
-UINT16 BMS_RmanCharTime = 0x00;					//剩余充电时间,,Re-1,Off-0,min
-UINT16 BMS_CharNum = 0x00;						//充电次数,,Re-1,Off-0,
-UINT16 BMS_CellVolt[BMS_CELL_MAX_NUM] = {0x00}; //电芯的电压,65535 "Invalid" 0xFFFF 无效有效值 0 ~65534, 范围(0 ~65.534) V, Re - 0.001, Off - 0, V
-UINT16 BMS_BattRateCap = 0x00;					//电池包额定容量,有效值 0~65534,65535 "Signal Invalid" 无效,Re-1,Off-0,Ah
-UINT16 BMS_BattRateVolt = 0x00;					//电池包额定电压,有效值 0~6553.4,65535 "Signal Invalid" 无效,Re-0.1,Off-0,V
-UINT16 BMS_BattRateEngy = 0x00;					//电池包额定能量,有效值 0~6553.4,65535 "Signal Invalid" 无效,Re-0.1,Off-0,kWh
-UINT16 BMS_CellTotal = 0x00;					// PACK中单体电芯的总数目,,Re-1,Off-0,
-UINT16 BMS_TempTotal = 0x00;					// PACK中电芯温度点(探针)的总数目,,Re-1,Off-0,
-UINT16 BMS_SingleCharEngy = 0x00;				//单次充电kWh 数,,Re-0.1,Off-0,KWh
-UINT16 BMS_SingleCharCapy = 0x00;				//单次充电Ah 数,,Re-0.1,Off-0,Ah
-UINT16 BMS_HVVolt = 0x00;						// BMS当前电压,,Re-1,Off-0,
-UINT16 TMS_ReqPow = 0x00;						// TMS需求功率,65535:无效,Re-0.1,Off-0,Kw
-UINT32 BMS_TotalCharEngy = 0x00;				//累计充入kWh 数,,Re-0.1,Off-0,KWh
-UINT32 BMS_TotalDisCharEngy = 0x00;				//累计放出kWh 数,,Re-0.1,Off-0,KWh
-UINT32 BMS_TotalBackCharEngy = 0x00;			//累计动能回馈充入kWh 数,,Re-0.1,Off-0,KWh
-UINT32 BMS_TotalStaCharEngy = 0x00;				//累计换电站充入kWh 数,,Re-0.1,Off-0,KWh
-UINT32 BMS_TotalGunCharEngy = 0x00;				//累计插枪充电充入kWh 数,,Re-0.1,Off-0,KWh
-UINT32 BMS_TotalGunCharCapy = 0x00;				//累计插枪充电充入Ah 数,,Re-0.1,Off-0,Ah
-UINT32 BMS_TotalCharCapy = 0x00;				//累计充入Ah 数,,Re-0.1,Off-0,Ah
-UINT32 BMS_TotalDisCharCapy = 0x00;				//累计放出Ah 数,,Re-0.1,Off-0,Ah
-UINT32 BMS_TotalBackCharCapy = 0x00;			//累计动能回馈充入Ah 数,,Re-0.1,Off-0,Ah
-UINT32 BMS_TotalStaCharCapy = 0x00;				//累计换电站充入Ah 数,,Re-0.1,Off-0,Ah
-#endif
+// declear the UINT8 vars
+UINT8 VcuBcuOperModReq = 0x00; //电池启动信号
+UINT8 BcuErrRank = 0x00;	   //故障等级
+UINT8 BcuErrNum = 0x00;		   //故障数量
+UINT8 BcuUpAlw = 0x00;		   //高压上电允许
+UINT8 BcuOperMod = 0x00;	   //电池工作状态
+UINT8 BcuChrgMod = 0x00;	   //电池充电模式
+UINT8 BcuChrgSt = 0x00;		   //电池充电状态
+UINT8 BcuChrgEndReason = 0x00; //充电结束原因
+UINT8 BcuCellNr = 0x00;		   //单体循环编号
+UINT8 BcuModT[96] = {0x00};
+
+// declear the UINT16 vars
+UINT16 BcuSoc = 0x00;			   //电池SOC
+UINT16 BcuErrCode = 0x00;		   //故障码
+UINT16 BcuInsulationR = 0x00;	   //绝缘电阻
+UINT16 BcuBattI1 = 0x00;		   //电池包1总电流
+UINT16 BcuBattI2 = 0x00;		   //电池包2总电流
+UINT16 BcuBattU1 = 0x00;		   //电池包1总电压
+UINT16 BcuBattU2 = 0x00;		   //电池包2总电压
+UINT16 BcuChrgIReq = 0x00;		   //充电需求电流
+UINT16 BcuChrgUReq = 0x00;		   //充电需求电压
+UINT16 BcuReChrgTm = 0x00;		   //剩余充电时间
+UINT16 BcuDisChrPwrMaxLong = 0x00; //电池放电最大功率(长时)
+UINT16 BcuSoh = 0x00;			   //电池健康状态
+UINT16 BcuCellCap = 0x00;		   //单体容量
+UINT16 BcuCellR = 0x00;			   //单体内阻
+UINT16 BcuReEgy = 0x00;			   //剩余能量
+UINT16 BcuSoe = 0x00;			   //剩余能量百分比
+UINT16 BcuAhSoc = 0x00;			   //安时SOC
+UINT16 BcuBattSoc = 0x00;		   //电池SOC
+UINT16 BcuEKFSoc = 0x00;		   // EKFSoc
+UINT16 BcuEquilist[12] = {0x00};   //#1-16单体均衡状态
+UINT16 BcuCellU[192] = {0x00};
+// declear the UINT32 vars
+UINT32 BcuChrPwrMaxLong = 0x00; //电池充电电最大功率(长时)

+ 52 - 199
src/AppGlobalVar.h

@@ -9,20 +9,18 @@
  */
 /*
  * AppGlobal.h
- *应用层全局变量
- *  Created on: 2022年1月19日
  *      Author: QiXiang_CHENJIE
  */
 #ifndef APPGLOBALVAR_H_
 #define APPGLOBALVAR_H_
 
-//#define APP_UART0_ENABLE //平峰项目
-#define APP_CAN_ENABLE //重卡项目
+//#define APP_UART0_ENABLE
+#define APP_CAN_ENABLE
 
 #include "hal_adapter.h"
 // test Var
-#define defaultSn "GYTEST00000000001"
-// #define defaultSn "PZLCLL128N2236001"
+//#define defaultSn "GYTEST00000000001"
+#define defaultSn "CQHZHL128N2236001"
 #define BATT_SN_LEN 17
 #define HWVERSION 0x0001
 #define BLSWVERSION 0x00000001
@@ -32,9 +30,9 @@
 #define BMS_INFO 0xFF
 #define DATA_MODULE_TYPE 0x02
 
-#define BMS_CELL_MAX_NUM 384
-#define BMS_TEMP_MAX_NUM 64
-//*全局变量*//
+#define BMS_CELL_MAX_NUM 184
+#define BMS_TEMP_MAX_NUM 96
+
 
 extern uint8 TcpbattSN[17];
 extern uint8 VIN[17];
@@ -67,7 +65,7 @@ typedef struct _Fota_Type
     uint32 Fota_Flash_Addres;
     uint8 Fota_CRC;
 } Fota_Type;
-/*以下变量均为TCP相关变量*/
+
 extern uint8 CSQValue;
 extern sint8 SocketId;
 extern sint8 RegChkRet;
@@ -86,7 +84,7 @@ typedef struct _AppConfigType
 } AppConfigBody;
 extern AppConfigBody AppConfigInfo;
 
-/*以下变量均为App_CAN相关变量*/
+
 #ifdef APP_CAN_ENABLE
 extern uint8 vehicleStatus;
 extern uint8 bmsHVOn;
@@ -106,193 +104,48 @@ extern uint8 retainLockSignal;
 extern uint8 dischargeLockSignal;
 extern uint8 chargeLockSignal;
 extern uint8 chargeFlag;
-// BCU解码变量
-extern UINT32 BcuInTable[28];
-extern BOOL BcuRxShortError[28];
-extern BOOL BcuRxLongError[28];
-extern UINT8 BcuRxErrorCounter[28];
-extern UINT8 BcuRxFlag[28];
-extern UINT8 BMS_ReqVIN;
-extern UINT8 BMS_ReqHVOff;
-extern UINT8 BMS_ProtocolEditionH;
-extern UINT8 BMS_ProtocolEditionL;
-extern UINT8 BMS_CharDevNum;
-extern UINT8 BMS_FtPosRly;
-extern UINT8 BMS_FtNegRly;
-extern UINT8 BMS_FtPosCharRly1;
-extern UINT8 BMS_FtNegCharRly1;
-extern UINT8 BMS_FtPosCharRly2;
-extern UINT8 BMS_FtNegCharRly2;
-extern UINT8 BMS_FtHeatRly1;
-extern UINT8 BMS_FtHeatRly2;
-extern UINT8 BMS_StPosRly;
-extern UINT8 BMS_StNegRly;
-extern UINT8 BMS_StPreCharRly;
-extern UINT8 BMS_StPosCharRly1;
-extern UINT8 BMS_StNegCharRly1;
-extern UINT8 BMS_StPosCharRly2;
-extern UINT8 BMS_StNegCharRly2;
-extern UINT8 BMS_FtAuxRelayWeld;
-extern UINT8 BMS_BraOpenCirc;
-extern UINT8 BMS_FtBackCharCurrOutLim;
-extern UINT8 BMS_FtPosRlyOpen;
-extern UINT8 BMS_FtNegRlyOpen;
-extern UINT8 BMS_FtPosCharRly1Open;
-extern UINT8 BMS_FtPosCharRly2Open;
-extern UINT8 BMS_FtNegCharRly1Open;
-extern UINT8 BMS_FtNegCharRly2Open;
-extern UINT8 BMS_FtTMSContClose;
-extern UINT8 BMS_FtTMSContOpen;
-extern UINT8 BMS_FtTMS;
-extern UINT8 BMS_Ft24VSpy;
-extern UINT8 BMS_FtPACKSelfProt;
-extern UINT8 BMS_FtCharSockTempOver;
-extern UINT8 BMS_FtTempOutCtrl;
-extern UINT8 BMS_StPosHeatRly;
-extern UINT8 BMS_StNegHeatRly;
-extern UINT8 BMS_CharSysNum;
-extern UINT8 BMS_FtCode;
-extern UINT8 BMS_ST1CheckSum;
-extern UINT8 BMS_ST1Counter;
-extern UINT8 BMS_Mode;
-extern UINT8 BMS_AuxRlySt;
-extern UINT8 BMS_BattBalaSt;
-extern UINT8 BMS_CharGunSt;
-extern UINT8 BMS_CharMode;
-extern UINT8 BMS_CharSt;
-extern UINT8 BMS_FtLvl;
-extern UINT8 BMS_FtCellTempDiff;
-extern UINT8 BMS_FtCellTempHigh;
-extern UINT8 BMS_FtPACKOverVolt;
-extern UINT8 BMS_FtPACKUndeVolt;
-extern UINT8 BMS_FtSOCLow;
-extern UINT8 BMS_FtCellOverVolt;
-extern UINT8 BMS_FtCellUndeVolt;
-extern UINT8 BMS_FtIns;
-extern UINT8 BMS_FtCellOverVoltDiff;
-extern UINT8 BMS_FtCharCurrOver;
-extern UINT8 BMS_FtDisCharCurrOver;
-extern UINT8 BMS_FtCellTempLow;
-extern UINT8 BMS_FtBranVoltDifOver;
-extern UINT8 BMS_FtBMSHardWare;
-extern UINT8 BMS_FtSOCHigh;
-extern UINT8 BMS_FtSOCJump;
-extern UINT8 BMS_FtInCom;
-extern UINT8 BMS_FtSysMism;
-extern UINT8 BMS_FtHvIntLock;
-extern UINT8 BMS_FtSmoke;
-extern UINT8 BMS_FtFire;
-extern UINT8 BMS_FtNum;
-extern UINT8 BMS_PackSOC;
-extern UINT8 BMS_PackSOH;
-extern UINT8 BMS_MaxCellTemp;
-extern UINT8 BMS_MinCellTemp;
-extern UINT8 BMS_AverCellTemp;
-extern UINT8 BMS_MaxCellTempCSC;
-extern UINT8 BMS_MaxCellTempNum;
-extern UINT8 BMS_MinCellTempCSC;
-extern UINT8 BMS_MinCellTempNum;
-extern UINT8 BMS_MaxCellVoltCSC;
-extern UINT8 BMS_MaxCellVoltNum;
-extern UINT8 BMS_MinCellVoltCSC;
-extern UINT8 BMS_MinCellVoltNum;
-extern UINT8 BMS_InsDeteSt;
-extern UINT8 BMS_FtCharInsLow;
-extern UINT8 BMS_FtCurrSenr;
-extern UINT8 BMS_FtHeatingFilm;
-extern UINT8 BMS_FtMainLoopPreChar;
-extern UINT8 BMS_FtAuxLoopPreChar;
-extern UINT8 BMS_FtACANLost;
-extern UINT8 BMS_FtDCDC;
-extern UINT8 BMS_FtSOCDif;
-extern UINT8 BMS_FtCellOverDisChar;
-extern UINT8 BMS_FtCharOver;
-extern UINT8 BMS_FtContDisCharCurrOverLoad;
-extern UINT8 BMS_FtContCharCurrOverLoad;
-extern UINT8 BMS_Gun1DCNegTemp;
-extern UINT8 BMS_Gun1DCPosTemp;
-extern UINT8 BMS_Gun2DCNegTemp;
-extern UINT8 BMS_Gun2DCPosTemp;
-extern UINT8 BMS_CurrHeatSt;
-extern UINT8 BMS_CurrCoolSt;
-extern UINT8 BMS_FtCharCnct;
-extern UINT8 BMS_FtOverDisCharCurrDuringChar;
-extern UINT8 BMS_FtCharNTC;
-extern UINT8 BMS_FtELock;
-extern UINT8 BMS_CellVoltFramNum;
-extern UINT8 BMS_CellTempFramNum;
-extern UINT8 BMS_CSC_Code;
-extern UINT8 BMS_CellTemp[BMS_TEMP_MAX_NUM];
-extern UINT8 BMS_Checksum;
-extern UINT8 BMS_PackComp;
-extern UINT8 BMS_BattCodeLeng;
-extern UINT8 BMS_SN[27];
-extern UINT8 BMS_BattType;
-extern UINT8 BMS_CoolType;
-extern UINT8 BMS_CSC_Total;
-extern UINT8 BMS_CellVoltLevel;
-extern UINT8 BMS_CellMinVolt;
-extern UINT8 BMS_CellMaxVolt;
-extern UINT8 BMS_HVBranNum;
-extern UINT8 BMS_SingleHVBranchCellNum;
-extern UINT8 BMS_ReqMode;
-extern UINT8 BMS_HVCmd;
-extern UINT8 BMS_ChgSts;
-extern UINT8 BMS_HVRelaySts;
-extern UINT8 BMS_SetTemp;
-extern UINT8 BMS_Life;
-extern UINT8 BMS_CRC;
-extern UINT8 TMS_WorkStatus;
-extern UINT8 TMS_HVRelayST;
-extern UINT8 TMS_OutletTemp;
-extern UINT8 TMS_InletTemp;
-extern UINT8 TMS_ErrCode;
-extern UINT8 TMS_FaultLevel;
-extern UINT16 BMS_SoftwareVersion;
-extern UINT16 BMS_HardwareVersion;
-extern UINT16 BMS_PackCurr;
-extern UINT16 BMS_MaxCharCurr;
-extern UINT16 BMS_MaxDisCharCurr;
-extern UINT16 BMS_PosIns;
-extern UINT16 BMS_NegIns;
-extern UINT16 BMS_BattVolt;
-extern UINT16 BMS_LinkVolt;
-extern UINT16 BMS_MaxCellVolt;
-extern UINT16 BMS_AverCellVolt;
-extern UINT16 BMS_MinCellVolt;
-extern UINT16 BMS_ContChrgCurr;
-extern UINT16 BMS_ContDisCharCurr;
-extern UINT16 BMS_CharReqVolt;
-extern UINT16 BMS_CharReqCurr;
-extern UINT16 BMS_SysInsRes;
-extern UINT16 BMS_MaxDisCharPwr;
-extern UINT16 BMS_MaxCharPwr;
-extern UINT16 BMS_ContDisCharPwr;
-extern UINT16 BMS_ContCharPwr;
-extern UINT16 BMS_InstEngyCons;
-extern UINT16 BMS_TotalEngyCons;
-extern UINT16 BMS_SOE;
-extern UINT16 BMS_RmanCharTime;
-extern UINT16 BMS_CharNum;
-extern UINT16 BMS_CellVolt[BMS_CELL_MAX_NUM];
-extern UINT16 BMS_BattRateCap;
-extern UINT16 BMS_BattRateVolt;
-extern UINT16 BMS_BattRateEngy;
-extern UINT16 BMS_CellTotal;
-extern UINT16 BMS_TempTotal;
-extern UINT16 BMS_SingleCharEngy;
-extern UINT16 BMS_SingleCharCapy;
-extern UINT16 BMS_HVVolt;
-extern UINT16 TMS_ReqPow;
-extern UINT32 BMS_TotalCharEngy;
-extern UINT32 BMS_TotalDisCharEngy;
-extern UINT32 BMS_TotalBackCharEngy;
-extern UINT32 BMS_TotalStaCharEngy;
-extern UINT32 BMS_TotalGunCharEngy;
-extern UINT32 BMS_TotalGunCharCapy;
-extern UINT32 BMS_TotalCharCapy;
-extern UINT32 BMS_TotalDisCharCapy;
-extern UINT32 BMS_TotalBackCharCapy;
-extern UINT32 BMS_TotalStaCharCapy;
+
+extern UINT32 canMsgNoRecvCounter;
+
+extern UINT32 BcuInTable[71];
+extern BOOL BcuRxShortError[71];
+extern BOOL BcuRxLongError[71];
+extern UINT8 BcuRxErrorCounter[71];
+extern UINT8 BcuRxFlag[71];
+extern UINT8 VcuBcuOperModReq;
+extern UINT8 BcuErrRank;
+extern UINT8 BcuErrNum;
+extern UINT8 BcuUpAlw;
+extern UINT8 BcuOperMod;
+extern UINT8 BcuChrgMod;
+extern UINT8 BcuChrgSt;
+extern UINT8 BcuChrgEndReason;
+extern UINT8 BcuCellNr;
+extern UINT8 BcuModT[96];
+
+// declear the UINT16 vars
+extern UINT16 BcuSoc;
+extern UINT16 BcuErrCode;
+extern UINT16 BcuInsulationR;
+extern UINT16 BcuBattI1;
+extern UINT16 BcuBattI2;
+extern UINT16 BcuBattU1;
+extern UINT16 BcuBattU2;
+extern UINT16 BcuChrgIReq;
+extern UINT16 BcuChrgUReq;
+extern UINT16 BcuReChrgTm;
+extern UINT16 BcuDisChrPwrMaxLong;
+extern UINT16 BcuSoh;
+extern UINT16 BcuCellCap;
+extern UINT16 BcuCellR;
+extern UINT16 BcuReEgy;
+extern UINT16 BcuSoe;
+extern UINT16 BcuAhSoc;
+extern UINT16 BcuBattSoc;
+extern UINT16 BcuEKFSoc;
+extern UINT16 BcuEquilist[12];
+extern UINT16 BcuCellU[192];
+// declear the UINT32 vars
+extern UINT32 BcuChrPwrMaxLong;
 #endif
 #endif /* APPGLOBALVAR_H_ */

+ 1176 - 620
src/AppTaskCan.c

@@ -31,6 +31,8 @@ void CanTask(void *pvParameters)
 	xTimerStart(monitorTimer1ms, 0);
 	BaseType_t ret = pdFALSE;
 	GsensorInit();
+	UINT32 BmsPwrOnConuter = 0;
+	Dio_LevelType StdFlgret= STD_OFF;
 	while (1)
 	{
 		do
@@ -39,6 +41,7 @@ void CanTask(void *pvParameters)
 			ret = xQueueReceive(CanRecvQueueHandle, &CanRxMsg, 1);
 			if (ret == pdPASS)
 			{
+				canMsgNoRecvCounter = 0;
 				if (IsJumptoBootloader(CanRxMsg.id, CanRxMsg.data))
 				{
 					DoRoutinePositiveAnswer();
@@ -59,9 +62,31 @@ void CanTask(void *pvParameters)
 		}
 		if ((TimerCounter - timerCounterNow) > 100)
 		{
+			canMsgNoRecvCounter++;
 			BcuRxDiagnose();
 			timerCounterNow = TimerCounter;
 			ADC_ReadValue();
+			if(StdFlgret == STD_ON)
+			{
+				BmsPwrOnConuter++;
+			}
+			else
+			{
+				BmsPwrOnConuter = 0;
+			}
+
+		}
+		if (canMsgNoRecvCounter >= 10 * 60 * 60)
+		{
+			canMsgNoRecvCounter = 0;
+			Dio_WriteChannel(DioConf_DioChannel_PTA11_GPIO_OUT_MCU_BMS_WAKEUP_EN, STD_ON);
+			StdFlgret = STD_ON;
+		}
+		if(BmsPwrOnConuter >= 10 * 60 * 5)
+		{
+			Dio_WriteChannel(DioConf_DioChannel_PTA11_GPIO_OUT_MCU_BMS_WAKEUP_EN, STD_OFF);
+			BmsPwrOnConuter = 0;
+			StdFlgret = STD_OFF;
 		}
 	}
 }
@@ -70,347 +95,540 @@ void BcuDecodeFunction(uint32 ID, uint8 *rawData)
 {
 	switch (ID)
 	{
-	case 0x1801D0F3:
-		BMS_ReqVIN = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0x3);
-		BMS_ReqHVOff = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 2) & 0x3);
+	case 0x721:
+		VcuBcuOperModReq = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0x1);
 		BcuRxFlag[0] = 0x01;
 		break;
-	case 0x1801D8F3:
-		BMS_SoftwareVersion = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
-		BMS_HardwareVersion = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
-		BMS_ProtocolEditionH = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0x3);
-		BMS_ProtocolEditionL = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 2) & 0xF);
+	case 0x830:
+		BcuSoc = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuErrCode = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuErrRank = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xF);
+		BcuErrNum = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0x7F);
+		BcuUpAlw = (UINT8)(((*(UINT8 *)(rawData + 5)) >> 7) & 0x1);
+		BcuInsulationR = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFF);
+		BcuOperMod = (UINT8)(((*(UINT8 *)(rawData + 7)) >> 4) & 0xF);
 		BcuRxFlag[1] = 0x01;
 		break;
-	case 0x1880D0F3:
-		BMS_CharDevNum = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xF);
-		BMS_FtPosRly = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 4) & 0x1);
-		BMS_FtNegRly = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 5) & 0x1);
-		BMS_FtPosCharRly1 = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 6) & 0x1);
-		BMS_FtNegCharRly1 = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 7) & 0x1);
-		BMS_FtPosCharRly2 = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0x1);
-		BMS_FtNegCharRly2 = (UINT8)(((*(UINT8 *)(rawData + 1)) >> 1) & 0x1);
-		BMS_FtHeatRly1 = (UINT8)(((*(UINT8 *)(rawData + 1)) >> 2) & 0x1);
-		BMS_FtHeatRly2 = (UINT8)(((*(UINT8 *)(rawData + 1)) >> 3) & 0x1);
-		BMS_StPosRly = (UINT8)(((*(UINT8 *)(rawData + 1)) >> 4) & 0x3);
-		BMS_StNegRly = (UINT8)(((*(UINT8 *)(rawData + 1)) >> 6) & 0x3);
-		BMS_StPreCharRly = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0x3);
-		BMS_StPosCharRly1 = (UINT8)(((*(UINT8 *)(rawData + 2)) >> 2) & 0x3);
-		BMS_StNegCharRly1 = (UINT8)(((*(UINT8 *)(rawData + 2)) >> 4) & 0x3);
-		BMS_StPosCharRly2 = (UINT8)(((*(UINT8 *)(rawData + 2)) >> 6) & 0x3);
-		BMS_StNegCharRly2 = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0x3);
-		BMS_FtAuxRelayWeld = (UINT8)(((*(UINT8 *)(rawData + 3)) >> 2) & 0x1);
-		BMS_BraOpenCirc = (UINT8)(((*(UINT8 *)(rawData + 3)) >> 3) & 0x1);
-		BMS_FtBackCharCurrOutLim = (UINT8)(((*(UINT8 *)(rawData + 3)) >> 4) & 0x3);
-		BMS_FtPosRlyOpen = (UINT8)(((*(UINT8 *)(rawData + 3)) >> 6) & 0x1);
-		BMS_FtNegRlyOpen = (UINT8)(((*(UINT8 *)(rawData + 3)) >> 7) & 0x1);
-		BMS_FtPosCharRly1Open = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0x1);
-		BMS_FtPosCharRly2Open = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 1) & 0x1);
-		BMS_FtNegCharRly1Open = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 2) & 0x1);
-		BMS_FtNegCharRly2Open = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 3) & 0x1);
-		BMS_FtTMSContClose = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 4) & 0x1);
-		BMS_FtTMSContOpen = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 5) & 0x1);
-		BMS_FtTMS = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 6) & 0x1);
-		BMS_Ft24VSpy = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 7) & 0x1);
-		BMS_FtPACKSelfProt = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0x1);
-		BMS_FtCharSockTempOver = (UINT8)(((*(UINT8 *)(rawData + 5)) >> 1) & 0x3);
-		BMS_FtTempOutCtrl = (UINT8)(((*(UINT8 *)(rawData + 5)) >> 3) & 0x1);
-		BMS_StPosHeatRly = (UINT8)(((*(UINT8 *)(rawData + 5)) >> 4) & 0x3);
-		BMS_StNegHeatRly = (UINT8)(((*(UINT8 *)(rawData + 5)) >> 6) & 0x3);
-		BMS_CharSysNum = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xF);
-		BMS_FtCode = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
+	case 0x831:
+		BcuBattI1 = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuBattI2 = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuBattU1 = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuBattU2 = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[2] = 0x01;
 		break;
-	case 0x1881D0F3:
-		BMS_ST1CheckSum = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
-		BMS_ST1Counter = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xF);
-		BMS_Mode = (UINT8)(((*(UINT8 *)(rawData + 1)) >> 4) & 0x3);
-		BMS_AuxRlySt = (UINT8)(((*(UINT8 *)(rawData + 1)) >> 6) & 0x1);
-		BMS_BattBalaSt = (UINT8)(((*(UINT8 *)(rawData + 1)) >> 7) & 0x1);
-		BMS_CharGunSt = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0x1);
-		BMS_CharMode = (UINT8)(((*(UINT8 *)(rawData + 2)) >> 1) & 0x3);
-		BMS_CharSt = (UINT8)(((*(UINT8 *)(rawData + 2)) >> 3) & 0x3);
-		BMS_FtLvl = (UINT8)(((*(UINT8 *)(rawData + 2)) >> 5) & 0x3);
-		BMS_FtCellTempDiff = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0x3);
-		BMS_FtCellTempHigh = (UINT8)(((*(UINT8 *)(rawData + 3)) >> 2) & 0x3);
-		BMS_FtPACKOverVolt = (UINT8)(((*(UINT8 *)(rawData + 3)) >> 4) & 0x3);
-		BMS_FtPACKUndeVolt = (UINT8)(((*(UINT8 *)(rawData + 3)) >> 6) & 0x3);
-		BMS_FtSOCLow = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0x3);
-		BMS_FtCellOverVolt = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 2) & 0x3);
-		BMS_FtCellUndeVolt = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 4) & 0x3);
-		BMS_FtIns = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 6) & 0x3);
-		BMS_FtCellOverVoltDiff = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0x3);
-		BMS_FtCharCurrOver = (UINT8)(((*(UINT8 *)(rawData + 5)) >> 2) & 0x3);
-		BMS_FtDisCharCurrOver = (UINT8)(((*(UINT8 *)(rawData + 5)) >> 4) & 0x3);
-		BMS_FtCellTempLow = (UINT8)(((*(UINT8 *)(rawData + 5)) >> 6) & 0x3);
-		BMS_FtBranVoltDifOver = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0x3);
-		BMS_FtBMSHardWare = (UINT8)(((*(UINT8 *)(rawData + 6)) >> 2) & 0x3);
-		BMS_FtSOCHigh = (UINT8)(((*(UINT8 *)(rawData + 6)) >> 4) & 0x1);
-		BMS_FtSOCJump = (UINT8)(((*(UINT8 *)(rawData + 6)) >> 5) & 0x1);
-		BMS_FtInCom = (UINT8)(((*(UINT8 *)(rawData + 6)) >> 6) & 0x1);
-		BMS_FtSysMism = (UINT8)(((*(UINT8 *)(rawData + 6)) >> 7) & 0x1);
-		BMS_FtHvIntLock = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0x1);
-		BMS_FtSmoke = (UINT8)(((*(UINT8 *)(rawData + 7)) >> 1) & 0x1);
-		BMS_FtFire = (UINT8)(((*(UINT8 *)(rawData + 7)) >> 2) & 0x1);
-		BMS_FtNum = (UINT8)(((*(UINT8 *)(rawData + 7)) >> 3) & 0x1F);
+	case 0x832:
+		BcuChrgMod = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xF);
+		BcuChrgSt = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 4) & 0xF);
+		BcuChrgIReq = (UINT16)(((*(UINT8 *)(rawData + 1)) | (*(UINT8 *)(rawData + 2) << 8)) & 0xFFFF);
+		BcuChrgUReq = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuReChrgTm = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuChrgEndReason = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
 		BcuRxFlag[3] = 0x01;
 		break;
-	case 0x1882D0F3:
-		BMS_PackSOC = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
-		BMS_PackSOH = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
-		BMS_PackCurr = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
-		BMS_MaxCharCurr = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
-		BMS_MaxDisCharCurr = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+	case 0x833:
+		BcuDisChrPwrMaxLong = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuChrPwrMaxLong = (UINT32)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8) | (*(UINT8 *)(rawData + 4) << 16) | (*(UINT8 *)(rawData + 5) << 24)) & 0xFFFFFFFF);
 		BcuRxFlag[4] = 0x01;
 		break;
-	case 0x1883D0F3:
-		BMS_PosIns = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
-		BMS_NegIns = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
-		BMS_BattVolt = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
-		BMS_LinkVolt = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+	case 0x834:
+		BcuSoh = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellNr = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
+		BcuCellCap = (UINT16)(((*(UINT8 *)(rawData + 3)) | (*(UINT8 *)(rawData + 4) << 8)) & 0xFFFF);
+		BcuCellR = (UINT16)(((*(UINT8 *)(rawData + 5)) | (*(UINT8 *)(rawData + 6) << 8)) & 0xFFFF);
 		BcuRxFlag[5] = 0x01;
 		break;
-	case 0x1884D0F3:
-		BMS_MaxCellTemp = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
-		BMS_MinCellTemp = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
-		BMS_AverCellTemp = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
-		BMS_MaxCellTempCSC = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
-		BMS_MaxCellTempNum = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
-		BMS_MinCellTempCSC = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
-		BMS_MinCellTempNum = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
+	case 0x835:
+		BcuReEgy = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuSoe = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
 		BcuRxFlag[6] = 0x01;
 		break;
-	case 0x1885D0F3:
-		BMS_MaxCellVolt = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
-		BMS_MaxCellVoltCSC = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
-		BMS_MaxCellVoltNum = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
-		BMS_AverCellVolt = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+	case 0x837:
+		BcuAhSoc = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuBattSoc = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuEKFSoc = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
 		BcuRxFlag[7] = 0x01;
 		break;
-	case 0x1886D0F3:
-		BMS_MinCellVolt = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
-		BMS_MinCellVoltCSC = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
-		BMS_MinCellVoltNum = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
-		BMS_ContChrgCurr = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
-		BMS_ContDisCharCurr = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+	case 0x840:
+		BcuEquilist[0] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuEquilist[1] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuEquilist[2] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuEquilist[3] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[8] = 0x01;
 		break;
-	case 0x1887D0F3:
-		BMS_CharReqVolt = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
-		BMS_CharReqCurr = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
-		BMS_SysInsRes = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
-		BMS_InsDeteSt = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0x1);
-		BMS_FtCharInsLow = (UINT8)(((*(UINT8 *)(rawData + 6)) >> 1) & 0x1);
-		BMS_FtCurrSenr = (UINT8)(((*(UINT8 *)(rawData + 6)) >> 2) & 0x1);
-		BMS_FtHeatingFilm = (UINT8)(((*(UINT8 *)(rawData + 6)) >> 3) & 0x1);
-		BMS_FtMainLoopPreChar = (UINT8)(((*(UINT8 *)(rawData + 6)) >> 4) & 0x1);
-		BMS_FtAuxLoopPreChar = (UINT8)(((*(UINT8 *)(rawData + 6)) >> 5) & 0x1);
-		BMS_FtACANLost = (UINT8)(((*(UINT8 *)(rawData + 6)) >> 6) & 0x1);
-		BMS_FtDCDC = (UINT8)(((*(UINT8 *)(rawData + 6)) >> 7) & 0x1);
-		BMS_FtSOCDif = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0x1);
-		BMS_FtCellOverDisChar = (UINT8)(((*(UINT8 *)(rawData + 7)) >> 1) & 0x1);
-		BMS_FtCharOver = (UINT8)(((*(UINT8 *)(rawData + 7)) >> 2) & 0x3);
-		BMS_FtContDisCharCurrOverLoad = (UINT8)(((*(UINT8 *)(rawData + 7)) >> 4) & 0x3);
-		BMS_FtContCharCurrOverLoad = (UINT8)(((*(UINT8 *)(rawData + 7)) >> 6) & 0x3);
+	case 0x841:
+		BcuEquilist[4] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuEquilist[5] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuEquilist[6] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuEquilist[7] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[9] = 0x01;
 		break;
-	case 0x1888D0F3:
-		BMS_MaxDisCharPwr = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
-		BMS_MaxCharPwr = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
-		BMS_ContDisCharPwr = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
-		BMS_ContCharPwr = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+	case 0x842:
+		BcuEquilist[8] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuEquilist[9] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuEquilist[10] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuEquilist[11] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[10] = 0x01;
 		break;
-	case 0x1889D0F3:
-		BMS_InstEngyCons = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
-		BMS_TotalEngyCons = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
-		BMS_SOE = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
-		BMS_RmanCharTime = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+	case 0x843:
+		BcuCellU[0] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[1] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[2] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[3] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[11] = 0x01;
 		break;
-	case 0x188AD0F3:
-		BMS_Gun1DCNegTemp = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
-		BMS_Gun1DCPosTemp = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
-		BMS_Gun2DCNegTemp = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
-		BMS_Gun2DCPosTemp = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
-		BMS_CurrHeatSt = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0x3);
-		BMS_CurrCoolSt = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 2) & 0x3);
-		BMS_FtCharCnct = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 4) & 0x1);
-		BMS_FtOverDisCharCurrDuringChar = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 5) & 0x1);
-		BMS_FtCharNTC = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 6) & 0x1);
-		BMS_FtELock = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 7) & 0x1);
-		BMS_CharNum = (UINT16)(((*(UINT8 *)(rawData + 5)) | (*(UINT8 *)(rawData + 6) << 8)) & 0xFFFF);
+	case 0x844:
+		BcuCellU[4] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[5] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[6] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[7] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[12] = 0x01;
 		break;
-	case 0x18C1D0F3:
-		BMS_CellVoltFramNum = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
-		BMS_CSC_Code = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
-		if (BMS_CellVoltFramNum == 0 || BMS_CellVoltFramNum > 128)
-		{
-			break;
-		}
-		for (UINT8 i = 0; i < 3; i++)
-		{
-			BMS_CellVolt[(BMS_CellVoltFramNum - 1) * 3 + i] = (UINT16)(((*(UINT8 *)(rawData + i * 2 + 2)) | (*(UINT8 *)(rawData + i * 2 + 3) << 8)) & 0xFFFF);
-		}
+	case 0x845:
+		BcuCellU[8] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[9] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[10] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[11] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[13] = 0x01;
 		break;
-	case 0x18C2D0F3:
-		BMS_CellTempFramNum = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
-		BMS_CSC_Code = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
-		if (BMS_CellTempFramNum == 0 || BMS_CellTempFramNum > 12)
-		{
-			break;
-		}
-		for (UINT8 i = 0; i < 6; i++)
-		{
-			if (((BMS_CellTempFramNum - 1) * 6 + i) < sizeof(BMS_CellTemp))
-			{
-				BMS_CellTemp[(BMS_CellTempFramNum - 1) * 6 + i] = (UINT8)(((*(UINT8 *)(rawData + 2 + i))) & 0xFF);
-			}
-		}
+	case 0x846:
+		BcuCellU[12] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[13] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[14] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[15] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[14] = 0x01;
 		break;
-	case 0x18E1D0F3:
-		BMS_Checksum = 0;
-		for (UINT8 i = 1; i < 8; i++)
-		{
-			BMS_Checksum = (UINT8)(((*(UINT8 *)(rawData + i))) & 0xFF) ^ BMS_Checksum;
-		}
-		if (BMS_Checksum == (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF))
-		{
-			BMS_PackComp = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0x7);
-			BMS_BattCodeLeng = (UINT8)(((*(UINT8 *)(rawData + 1)) >> 3) & 0x1F);
-			BMS_SN[0] = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
-			BMS_SN[1] = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
-			BMS_SN[2] = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
-			BMS_SN[3] = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
-			BMS_SN[4] = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
-			BMS_SN[5] = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
-		}
+	case 0x847:
+		BcuCellU[16] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[17] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[18] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[19] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[15] = 0x01;
 		break;
-	case 0x18E2D0F3:
-		BMS_Checksum = 0;
-		for (UINT8 i = 1; i < 8; i++)
-		{
-			BMS_Checksum = (UINT8)(((*(UINT8 *)(rawData + i))) & 0xFF) ^ BMS_Checksum;
-		}
-		if (BMS_Checksum == (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF))
-		{
-			BMS_SN[6] = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
-			BMS_SN[7] = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
-			BMS_SN[8] = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
-			BMS_SN[9] = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
-			BMS_SN[10] = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
-			BMS_SN[11] = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
-			BMS_SN[12] = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
-		}
+	case 0x848:
+		BcuCellU[20] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[21] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[22] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[23] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[16] = 0x01;
 		break;
-	case 0x18E3D0F3:
-		BMS_Checksum = 0;
-		for (UINT8 i = 1; i < 8; i++)
-		{
-			BMS_Checksum = (UINT8)(((*(UINT8 *)(rawData + i))) & 0xFF) ^ BMS_Checksum;
-		}
-		if (BMS_Checksum == (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF))
-		{
-			BMS_SN[13] = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
-			BMS_SN[14] = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
-			BMS_SN[15] = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
-			BMS_SN[16] = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
-			BMS_SN[17] = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
-			BMS_SN[18] = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
-			BMS_SN[19] = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
-		}
+	case 0x849:
+		BcuCellU[24] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[25] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[26] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[27] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[17] = 0x01;
 		break;
-	case 0x18E4D0F3:
-		BMS_Checksum = 0;
-		for (UINT8 i = 1; i < 8; i++)
-		{
-			BMS_Checksum = (UINT8)(((*(UINT8 *)(rawData + i))) & 0xFF) ^ BMS_Checksum;
-		}
-		if (BMS_Checksum == (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF))
-		{
-			BMS_SN[20] = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
-			BMS_SN[21] = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
-			BMS_SN[22] = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
-			BMS_SN[23] = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
-			BMS_SN[24] = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
-			BMS_SN[25] = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
-			BMS_SN[26] = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
-		}
+	case 0x84A:
+		BcuCellU[28] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[29] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[30] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[31] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[18] = 0x01;
 		break;
-	case 0x18E5D0F3:
-		BMS_BattRateCap = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
-		BMS_BattRateVolt = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
-		BMS_BattRateEngy = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
-		BMS_BattType = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xF);
-		BMS_CoolType = (UINT8)(((*(UINT8 *)(rawData + 6)) >> 4) & 0x3);
+	case 0x84B:
+		BcuCellU[32] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[33] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[34] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[35] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[19] = 0x01;
 		break;
-	case 0x18E6D0F3:
-		BMS_CSC_Total = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
-		BMS_CellTotal = (UINT16)(((*(UINT8 *)(rawData + 1)) | (*(UINT8 *)(rawData + 2) << 8)) & 0xFFFF);
-		BMS_TempTotal = (UINT16)(((*(UINT8 *)(rawData + 3)) | (*(UINT8 *)(rawData + 4) << 8)) & 0xFFFF);
-		BMS_CellVoltLevel = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
-		BMS_CellMinVolt = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
-		BMS_CellMaxVolt = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
+	case 0x84C:
+		BcuCellU[36] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[37] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[38] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[39] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[20] = 0x01;
 		break;
-	case 0x18F1D0F3:
-		BMS_TotalCharEngy = (UINT32)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8) | (*(UINT8 *)(rawData + 2) << 16) | (*(UINT8 *)(rawData + 3) << 24)) & 0xFFFFFF);
-		BMS_TotalDisCharEngy = (UINT32)(((*(UINT8 *)(rawData + 3)) | (*(UINT8 *)(rawData + 4) << 8) | (*(UINT8 *)(rawData + 5) << 16) | (*(UINT8 *)(rawData + 6) << 24)) & 0xFFFFFF);
-		BMS_SingleCharEngy = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+	case 0x84D:
+		BcuCellU[40] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[41] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[42] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[43] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[21] = 0x01;
 		break;
-	case 0x18F2D0F3:
-		BMS_TotalBackCharEngy = (UINT32)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8) | (*(UINT8 *)(rawData + 2) << 16) | (*(UINT8 *)(rawData + 3) << 24)) & 0xFFFFFF);
-		BMS_TotalStaCharEngy = (UINT32)(((*(UINT8 *)(rawData + 3)) | (*(UINT8 *)(rawData + 4) << 8) | (*(UINT8 *)(rawData + 5) << 16) | (*(UINT8 *)(rawData + 6) << 24)) & 0xFFFFFF);
+	case 0x84E:
+		BcuCellU[44] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[45] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[46] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[47] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[22] = 0x01;
 		break;
-	case 0x18F3D0F3:
-		BMS_TotalGunCharEngy = (UINT32)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8) | (*(UINT8 *)(rawData + 2) << 16) | (*(UINT8 *)(rawData + 3) << 24)) & 0xFFFFFF);
-		BMS_TotalGunCharCapy = (UINT32)(((*(UINT8 *)(rawData + 3)) | (*(UINT8 *)(rawData + 4) << 8) | (*(UINT8 *)(rawData + 5) << 16) | (*(UINT8 *)(rawData + 6) << 24)) & 0xFFFFFF);
+	case 0x84F:
+		BcuCellU[48] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[49] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[50] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[51] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[23] = 0x01;
 		break;
-	case 0x18F4D0F3:
-		BMS_TotalCharCapy = (UINT32)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8) | (*(UINT8 *)(rawData + 2) << 16) | (*(UINT8 *)(rawData + 3) << 24)) & 0xFFFFFF);
-		BMS_TotalDisCharCapy = (UINT32)(((*(UINT8 *)(rawData + 3)) | (*(UINT8 *)(rawData + 4) << 8) | (*(UINT8 *)(rawData + 5) << 16) | (*(UINT8 *)(rawData + 6) << 24)) & 0xFFFFFF);
-		BMS_SingleCharCapy = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+	case 0x850:
+		BcuCellU[52] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[53] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[54] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[55] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[24] = 0x01;
 		break;
-	case 0x18F5D0F3:
-		BMS_TotalBackCharCapy = (UINT32)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8) | (*(UINT8 *)(rawData + 2) << 16) | (*(UINT8 *)(rawData + 3) << 24)) & 0xFFFFFF);
-		BMS_TotalStaCharCapy = (UINT32)(((*(UINT8 *)(rawData + 3)) | (*(UINT8 *)(rawData + 4) << 8) | (*(UINT8 *)(rawData + 5) << 16) | (*(UINT8 *)(rawData + 6) << 24)) & 0xFFFFFF);
-		BMS_HVBranNum = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
-		BMS_SingleHVBranchCellNum = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
+	case 0x851:
+		BcuCellU[56] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[57] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[58] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[59] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[25] = 0x01;
 		break;
-	case 0x18FF45F4:
-		BMS_ReqMode = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0x3);
-		BMS_HVCmd = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 2) & 0x3);
-		BMS_ChgSts = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 4) & 0x3);
-		BMS_HVRelaySts = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 6) & 0x3);
-		BMS_HVVolt = (UINT16)(((*(UINT8 *)(rawData + 1)) | (*(UINT8 *)(rawData + 2) << 8)) & 0xFFFF);
-		BMS_SetTemp = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
-		BMS_Life = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
-		BMS_CRC = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
+	case 0x852:
+		BcuCellU[60] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[61] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[62] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[63] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[26] = 0x01;
 		break;
-	case 0x18FFC13A:
-		TMS_WorkStatus = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0x3);
-		TMS_HVRelayST = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 2) & 0x3);
-		TMS_OutletTemp = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
-		TMS_InletTemp = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
-		TMS_ReqPow = (UINT16)(((*(UINT8 *)(rawData + 5)) | (*(UINT8 *)(rawData + 6) << 8)) & 0xFFFF);
-		TMS_ErrCode = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0x3F);
-		TMS_FaultLevel = (UINT8)(((*(UINT8 *)(rawData + 7)) >> 6) & 0x3);
+	case 0x853:
+		BcuCellU[64] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[65] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[66] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[67] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
 		BcuRxFlag[27] = 0x01;
 		break;
+	case 0x854:
+		BcuCellU[68] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[69] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[70] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[71] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[28] = 0x01;
+		break;
+	case 0x855:
+		BcuCellU[72] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[73] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[74] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[75] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[29] = 0x01;
+		break;
+	case 0x856:
+		BcuCellU[76] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[77] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[78] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[79] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[30] = 0x01;
+		break;
+	case 0x857:
+		BcuCellU[80] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[81] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[82] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[83] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[31] = 0x01;
+		break;
+	case 0x858:
+		BcuCellU[84] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[85] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[86] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[87] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[32] = 0x01;
+		break;
+	case 0x859:
+		BcuCellU[88] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[89] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[90] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[91] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[33] = 0x01;
+		break;
+	case 0x85A:
+		BcuCellU[92] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[93] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[94] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[95] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[34] = 0x01;
+		break;
+	case 0x85B:
+		BcuCellU[96] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[97] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[98] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[99] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[35] = 0x01;
+		break;
+	case 0x85C:
+		BcuCellU[100] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[101] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[102] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[103] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[36] = 0x01;
+		break;
+	case 0x85D:
+		BcuCellU[104] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[105] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[106] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[107] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[37] = 0x01;
+		break;
+	case 0x85E:
+		BcuCellU[108] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[109] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[110] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[111] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[38] = 0x01;
+		break;
+	case 0x85F:
+		BcuCellU[112] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[113] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[114] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[115] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[39] = 0x01;
+		break;
+	case 0x860:
+		BcuCellU[116] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[117] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[118] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[119] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[40] = 0x01;
+		break;
+	case 0x861:
+		BcuCellU[120] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[121] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[122] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[123] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[41] = 0x01;
+		break;
+	case 0x862:
+		BcuCellU[124] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[125] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[126] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[127] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[42] = 0x01;
+		break;
+	case 0x863:
+		BcuCellU[128] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[129] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[130] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[131] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[43] = 0x01;
+		break;
+	case 0x864:
+		BcuCellU[132] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[133] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[134] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[135] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[44] = 0x01;
+		break;
+	case 0x865:
+		BcuCellU[136] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[137] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[138] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[139] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[45] = 0x01;
+		break;
+	case 0x866:
+		BcuCellU[140] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[141] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[142] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[143] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[46] = 0x01;
+		break;
+	case 0x867:
+		BcuCellU[144] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[145] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[146] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[147] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[47] = 0x01;
+		break;
+	case 0x868:
+		BcuCellU[148] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[149] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[150] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[151] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[48] = 0x01;
+		break;
+	case 0x869:
+		BcuCellU[152] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[153] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[154] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[155] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[49] = 0x01;
+		break;
+	case 0x86A:
+		BcuCellU[156] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[157] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[158] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[159] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[50] = 0x01;
+		break;
+	case 0x86B:
+		BcuCellU[160] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[161] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[162] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[163] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[51] = 0x01;
+		break;
+	case 0x86C:
+		BcuCellU[164] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[165] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[166] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[167] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[52] = 0x01;
+		break;
+	case 0x86D:
+		BcuCellU[168] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[169] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[170] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[171] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[53] = 0x01;
+		break;
+	case 0x86E:
+		BcuCellU[172] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[173] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[174] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[175] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[54] = 0x01;
+		break;
+	case 0x86F:
+		BcuCellU[176] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[177] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[178] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[179] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[55] = 0x01;
+		break;
+	case 0x870:
+		BcuCellU[180] = (UINT16)(((*(UINT8 *)(rawData + 0)) | (*(UINT8 *)(rawData + 1) << 8)) & 0xFFFF);
+		BcuCellU[181] = (UINT16)(((*(UINT8 *)(rawData + 2)) | (*(UINT8 *)(rawData + 3) << 8)) & 0xFFFF);
+		BcuCellU[182] = (UINT16)(((*(UINT8 *)(rawData + 4)) | (*(UINT8 *)(rawData + 5) << 8)) & 0xFFFF);
+		BcuCellU[183] = (UINT16)(((*(UINT8 *)(rawData + 6)) | (*(UINT8 *)(rawData + 7) << 8)) & 0xFFFF);
+		BcuRxFlag[56] = 0x01;
+		break;
+	case 0x871:
+		BcuRxFlag[57] = 0x01;
+		break;
+	case 0x872:
+		BcuRxFlag[58] = 0x01;
+		break;
+	case 0x873:
+		BcuModT[0] = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
+		BcuModT[1] = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
+		BcuModT[2] = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
+		BcuModT[3] = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
+		BcuModT[4] = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
+		BcuModT[5] = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
+		BcuModT[6] = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
+		BcuModT[7] = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
+		BcuRxFlag[59] = 0x01;
+		break;
+	case 0x874:
+		BcuModT[8] = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
+		BcuModT[9] = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
+		BcuModT[10] = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
+		BcuModT[11] = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
+		BcuModT[12] = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
+		BcuModT[13] = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
+		BcuModT[14] = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
+		BcuModT[15] = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
+		BcuRxFlag[60] = 0x01;
+		break;
+	case 0x875:
+		BcuModT[16] = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
+		BcuModT[17] = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
+		BcuModT[18] = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
+		BcuModT[19] = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
+		BcuModT[20] = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
+		BcuModT[21] = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
+		BcuModT[22] = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
+		BcuModT[23] = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
+		BcuRxFlag[61] = 0x01;
+		break;
+	case 0x876:
+		BcuModT[24] = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
+		BcuModT[25] = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
+		BcuModT[26] = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
+		BcuModT[27] = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
+		BcuModT[28] = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
+		BcuModT[29] = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
+		BcuModT[30] = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
+		BcuModT[31] = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
+		BcuRxFlag[62] = 0x01;
+		break;
+	case 0x877:
+		BcuModT[32] = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
+		BcuModT[33] = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
+		BcuModT[34] = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
+		BcuModT[35] = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
+		BcuModT[36] = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
+		BcuModT[37] = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
+		BcuModT[38] = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
+		BcuModT[39] = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
+		BcuRxFlag[63] = 0x01;
+		break;
+	case 0x878:
+		BcuModT[40] = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
+		BcuModT[41] = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
+		BcuModT[42] = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
+		BcuModT[43] = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
+		BcuModT[44] = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
+		BcuModT[45] = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
+		BcuModT[46] = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
+		BcuModT[47] = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
+		BcuRxFlag[64] = 0x01;
+		break;
+	case 0x879:
+		BcuModT[48] = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
+		BcuModT[49] = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
+		BcuModT[50] = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
+		BcuModT[51] = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
+		BcuModT[52] = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
+		BcuModT[53] = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
+		BcuModT[54] = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
+		BcuModT[55] = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
+		BcuRxFlag[65] = 0x01;
+		break;
+	case 0x87A:
+		BcuModT[56] = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
+		BcuModT[57] = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
+		BcuModT[58] = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
+		BcuModT[59] = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
+		BcuModT[60] = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
+		BcuModT[61] = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
+		BcuModT[62] = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
+		BcuModT[63] = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
+		BcuRxFlag[66] = 0x01;
+		break;
+	case 0x87B:
+		BcuModT[64] = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
+		BcuModT[65] = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
+		BcuModT[66] = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
+		BcuModT[67] = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
+		BcuModT[68] = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
+		BcuModT[69] = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
+		BcuModT[70] = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
+		BcuModT[71] = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
+		BcuRxFlag[67] = 0x01;
+		break;
+	case 0x87C:
+		BcuModT[72] = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
+		BcuModT[73] = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
+		BcuModT[74] = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
+		BcuModT[75] = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
+		BcuModT[76] = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
+		BcuModT[77] = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
+		BcuModT[78] = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
+		BcuModT[79] = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
+		BcuRxFlag[68] = 0x01;
+		break;
+	case 0x87D:
+		BcuModT[80] = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
+		BcuModT[81] = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
+		BcuModT[82] = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
+		BcuModT[83] = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
+		BcuModT[84] = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
+		BcuModT[85] = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
+		BcuModT[86] = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
+		BcuModT[87] = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
+		BcuRxFlag[69] = 0x01;
+		break;
+	case 0x87E:
+		BcuModT[88] = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
+		BcuModT[89] = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
+		BcuModT[90] = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
+		BcuModT[91] = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
+		BcuModT[92] = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
+		BcuModT[93] = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
+		BcuModT[94] = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
+		BcuModT[95] = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
+		BcuRxFlag[70] = 0x01;
+		break;
 	case 0x1C00EDEA:
 		UDSAnsFunc(rawData);
 		break;
@@ -692,14 +910,13 @@ static void BattSendFunc(void)
 	case 0x03:
 	{
 		CanAnsId = 0x1C0AEAED;
-		uint16 SocTemp = BMS_PackSOC * 25 / 10;
-		SendData[0] = BMS_PackCurr >> 8;
-		SendData[1] = BMS_PackCurr;
-		SendData[2] = BMS_BattVolt >> 8;
-		SendData[3] = BMS_BattVolt;
-		SendData[4] = SocTemp >> 8;
-		SendData[5] = SocTemp;
-		SendData[6] = (UINT8)(BMS_PackSOH * 25 / 10);
+		SendData[0] = BcuBattI1 >> 8;
+		SendData[1] = BcuBattI1;
+		SendData[2] = BcuBattU1 >> 8;
+		SendData[3] = BcuBattU1;
+		SendData[4] = BcuSoc >> 8;
+		SendData[5] = BcuSoc;
+		SendData[6] = (UINT8)(BcuSoh * 25 / 10);
 		SendData[7] = 0;
 		SendStep++;
 		break;
@@ -714,14 +931,14 @@ static void BattSendFunc(void)
 			return;
 			break;
 		}
-		SendData[0] = BMS_CellTemp[SendCounter * 8 + 0];
-		SendData[1] = BMS_CellTemp[SendCounter * 8 + 1];
-		SendData[2] = BMS_CellTemp[SendCounter * 8 + 2];
-		SendData[3] = BMS_CellTemp[SendCounter * 8 + 3];
-		SendData[4] = BMS_CellTemp[SendCounter * 8 + 4];
-		SendData[5] = BMS_CellTemp[SendCounter * 8 + 5];
-		SendData[6] = BMS_CellTemp[SendCounter * 8 + 6];
-		SendData[7] = BMS_CellTemp[SendCounter * 8 + 7];
+		SendData[0] = BcuModT[SendCounter * 8 + 0];
+		SendData[1] = BcuModT[SendCounter * 8 + 1];
+		SendData[2] = BcuModT[SendCounter * 8 + 2];
+		SendData[3] = BcuModT[SendCounter * 8 + 3];
+		SendData[4] = BcuModT[SendCounter * 8 + 4];
+		SendData[5] = BcuModT[SendCounter * 8 + 5];
+		SendData[6] = BcuModT[SendCounter * 8 + 6];
+		SendData[7] = BcuModT[SendCounter * 8 + 7];
 		SendCounter++;
 		break;
 	}
@@ -735,14 +952,14 @@ static void BattSendFunc(void)
 			return;
 			break;
 		}
-		SendData[0] = BMS_CellVolt[SendCounter * 4 + 0] >> 8;
-		SendData[1] = BMS_CellVolt[SendCounter * 4 + 0];
-		SendData[2] = BMS_CellVolt[SendCounter * 4 + 1] >> 8;
-		SendData[3] = BMS_CellVolt[SendCounter * 4 + 1];
-		SendData[4] = BMS_CellVolt[SendCounter * 4 + 2] >> 8;
-		SendData[5] = BMS_CellVolt[SendCounter * 4 + 2];
-		SendData[6] = BMS_CellVolt[SendCounter * 4 + 3] >> 8;
-		SendData[7] = BMS_CellVolt[SendCounter * 4 + 3];
+		SendData[0] = BcuCellU[SendCounter * 4 + 0] >> 8;
+		SendData[1] = BcuCellU[SendCounter * 4 + 0];
+		SendData[2] = BcuCellU[SendCounter * 4 + 1] >> 8;
+		SendData[3] = BcuCellU[SendCounter * 4 + 1];
+		SendData[4] = BcuCellU[SendCounter * 4 + 2] >> 8;
+		SendData[5] = BcuCellU[SendCounter * 4 + 2];
+		SendData[6] = BcuCellU[SendCounter * 4 + 3] >> 8;
+		SendData[7] = BcuCellU[SendCounter * 4 + 3];
 		SendCounter++;
 		break;
 	}
@@ -798,346 +1015,685 @@ void BcuRxDiagnose(void) // 100ms
 	}
 	if (TimeCounter % 100 == 0) // period <=100ms
 	{
-		BcuRxErrorCounter[0]++; // can msg 0x1801D0F3
+		BcuRxErrorCounter[0]++; // can msg 0x721
 		// if(BcuRxErrorCounter[0]>=13)
-		BcuRxErrorCounter[2]++; // can msg 0x1880D0F3
+		BcuRxErrorCounter[1]++; // can msg 0x830
+		// if(BcuRxErrorCounter[1]>=13)
+		BcuRxErrorCounter[2]++; // can msg 0x831
 		// if(BcuRxErrorCounter[2]>=13)
-		BcuRxErrorCounter[3]++; // can msg 0x1881D0F3
+		BcuRxErrorCounter[3]++; // can msg 0x832
 		// if(BcuRxErrorCounter[3]>=13)
-		BcuRxErrorCounter[4]++; // can msg 0x1882D0F3
-		// if(BcuRxErrorCounter[4]>=13)
-		BcuRxErrorCounter[5]++; // can msg 0x1883D0F3
+		BcuRxErrorCounter[4]++; // can msg 0x833
+								// if(BcuRxErrorCounter[4]>=13)
+	}
+	if (TimeCounter % 1000 == 0) // period ==1000ms
+	{
+		BcuRxErrorCounter[5]++; // can msg 0x834
 		// if(BcuRxErrorCounter[5]>=13)
-		BcuRxErrorCounter[6]++; // can msg 0x1884D0F3
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[5]);
+		BcuRxErrorCounter[6]++; // can msg 0x835
 		// if(BcuRxErrorCounter[6]>=13)
-		BcuRxErrorCounter[7]++; // can msg 0x1885D0F3
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[6]);
+		BcuRxErrorCounter[7]++; // can msg 0x837
 		// if(BcuRxErrorCounter[7]>=13)
-		BcuRxErrorCounter[8]++; // can msg 0x1886D0F3
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[7]);
+		BcuRxErrorCounter[8]++; // can msg 0x840
 		// if(BcuRxErrorCounter[8]>=13)
-		BcuRxErrorCounter[9]++; // can msg 0x1887D0F3
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[8]);
+		BcuRxErrorCounter[9]++; // can msg 0x841
 		// if(BcuRxErrorCounter[9]>=13)
-		BcuRxErrorCounter[10]++; // can msg 0x1888D0F3
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[9]);
+		BcuRxErrorCounter[10]++; // can msg 0x842
 		// if(BcuRxErrorCounter[10]>=13)
-		BcuRxErrorCounter[13]++; // can msg 0x18C1D0F3
-		// if(BcuRxErrorCounter[13]>=13)
-		BcuRxErrorCounter[14]++; // can msg 0x18C2D0F3
-		// if(BcuRxErrorCounter[14]>=13)
-		BcuRxErrorCounter[19]++; // can msg 0x18E5D0F3
-		// if(BcuRxErrorCounter[19]>=13)
-		BcuRxErrorCounter[20]++; // can msg 0x18E6D0F3
-								 // if(BcuRxErrorCounter[20]>=13)
-	}
-	if (TimeCounter % 1000 == 0) // period ==1000ms
-	{
-		BcuRxErrorCounter[11]++; // can msg 0x1889D0F3
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[10]);
+		BcuRxErrorCounter[11]++; // can msg 0x843
 		// if(BcuRxErrorCounter[11]>=13)
 		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[11]);
-		BcuRxErrorCounter[12]++; // can msg 0x188AD0F3
+		BcuRxErrorCounter[12]++; // can msg 0x844
 		// if(BcuRxErrorCounter[12]>=13)
 		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[12]);
-		BcuRxErrorCounter[15]++; // can msg 0x18E1D0F3
+		BcuRxErrorCounter[13]++; // can msg 0x845
+		// if(BcuRxErrorCounter[13]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[13]);
+		BcuRxErrorCounter[14]++; // can msg 0x846
+		// if(BcuRxErrorCounter[14]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[14]);
+		BcuRxErrorCounter[15]++; // can msg 0x847
 		// if(BcuRxErrorCounter[15]>=13)
 		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[15]);
-		BcuRxErrorCounter[16]++; // can msg 0x18E2D0F3
+		BcuRxErrorCounter[16]++; // can msg 0x848
 		// if(BcuRxErrorCounter[16]>=13)
 		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[16]);
-		BcuRxErrorCounter[17]++; // can msg 0x18E3D0F3
+		BcuRxErrorCounter[17]++; // can msg 0x849
 		// if(BcuRxErrorCounter[17]>=13)
 		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[17]);
-		BcuRxErrorCounter[18]++; // can msg 0x18E4D0F3
+		BcuRxErrorCounter[18]++; // can msg 0x84A
 		// if(BcuRxErrorCounter[18]>=13)
 		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[18]);
-		BcuRxErrorCounter[26]++; // can msg 0x18FF45F4
+		BcuRxErrorCounter[19]++; // can msg 0x84B
+		// if(BcuRxErrorCounter[19]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[19]);
+		BcuRxErrorCounter[20]++; // can msg 0x84C
+		// if(BcuRxErrorCounter[20]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[20]);
+		BcuRxErrorCounter[21]++; // can msg 0x84D
+		// if(BcuRxErrorCounter[21]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[21]);
+		BcuRxErrorCounter[22]++; // can msg 0x84E
+		// if(BcuRxErrorCounter[22]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[22]);
+		BcuRxErrorCounter[23]++; // can msg 0x84F
+		// if(BcuRxErrorCounter[23]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[23]);
+		BcuRxErrorCounter[24]++; // can msg 0x850
+		// if(BcuRxErrorCounter[24]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[24]);
+		BcuRxErrorCounter[25]++; // can msg 0x851
+		// if(BcuRxErrorCounter[25]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[25]);
+		BcuRxErrorCounter[26]++; // can msg 0x852
 		// if(BcuRxErrorCounter[26]>=13)
 		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[26]);
-		BcuRxErrorCounter[27]++; // can msg 0x18FFC13A
-								 // if(BcuRxErrorCounter[27]>=13)
-								 // printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[27]);
-	}
-	if (TimeCounter % 30000 == 0) // period ==30000ms
-	{
-		BcuRxErrorCounter[1]++; // can msg 0x1801D8F3
-								// if(BcuRxErrorCounter[1]>=13)
-								// printf("can msg 0x%x lost,cycle time30000ms\n",COMInTable[1]);
+		BcuRxErrorCounter[27]++; // can msg 0x853
+		// if(BcuRxErrorCounter[27]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[27]);
+		BcuRxErrorCounter[28]++; // can msg 0x854
+		// if(BcuRxErrorCounter[28]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[28]);
+		BcuRxErrorCounter[29]++; // can msg 0x855
+		// if(BcuRxErrorCounter[29]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[29]);
+		BcuRxErrorCounter[30]++; // can msg 0x856
+		// if(BcuRxErrorCounter[30]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[30]);
+		BcuRxErrorCounter[31]++; // can msg 0x857
+		// if(BcuRxErrorCounter[31]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[31]);
+		BcuRxErrorCounter[32]++; // can msg 0x858
+		// if(BcuRxErrorCounter[32]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[32]);
+		BcuRxErrorCounter[33]++; // can msg 0x859
+		// if(BcuRxErrorCounter[33]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[33]);
+		BcuRxErrorCounter[34]++; // can msg 0x85A
+		// if(BcuRxErrorCounter[34]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[34]);
+		BcuRxErrorCounter[35]++; // can msg 0x85B
+		// if(BcuRxErrorCounter[35]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[35]);
+		BcuRxErrorCounter[36]++; // can msg 0x85C
+		// if(BcuRxErrorCounter[36]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[36]);
+		BcuRxErrorCounter[37]++; // can msg 0x85D
+		// if(BcuRxErrorCounter[37]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[37]);
+		BcuRxErrorCounter[38]++; // can msg 0x85E
+		// if(BcuRxErrorCounter[38]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[38]);
+		BcuRxErrorCounter[39]++; // can msg 0x85F
+		// if(BcuRxErrorCounter[39]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[39]);
+		BcuRxErrorCounter[40]++; // can msg 0x860
+		// if(BcuRxErrorCounter[40]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[40]);
+		BcuRxErrorCounter[41]++; // can msg 0x861
+		// if(BcuRxErrorCounter[41]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[41]);
+		BcuRxErrorCounter[42]++; // can msg 0x862
+		// if(BcuRxErrorCounter[42]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[42]);
+		BcuRxErrorCounter[43]++; // can msg 0x863
+		// if(BcuRxErrorCounter[43]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[43]);
+		BcuRxErrorCounter[44]++; // can msg 0x864
+		// if(BcuRxErrorCounter[44]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[44]);
+		BcuRxErrorCounter[45]++; // can msg 0x865
+		// if(BcuRxErrorCounter[45]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[45]);
+		BcuRxErrorCounter[46]++; // can msg 0x866
+		// if(BcuRxErrorCounter[46]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[46]);
+		BcuRxErrorCounter[47]++; // can msg 0x867
+		// if(BcuRxErrorCounter[47]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[47]);
+		BcuRxErrorCounter[48]++; // can msg 0x868
+		// if(BcuRxErrorCounter[48]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[48]);
+		BcuRxErrorCounter[49]++; // can msg 0x869
+		// if(BcuRxErrorCounter[49]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[49]);
+		BcuRxErrorCounter[50]++; // can msg 0x86A
+		// if(BcuRxErrorCounter[50]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[50]);
+		BcuRxErrorCounter[51]++; // can msg 0x86B
+		// if(BcuRxErrorCounter[51]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[51]);
+		BcuRxErrorCounter[52]++; // can msg 0x86C
+		// if(BcuRxErrorCounter[52]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[52]);
+		BcuRxErrorCounter[53]++; // can msg 0x86D
+		// if(BcuRxErrorCounter[53]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[53]);
+		BcuRxErrorCounter[54]++; // can msg 0x86E
+		// if(BcuRxErrorCounter[54]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[54]);
+		BcuRxErrorCounter[55]++; // can msg 0x86F
+		// if(BcuRxErrorCounter[55]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[55]);
+		BcuRxErrorCounter[56]++; // can msg 0x870
+		// if(BcuRxErrorCounter[56]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[56]);
+		BcuRxErrorCounter[57]++; // can msg 0x871
+		// if(BcuRxErrorCounter[57]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[57]);
+		BcuRxErrorCounter[58]++; // can msg 0x872
+		// if(BcuRxErrorCounter[58]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[58]);
+		BcuRxErrorCounter[59]++; // can msg 0x873
+		// if(BcuRxErrorCounter[59]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[59]);
+		BcuRxErrorCounter[60]++; // can msg 0x874
+		// if(BcuRxErrorCounter[60]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[60]);
+		BcuRxErrorCounter[61]++; // can msg 0x875
+		// if(BcuRxErrorCounter[61]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[61]);
+		BcuRxErrorCounter[62]++; // can msg 0x876
+		// if(BcuRxErrorCounter[62]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[62]);
+		BcuRxErrorCounter[63]++; // can msg 0x877
+		// if(BcuRxErrorCounter[63]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[63]);
+		BcuRxErrorCounter[64]++; // can msg 0x878
+		// if(BcuRxErrorCounter[64]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[64]);
+		BcuRxErrorCounter[65]++; // can msg 0x879
+		// if(BcuRxErrorCounter[65]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[65]);
+		BcuRxErrorCounter[66]++; // can msg 0x87A
+		// if(BcuRxErrorCounter[66]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[66]);
+		BcuRxErrorCounter[67]++; // can msg 0x87B
+		// if(BcuRxErrorCounter[67]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[67]);
+		BcuRxErrorCounter[68]++; // can msg 0x87C
+		// if(BcuRxErrorCounter[68]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[68]);
+		BcuRxErrorCounter[69]++; // can msg 0x87D
+		// if(BcuRxErrorCounter[69]>=13)
+		// printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[69]);
+		BcuRxErrorCounter[70]++; // can msg 0x87E
+								 // if(BcuRxErrorCounter[70]>=13)
+								 // printf("can msg 0x%x lost,cycle time1000ms\n",COMInTable[70]);
 	}
 }
 void BcuRxMsgSetInvalidValue(uint32 ID)
 {
-
 	switch (ID)
 	{
-	case 0x1801D0F3:
-		BMS_ReqVIN = 0xFF;
-		BMS_ReqHVOff = 0xFF;
-		break;
-	case 0x1801D8F3:
-		BMS_SoftwareVersion = 0xFFFF;
-		BMS_HardwareVersion = 0xFFFF;
-		BMS_ProtocolEditionH = 0xFF;
-		BMS_ProtocolEditionL = 0xFF;
-		break;
-	case 0x1880D0F3:
-		BMS_CharDevNum = 0xFF;
-		BMS_FtPosRly = 0xFF;
-		BMS_FtNegRly = 0xFF;
-		BMS_FtPosCharRly1 = 0xFF;
-		BMS_FtNegCharRly1 = 0xFF;
-		BMS_FtPosCharRly2 = 0xFF;
-		BMS_FtNegCharRly2 = 0xFF;
-		BMS_FtHeatRly1 = 0xFF;
-		BMS_FtHeatRly2 = 0xFF;
-		BMS_StPosRly = 0xFF;
-		BMS_StNegRly = 0xFF;
-		BMS_StPreCharRly = 0xFF;
-		BMS_StPosCharRly1 = 0xFF;
-		BMS_StNegCharRly1 = 0xFF;
-		BMS_StPosCharRly2 = 0xFF;
-		BMS_StNegCharRly2 = 0xFF;
-		BMS_FtAuxRelayWeld = 0xFF;
-		BMS_BraOpenCirc = 0xFF;
-		BMS_FtBackCharCurrOutLim = 0xFF;
-		BMS_FtPosRlyOpen = 0xFF;
-		BMS_FtNegRlyOpen = 0xFF;
-		BMS_FtPosCharRly1Open = 0xFF;
-		BMS_FtPosCharRly2Open = 0xFF;
-		BMS_FtNegCharRly1Open = 0xFF;
-		BMS_FtNegCharRly2Open = 0xFF;
-		BMS_FtTMSContClose = 0xFF;
-		BMS_FtTMSContOpen = 0xFF;
-		BMS_FtTMS = 0xFF;
-		BMS_Ft24VSpy = 0xFF;
-		BMS_FtPACKSelfProt = 0xFF;
-		BMS_FtCharSockTempOver = 0xFF;
-		BMS_FtTempOutCtrl = 0xFF;
-		BMS_StPosHeatRly = 0xFF;
-		BMS_StNegHeatRly = 0xFF;
-		BMS_CharSysNum = 0xFF;
-		BMS_FtCode = 0xFF;
-		break;
-	case 0x1881D0F3:
-		BMS_ST1CheckSum = 0xFF;
-		BMS_ST1Counter = 0xFF;
-		BMS_Mode = 0xFF;
-		BMS_AuxRlySt = 0xFF;
-		BMS_BattBalaSt = 0xFF;
-		BMS_CharGunSt = 0xFF;
-		BMS_CharMode = 0xFF;
-		BMS_CharSt = 0xFF;
-		BMS_FtLvl = 0xFF;
-		BMS_FtCellTempDiff = 0xFF;
-		BMS_FtCellTempHigh = 0xFF;
-		BMS_FtPACKOverVolt = 0xFF;
-		BMS_FtPACKUndeVolt = 0xFF;
-		BMS_FtSOCLow = 0xFF;
-		BMS_FtCellOverVolt = 0xFF;
-		BMS_FtCellUndeVolt = 0xFF;
-		BMS_FtIns = 0xFF;
-		BMS_FtCellOverVoltDiff = 0xFF;
-		BMS_FtCharCurrOver = 0xFF;
-		BMS_FtDisCharCurrOver = 0xFF;
-		BMS_FtCellTempLow = 0xFF;
-		BMS_FtBranVoltDifOver = 0xFF;
-		BMS_FtBMSHardWare = 0xFF;
-		BMS_FtSOCHigh = 0xFF;
-		BMS_FtSOCJump = 0xFF;
-		BMS_FtInCom = 0xFF;
-		BMS_FtSysMism = 0xFF;
-		BMS_FtHvIntLock = 0xFF;
-		BMS_FtSmoke = 0xFF;
-		BMS_FtFire = 0xFF;
-		BMS_FtNum = 0xFF;
-		break;
-	case 0x1882D0F3:
-		BMS_PackSOC = 0xFF;
-		BMS_PackSOH = 0xFF;
-		BMS_PackCurr = 0xFFFF;
-		BMS_MaxCharCurr = 0xFFFF;
-		BMS_MaxDisCharCurr = 0xFFFF;
-		break;
-	case 0x1883D0F3:
-		BMS_PosIns = 0xFFFF;
-		BMS_NegIns = 0xFFFF;
-		BMS_BattVolt = 0xFFFF;
-		BMS_LinkVolt = 0xFFFF;
-		break;
-	case 0x1884D0F3:
-		BMS_MaxCellTemp = 0xFF;
-		BMS_MinCellTemp = 0xFF;
-		BMS_AverCellTemp = 0xFF;
-		BMS_MaxCellTempCSC = 0xFF;
-		BMS_MaxCellTempNum = 0xFF;
-		BMS_MinCellTempCSC = 0xFF;
-		BMS_MinCellTempNum = 0xFF;
-		break;
-	case 0x1885D0F3:
-		BMS_MaxCellVolt = 0xFFFF;
-		BMS_MaxCellVoltCSC = 0xFF;
-		BMS_MaxCellVoltNum = 0xFF;
-		BMS_AverCellVolt = 0xFFFF;
-		break;
-	case 0x1886D0F3:
-		BMS_MinCellVolt = 0xFFFF;
-		BMS_MinCellVoltCSC = 0xFF;
-		BMS_MinCellVoltNum = 0xFF;
-		BMS_ContChrgCurr = 0xFFFF;
-		BMS_ContDisCharCurr = 0xFFFF;
-		break;
-	case 0x1887D0F3:
-		BMS_CharReqVolt = 0xFFFF;
-		BMS_CharReqCurr = 0xFFFF;
-		BMS_SysInsRes = 0xFFFF;
-		BMS_InsDeteSt = 0xFF;
-		BMS_FtCharInsLow = 0xFF;
-		BMS_FtCurrSenr = 0xFF;
-		BMS_FtHeatingFilm = 0xFF;
-		BMS_FtMainLoopPreChar = 0xFF;
-		BMS_FtAuxLoopPreChar = 0xFF;
-		BMS_FtACANLost = 0xFF;
-		BMS_FtDCDC = 0xFF;
-		BMS_FtSOCDif = 0xFF;
-		BMS_FtCellOverDisChar = 0xFF;
-		BMS_FtCharOver = 0xFF;
-		BMS_FtContDisCharCurrOverLoad = 0xFF;
-		BMS_FtContCharCurrOverLoad = 0xFF;
-		break;
-	case 0x1888D0F3:
-		BMS_MaxDisCharPwr = 0xFFFF;
-		BMS_MaxCharPwr = 0xFFFF;
-		BMS_ContDisCharPwr = 0xFFFF;
-		BMS_ContCharPwr = 0xFFFF;
-		break;
-	case 0x1889D0F3:
-		BMS_InstEngyCons = 0xFFFF;
-		BMS_TotalEngyCons = 0xFFFF;
-		BMS_SOE = 0xFFFF;
-		BMS_RmanCharTime = 0xFFFF;
-		break;
-	case 0x188AD0F3:
-		BMS_Gun1DCNegTemp = 0xFF;
-		BMS_Gun1DCPosTemp = 0xFF;
-		BMS_Gun2DCNegTemp = 0xFF;
-		BMS_Gun2DCPosTemp = 0xFF;
-		BMS_CurrHeatSt = 0xFF;
-		BMS_CurrCoolSt = 0xFF;
-		BMS_FtCharCnct = 0xFF;
-		BMS_FtOverDisCharCurrDuringChar = 0xFF;
-		BMS_FtCharNTC = 0xFF;
-		BMS_FtELock = 0xFF;
-		BMS_CharNum = 0xFFFF;
-		break;
-	case 0x18C1D0F3:
-		BMS_CellVoltFramNum = 0xFF;
-		for (UINT16 i = 0; i < sizeof(BMS_CellVolt) / 2; i++)
-		{
-			BMS_CellVolt[i] = 0xFFFF;
-		}
-		break;
-	case 0x18C2D0F3:
-		BMS_CellTempFramNum = 0xFF;
-		BMS_CSC_Code = 0xFF;
-		for (UINT8 i = 0; i < sizeof(BMS_CellTemp); i++)
-		{
-			BMS_CellTemp[i] = 0xFF;
-		}
-		break;
-	case 0x18E1D0F3:
-		BMS_Checksum = 0xFF;
-		BMS_PackComp = 0xFF;
-		BMS_BattCodeLeng = 0xFF;
-		BMS_SN[0] = 0xFF;
-		BMS_SN[1] = 0xFF;
-		BMS_SN[2] = 0xFF;
-		BMS_SN[3] = 0xFF;
-		BMS_SN[4] = 0xFF;
-		BMS_SN[5] = 0xFF;
-		break;
-	case 0x18E2D0F3:
-		BMS_Checksum = 0xFF;
-		BMS_SN[6] = 0xFF;
-		BMS_SN[7] = 0xFF;
-		BMS_SN[8] = 0xFF;
-		BMS_SN[9] = 0xFF;
-		BMS_SN[10] = 0xFF;
-		BMS_SN[11] = 0xFF;
-		BMS_SN[12] = 0xFF;
-		break;
-	case 0x18E3D0F3:
-		BMS_Checksum = 0xFF;
-		BMS_SN[13] = 0xFF;
-		BMS_SN[14] = 0xFF;
-		BMS_SN[15] = 0xFF;
-		BMS_SN[16] = 0xFF;
-		BMS_SN[17] = 0xFF;
-		BMS_SN[18] = 0xFF;
-		BMS_SN[19] = 0xFF;
-		break;
-	case 0x18E4D0F3:
-		BMS_Checksum = 0xFF;
-		BMS_SN[20] = 0xFF;
-		BMS_SN[21] = 0xFF;
-		BMS_SN[22] = 0xFF;
-		BMS_SN[23] = 0xFF;
-		BMS_SN[24] = 0xFF;
-		BMS_SN[25] = 0xFF;
-		BMS_SN[26] = 0xFF;
-		break;
-	case 0x18E5D0F3:
-		BMS_BattRateCap = 0xFFFF;
-		BMS_BattRateVolt = 0xFFFF;
-		BMS_BattRateEngy = 0xFFFF;
-		BMS_BattType = 0xFF;
-		BMS_CoolType = 0xFF;
-		break;
-	case 0x18E6D0F3:
-		BMS_CSC_Total = 0xFF;
-		BMS_CellTotal = BMS_CELL_MAX_NUM;
-		BMS_TempTotal = BMS_TEMP_MAX_NUM;
-		BMS_CellVoltLevel = 0xFF;
-		BMS_CellMinVolt = 0xFF;
-		BMS_CellMaxVolt = 0xFF;
-		break;
-	case 0x18F1D0F3:
-		BMS_TotalCharEngy = 0xFFFFFFFF;
-		BMS_TotalDisCharEngy = 0xFFFFFFFF;
-		BMS_SingleCharEngy = 0xFFFF;
-		break;
-	case 0x18F2D0F3:
-		BMS_TotalBackCharEngy = 0xFFFFFFFF;
-		BMS_TotalStaCharEngy = 0xFFFFFFFF;
-		break;
-	case 0x18F3D0F3:
-		BMS_TotalGunCharEngy = 0xFFFFFFFF;
-		BMS_TotalGunCharCapy = 0xFFFFFFFF;
-		break;
-	case 0x18F4D0F3:
-		BMS_TotalCharCapy = 0xFFFFFFFF;
-		BMS_TotalDisCharCapy = 0xFFFFFFFF;
-		BMS_SingleCharCapy = 0xFFFF;
-		break;
-	case 0x18F5D0F3:
-		BMS_TotalBackCharCapy = 0xFFFFFFFF;
-		BMS_TotalStaCharCapy = 0xFFFFFFFF;
-		BMS_HVBranNum = 0xFF;
-		BMS_SingleHVBranchCellNum = 0xFF;
-		break;
-	case 0x18FF45F4:
-		BMS_ReqMode = 0xFF;
-		BMS_HVCmd = 0xFF;
-		BMS_ChgSts = 0xFF;
-		BMS_HVRelaySts = 0xFF;
-		BMS_HVVolt = 0xFFFF;
-		BMS_SetTemp = 0xFF;
-		BMS_Life = 0xFF;
-		BMS_CRC = 0xFF;
-		break;
-	case 0x18FFC13A:
-		TMS_WorkStatus = 0xFF;
-		TMS_HVRelayST = 0xFF;
-		TMS_OutletTemp = 0xFF;
-		TMS_InletTemp = 0xFF;
-		TMS_ReqPow = 0xFFFF;
-		TMS_ErrCode = 0xFF;
-		TMS_FaultLevel = 0xFF;
+	case 0x721:
+		VcuBcuOperModReq = 0xFF;
+		break;
+	case 0x830:
+		BcuSoc = 0xFFFF;
+		BcuErrCode = 0xFFFF;
+		BcuErrRank = 0xFF;
+		BcuErrNum = 0xFF;
+		BcuUpAlw = 0xFF;
+		BcuInsulationR = 0xFFFF;
+		BcuOperMod = 0xFF;
+		break;
+	case 0x831:
+		BcuBattI1 = 0xFFFF;
+		BcuBattI2 = 0xFFFF;
+		BcuBattU1 = 0xFFFF;
+		BcuBattU2 = 0xFFFF;
+		break;
+	case 0x832:
+		BcuChrgMod = 0xFF;
+		BcuChrgSt = 0xFF;
+		BcuChrgIReq = 0xFFFF;
+		BcuChrgUReq = 0xFFFF;
+		BcuReChrgTm = 0xFFFF;
+		BcuChrgEndReason = 0xFF;
+		break;
+	case 0x833:
+		BcuDisChrPwrMaxLong = 0xFFFF;
+		BcuChrPwrMaxLong = 0xFFFFFFFF;
+		break;
+	case 0x834:
+		BcuSoh = 0xFFFF;
+		BcuCellNr = 0xFF;
+		BcuCellCap = 0xFFFF;
+		BcuCellR = 0xFFFF;
+		break;
+	case 0x835:
+		BcuReEgy = 0xFFFF;
+		BcuSoe = 0xFFFF;
+		break;
+	case 0x837:
+		BcuAhSoc = 0xFFFF;
+		BcuBattSoc = 0xFFFF;
+		BcuEKFSoc = 0xFFFF;
+		break;
+	case 0x840:
+		BcuEquilist[0] = 0xFFFF;
+		BcuEquilist[1] = 0xFFFF;
+		BcuEquilist[2] = 0xFFFF;
+		BcuEquilist[3] = 0xFFFF;
+		break;
+	case 0x841:
+		BcuEquilist[4] = 0xFFFF;
+		BcuEquilist[5] = 0xFFFF;
+		BcuEquilist[6] = 0xFFFF;
+		BcuEquilist[7] = 0xFFFF;
+		break;
+	case 0x842:
+		BcuEquilist[8] = 0xFFFF;
+		BcuEquilist[9] = 0xFFFF;
+		BcuEquilist[10] = 0xFFFF;
+		BcuEquilist[11] = 0xFFFF;
+		break;
+	case 0x843:
+		BcuCellU[0] = 0xFFFF;
+		BcuCellU[1] = 0xFFFF;
+		BcuCellU[2] = 0xFFFF;
+		BcuCellU[3] = 0xFFFF;
+		break;
+	case 0x844:
+		BcuCellU[4] = 0xFFFF;
+		BcuCellU[5] = 0xFFFF;
+		BcuCellU[6] = 0xFFFF;
+		BcuCellU[7] = 0xFFFF;
+		break;
+	case 0x845:
+		BcuCellU[8] = 0xFFFF;
+		BcuCellU[9] = 0xFFFF;
+		BcuCellU[10] = 0xFFFF;
+		BcuCellU[11] = 0xFFFF;
+		break;
+	case 0x846:
+		BcuCellU[12] = 0xFFFF;
+		BcuCellU[13] = 0xFFFF;
+		BcuCellU[14] = 0xFFFF;
+		BcuCellU[15] = 0xFFFF;
+		break;
+	case 0x847:
+		BcuCellU[16] = 0xFFFF;
+		BcuCellU[17] = 0xFFFF;
+		BcuCellU[18] = 0xFFFF;
+		BcuCellU[19] = 0xFFFF;
+		break;
+	case 0x848:
+		BcuCellU[20] = 0xFFFF;
+		BcuCellU[21] = 0xFFFF;
+		BcuCellU[22] = 0xFFFF;
+		BcuCellU[23] = 0xFFFF;
+		break;
+	case 0x849:
+		BcuCellU[24] = 0xFFFF;
+		BcuCellU[25] = 0xFFFF;
+		BcuCellU[26] = 0xFFFF;
+		BcuCellU[27] = 0xFFFF;
+		break;
+	case 0x84A:
+		BcuCellU[28] = 0xFFFF;
+		BcuCellU[29] = 0xFFFF;
+		BcuCellU[30] = 0xFFFF;
+		BcuCellU[31] = 0xFFFF;
+		break;
+	case 0x84B:
+		BcuCellU[32] = 0xFFFF;
+		BcuCellU[33] = 0xFFFF;
+		BcuCellU[34] = 0xFFFF;
+		BcuCellU[35] = 0xFFFF;
+		break;
+	case 0x84C:
+		BcuCellU[36] = 0xFFFF;
+		BcuCellU[37] = 0xFFFF;
+		BcuCellU[38] = 0xFFFF;
+		BcuCellU[39] = 0xFFFF;
+		break;
+	case 0x84D:
+		BcuCellU[40] = 0xFFFF;
+		BcuCellU[41] = 0xFFFF;
+		BcuCellU[42] = 0xFFFF;
+		BcuCellU[43] = 0xFFFF;
+		break;
+	case 0x84E:
+		BcuCellU[44] = 0xFFFF;
+		BcuCellU[45] = 0xFFFF;
+		BcuCellU[46] = 0xFFFF;
+		BcuCellU[47] = 0xFFFF;
+		break;
+	case 0x84F:
+		BcuCellU[48] = 0xFFFF;
+		BcuCellU[49] = 0xFFFF;
+		BcuCellU[50] = 0xFFFF;
+		BcuCellU[51] = 0xFFFF;
+		break;
+	case 0x850:
+		BcuCellU[52] = 0xFFFF;
+		BcuCellU[53] = 0xFFFF;
+		BcuCellU[54] = 0xFFFF;
+		BcuCellU[55] = 0xFFFF;
+		break;
+	case 0x851:
+		BcuCellU[56] = 0xFFFF;
+		BcuCellU[57] = 0xFFFF;
+		BcuCellU[58] = 0xFFFF;
+		BcuCellU[59] = 0xFFFF;
+		break;
+	case 0x852:
+		BcuCellU[60] = 0xFFFF;
+		BcuCellU[61] = 0xFFFF;
+		BcuCellU[62] = 0xFFFF;
+		BcuCellU[63] = 0xFFFF;
+		break;
+	case 0x853:
+		BcuCellU[64] = 0xFFFF;
+		BcuCellU[65] = 0xFFFF;
+		BcuCellU[66] = 0xFFFF;
+		BcuCellU[67] = 0xFFFF;
+		break;
+	case 0x854:
+		BcuCellU[68] = 0xFFFF;
+		BcuCellU[69] = 0xFFFF;
+		BcuCellU[70] = 0xFFFF;
+		BcuCellU[71] = 0xFFFF;
+		break;
+	case 0x855:
+		BcuCellU[72] = 0xFFFF;
+		BcuCellU[73] = 0xFFFF;
+		BcuCellU[74] = 0xFFFF;
+		BcuCellU[75] = 0xFFFF;
+		break;
+	case 0x856:
+		BcuCellU[76] = 0xFFFF;
+		BcuCellU[77] = 0xFFFF;
+		BcuCellU[78] = 0xFFFF;
+		BcuCellU[79] = 0xFFFF;
+		break;
+	case 0x857:
+		BcuCellU[80] = 0xFFFF;
+		BcuCellU[81] = 0xFFFF;
+		BcuCellU[82] = 0xFFFF;
+		BcuCellU[83] = 0xFFFF;
+		break;
+	case 0x858:
+		BcuCellU[84] = 0xFFFF;
+		BcuCellU[85] = 0xFFFF;
+		BcuCellU[86] = 0xFFFF;
+		BcuCellU[87] = 0xFFFF;
+		break;
+	case 0x859:
+		BcuCellU[88] = 0xFFFF;
+		BcuCellU[89] = 0xFFFF;
+		BcuCellU[90] = 0xFFFF;
+		BcuCellU[91] = 0xFFFF;
+		break;
+	case 0x85A:
+		BcuCellU[92] = 0xFFFF;
+		BcuCellU[93] = 0xFFFF;
+		BcuCellU[94] = 0xFFFF;
+		BcuCellU[95] = 0xFFFF;
+		break;
+	case 0x85B:
+		BcuCellU[96] = 0xFFFF;
+		BcuCellU[97] = 0xFFFF;
+		BcuCellU[98] = 0xFFFF;
+		BcuCellU[99] = 0xFFFF;
+		break;
+	case 0x85C:
+		BcuCellU[100] = 0xFFFF;
+		BcuCellU[101] = 0xFFFF;
+		BcuCellU[102] = 0xFFFF;
+		BcuCellU[103] = 0xFFFF;
+		break;
+	case 0x85D:
+		BcuCellU[104] = 0xFFFF;
+		BcuCellU[105] = 0xFFFF;
+		BcuCellU[106] = 0xFFFF;
+		BcuCellU[107] = 0xFFFF;
+		break;
+	case 0x85E:
+		BcuCellU[108] = 0xFFFF;
+		BcuCellU[109] = 0xFFFF;
+		BcuCellU[110] = 0xFFFF;
+		BcuCellU[111] = 0xFFFF;
+		break;
+	case 0x85F:
+		BcuCellU[112] = 0xFFFF;
+		BcuCellU[113] = 0xFFFF;
+		BcuCellU[114] = 0xFFFF;
+		BcuCellU[115] = 0xFFFF;
+		break;
+	case 0x860:
+		BcuCellU[116] = 0xFFFF;
+		BcuCellU[117] = 0xFFFF;
+		BcuCellU[118] = 0xFFFF;
+		BcuCellU[119] = 0xFFFF;
+		break;
+	case 0x861:
+		BcuCellU[120] = 0xFFFF;
+		BcuCellU[121] = 0xFFFF;
+		BcuCellU[122] = 0xFFFF;
+		BcuCellU[123] = 0xFFFF;
+		break;
+	case 0x862:
+		BcuCellU[124] = 0xFFFF;
+		BcuCellU[125] = 0xFFFF;
+		BcuCellU[126] = 0xFFFF;
+		BcuCellU[127] = 0xFFFF;
+		break;
+	case 0x863:
+		BcuCellU[128] = 0xFFFF;
+		BcuCellU[129] = 0xFFFF;
+		BcuCellU[130] = 0xFFFF;
+		BcuCellU[131] = 0xFFFF;
+		break;
+	case 0x864:
+		BcuCellU[132] = 0xFFFF;
+		BcuCellU[133] = 0xFFFF;
+		BcuCellU[134] = 0xFFFF;
+		BcuCellU[135] = 0xFFFF;
+		break;
+	case 0x865:
+		BcuCellU[136] = 0xFFFF;
+		BcuCellU[137] = 0xFFFF;
+		BcuCellU[138] = 0xFFFF;
+		BcuCellU[139] = 0xFFFF;
+		break;
+	case 0x866:
+		BcuCellU[140] = 0xFFFF;
+		BcuCellU[141] = 0xFFFF;
+		BcuCellU[142] = 0xFFFF;
+		BcuCellU[143] = 0xFFFF;
+		break;
+	case 0x867:
+		BcuCellU[144] = 0xFFFF;
+		BcuCellU[145] = 0xFFFF;
+		BcuCellU[146] = 0xFFFF;
+		BcuCellU[147] = 0xFFFF;
+		break;
+	case 0x868:
+		BcuCellU[148] = 0xFFFF;
+		BcuCellU[149] = 0xFFFF;
+		BcuCellU[150] = 0xFFFF;
+		BcuCellU[151] = 0xFFFF;
+		break;
+	case 0x869:
+		BcuCellU[152] = 0xFFFF;
+		BcuCellU[153] = 0xFFFF;
+		BcuCellU[154] = 0xFFFF;
+		BcuCellU[155] = 0xFFFF;
+		break;
+	case 0x86A:
+		BcuCellU[156] = 0xFFFF;
+		BcuCellU[157] = 0xFFFF;
+		BcuCellU[158] = 0xFFFF;
+		BcuCellU[159] = 0xFFFF;
+		break;
+	case 0x86B:
+		BcuCellU[160] = 0xFFFF;
+		BcuCellU[161] = 0xFFFF;
+		BcuCellU[162] = 0xFFFF;
+		BcuCellU[163] = 0xFFFF;
+		break;
+	case 0x86C:
+		BcuCellU[164] = 0xFFFF;
+		BcuCellU[165] = 0xFFFF;
+		BcuCellU[166] = 0xFFFF;
+		BcuCellU[167] = 0xFFFF;
+		break;
+	case 0x86D:
+		BcuCellU[168] = 0xFFFF;
+		BcuCellU[169] = 0xFFFF;
+		BcuCellU[170] = 0xFFFF;
+		BcuCellU[171] = 0xFFFF;
+		break;
+	case 0x86E:
+		BcuCellU[172] = 0xFFFF;
+		BcuCellU[173] = 0xFFFF;
+		BcuCellU[174] = 0xFFFF;
+		BcuCellU[175] = 0xFFFF;
+		break;
+	case 0x86F:
+		BcuCellU[176] = 0xFFFF;
+		BcuCellU[177] = 0xFFFF;
+		BcuCellU[178] = 0xFFFF;
+		BcuCellU[179] = 0xFFFF;
+		break;
+	case 0x870:
+		BcuCellU[180] = 0xFFFF;
+		BcuCellU[181] = 0xFFFF;
+		BcuCellU[182] = 0xFFFF;
+		BcuCellU[183] = 0xFFFF;
+		break;
+	case 0x871:
+		break;
+	case 0x872:
+		break;
+	case 0x873:
+		BcuModT[0] = 0xFF;
+		BcuModT[1] = 0xFF;
+		BcuModT[2] = 0xFF;
+		BcuModT[3] = 0xFF;
+		BcuModT[4] = 0xFF;
+		BcuModT[5] = 0xFF;
+		BcuModT[6] = 0xFF;
+		BcuModT[7] = 0xFF;
+		break;
+	case 0x874:
+		BcuModT[8] = 0xFF;
+		BcuModT[9] = 0xFF;
+		BcuModT[10] = 0xFF;
+		BcuModT[11] = 0xFF;
+		BcuModT[12] = 0xFF;
+		BcuModT[13] = 0xFF;
+		BcuModT[14] = 0xFF;
+		BcuModT[15] = 0xFF;
+		break;
+	case 0x875:
+		BcuModT[16] = 0xFF;
+		BcuModT[17] = 0xFF;
+		BcuModT[18] = 0xFF;
+		BcuModT[19] = 0xFF;
+		BcuModT[20] = 0xFF;
+		BcuModT[21] = 0xFF;
+		BcuModT[22] = 0xFF;
+		BcuModT[23] = 0xFF;
+		break;
+	case 0x876:
+		BcuModT[24] = 0xFF;
+		BcuModT[25] = 0xFF;
+		BcuModT[26] = 0xFF;
+		BcuModT[27] = 0xFF;
+		BcuModT[28] = 0xFF;
+		BcuModT[29] = 0xFF;
+		BcuModT[30] = 0xFF;
+		BcuModT[31] = 0xFF;
+		break;
+	case 0x877:
+		BcuModT[32] = 0xFF;
+		BcuModT[33] = 0xFF;
+		BcuModT[34] = 0xFF;
+		BcuModT[35] = 0xFF;
+		BcuModT[36] = 0xFF;
+		BcuModT[37] = 0xFF;
+		BcuModT[38] = 0xFF;
+		BcuModT[39] = 0xFF;
+		break;
+	case 0x878:
+		BcuModT[40] = 0xFF;
+		BcuModT[41] = 0xFF;
+		BcuModT[42] = 0xFF;
+		BcuModT[43] = 0xFF;
+		BcuModT[44] = 0xFF;
+		BcuModT[45] = 0xFF;
+		BcuModT[46] = 0xFF;
+		BcuModT[47] = 0xFF;
+		break;
+	case 0x879:
+		BcuModT[48] = 0xFF;
+		BcuModT[49] = 0xFF;
+		BcuModT[50] = 0xFF;
+		BcuModT[51] = 0xFF;
+		BcuModT[52] = 0xFF;
+		BcuModT[53] = 0xFF;
+		BcuModT[54] = 0xFF;
+		BcuModT[55] = 0xFF;
+		break;
+	case 0x87A:
+		BcuModT[56] = 0xFF;
+		BcuModT[57] = 0xFF;
+		BcuModT[58] = 0xFF;
+		BcuModT[59] = 0xFF;
+		BcuModT[60] = 0xFF;
+		BcuModT[61] = 0xFF;
+		BcuModT[62] = 0xFF;
+		BcuModT[63] = 0xFF;
+		break;
+	case 0x87B:
+		BcuModT[64] = 0xFF;
+		BcuModT[65] = 0xFF;
+		BcuModT[66] = 0xFF;
+		BcuModT[67] = 0xFF;
+		BcuModT[68] = 0xFF;
+		BcuModT[69] = 0xFF;
+		BcuModT[70] = 0xFF;
+		BcuModT[71] = 0xFF;
+		break;
+	case 0x87C:
+		BcuModT[72] = 0xFF;
+		BcuModT[73] = 0xFF;
+		BcuModT[74] = 0xFF;
+		BcuModT[75] = 0xFF;
+		BcuModT[76] = 0xFF;
+		BcuModT[77] = 0xFF;
+		BcuModT[78] = 0xFF;
+		BcuModT[79] = 0xFF;
+		break;
+	case 0x87D:
+		BcuModT[80] = 0xFF;
+		BcuModT[81] = 0xFF;
+		BcuModT[82] = 0xFF;
+		BcuModT[83] = 0xFF;
+		BcuModT[84] = 0xFF;
+		BcuModT[85] = 0xFF;
+		BcuModT[86] = 0xFF;
+		BcuModT[87] = 0xFF;
+		break;
+	case 0x87E:
+		BcuModT[88] = 0xFF;
+		BcuModT[89] = 0xFF;
+		BcuModT[90] = 0xFF;
+		BcuModT[91] = 0xFF;
+		BcuModT[92] = 0xFF;
+		BcuModT[93] = 0xFF;
+		BcuModT[94] = 0xFF;
+		BcuModT[95] = 0xFF;
 		break;
 	default:
 		break;

+ 200 - 193
src/AppTaskUart1.c

@@ -62,22 +62,22 @@ void Uart_4G_Task(void *pvParameters)
 		case PROCESS_TCP_IDLE: //空闲状态
 		{
 			memset(RX_Buffer[UART_LPUART1], 0x00, sizeof(RX_Buffer[UART_LPUART1]));
-			UART_Receive_Data(UART_LPUART1, RX_Buffer[UART_LPUART1], &pReadLen, 50);//10ms检测
+			UART_Receive_Data(UART_LPUART1, RX_Buffer[UART_LPUART1], &pReadLen, 50); // 10ms检测
 			if (SocketId < 0)
 			{
 				PROC_TCP_STATE_SWITCH(PROCESS_TCP_REGCHK);
 			}
-			else if (pReadLen>0)
+			else if (pReadLen > 0)
 			{
 				PROC_TCP_STATE_SWITCH(PROCESS_TCP_RECV);
 				RecvTimerDelay = TimerCounter;
 			}
-			else if (AppConfigInfo.eolFlg == 1 && (TimerCounter - SendTimerCounter) >= 1000 && TcpWorkState==0)
+			else if (AppConfigInfo.eolFlg == 1 && (TimerCounter - SendTimerCounter) >= 1000 && TcpWorkState == 0 && canMsgNoRecvCounter < 10 * 10)
 			{
 				SendTimerCounter = TimerCounter;
 				PROC_TCP_STATE_SWITCH(PROCESS_TCP_SEND);
 			}
-			if((TimerCounter-RecvTimerDelay)>=10000 && TcpWorkState==1)//10s内没有命令下发,进行正常发送任务
+			if ((TimerCounter - RecvTimerDelay) >= 10000 && TcpWorkState == 1) // 10s内没有命令下发,进行正常发送任务
 			{
 				TcpWorkState = 0;
 			}
@@ -129,7 +129,7 @@ void Uart_4G_Task(void *pvParameters)
 		}
 		case PROCESS_TCP_SEND: //网络数据发送
 		{
-//			Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1,STD_ON);
+			//			Dio_WriteChannel(DioConf_DioChannel_PTE0_GPIO_OUT_MCU_LED1,STD_ON);
 			sint8 SendRet = -1;
 			SendRet = TcpDataSendFunc(SocketId);
 			if (SendRet == 0)
@@ -603,7 +603,7 @@ sint8 at_callbackFunc(char *PSendStr, char *pReadStr, uint8 CmdIdx, uint16 pRead
 			{
 				if (*(retptr - i) == ',')
 				{
-					memcpy(WebSiteIp, retptr - i + 1, i-5);
+					memcpy(WebSiteIp, retptr - i + 1, i - 5);
 					OutValue = 0;
 					break;
 				}
@@ -648,7 +648,7 @@ void TcpDataEncode(uint32 *PtrSendAddr, uint16 *SendLen)
 	{
 		DataIdx = VerMsg; //版本信息发送
 	}
-	else if (TcpSendTimeCounter % 30 == 0)
+	else if (TcpSendTimeCounter % 10 == 0)
 	{
 		DataIdx = TruckBattMsg; //电池信息发送
 	}
@@ -660,7 +660,7 @@ void TcpDataEncode(uint32 *PtrSendAddr, uint16 *SendLen)
 	{
 		DataIdx = TruckAcclMsg; //累计信息发送
 	}
-	else if (TcpSendTimeCounter % 60 == 0)
+	else if ((TcpSendTimeCounter - 3) % 60 == 0)
 	{
 		DataIdx = GpsMsg; //定位信息发送
 	}
@@ -774,12 +774,12 @@ void TcpDataEncode(uint32 *PtrSendAddr, uint16 *SendLen)
 		VerMsgToTcpInfo.VerInfo.msgCollectionTimeUTC[5] = UTC8TimeTcp.second & 0xFF;
 		memcpy(VerMsgToTcpInfo.VerInfo.ICCID, IccidNum, 20);
 		memcpy(VerMsgToTcpInfo.VerInfo.IMEI, ImeiNum, 15);
-		VerMsgToTcpInfo.VerInfo.BMSHwVersion[0] = BMS_HardwareVersion >> 8;
-		VerMsgToTcpInfo.VerInfo.BMSHwVersion[1] = BMS_HardwareVersion;
-		VerMsgToTcpInfo.VerInfo.BMSSwVersion[0] = BMS_SoftwareVersion >> 24;
-		VerMsgToTcpInfo.VerInfo.BMSSwVersion[1] = BMS_SoftwareVersion >> 16;
-		VerMsgToTcpInfo.VerInfo.BMSSwVersion[2] = BMS_SoftwareVersion >> 8;
-		VerMsgToTcpInfo.VerInfo.BMSSwVersion[3] = BMS_SoftwareVersion;
+		VerMsgToTcpInfo.VerInfo.BMSHwVersion[0] = 0 >> 8;
+		VerMsgToTcpInfo.VerInfo.BMSHwVersion[1] = 0;
+		VerMsgToTcpInfo.VerInfo.BMSSwVersion[0] = 0 >> 24;
+		VerMsgToTcpInfo.VerInfo.BMSSwVersion[1] = 0 >> 16;
+		VerMsgToTcpInfo.VerInfo.BMSSwVersion[2] = 0 >> 8;
+		VerMsgToTcpInfo.VerInfo.BMSSwVersion[3] = 0;
 		VerMsgToTcpInfo.VerInfo.HwVersion[0] = (HWVERSION >> 8) & 0xFF;
 		VerMsgToTcpInfo.VerInfo.HwVersion[1] = (HWVERSION)&0xFF;
 		VerMsgToTcpInfo.VerInfo.BLVersion[0] = (BLSWVERSION >> 24) & 0xFF;
@@ -802,9 +802,83 @@ void TcpDataEncode(uint32 *PtrSendAddr, uint16 *SendLen)
 		*PtrSendAddr = (uint32)SendBuffer;
 		break;
 	}
-	case 0x90:
+	// case 0x90:
+	// {
+	// 	*SendLen = 0x52;
+	// 	SendBuffer = malloc(*SendLen);
+	// 	*(SendBuffer + 0) = TCP_START_SYM1;
+	// 	*(SendBuffer + 1) = TCP_START_SYM2;
+	// 	*(SendBuffer + 2) = TCP_CMD_SYM;
+	// 	*(SendBuffer + 3) = TCP_ANS_SYM;
+	// 	memcpy(SendBuffer + 4, TcpbattSN, BATT_SN_LEN);
+	// 	*(SendBuffer + 0x15) = (TCP_ENCPT_DISABLE & 0xFF); // uint8	TCP_ENCPT_DISABLE
+	// 	uint16 DataLen = 0x39;							   // 57
+	// 	*(SendBuffer + 0x16) = ((DataLen >> 8) & 0xFF);	   // uint16	DataLen
+	// 	*(SendBuffer + 0x17) = (DataLen & 0xFF);
+	// 	*(SendBuffer + 0x18) = ((UTC8TimeTcp.year) & 0xFF); // uint8	year
+	// 	*(SendBuffer + 0x19) = (UTC8TimeTcp.month & 0xFF);	// uint8	month
+	// 	*(SendBuffer + 0x1A) = (UTC8TimeTcp.day & 0xFF);	// uint8	day
+	// 	*(SendBuffer + 0x1B) = (UTC8TimeTcp.hour & 0xFF);	// uint8	hour
+	// 	*(SendBuffer + 0x1C) = (UTC8TimeTcp.minute & 0xFF); // uint8	minute
+	// 	*(SendBuffer + 0x1D) = (UTC8TimeTcp.second & 0xFF); // uint8	second
+	// 	*(SendBuffer + 0x1E) = (DataIdx & 0xFF);			// uint8	BATTMSG
+	// 	*(SendBuffer + 0x1F) = ((UTC8TimeTcp.year) & 0xFF); // uint8	year
+	// 	*(SendBuffer + 0x20) = (UTC8TimeTcp.month & 0xFF);	// uint8	month
+	// 	*(SendBuffer + 0x21) = (UTC8TimeTcp.day & 0xFF);	// uint8	day
+	// 	*(SendBuffer + 0x22) = (UTC8TimeTcp.hour & 0xFF);	// uint8	hour
+	// 	*(SendBuffer + 0x23) = (UTC8TimeTcp.minute & 0xFF); // uint8	minute
+	// 	*(SendBuffer + 0x24) = (UTC8TimeTcp.second & 0xFF); // uint8	second
+	// 	memcpy(SendBuffer + 0x25, VIN, 17);
+	// 	*(SendBuffer + 0x36) = (vehicleStatus & 0xFF);		 // uint8	整车状态
+	// 	*(SendBuffer + 0x37) = (bmsHVOn & 0xFF);			 // uint8	bms上高压指令
+	// 	*(SendBuffer + 0x38) = (currentGearPosition & 0xFF); // uint8	当前档位
+	// 	*(SendBuffer + 0x39) = (parkingBreakStatus & 0xFF);	 // uint8	手刹信号
+	// 	*(SendBuffer + 0x3A) = (breakingStatus & 0xFF);		 // uint8	制动开关
+	// 	*(SendBuffer + 0x3B) = ((ODO >> 24) & 0xFF);		 // uint32	总里程
+	// 	*(SendBuffer + 0x3C) = ((ODO >> 16) & 0xFF);
+	// 	*(SendBuffer + 0x3D) = ((ODO >> 8) & 0xFF);
+	// 	*(SendBuffer + 0x3E) = (ODO & 0xFF);
+	// 	*(SendBuffer + 0x3F) = (dcdcWorkStatus & 0xFF);			   // uint8 DCDC状态
+	// 	*(SendBuffer + 0x40) = (numOfChrgableSubsys & 0xFF);	   // uint8	可充电子系统数
+	// 	*(SendBuffer + 0x41) = (chrgableSubsysCode & 0xFF);		   // uint8	可充电储能子系统号
+	// 	*(SendBuffer + 0x42) = (BMS_MaxCellTempCSC & 0xFF);		   // uint8	最高温度子系统号 精度_1,偏移量_0,单位_
+	// 	*(SendBuffer + 0x43) = (BMS_MaxCellTempNum & 0xFF);		   // uint8	最高温度探针单体代号 精度_1,偏移量_0,单位_
+	// 	*(SendBuffer + 0x44) = (BMS_MinCellTempCSC & 0xFF);		   // uint8	最低温度子系统号 精度_1,偏移量_0,单位_
+	// 	*(SendBuffer + 0x45) = (BMS_MinCellTempNum & 0xFF);		   // uint8	最低温度探针子系统代号 精度_1,偏移量_0,单位_
+	// 	*(SendBuffer + 0x46) = (BMS_MaxCellVoltCSC & 0xFF);		   // uint8	最高电压电池子系统号 精度_1,偏移量_0,单位_
+	// 	*(SendBuffer + 0x47) = ((BMS_MaxCellVoltNum >> 8) & 0xFF); // uint16	最高电压电池单体代号 精度_1,偏移量_0,单位_
+	// 	*(SendBuffer + 0x48) = (BMS_MaxCellVoltNum & 0xFF);
+	// 	*(SendBuffer + 0x49) = (BMS_MinCellVoltCSC & 0xFF);		   // uint8	最低电压电池子系统号 精度_1,偏移量_0,单位_
+	// 	*(SendBuffer + 0x4A) = ((BMS_MinCellVoltNum >> 8) & 0xFF); // uint16	最低电压电池单体代号 精度_1,偏移量_0,单位_
+	// 	*(SendBuffer + 0x4B) = (BMS_MinCellVoltNum & 0xFF);
+	// 	*(SendBuffer + 0x4C) = (ebcStatus & 0xFF); // uint8 换电控制器状态
+	// 	*(SendBuffer + 0x4D) = (uint8)((ebcAskHVOn & 0x01) | ((ebcAskHVOff & 0x01) << 1) | ((retainLockSignal & 0x01) << 3) | ((dischargeLockSignal & 0x01) << 5) | ((chargeLockSignal & 0x01) << 6));
+	// 	*(SendBuffer + 0x4E) = (chargeFlag & 0xFF);		 // uint8 充电标志位
+	// 	*(SendBuffer + 0x4F) = ((vcuDCVol >> 8) & 0xFF); // uint16 电机直流母线电压
+	// 	*(SendBuffer + 0x50) = (vcuDCVol & 0xFF);
+	// 	*(SendBuffer + 0x51) = bcc_chk(SendBuffer, 0x51);
+	// 	*PtrSendAddr = (uint32)SendBuffer;
+	// 	break;
+	// }
+	case 0x91:
 	{
-		*SendLen = 0x52;
+		static bool bmsPackFlg = false;
+		UINT16 BcuBattU = 0;
+		UINT16 BcuBattI = 0;
+		if (!bmsPackFlg)
+		{
+			BcuBattU = BcuBattU1;
+			BcuBattI = BcuBattI1;
+			bmsPackFlg = true;
+		}
+		else
+		{
+			BcuBattU = BcuBattU2;
+			BcuBattI = BcuBattI2;
+			bmsPackFlg = false;
+		}
+		GetCSQValue(&CSQValue);
+		*SendLen = 0x54 + min(BMS_CELL_MAX_NUM, BMS_CELL_MAX_NUM) * 2 + min(BMS_TEMP_MAX_NUM, BMS_TEMP_MAX_NUM);
 		SendBuffer = malloc(*SendLen);
 		*(SendBuffer + 0) = TCP_START_SYM1;
 		*(SendBuffer + 1) = TCP_START_SYM2;
@@ -812,8 +886,8 @@ void TcpDataEncode(uint32 *PtrSendAddr, uint16 *SendLen)
 		*(SendBuffer + 3) = TCP_ANS_SYM;
 		memcpy(SendBuffer + 4, TcpbattSN, BATT_SN_LEN);
 		*(SendBuffer + 0x15) = (TCP_ENCPT_DISABLE & 0xFF); // uint8	TCP_ENCPT_DISABLE
-		uint16 DataLen = 0x39;							   // 57
-		*(SendBuffer + 0x16) = ((DataLen >> 8) & 0xFF);	   // uint16	DataLen
+		uint16 DataLen = 0x3B + min(BMS_CELL_MAX_NUM, BMS_CELL_MAX_NUM) * 2 + min(BMS_TEMP_MAX_NUM, BMS_TEMP_MAX_NUM);
+		*(SendBuffer + 0x16) = ((DataLen >> 8) & 0xFF); // uint16	DataLen
 		*(SendBuffer + 0x17) = (DataLen & 0xFF);
 		*(SendBuffer + 0x18) = ((UTC8TimeTcp.year) & 0xFF); // uint8	year
 		*(SendBuffer + 0x19) = (UTC8TimeTcp.month & 0xFF);	// uint8	month
@@ -828,186 +902,119 @@ void TcpDataEncode(uint32 *PtrSendAddr, uint16 *SendLen)
 		*(SendBuffer + 0x22) = (UTC8TimeTcp.hour & 0xFF);	// uint8	hour
 		*(SendBuffer + 0x23) = (UTC8TimeTcp.minute & 0xFF); // uint8	minute
 		*(SendBuffer + 0x24) = (UTC8TimeTcp.second & 0xFF); // uint8	second
-		memcpy(SendBuffer + 0x25, VIN, 17);
-		*(SendBuffer + 0x36) = (vehicleStatus & 0xFF);		 // uint8	整车状态
-		*(SendBuffer + 0x37) = (bmsHVOn & 0xFF);			 // uint8	bms上高压指令
-		*(SendBuffer + 0x38) = (currentGearPosition & 0xFF); // uint8	当前档位
-		*(SendBuffer + 0x39) = (parkingBreakStatus & 0xFF);	 // uint8	手刹信号
-		*(SendBuffer + 0x3A) = (breakingStatus & 0xFF);		 // uint8	制动开关
-		*(SendBuffer + 0x3B) = ((ODO >> 24) & 0xFF);		 // uint32	总里程
-		*(SendBuffer + 0x3C) = ((ODO >> 16) & 0xFF);
-		*(SendBuffer + 0x3D) = ((ODO >> 8) & 0xFF);
-		*(SendBuffer + 0x3E) = (ODO & 0xFF);
-		*(SendBuffer + 0x3F) = (dcdcWorkStatus & 0xFF);			   // uint8 DCDC状态
-		*(SendBuffer + 0x40) = (numOfChrgableSubsys & 0xFF);	   // uint8	可充电子系统数
-		*(SendBuffer + 0x41) = (chrgableSubsysCode & 0xFF);		   // uint8	可充电储能子系统号
-		*(SendBuffer + 0x42) = (BMS_MaxCellTempCSC & 0xFF);		   // uint8	最高温度子系统号 精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x43) = (BMS_MaxCellTempNum & 0xFF);		   // uint8	最高温度探针单体代号 精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x44) = (BMS_MinCellTempCSC & 0xFF);		   // uint8	最低温度子系统号 精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x45) = (BMS_MinCellTempNum & 0xFF);		   // uint8	最低温度探针子系统代号 精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x46) = (BMS_MaxCellVoltCSC & 0xFF);		   // uint8	最高电压电池子系统号 精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x47) = ((BMS_MaxCellVoltNum >> 8) & 0xFF); // uint16	最高电压电池单体代号 精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x48) = (BMS_MaxCellVoltNum & 0xFF);
-		*(SendBuffer + 0x49) = (BMS_MinCellVoltCSC & 0xFF);		   // uint8	最低电压电池子系统号 精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x4A) = ((BMS_MinCellVoltNum >> 8) & 0xFF); // uint16	最低电压电池单体代号 精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x4B) = (BMS_MinCellVoltNum & 0xFF);
-		*(SendBuffer + 0x4C) = (ebcStatus & 0xFF); // uint8 换电控制器状态
-		*(SendBuffer + 0x4D) = (uint8)((ebcAskHVOn & 0x01) | ((ebcAskHVOff & 0x01) << 1) | ((retainLockSignal & 0x01) << 3) | ((dischargeLockSignal & 0x01) << 5) | ((chargeLockSignal & 0x01) << 6));
-		*(SendBuffer + 0x4E) = (chargeFlag & 0xFF);		 // uint8 充电标志位
-		*(SendBuffer + 0x4F) = ((vcuDCVol >> 8) & 0xFF); // uint16 电机直流母线电压
-		*(SendBuffer + 0x50) = (vcuDCVol & 0xFF);
-		*(SendBuffer + 0x51) = bcc_chk(SendBuffer, 0x51);
-		*PtrSendAddr = (uint32)SendBuffer;
-		break;
-	}
-	case 0x91:
-	{
-		GetCSQValue(&CSQValue);
-		if (BMS_Mode == 1)
-		{
-			BMS_Mode = 2;
-		}
-		else
-		{
-			BMS_Mode = 1;
-		}
-		*SendLen = 0x54 + min(BMS_CellTotal,BMS_CELL_MAX_NUM)*2 + min(BMS_TempTotal,BMS_TEMP_MAX_NUM);
-		SendBuffer = malloc(*SendLen);
-		*(SendBuffer + 0) = TCP_START_SYM1;
-		*(SendBuffer + 1) = TCP_START_SYM2;
-		*(SendBuffer + 2) = TCP_CMD_SYM;
-		*(SendBuffer + 3) = TCP_ANS_SYM;
-		memcpy(SendBuffer + 4, TcpbattSN, BATT_SN_LEN);
-		*(SendBuffer + 0x15) = (TCP_ENCPT_DISABLE & 0xFF); // uint8	TCP_ENCPT_DISABLE
-		uint16 DataLen = 0x3B + min(BMS_CellTotal,BMS_CELL_MAX_NUM)*2 + min(BMS_TempTotal,BMS_TEMP_MAX_NUM);
-		*(SendBuffer + 0x16) = ((DataLen >> 8) & 0xFF); // uint16	DataLen
-		*(SendBuffer + 0x17) = (DataLen & 0xFF);
-		*(SendBuffer + 0x18) = ((UTC8TimeTcp.year) & 0xFF);	   // uint8	year
-		*(SendBuffer + 0x19) = (UTC8TimeTcp.month & 0xFF);	   // uint8	month
-		*(SendBuffer + 0x1A) = (UTC8TimeTcp.day & 0xFF);	   // uint8	day
-		*(SendBuffer + 0x1B) = (UTC8TimeTcp.hour & 0xFF);	   // uint8	hour
-		*(SendBuffer + 0x1C) = (UTC8TimeTcp.minute & 0xFF);	   // uint8	minute
-		*(SendBuffer + 0x1D) = (UTC8TimeTcp.second & 0xFF);	   // uint8	second
-		*(SendBuffer + 0x1E) = (DataIdx & 0xFF);			   // uint8	BATTMSG
-		*(SendBuffer + 0x1F) = ((UTC8TimeTcp.year) & 0xFF);	   // uint8	year
-		*(SendBuffer + 0x20) = (UTC8TimeTcp.month & 0xFF);	   // uint8	month
-		*(SendBuffer + 0x21) = (UTC8TimeTcp.day & 0xFF);	   // uint8	day
-		*(SendBuffer + 0x22) = (UTC8TimeTcp.hour & 0xFF);	   // uint8	hour
-		*(SendBuffer + 0x23) = (UTC8TimeTcp.minute & 0xFF);	   // uint8	minute
-		*(SendBuffer + 0x24) = (UTC8TimeTcp.second & 0xFF);	   // uint8	second
-		*(SendBuffer + 0x25) = (CSQValue & 0xFF);			   // uint8	csq
-		*(SendBuffer + 0x26) = (BMS_Mode & 0xFF);			   // uint8	电池管理系统工作状态,0-初始化 1-自检完成允许上电 2-运行状态 3-高压切断 4-故障状态,精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x27) = (BMS_CharGunSt & 0xFF);		   // uint8	直流充电枪连接状态,0-未连接 1-单枪连接 2-双枪连接 3-无效,精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x28) = (BMS_FtLvl & 0xFF);			   // uint8	当前最高故障等级,0-正常 1-1级 轻微故障 2-2级 较严重故障 3-3级 最严重故障,精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x29) = (BMS_FtCode & 0xFF);			   // uint8	故障码,见BMS_ErrCode,精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x2A) = (BMS_ReqHVOff & 0xFF);		   // uint8	BMS下高压请求,0-无效 1-请求下高压 2-不请求下高压 3-无效,精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x2B) = (BMS_CharSt & 0xFF);			   // uint8	充电状态,0-未充电 1-充电中 2-充电已完成 3-充电错误故障,精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x2C) = (BMS_PackSOC & 0xFF);		   // uint8	电池包SOC 精度_0.4,偏移量_0,单位_
-		*(SendBuffer + 0x2D) = (BMS_PackSOH / 25 * 10) & 0xFF; // SOH 精度1%
-		*(SendBuffer + 0x2E) = (BMS_BattVolt >> 8) & 0xFF;	   //电池包总电压
-		*(SendBuffer + 0x2F) = (BMS_BattVolt & 0xFF);
-		*(SendBuffer + 0x30) = ((BMS_PackCurr >> 8) & 0xFF); // uint16	电池包总电流,充电为负值,放电为正值 精度_0.1,偏移量_-1000,单位_A
-		*(SendBuffer + 0x31) = (BMS_PackCurr & 0xFF);
-		*(SendBuffer + 0x32) = ((BMS_SysInsRes >> 8) & 0xFF); // uint16	系统绝缘电阻 精度_1,偏移量_0,单位_KΩ
-		*(SendBuffer + 0x33) = (BMS_SysInsRes & 0xFF);
+		*(SendBuffer + 0x25) = (CSQValue & 0xFF);			// uint8	csq
+		*(SendBuffer + 0x26) = (BcuOperMod & 0xFF);			// uint8	电池管理系统工作状态,0-初始化 1-自检完成允许上电 2-运行状态 3-高压切断 4-故障状态,精度_1,偏移量_0,单位_
+		*(SendBuffer + 0x27) = (BcuChrgMod & 0xFF);			// uint8	直流充电枪连接状态,0-未连接 1-单枪连接 2-双枪连接 3-无效,精度_1,偏移量_0,单位_
+		*(SendBuffer + 0x28) = (BcuErrRank & 0xFF);			// uint8	当前最高故障等级,0-正常 1-1级 轻微故障 2-2级 较严重故障 3-3级 最严重故障,精度_1,偏移量_0,单位_
+		*(SendBuffer + 0x29) = (BcuErrCode & 0xFF);			// uint8	故障码,见BMS_ErrCode,精度_1,偏移量_0,单位_
+		*(SendBuffer + 0x2A) = (BcuUpAlw & 0xFF);			// uint8	BMS下高压请求,0-无效 1-请求下高压 2-不请求下高压 3-无效,精度_1,偏移量_0,单位_
+		*(SendBuffer + 0x2B) = (BcuChrgSt & 0xFF);			// uint8	充电状态,0-未充电 1-充电中 2-充电已完成 3-充电错误故障,精度_1,偏移量_0,单位_
+		*(SendBuffer + 0x2C) = ((BcuSoc / 4) & 0xFF);		// uint8	电池包SOC 精度_0.4,偏移量_0,单位_
+		*(SendBuffer + 0x2D) = (BcuSoh/10) & 0xFF;	// SOH 精度1%
+		*(SendBuffer + 0x2E) = (BcuBattU >> 8) & 0xFF;		//电池包总电压
+		*(SendBuffer + 0x2F) = (BcuBattU & 0xFF);
+		*(SendBuffer + 0x30) = ((BcuBattI >> 8) & 0xFF); // uint16	电池包总电流,充电为负值,放电为正值 精度_0.1,偏移量_-1000,单位_A
+		*(SendBuffer + 0x31) = (BcuBattI & 0xFF);
+		*(SendBuffer + 0x32) = ((BcuInsulationR >> 8) & 0xFF); // uint16	系统绝缘电阻 精度_1,偏移量_0,单位_KΩ
+		*(SendBuffer + 0x33) = (BcuInsulationR & 0xFF);
 		/*28 Byte 继电器状态*/
-		*(SendBuffer + 0x34) = (BMS_StPosRly & 0xFF);	   // uint8	主正继电器状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x35) = (BMS_StPreCharRly & 0xFF);  // uint8	预充继电器状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x36) = (BMS_StNegRly & 0xFF);	   // uint8	主负继电器状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x37) = 0;						   // 三合一
-		*(SendBuffer + 0x38) = 0;						   // PTC
-		*(SendBuffer + 0x39) = 0;						   // 空调
-		*(SendBuffer + 0x3A) = (BMS_StPosCharRly1 & 0xFF); // uint8	直流充正继电器1状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x3B) = (BMS_StNegCharRly1 & 0xFF); // uint8	直流充负继电器1状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x3C) = (BMS_StPosCharRly2 & 0xFF); // uint8	直流充正继电器2状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x3D) = (BMS_StNegCharRly2 & 0xFF); // uint8	直流充负继电器2状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x3E) = (BMS_StPosHeatRly & 0xFF);  // uint8	加热正继电器状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
-		*(SendBuffer + 0x3F) = (BMS_StNegHeatRly & 0xFF);  // uint8	加热负继电器状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
+		*(SendBuffer + 0x34) = (bmsPackFlg & 0xFF); // uint8	主正继电器状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
+		*(SendBuffer + 0x35) = (0 & 0xFF);			// uint8	预充继电器状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
+		*(SendBuffer + 0x36) = (0 & 0xFF);			// uint8	主负继电器状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
+		*(SendBuffer + 0x37) = 0;					// 三合一
+		*(SendBuffer + 0x38) = 0;					// PTC
+		*(SendBuffer + 0x39) = 0;					// 空调
+		*(SendBuffer + 0x3A) = (0 & 0xFF);			// uint8	直流充正继电器1状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
+		*(SendBuffer + 0x3B) = (0 & 0xFF);			// uint8	直流充负继电器1状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
+		*(SendBuffer + 0x3C) = (0 & 0xFF);			// uint8	直流充正继电器2状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
+		*(SendBuffer + 0x3D) = (0 & 0xFF);			// uint8	直流充负继电器2状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
+		*(SendBuffer + 0x3E) = (0 & 0xFF);			// uint8	加热正继电器状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
+		*(SendBuffer + 0x3F) = (0 & 0xFF);			// uint8	加热负继电器状态,0-预留 1-断开 2-吸合  ,精度_1,偏移量_0,单位_
 		*(SendBuffer + 0x40) = 0;
 		/*28-Byte继电器状态结束*/
-		*(SendBuffer + 0x50) = ((BMS_CellTotal >> 8) & 0xFF); // uint16	PACK中单体电芯的总数目
-		*(SendBuffer + 0x51) = (BMS_CellTotal & 0xFF);
-		for (uint16 index = 0; index < min(BMS_CellTotal,BMS_CELL_MAX_NUM); index++)
+		*(SendBuffer + 0x50) = ((BMS_CELL_MAX_NUM >> 8) & 0xFF); // uint16	PACK中单体电芯的总数目
+		*(SendBuffer + 0x51) = (BMS_CELL_MAX_NUM & 0xFF);
+		for (uint16 index = 0; index < min(BMS_CELL_MAX_NUM, BMS_CELL_MAX_NUM); index++)
 		{
-			*(SendBuffer + 0x52 + index * 2) = ((BMS_CellVolt[index] >> 8) & 0xFF);
-			*(SendBuffer + 0x52 + index * 2 + 1) = ((BMS_CellVolt[index]) & 0xFF);
+			*(SendBuffer + 0x52 + index * 2) = ((BcuCellU[index] >> 8) & 0xFF);
+			*(SendBuffer + 0x52 + index * 2 + 1) = ((BcuCellU[index]) & 0xFF);
 		}
-		*(SendBuffer + 0x52 + min(BMS_CellTotal,BMS_CELL_MAX_NUM)*2) = (BMS_TempTotal & 0xFF); //  uint8	PACK中电芯温度点(探针)的总数目
-		memcpy(SendBuffer + 0x53 + min(BMS_CellTotal,BMS_CELL_MAX_NUM)*2, BMS_CellTemp, min(BMS_TempTotal,BMS_TEMP_MAX_NUM));
-		*(SendBuffer + 0x53 + min(BMS_CellTotal,BMS_CELL_MAX_NUM)*2 + min(BMS_TempTotal,BMS_TEMP_MAX_NUM)) = bcc_chk(SendBuffer, 0x53 + min(BMS_CellTotal,BMS_CELL_MAX_NUM)*2 + min(BMS_TempTotal,BMS_TEMP_MAX_NUM));
-		*PtrSendAddr = (uint32)SendBuffer;
-		break;
-	}
-	case 0x92:
-	{
-		*SendLen = 0x4E;
-		SendBuffer = malloc(*SendLen);
-		*(SendBuffer + 0) = TCP_START_SYM1;
-		*(SendBuffer + 1) = TCP_START_SYM2;
-		*(SendBuffer + 2) = TCP_CMD_SYM;
-		*(SendBuffer + 3) = TCP_ANS_SYM;
-		memcpy(SendBuffer + 4, TcpbattSN, BATT_SN_LEN);
-		*(SendBuffer + 0x15) = (TCP_ENCPT_DISABLE & 0xFF); // uint8	TCP_ENCPT_DISABLE
-		uint16 DataLen = 0x35;
-		*(SendBuffer + 0x16) = ((DataLen >> 8) & 0xFF); // uint16	DataLen
-		*(SendBuffer + 0x17) = (DataLen & 0xFF);
-		*(SendBuffer + 0x18) = ((UTC8TimeTcp.year) & 0xFF);		   // uint8	year
-		*(SendBuffer + 0x19) = (UTC8TimeTcp.month & 0xFF);		   // uint8	month
-		*(SendBuffer + 0x1A) = (UTC8TimeTcp.day & 0xFF);		   // uint8	day
-		*(SendBuffer + 0x1B) = (UTC8TimeTcp.hour & 0xFF);		   // uint8	hour
-		*(SendBuffer + 0x1C) = (UTC8TimeTcp.minute & 0xFF);		   // uint8	minute
-		*(SendBuffer + 0x1D) = (UTC8TimeTcp.second & 0xFF);		   // uint8	second
-		*(SendBuffer + 0x1E) = (DataIdx & 0xFF);				   // uint8
-		*(SendBuffer + 0x1F) = ((UTC8TimeTcp.year) & 0xFF);		   // uint8	year
-		*(SendBuffer + 0x20) = (UTC8TimeTcp.month & 0xFF);		   // uint8	month
-		*(SendBuffer + 0x21) = (UTC8TimeTcp.day & 0xFF);		   // uint8	day
-		*(SendBuffer + 0x22) = (UTC8TimeTcp.hour & 0xFF);		   // uint8	hour
-		*(SendBuffer + 0x23) = (UTC8TimeTcp.minute & 0xFF);		   // uint8	minute
-		*(SendBuffer + 0x24) = (UTC8TimeTcp.second & 0xFF);		   // uint8	second
-		*(SendBuffer + 0x25) = ((BMS_TotalCharCapy >> 24) & 0xFF); // uint32	累积充入Ah 数 精度_0.1,偏移量_0,单位_Ah
-		*(SendBuffer + 0x26) = ((BMS_TotalCharCapy >> 16) & 0xFF);
-		*(SendBuffer + 0x27) = ((BMS_TotalCharCapy >> 8) & 0xFF);
-		*(SendBuffer + 0x28) = (BMS_TotalCharCapy & 0xFF);
-		*(SendBuffer + 0x29) = ((BMS_TotalDisCharCapy >> 24) & 0xFF); // uint32	累积放出Ah 数 精度_0.1,偏移量_0,单位_Ah
-		*(SendBuffer + 0x2A) = ((BMS_TotalDisCharCapy >> 16) & 0xFF);
-		*(SendBuffer + 0x2B) = ((BMS_TotalDisCharCapy >> 8) & 0xFF);
-		*(SendBuffer + 0x2C) = (BMS_TotalDisCharCapy & 0xFF);
-		*(SendBuffer + 0x2D) = ((BMS_TotalCharEngy >> 24) & 0xFF); // uint32	累计充入kWh 数 精度_0.1,偏移量_0,单位_KWh
-		*(SendBuffer + 0x2E) = ((BMS_TotalCharEngy >> 16) & 0xFF);
-		*(SendBuffer + 0x2F) = ((BMS_TotalCharEngy >> 8) & 0xFF);
-		*(SendBuffer + 0x30) = (BMS_TotalCharEngy & 0xFF);
-		*(SendBuffer + 0x31) = ((BMS_TotalDisCharEngy >> 24) & 0xFF); // uint32	累计放出kWh 数 精度_0.1,偏移量_0,单位_KWh
-		*(SendBuffer + 0x32) = ((BMS_TotalDisCharEngy >> 16) & 0xFF);
-		*(SendBuffer + 0x33) = ((BMS_TotalDisCharEngy >> 8) & 0xFF);
-		*(SendBuffer + 0x34) = (BMS_TotalDisCharEngy & 0xFF);
-		*(SendBuffer + 0x35) = ((BMS_TotalBackCharCapy >> 24) & 0xFF); // uint32	累计动能回馈充入Ah 数 精度_0.1,偏移量_0,单位_Ah
-		*(SendBuffer + 0x36) = ((BMS_TotalBackCharCapy >> 16) & 0xFF);
-		*(SendBuffer + 0x37) = ((BMS_TotalBackCharCapy >> 8) & 0xFF);
-		*(SendBuffer + 0x38) = (BMS_TotalBackCharCapy & 0xFF);
-		*(SendBuffer + 0x39) = ((BMS_TotalBackCharEngy >> 24) & 0xFF); // uint32	累计动能回馈充入kWh 数 精度_0.1,偏移量_0,单位_KWh
-		*(SendBuffer + 0x3A) = ((BMS_TotalBackCharEngy >> 16) & 0xFF);
-		*(SendBuffer + 0x3B) = ((BMS_TotalBackCharEngy >> 8) & 0xFF);
-		*(SendBuffer + 0x3C) = (BMS_TotalBackCharEngy & 0xFF);
-		*(SendBuffer + 0x3D) = ((BMS_TotalStaCharCapy >> 24) & 0xFF); // uint32	累计换电站充入Ah 数 精度_0.1,偏移量_0,单位_Ah
-		*(SendBuffer + 0x3E) = ((BMS_TotalStaCharCapy >> 16) & 0xFF);
-		*(SendBuffer + 0x3F) = ((BMS_TotalStaCharCapy >> 8) & 0xFF);
-		*(SendBuffer + 0x40) = (BMS_TotalStaCharCapy & 0xFF);
-		*(SendBuffer + 0x41) = ((BMS_TotalStaCharEngy >> 24) & 0xFF); // uint32	累计换电站充入kWh 数 精度_0.1,偏移量_0,单位_KWh
-		*(SendBuffer + 0x42) = ((BMS_TotalStaCharEngy >> 16) & 0xFF);
-		*(SendBuffer + 0x43) = ((BMS_TotalStaCharEngy >> 8) & 0xFF);
-		*(SendBuffer + 0x44) = (BMS_TotalStaCharEngy & 0xFF);
-		*(SendBuffer + 0x45) = ((BMS_TotalGunCharCapy >> 24) & 0xFF); // uint32	累计插枪充电充入Ah 数 精度_0.1,偏移量_0,单位_Ah
-		*(SendBuffer + 0x46) = ((BMS_TotalGunCharCapy >> 16) & 0xFF);
-		*(SendBuffer + 0x47) = ((BMS_TotalGunCharCapy >> 8) & 0xFF);
-		*(SendBuffer + 0x48) = (BMS_TotalGunCharCapy & 0xFF);
-		*(SendBuffer + 0x49) = ((BMS_TotalGunCharEngy >> 24) & 0xFF); // uint32	累计插枪充电充入kWh 数 精度_0.1,偏移量_0,单位_KWh
-		*(SendBuffer + 0x4A) = ((BMS_TotalGunCharEngy >> 16) & 0xFF);
-		*(SendBuffer + 0x4B) = ((BMS_TotalGunCharEngy >> 8) & 0xFF);
-		*(SendBuffer + 0x4C) = (BMS_TotalGunCharEngy & 0xFF);
-		*(SendBuffer + 0x4D) = bcc_chk(SendBuffer, 0x4D);
+		*(SendBuffer + 0x52 + min(BMS_CELL_MAX_NUM, BMS_CELL_MAX_NUM) * 2) = (BMS_TEMP_MAX_NUM & 0xFF); //  uint8	PACK中电芯温度点(探针)的总数目
+		memcpy(SendBuffer + 0x53 + min(BMS_CELL_MAX_NUM, BMS_CELL_MAX_NUM) * 2, BcuModT, min(BMS_TEMP_MAX_NUM, BMS_TEMP_MAX_NUM));
+		*(SendBuffer + 0x53 + min(BMS_CELL_MAX_NUM, BMS_CELL_MAX_NUM) * 2 + min(BMS_TEMP_MAX_NUM, BMS_TEMP_MAX_NUM)) = bcc_chk(SendBuffer, 0x53 + min(BMS_CELL_MAX_NUM, BMS_CELL_MAX_NUM) * 2 + min(BMS_TEMP_MAX_NUM, BMS_TEMP_MAX_NUM));
 		*PtrSendAddr = (uint32)SendBuffer;
 		break;
 	}
+	// case 0x92:
+	// {
+	// 	*SendLen = 0x4E;
+	// 	SendBuffer = malloc(*SendLen);
+	// 	*(SendBuffer + 0) = TCP_START_SYM1;
+	// 	*(SendBuffer + 1) = TCP_START_SYM2;
+	// 	*(SendBuffer + 2) = TCP_CMD_SYM;
+	// 	*(SendBuffer + 3) = TCP_ANS_SYM;
+	// 	memcpy(SendBuffer + 4, TcpbattSN, BATT_SN_LEN);
+	// 	*(SendBuffer + 0x15) = (TCP_ENCPT_DISABLE & 0xFF); // uint8	TCP_ENCPT_DISABLE
+	// 	uint16 DataLen = 0x35;
+	// 	*(SendBuffer + 0x16) = ((DataLen >> 8) & 0xFF); // uint16	DataLen
+	// 	*(SendBuffer + 0x17) = (DataLen & 0xFF);
+	// 	*(SendBuffer + 0x18) = ((UTC8TimeTcp.year) & 0xFF);		   // uint8	year
+	// 	*(SendBuffer + 0x19) = (UTC8TimeTcp.month & 0xFF);		   // uint8	month
+	// 	*(SendBuffer + 0x1A) = (UTC8TimeTcp.day & 0xFF);		   // uint8	day
+	// 	*(SendBuffer + 0x1B) = (UTC8TimeTcp.hour & 0xFF);		   // uint8	hour
+	// 	*(SendBuffer + 0x1C) = (UTC8TimeTcp.minute & 0xFF);		   // uint8	minute
+	// 	*(SendBuffer + 0x1D) = (UTC8TimeTcp.second & 0xFF);		   // uint8	second
+	// 	*(SendBuffer + 0x1E) = (DataIdx & 0xFF);				   // uint8
+	// 	*(SendBuffer + 0x1F) = ((UTC8TimeTcp.year) & 0xFF);		   // uint8	year
+	// 	*(SendBuffer + 0x20) = (UTC8TimeTcp.month & 0xFF);		   // uint8	month
+	// 	*(SendBuffer + 0x21) = (UTC8TimeTcp.day & 0xFF);		   // uint8	day
+	// 	*(SendBuffer + 0x22) = (UTC8TimeTcp.hour & 0xFF);		   // uint8	hour
+	// 	*(SendBuffer + 0x23) = (UTC8TimeTcp.minute & 0xFF);		   // uint8	minute
+	// 	*(SendBuffer + 0x24) = (UTC8TimeTcp.second & 0xFF);		   // uint8	second
+	// 	*(SendBuffer + 0x25) = ((BMS_TotalCharCapy >> 24) & 0xFF); // uint32	累积充入Ah 数 精度_0.1,偏移量_0,单位_Ah
+	// 	*(SendBuffer + 0x26) = ((BMS_TotalCharCapy >> 16) & 0xFF);
+	// 	*(SendBuffer + 0x27) = ((BMS_TotalCharCapy >> 8) & 0xFF);
+	// 	*(SendBuffer + 0x28) = (BMS_TotalCharCapy & 0xFF);
+	// 	*(SendBuffer + 0x29) = ((BMS_TotalDisCharCapy >> 24) & 0xFF); // uint32	累积放出Ah 数 精度_0.1,偏移量_0,单位_Ah
+	// 	*(SendBuffer + 0x2A) = ((BMS_TotalDisCharCapy >> 16) & 0xFF);
+	// 	*(SendBuffer + 0x2B) = ((BMS_TotalDisCharCapy >> 8) & 0xFF);
+	// 	*(SendBuffer + 0x2C) = (BMS_TotalDisCharCapy & 0xFF);
+	// 	*(SendBuffer + 0x2D) = ((BMS_TotalCharEngy >> 24) & 0xFF); // uint32	累计充入kWh 数 精度_0.1,偏移量_0,单位_KWh
+	// 	*(SendBuffer + 0x2E) = ((BMS_TotalCharEngy >> 16) & 0xFF);
+	// 	*(SendBuffer + 0x2F) = ((BMS_TotalCharEngy >> 8) & 0xFF);
+	// 	*(SendBuffer + 0x30) = (BMS_TotalCharEngy & 0xFF);
+	// 	*(SendBuffer + 0x31) = ((BMS_TotalDisCharEngy >> 24) & 0xFF); // uint32	累计放出kWh 数 精度_0.1,偏移量_0,单位_KWh
+	// 	*(SendBuffer + 0x32) = ((BMS_TotalDisCharEngy >> 16) & 0xFF);
+	// 	*(SendBuffer + 0x33) = ((BMS_TotalDisCharEngy >> 8) & 0xFF);
+	// 	*(SendBuffer + 0x34) = (BMS_TotalDisCharEngy & 0xFF);
+	// 	*(SendBuffer + 0x35) = ((BMS_TotalBackCharCapy >> 24) & 0xFF); // uint32	累计动能回馈充入Ah 数 精度_0.1,偏移量_0,单位_Ah
+	// 	*(SendBuffer + 0x36) = ((BMS_TotalBackCharCapy >> 16) & 0xFF);
+	// 	*(SendBuffer + 0x37) = ((BMS_TotalBackCharCapy >> 8) & 0xFF);
+	// 	*(SendBuffer + 0x38) = (BMS_TotalBackCharCapy & 0xFF);
+	// 	*(SendBuffer + 0x39) = ((BMS_TotalBackCharEngy >> 24) & 0xFF); // uint32	累计动能回馈充入kWh 数 精度_0.1,偏移量_0,单位_KWh
+	// 	*(SendBuffer + 0x3A) = ((BMS_TotalBackCharEngy >> 16) & 0xFF);
+	// 	*(SendBuffer + 0x3B) = ((BMS_TotalBackCharEngy >> 8) & 0xFF);
+	// 	*(SendBuffer + 0x3C) = (BMS_TotalBackCharEngy & 0xFF);
+	// 	*(SendBuffer + 0x3D) = ((BMS_TotalStaCharCapy >> 24) & 0xFF); // uint32	累计换电站充入Ah 数 精度_0.1,偏移量_0,单位_Ah
+	// 	*(SendBuffer + 0x3E) = ((BMS_TotalStaCharCapy >> 16) & 0xFF);
+	// 	*(SendBuffer + 0x3F) = ((BMS_TotalStaCharCapy >> 8) & 0xFF);
+	// 	*(SendBuffer + 0x40) = (BMS_TotalStaCharCapy & 0xFF);
+	// 	*(SendBuffer + 0x41) = ((BMS_TotalStaCharEngy >> 24) & 0xFF); // uint32	累计换电站充入kWh 数 精度_0.1,偏移量_0,单位_KWh
+	// 	*(SendBuffer + 0x42) = ((BMS_TotalStaCharEngy >> 16) & 0xFF);
+	// 	*(SendBuffer + 0x43) = ((BMS_TotalStaCharEngy >> 8) & 0xFF);
+	// 	*(SendBuffer + 0x44) = (BMS_TotalStaCharEngy & 0xFF);
+	// 	*(SendBuffer + 0x45) = ((BMS_TotalGunCharCapy >> 24) & 0xFF); // uint32	累计插枪充电充入Ah 数 精度_0.1,偏移量_0,单位_Ah
+	// 	*(SendBuffer + 0x46) = ((BMS_TotalGunCharCapy >> 16) & 0xFF);
+	// 	*(SendBuffer + 0x47) = ((BMS_TotalGunCharCapy >> 8) & 0xFF);
+	// 	*(SendBuffer + 0x48) = (BMS_TotalGunCharCapy & 0xFF);
+	// 	*(SendBuffer + 0x49) = ((BMS_TotalGunCharEngy >> 24) & 0xFF); // uint32	累计插枪充电充入kWh 数 精度_0.1,偏移量_0,单位_KWh
+	// 	*(SendBuffer + 0x4A) = ((BMS_TotalGunCharEngy >> 16) & 0xFF);
+	// 	*(SendBuffer + 0x4B) = ((BMS_TotalGunCharEngy >> 8) & 0xFF);
+	// 	*(SendBuffer + 0x4C) = (BMS_TotalGunCharEngy & 0xFF);
+	// 	*(SendBuffer + 0x4D) = bcc_chk(SendBuffer, 0x4D);
+	// 	*PtrSendAddr = (uint32)SendBuffer;
+	// 	break;
+	// }
 	default:
 		break;
 	}
@@ -1052,11 +1059,11 @@ static void GetCSQValue(uint8 *out)
 			char CsqStr[5];
 			for (uint8 i = 0; i < 5; i++)
 			{
-				if (*(retptr+i+6) == ',')
+				if (*(retptr + i + 6) == ',')
 				{
 					break;
 				}
-				memcpy((CsqStr+i),(retptr+i+6),1);
+				memcpy((CsqStr + i), (retptr + i + 6), 1);
 			}
 			*out = atoi(CsqStr);
 		}
@@ -1090,7 +1097,7 @@ static void TcpDataInfoRecvHandle(uint8 *DataRecv, uint16 DataRecvLen)
 			Tcp_Cmd = *(Ptr + 2); //命令标志
 			if (*(Ptr + 3) == 0xFE)
 			{
-				TcpWorkState = 0x01;//需要暂停发送,进行命令应答的标志
+				TcpWorkState = 0x01; //需要暂停发送,进行命令应答的标志
 			}
 			switch (Tcp_Cmd)
 			{

+ 1 - 1
src/USER_CONFIG.h

@@ -24,7 +24,7 @@
 #define CAN0_MSG_TYPE CAN_MSG_STANDARD
 
 //the Default Configuration of CAN1 is Extended 250k for Bootloader, while CAN1 standard 250k only for WuLing project
-#define CAN1_BAUDRATE CAN_BAUDRATE_250K
+#define CAN1_BAUDRATE CAN_BAUDRATE_500K
 #define CAN1_MSG_TYPE CAN_MSG_EXTENDED
 
 #define CAN2_BAUDRATE CAN_BAUDRATE_500K