Selaa lähdekoodia

根据平峰项目优化重卡项目

LAPTOP-KB7QFH2U\ChenJie-PC 2 vuotta sitten
vanhempi
commit
0a9b2a85e1

+ 212 - 201
code/app/AppGlobalVar.c

@@ -2,26 +2,41 @@
  * @Author       : ChenJie
  * @Date         : 2022-01-23 13:45:09
  * @Version      : V3.0
- * @LastEditors  : ChenJie
- * @LastEditTime : 2022-05-17 18:46:11
+ * @LastEditors: chenjie
+ * @LastEditTime: 2022-10-28
  * @Description  : file content
- * @FilePath     : \S32K146_4G\src\AppGlobalVar.c
+ * @FilePath: \S32K146_4G\code\app\AppGlobalVar.c
  */
 /*
  * AppGlobalVar.c
- *应用层全局变量
- *  Created on: 2022年1月19日
+ *搴旂敤灞傚叏灞€鍙橀噺
+ *  Created on: 2022骞�1鏈�19鏃�
  *      Author: QiXiang_CHENJIE
  */
 
 #include "AppGlobalVar.h"
-//测试
+//娴嬭瘯
+#ifdef APP_RELEASE
+const char WebSiteName[] = "\"iotp.fast-fun.cn\"";
+uint16 WebSitePort = 8712;
+#else
+const char WebSiteName[] = "\"nas.fast-fun.cn\"";
+uint16 WebSitePort = 8812;
+#endif
 
-//*全局变量*//
-uint8 TcpbattSN[17] = {0x31}; //上传的SN编号
+//*鍏ㄥ眬鍙橀噺*//
+const uint32 AppSwVersion = 0x00000105;
+
+const uint8 DataModuleType = 0x02;//01=NB,02-4G
+const uint16 HwVersion = 0x001;
+const uint32 BlSwVersion = 0x00000001;
+const uint32 DrvSwVersion = 0x00000001;
+const uint8 BmsManuFacture = 0xff;
+const uint8 BmsInfo = 0xff;
+uint8 TcpbattSN[BATT_SN_LEN] = {0x31};
 uint8 VIN[17] = {0};
-volatile uint32 TimerCounter = 0; // ms单位
-uint32 BattTempR[4] = {0};		  // ADC查询的温度R值
+volatile uint32 TimerCounter = 0; // ms鍗曚綅
+uint32 BattTempR[4] = {0};		  // ADC鏌ヨ�鐨勬俯搴�鍊�
 uint16 ErrorArray[10] = {0};
 uint8 Fota_update_flag = 0;
 uint8 Fota_error_flag = 0;
@@ -48,10 +63,6 @@ sint8 SocketId = -1;
 sint8 RegChkRet = 0;
 char WebSiteIp[20] = {0};
 uint8 TcpWorkState = 0;
-const char WebSiteName[] = "\"iotp.fast-fun.cn\"";
-uint16 WebSitePort = 8712;
-//const char WebSiteName[] = "\"nas.fast-fun.cn\"";
-//uint16 WebSitePort = 8812;
 
 #define EEP_START_SEC_VAR_INIT_8_NO_CACHEABLE
 #include "Eep_MemMap.h"
@@ -59,9 +70,9 @@ AppConfigBody AppConfigInfo = {false, true, {defaultSn}, {0}};
 #define EEP_STOP_SEC_VAR_INIT_8_NO_CACHEABLE
 #include "Eep_MemMap.h"
 
-/*以下变量均为App_CAN相关变量*/
+/*浠ヤ笅鍙橀噺鍧囦负App_CAN鐩稿叧鍙橀噺*/
 #ifdef APP_CAN_ENABLE
-// VCU相关
+// VCU鐩稿叧
 uint8 vehicleStatus = 0;
 uint8 bmsHVOn = 0;
 uint8 currentGearPosition = 0;
@@ -73,7 +84,7 @@ uint8 numOfChrgableSubsys = 0;
 uint8 chrgableSubsysCode = 0;
 
 uint16 vcuDCVol = 0;
-// EBC相关
+// EBC鐩稿叧
 uint8 ebcStatus = 0;
 uint8 ebcAskHVOn = 0;
 uint8 ebcAskHVOff = 0;
@@ -81,7 +92,7 @@ uint8 retainLockSignal = 0;
 uint8 dischargeLockSignal = 0;
 uint8 chargeLockSignal = 0;
 uint8 chargeFlag = 0;
-// Bcu相关
+// Bcu鐩稿叧
 UINT32 BcuInTable[28] = {
 	0x1801D0F3,
 	0x1801D8F3,
@@ -117,188 +128,188 @@ BOOL BcuRxLongError[28];
 UINT8 BcuRxErrorCounter[28];
 UINT8 BcuRxFlag[28];
 /************************************************************
- *BCU->4G解码变量存放区
+ *BCU->4G瑙g爜鍙橀噺瀛樻斁鍖�
  ************************************************************/
-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
+UINT8 BMS_ReqVIN = 0x00;						//鏄�惁璇锋眰VIN鐮�,0:棰勭暀;1:璇锋眰VIN;2:涓嶈�姹俈IN;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:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtNegRly = 0x00;						//涓昏礋缁х數鍣ㄧ矘杩炴晠闅�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtPosCharRly1 = 0x00;					//鍏呮�1缁х數鍣ㄧ矘杩炴晠闅�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtNegCharRly1 = 0x00;					//鍏呰礋1缁х數鍣ㄧ矘杩炴晠闅�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtPosCharRly2 = 0x00;					//鍏呮�2缁х數鍣ㄧ矘杩炴晠闅�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtNegCharRly2 = 0x00;					//鍏呰礋2缁х數鍣ㄧ矘杩炴晠闅�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtHeatRly1 = 0x00;					//鍔犵儹1/姝g户鐢靛櫒绮樿繛鏁呴殰,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtHeatRly2 = 0x00;					//鍔犵儹2/璐熺户鐢靛櫒绮樿繛鏁呴殰,0:姝e父; 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:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_BraOpenCirc = 0x00;					//鏀�矾鏂�矾鏁呴殰,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtBackCharCurrOutLim = 0x00;			//鍥炲厖鐢垫祦瓒呴檺鎶ヨ�,0:姝e父1 : 1绾� 杞诲井鏁呴殰 2 : 2绾� 杈冧弗閲嶆晠闅� 3 : 3绾� 鏈€涓ラ噸鏁呴殰, Re - 1, Off - 0,
+UINT8 BMS_FtPosRlyOpen = 0x00;					//涓绘�缁х數鍣ㄦ棤娉曢棴鍚堟姤璀�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtNegRlyOpen = 0x00;					//涓昏礋缁х數鍣ㄦ棤娉曢棴鍚堟姤璀�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtPosCharRly1Open = 0x00;				//鐩存祦鍏呯數姝�1缁х數鍣ㄦ棤娉曢棴鍚堟姤璀�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtPosCharRly2Open = 0x00;				//鐩存祦鍏呯數姝�2缁х數鍣ㄦ棤娉曢棴鍚堟姤璀�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtNegCharRly1Open = 0x00;				//鐩存祦鍏呯數璐�1缁х數鍣ㄦ棤娉曢棴鍚堟姤璀�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtNegCharRly2Open = 0x00;				//鐩存祦鍏呯數璐�2缁х數鍣ㄦ棤娉曢棴鍚堟姤璀�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtTMSContClose = 0x00;				//鍔犵儹鑶滄垨TMS鎺ヨЕ鍣ㄦ棤娉曟柇寮€鎶ヨ�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtTMSContOpen = 0x00;					//鍔犵儹鑶滄垨TMS鎺ヨЕ鍣ㄦ棤娉曢棴鍚堟姤璀�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtTMS = 0x00;							//鐑��鐞嗙郴缁熸晠闅�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_Ft24VSpy = 0x00;						// BMS 24V渚涚數寮傚父鎶ヨ�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtPACKSelfProt = 0x00;				//鐢垫睜鍖呰嚜淇濇姢鎶ヨ�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtCharSockTempOver = 0x00;			//鍏呯數鎻掑骇杩囨俯鎶ヨ�,0:姝e父1 : 1绾� 杞诲井鏁呴殰 2 : 2绾� 杈冧弗閲嶆晠闅� 3 : 3绾� 鏈€涓ラ噸鏁呴殰, Re - 1, Off - 0,
+UINT8 BMS_FtTempOutCtrl = 0x00;					//鐑�け鎺ф姤璀�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_StPosHeatRly = 0x00;					//鍔犵儹姝g户鐢靛櫒鐘舵€�,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鐨凜heckSum,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 : 姝e湪鍏呯數 2 : 鍏呯數缁撴潫 3 : 鍏呯數鏁呴殰, Re - 1, Off - 0,
+UINT8 BMS_FtLvl = 0x00;							//褰撳墠鏈€楂樻晠闅滅瓑绾�,0:姝e父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:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtSOCJump = 0x00;						// SOC璺冲彉鎶ヨ�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtInCom = 0x00;						// BMS鍐呴儴閫氫俊鏁呴殰,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtSysMism = 0x00;						// BMS/鍙�厖鐢靛偍鑳界郴缁熶笉鍖归厤鎶ヨ�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtHvIntLock = 0x00;					//楂樺帇浜掗攣鎶ヨ�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtSmoke = 0x00;						//鐏��鎺㈡祴鍣ㄦ晠闅�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtFire = 0x00;						//鐢垫睜鍖呯伀鐏炬姤璀�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtNum = 0x00;							// BMS褰撳墠鍙戠敓鐨勬晠闅滄€绘暟鐩�(鍖呮嫭GB32960涓��瀹氱殑鏁呴殰鏁扮洰),,Re-1,Off-0,
+UINT8 BMS_PackSOC = 0x00;						//鐢垫睜鍖匰OC,,Re-0.4,Off-0,
+UINT8 BMS_PackSOH = 0x00;						//鐢垫睜鍖匰OH,,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:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtCurrSenr = 0x00;					//鐢垫祦浼犳劅鍣ㄦ晠闅�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtHeatingFilm = 0x00;					//鍔犵儹鑶滃姞鐑�洖璺�晠闅�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtMainLoopPreChar = 0x00;				//涓诲洖璺��鍏呮垨棰勬�鏁呴殰,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtAuxLoopPreChar = 0x00;				//杈呬欢鍥炶矾棰勫厖鎴栭�妫€鏁呴殰,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtACANLost = 0x00;					// ACAN/鏁磋溅CAN閫氳�鏁呴殰,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtDCDC = 0x00;						// BMS-DC-DC鏁呴殰,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtSOCDif = 0x00;						// SOC宸�紓杩囧ぇ,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtCellOverDisChar = 0x00;				//鐢佃姱杩囨斁鏁呴殰,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtCharOver = 0x00;					//杞﹁浇鍌ㄨ兘瑁呯疆杩囧厖鎶ヨ�,0:姝e父;1:1绾� 杞诲井鏁呴殰;2:2绾� 杈冧弗閲嶆晠闅�3 : 10绾� 鏈€涓ラ噸鏁呴殰, Re - 1, Off - 0,
+UINT8 BMS_FtContDisCharCurrOverLoad = 0x00;		//鎸佺画鍥炲厖杩囨祦鏁呴殰,0:姝e父;1:1绾� 杞诲井鏁呴殰;2:2绾� 杈冧弗閲嶆晠闅�3 : 10绾� 鏈€涓ラ噸鏁呴殰, Re - 1, Off - 0,
+UINT8 BMS_FtContCharCurrOverLoad = 0x00;		//鎸佺画鏀剧數杩囨祦鏁呴殰,0:姝e父;1:1绾� 杞诲井鏁呴殰;2:2绾� 杈冧弗閲嶆晠闅�3 : 10绾� 鏈€涓ラ噸鏁呴殰, Re - 1, Off - 0,
+UINT8 BMS_Gun1DCNegTemp = 0x00;					//鍏呯數鍙�1璐熸俯鎰熷€�,,Re-1,Off--40,鈩�
+UINT8 BMS_Gun1DCPosTemp = 0x00;					//鍏呯數鍙�1姝f俯鎰熷€�,,Re-1,Off--40,鈩�
+UINT8 BMS_Gun2DCNegTemp = 0x00;					//鍏呯數鍙�2璐熸俯鎰熷€�,,Re-1,Off--40,鈩�
+UINT8 BMS_Gun2DCPosTemp = 0x00;					//鍏呯數鍙�2姝f俯鎰熷€�,,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:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtOverDisCharCurrDuringChar = 0x00;	//鍏呯數鏃舵斁鐢电數娴佽繃澶�,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtCharNTC = 0x00;						//鍏呯數鎻掑骇NTC鏁呴殰,0:姝e父; 1:鏁呴殰,Re-1,Off-0,
+UINT8 BMS_FtELock = 0x00;						//鐢靛瓙閿佹晠闅�,0:姝e父; 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;						//瀛愮郴缁熺紪鍙稢SC,鏈夋晥鍊�1~255,Re-1,Off-0,
+UINT8 BMS_CellTemp[BMS_TEMP_MAX_NUM] = {0x00};	//褰撳墠CSC涓嬬殑绗琋涓�帰閽堢殑娓╁害,255 "Invalid" 0xFF 鏃犳晥鏈夋晥鍊� 0 ~254, 鍗曚綅 鈩�, 鑼冨洿(-50 ~204)鈩�, , Re - 1, Off-- 50,鈩�
+UINT8 BMS_Checksum = 0x00;						//鐢垫睜缂栫爜淇℃伅1鐨凜heckSum,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;						//鐢垫睜绯荤粺涓瑿SC鎬荤殑鏁扮洰,,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涓鸿蒋浠剁増鏈�€丅涓烘祴璇曠増鏈�€佹�寮忕増鏈�笉甯�)  ,yyy:0~254,绮惧害1,255:鏃犳晥,涓嶆樉绀�;zzz:0~254,绮惧害1,255:鏃犳晥,涓嶆樉绀�;
+UINT16 BMS_HardwareVersion = 0x00;				//纭�欢鐗堟湰鍙�:VyyyBzzz(V涓虹‖浠剁増鏈�€丅涓烘祴璇曠増鏈�€佹�寮忕増鏈�笉甯�)  ,,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;						//姣嶇嚎姝e�杞︿綋缁濈紭鐢甸樆,,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;				//绱��鎹㈢數绔欏厖鍏�Wh 鏁�,,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;				//绱��鎹㈢數绔欏厖鍏�h 鏁�,,Re-0.1,Off-0,Ah
 #endif

+ 20 - 37
code/app/AppGlobalVar.h

@@ -1,36 +1,31 @@
-/*
- * @Author       : ChenJie
- * @Date         : 2022-01-23 13:45:09
- * @Version      : V3.0
- * @LastEditors  : ChenJie
- * @LastEditTime : 2022-05-17 18:37:07
- * @Description  : file content
- * @FilePath     : \S32K146_4G\src\AppGlobalVar.h
- */
-/*
- * AppGlobal.h
- *Ӧ�ò�ȫ�ֱ���
- *  Created on: 2022��1��19��
- *      Author: QiXiang_CHENJIE
+/*** 
+ * @Author: chenjie
+ * @Date: 2022-10-27
+ * @LastEditTime: 2022-10-28
+ * @LastEditors: chenjie
+ * @Description: 
+ * @FilePath: \S32K146_4G\code\app\AppGlobalVar.h
+ * @Copyright (c) 2022 by chenjie, All Rights Reserved.
  */
+
 #ifndef APPGLOBALVAR_H_
 #define APPGLOBALVAR_H_
 
-//#define APP_UART0_ENABLE //ƽ����Ŀ
-#define APP_CAN_ENABLE //�ؿ���Ŀ
+#define APP_CAN_ENABLE 
 
 #include "hal_adapter.h"
 // test Var
 #define defaultSn "GYTEST00000000001"
 // #define defaultSn "PZLCLL128N2236001"
 #define BATT_SN_LEN 17
-#define HWVERSION 0x0001
-#define BLSWVERSION 0x00000001
-#define DRVSWVERSION 0x00000001
-#define APPSWVERSION 0x00000104
-#define BMS_MANUFACTURE 0xFF
-#define BMS_INFO 0xFF
-#define DATA_MODULE_TYPE 0x02
+extern const uint32 AppSwVersion;
+extern const uint8 DataModuleType;
+extern const uint16 HwVersion;
+extern const uint32 BlSwVersion;
+extern const uint32 DrvSwVersion;
+extern const uint8 BmsManuFacture;
+extern const uint8 BmsInfo;
+
 
 #define BMS_CELL_MAX_NUM 384
 #define BMS_TEMP_MAX_NUM 64
@@ -68,18 +63,7 @@ extern QueueHandle_t CanRecvQueueHandle2;
 
 extern TaskHandle_t Uart_Hal_RecvTask_Handle,Uart_Hal_SendTask_Handle,CanTask_Handle,GpsTask_Handle,Uart_4G_Task_Handle;
 extern SemaphoreHandle_t sleep_mutex;
-/*Fota*/
-typedef struct _Fota_Type
-{
-    bool Fota_update_error;
-    uint32 Fota_All_Data_Len;
-    uint32 Fota_Current_Addres;
-    uint8 Fota_Recv_Data_Len;
-    uint8 *Fota_Recv_DataPtr;
-    uint32 Fota_Flash_Addres;
-    uint8 Fota_CRC;
-} Fota_Type;
-/*���±�����ΪTCP��ر���*/
+
 extern uint8 CSQValue;
 extern sint8 SocketId;
 extern sint8 RegChkRet;
@@ -105,7 +89,6 @@ typedef struct _AppConfigType
 } AppConfigBody;
 extern AppConfigBody AppConfigInfo;
 
-/*���±�����ΪApp_CAN��ر���*/
 #ifdef APP_CAN_ENABLE
 extern uint8 vehicleStatus;
 extern uint8 bmsHVOn;
@@ -125,7 +108,7 @@ 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];

+ 39 - 35
code/app/AppTaskCan.c

@@ -1,9 +1,13 @@
 /*
- * AppTaskCan.c
- *
- *  Created on: 2022年2月13日
- *      Author: QiXiang_CHENJIE
+ * @Author: chenjie
+ * @Date: 2022-10-27
+ * @LastEditTime: 2022-10-28
+ * @LastEditors: chenjie
+ * @Description: 
+ * @FilePath: \S32K146_4G\code\app\AppTaskCan.c
+ * Copyright (c) 2022 by chenjie, All Rights Reserved.
  */
+
 #include "AppTaskCan.h"
 #ifdef APP_CAN_ENABLE
 uint32 timerCANIdle = 0x00;
@@ -52,7 +56,7 @@ void CanTask(void *pvParameters)
 				}
 				else
 				{
-					BcuDecodeFunction(CanRxMsg.id, CanRxMsg.data); // can协议解析
+					BcuDecodeFunction(CanRxMsg.id, CanRxMsg.data); 
 				}
 			}
 			if(timerCANIdle >= 60000)
@@ -74,7 +78,7 @@ void CanTask(void *pvParameters)
 		}
 	}
 }
-//注意解码超限问题
+
 void BcuDecodeFunction(uint32 ID, uint8 *rawData)
 {
 	switch (ID)
@@ -444,18 +448,18 @@ static void UDSAnsFunc(uint8 *rawData)
 	static uint8 deviceSnRecvFlg = 0;
 	switch (UdsService)
 	{
-	case 0x10: //模式切换
+	case 0x10: 
 	{
 		if (UdsSubService == 0x01)
 		{
-			UdsStates = 0x01; //关闭UDS诊断
+			UdsStates = 0x01; 
 			UdsAns(true, UdsService, UdsSubService, 0x00, NULL, 0);
 		}
 		else if (UdsSubService == 0x02)
 		{
 			if (UdsStates == 0x01 || UdsStates == 0x02)
 			{
-				UdsStates = 0x02; //打开UDS诊断
+				UdsStates = 0x02; 
 				UdsAns(true, UdsService, UdsSubService, 0x00, NULL, 0);
 			}
 			else
@@ -465,18 +469,18 @@ static void UDSAnsFunc(uint8 *rawData)
 		}
 		break;
 	}
-	case 0x11://控制
+	case 0x11:
 	{
 		if(UdsStates==0x02)
 		{
 			switch(UdsSubService)
 			{
-				case 0x01://重启
+				case 0x01:
 				{
-					AnsData[0] = APPSWVERSION>>24;
-					AnsData[1] = APPSWVERSION>>16;
-					AnsData[2] = APPSWVERSION>>8;
-					AnsData[3] = APPSWVERSION>>0;
+					AnsData[0] = AppSwVersion>>24;
+					AnsData[1] = AppSwVersion>>16;
+					AnsData[2] = AppSwVersion>>8;
+					AnsData[3] = AppSwVersion>>0;
 					UdsAns(true,UdsService,UdsSubService,0x00,AnsData,4);
 					AppConfigInfo.appSaveFlg = true;
 					vTaskDelay(pdMS_TO_TICKS(1000));
@@ -496,22 +500,22 @@ static void UDSAnsFunc(uint8 *rawData)
 		}
 		break;
 	}
-	case 0x22: //查询
+	case 0x22: 
 	{
 		if (UdsStates == 0x02)
 		{
 			switch (UdsSubService)
 			{
-			case 0x01: //版本号查询
+			case 0x01: 
 			{
-				AnsData[0] = APPSWVERSION >> 24;
-				AnsData[1] = APPSWVERSION >> 16;
-				AnsData[2] = APPSWVERSION >> 8;
-				AnsData[3] = APPSWVERSION >> 0;
-				UdsAns(true, UdsService, UdsSubService, 0x00, AnsData, 4);
+				AnsData[0] = AppSwVersion>>24;
+				AnsData[1] = AppSwVersion>>16;
+				AnsData[2] = AppSwVersion>>8;
+				AnsData[3] = AppSwVersion>>0;
+				UdsAns(true,UdsService,UdsSubService,0x00,AnsData,4);
 				break;
 			}
-			case 0x02: // SN号码查询
+			case 0x02: 
 			{
 				memcpy(AnsData, AppConfigInfo.deviceSn, 17);
 				for (uint8 i = 0; i < 5; i++)
@@ -520,7 +524,7 @@ static void UDSAnsFunc(uint8 *rawData)
 				}
 				break;
 			}
-			case 0x03: // ICCID查询
+			case 0x03: 
 			{
 				memcpy(AnsData, IccidNum, 20);
 				for (uint8 i = 0; i < 5; i++)
@@ -529,7 +533,7 @@ static void UDSAnsFunc(uint8 *rawData)
 				}
 				break;
 			}
-			case 0x04: // IMEI查询
+			case 0x04: 
 			{
 				memcpy(AnsData, ImeiNum, 15);
 				for (uint8 i = 0; i < 4; i++)
@@ -538,19 +542,19 @@ static void UDSAnsFunc(uint8 *rawData)
 				}
 				break;
 			}
-			case 0x05: //驻网状态查询
+			case 0x05: 
 			{
 				AnsData[0] = RegChkRet;
 				UdsAns(true, UdsService, UdsSubService, 0x00, AnsData, 1);
 				break;
 			}
-			case 0x06: //联网状态查询
+			case 0x06: 
 			{
 				AnsData[0] = SocketId;
 				UdsAns(true, UdsService, UdsSubService, 0x00, AnsData, 1);
 				break;
 			}
-			case 0x07: //定位信息查询
+			case 0x07: 
 			{
 				GPSInfo GpsRecvData;
 				if (xQueuePeek(GpsDataQueueHandle, &GpsRecvData, 0) == pdPASS)
@@ -580,18 +584,18 @@ static void UDSAnsFunc(uint8 *rawData)
 				}
 				break;
 			}
-			case 0x08: //温度检测查询
+			case 0x08: 
 			{
 				UdsAns(true, UdsService, UdsSubService, 0x00, AnsData, 1);
 				break;
 			}
-			case 0x09: //电池信息查询
+			case 0x09: 
 			{
 				UdsAns(true, UdsService, UdsSubService, 0x00, AnsData, 1);
 				BattSendFlg = 1;
 				break;
 			}
-			case 0x0A: //三轴数据查询
+			case 0x0A: 
 			{
 				AnsData[0] = xyzData[0] >> 8;
 				AnsData[1] = xyzData[0] >> 0;
@@ -613,7 +617,7 @@ static void UDSAnsFunc(uint8 *rawData)
 		}
 		break;
 	}
-	case 0x27: //控制
+	case 0x27: //锟斤拷锟斤拷
 	{
 		if (UdsStates == 0x02)
 		{
@@ -624,7 +628,7 @@ static void UDSAnsFunc(uint8 *rawData)
 		}
 		break;
 	}
-	case 0x2E: //写
+	case 0x2E: //写锟斤拷
 	{
 		if (UdsStates == 0x02)
 		{
@@ -659,7 +663,7 @@ static void UDSAnsFunc(uint8 *rawData)
 		}
 		break;
 	}
-	case 0x31://控制
+	case 0x31://锟斤拷锟斤拷
 	{
 		if(UdsStates==0x02)
 		{
@@ -819,7 +823,7 @@ static void BattSendFunc(void)
 //	CanIf_SendMessage(CAN1, CanTxMsg);
 }
 
-void BcuRxDiagnose(void) // 100ms调用一次
+void BcuRxDiagnose(void) // 100ms锟斤拷锟斤拷一锟斤拷
 {
 
 	static UINT32 TimeCounter = 0;	// ms

+ 36 - 50
code/app/AppTaskUart1.c

@@ -238,17 +238,13 @@ sint8 tcpipConnectionSend(uint8 TcpConnectId, uint8 *SendDataPtr, uint16 SendDat
 		if (((ret==0)&&(ReadLen>0)&&((uint8 *)strstr((char *)UartRecvPtr, (char *)(">"))))||1)//此IF条件默认通过
 		{
 			UART_Send_Data(UART_LPUART1, (uint8 *)SendDataPtr, SendDataLen, 1000);
-			sint8 ret = AtcmdDelayRecvFunc(UART_LPUART1,(char *)("+CIPSEND"),5000);
+			sint8 ret = AtcmdDelayRecvFunc(UART_LPUART1,(char *)("+CIPSEND"),2000);
 			if (ret==0)
 			{
 				outValue = 0;
 			}
 			else
 			{
-#if SEGGER_PRINTF==1
-			SEGGER_RTT_printf("\r\n[%d]sendFault!!!\r\n",__LINE__);
-			SEGGER_RTT_printf("[%d]SendDataLen=%d,len=%d\r\n",__LINE__,SendDataLen,sizeof(StorageInfo));
-#endif
 				outValue = -2;
 				sendErrConuter++;
 			}
@@ -258,9 +254,6 @@ sint8 tcpipConnectionSend(uint8 TcpConnectId, uint8 *SendDataPtr, uint16 SendDat
 			outValue = -1;
 			sendErrConuter++;
 		}
-#if SEGGER_PRINTF==1
-			SEGGER_RTT_printf("[%d]outValue=%d,sendErrConuter=%d\r\n",__LINE__,outValue,sendErrConuter);
-#endif
 	}
 	return outValue;
 }
@@ -743,29 +736,27 @@ void TcpDataEncode(uint32 *PtrSendAddr, uint16 *SendLen)
 	static UTC8TimeType UTC8TimeTcp;
 	uint8 *SendBuffer = NULL;
 	uint8 DataIdx = 0;
-#if SEGGER_PRINTF==1
-	SEGGER_RTT_printf("[%d] TcpSendTimeCounter=%d\r\n",__LINE__,TcpSendTimeCounter);
-#endif
 	if (TcpSendTimeCounter == 5)
 	{
 		DataIdx = VerMsg; //版本信息发送
 	}
-	else if (TcpSendTimeCounter % 10 == 0)
+	else if (TcpSendTimeCounter % 10 == 1)
 	{
 		DataIdx = TruckBattMsg; //电池信息发送
 	}
-	else if ((TcpSendTimeCounter - 1) % 60 == 0)
+	else if ((TcpSendTimeCounter) % 60 == 2)
 	{
 		DataIdx = TruckVehiMsg; //车辆信息发送
 	}
-	else if ((TcpSendTimeCounter - 2) % 60 == 0)
+		else if ((TcpSendTimeCounter) % 10 == 3)
 	{
-		DataIdx = TruckAcclMsg; //累计信息发送
+		DataIdx = GpsMsg; //定位信息发送
 	}
-	else if ((TcpSendTimeCounter - 3) % 10 == 0)
+	else if ((TcpSendTimeCounter) % 60 == 4)
 	{
-		DataIdx = GpsMsg; //定位信息发送
+		DataIdx = TruckAcclMsg; //累计信息发送
 	}
+
 	else if ((TcpSendTimeCounter) % (60*60*2) == 6)
 	{
 		DataIdx = 0x01; //时间校准
@@ -776,11 +767,7 @@ void TcpDataEncode(uint32 *PtrSendAddr, uint16 *SendLen)
 		DataIdx = 0; //不发送,返回
 		return;
 	}
-#if SEGGER_PRINTF==1
-	SEGGER_RTT_printf("\r\n[%d] DataIdx -%X\r\n",__LINE__,DataIdx);
-#endif
 	memcpy(TcpbattSN, AppConfigInfo.deviceSn, 17);
-	//memcpy(TcpbattSN,defaultSn, 17);
 	GetUtc8Time(&UTC8TimeTcp); //时间获取
 	vTaskDelay(pdMS_TO_TICKS(100));
 	switch (DataIdx)
@@ -839,26 +826,25 @@ void TcpDataEncode(uint32 *PtrSendAddr, uint16 *SendLen)
 		GpsToTcpInfo.gpsInfo.CellID[0] = cellId >> 16;
 		GpsToTcpInfo.gpsInfo.CellID[0] = cellId >> 8;
 		GpsToTcpInfo.gpsInfo.CellID[0] = cellId;
-		uint16 xyzDatacahce[3] = {0};
-		memcpy(xyzDatacahce, xyzData, 3);
+		uint16 xyzDatacache[3] = {0};
+		memcpy(xyzDatacache, xyzData, 3*sizeof(uint16));
 		for (uint8 i = 0; i < 3; i++)
 		{
-			if (xyzDatacahce[i] > 0x8000) // 数据为负
+			if (xyzDatacache[i] > 0x8000) // 数据为负
 			{
-				xyzDatacahce[i] = (uint16)((uint16)(~(xyzDatacahce[i])) + 1);
-				xyzDatacahce[i] = 20000U - xyzDatacahce[i];
+				xyzDatacache[i] = 20000U + (sint16)xyzDatacache[i];
 			}
 			else
 			{
-				xyzDatacahce[i] = xyzDatacahce[i] + 20000U;
+				xyzDatacache[i] = xyzDatacache[i] + 20000U;
 			}
 		}
-		GpsToTcpInfo.gpsInfo.xData[0] = xyzDatacahce[0] >> 8;
-		GpsToTcpInfo.gpsInfo.xData[1] = xyzDatacahce[0];
-		GpsToTcpInfo.gpsInfo.yData[0] = xyzDatacahce[1] >> 8;
-		GpsToTcpInfo.gpsInfo.yData[1] = xyzDatacahce[1];
-		GpsToTcpInfo.gpsInfo.zData[0] = xyzDatacahce[2] >> 8;
-		GpsToTcpInfo.gpsInfo.zData[1] = xyzDatacahce[2];
+		GpsToTcpInfo.gpsInfo.xData[0] = xyzDatacache[0] >> 8;
+		GpsToTcpInfo.gpsInfo.xData[1] = xyzDatacache[0];
+		GpsToTcpInfo.gpsInfo.yData[0] = xyzDatacache[1] >> 8;
+		GpsToTcpInfo.gpsInfo.yData[1] = xyzDatacache[1];
+		GpsToTcpInfo.gpsInfo.zData[0] = xyzDatacache[2] >> 8;
+		GpsToTcpInfo.gpsInfo.zData[1] = xyzDatacache[2];
 		GpsToTcpInfo.CRC = bcc_chk((uint8 *)&GpsToTcpInfo, sizeof(GPSMsgtoTcpType) - 1);
 		memcpy(SendBuffer, &GpsToTcpInfo, sizeof(GpsToTcpInfo));
 		*PtrSendAddr = (uint32)SendBuffer;
@@ -900,23 +886,23 @@ void TcpDataEncode(uint32 *PtrSendAddr, uint16 *SendLen)
 		VerMsgToTcpInfo.VerInfo.BMSSwVersion[1] = BMS_SoftwareVersion >> 16;
 		VerMsgToTcpInfo.VerInfo.BMSSwVersion[2] = BMS_SoftwareVersion >> 8;
 		VerMsgToTcpInfo.VerInfo.BMSSwVersion[3] = BMS_SoftwareVersion;
-		VerMsgToTcpInfo.VerInfo.HwVersion[0] = (HWVERSION >> 8) & 0xFF;
-		VerMsgToTcpInfo.VerInfo.HwVersion[1] = (HWVERSION)&0xFF;
-		VerMsgToTcpInfo.VerInfo.BLVersion[0] = (BLSWVERSION >> 24) & 0xFF;
-		VerMsgToTcpInfo.VerInfo.BLVersion[1] = (BLSWVERSION >> 16) & 0xFF;
-		VerMsgToTcpInfo.VerInfo.BLVersion[2] = (BLSWVERSION >> 8) & 0xFF;
-		VerMsgToTcpInfo.VerInfo.BLVersion[3] = (BLSWVERSION)&0xFF;
-		VerMsgToTcpInfo.VerInfo.DRVVersion[0] = (DRVSWVERSION >> 24) & 0xFF;
-		VerMsgToTcpInfo.VerInfo.DRVVersion[1] = (DRVSWVERSION >> 16) & 0xFF;
-		VerMsgToTcpInfo.VerInfo.DRVVersion[2] = (DRVSWVERSION >> 8) & 0xFF;
-		VerMsgToTcpInfo.VerInfo.DRVVersion[3] = (DRVSWVERSION)&0xFF;
-		VerMsgToTcpInfo.VerInfo.APPVersion[0] = (APPSWVERSION >> 24) & 0xFF;
-		VerMsgToTcpInfo.VerInfo.APPVersion[1] = (APPSWVERSION >> 16) & 0xFF;
-		VerMsgToTcpInfo.VerInfo.APPVersion[2] = (APPSWVERSION >> 8) & 0xFF;
-		VerMsgToTcpInfo.VerInfo.APPVersion[3] = (APPSWVERSION)&0xFF;
-		VerMsgToTcpInfo.VerInfo.BmsType = BMS_MANUFACTURE;
-		VerMsgToTcpInfo.VerInfo.BmsInfo = BMS_INFO;
-		VerMsgToTcpInfo.VerInfo.DataModuleType = DATA_MODULE_TYPE;
+		VerMsgToTcpInfo.VerInfo.HwVersion[0] = (HwVersion >> 8) & 0xFF;
+		VerMsgToTcpInfo.VerInfo.HwVersion[1] = (HwVersion)&0xFF;
+		VerMsgToTcpInfo.VerInfo.BLVersion[0] = (BlSwVersion >> 24) & 0xFF;
+		VerMsgToTcpInfo.VerInfo.BLVersion[1] = (BlSwVersion >> 16) & 0xFF;
+		VerMsgToTcpInfo.VerInfo.BLVersion[2] = (BlSwVersion >> 8) & 0xFF;
+		VerMsgToTcpInfo.VerInfo.BLVersion[3] = (BlSwVersion)&0xFF;
+		VerMsgToTcpInfo.VerInfo.DRVVersion[0] = (DrvSwVersion >> 24) & 0xFF;
+		VerMsgToTcpInfo.VerInfo.DRVVersion[1] = (DrvSwVersion >> 16) & 0xFF;
+		VerMsgToTcpInfo.VerInfo.DRVVersion[2] = (DrvSwVersion >> 8) & 0xFF;
+		VerMsgToTcpInfo.VerInfo.DRVVersion[3] = (DrvSwVersion)&0xFF;
+		VerMsgToTcpInfo.VerInfo.APPVersion[0] = (AppSwVersion >> 24) & 0xFF;
+		VerMsgToTcpInfo.VerInfo.APPVersion[1] = (AppSwVersion >> 16) & 0xFF;
+		VerMsgToTcpInfo.VerInfo.APPVersion[2] = (AppSwVersion >> 8) & 0xFF;
+		VerMsgToTcpInfo.VerInfo.APPVersion[3] = (AppSwVersion)&0xFF;
+		VerMsgToTcpInfo.VerInfo.BmsType = BmsManuFacture;
+		VerMsgToTcpInfo.VerInfo.BmsInfo = BmsInfo;
+		VerMsgToTcpInfo.VerInfo.DataModuleType = DataModuleType;
 		VerMsgToTcpInfo.CRC = bcc_chk((uint8 *)&VerMsgToTcpInfo, sizeof(VerMsgToTcpInfo) - 1);
 		memcpy(SendBuffer, &VerMsgToTcpInfo, sizeof(VersionMsgtoTcpType));
 		*PtrSendAddr = (uint32)SendBuffer;

+ 0 - 171
code/app/lib/AppFuncLib.c

@@ -425,174 +425,3 @@ uint16 crc_chk(uint8 *data, uint8 length)
     }
     return reg_crc;
 }
-/**
- * @brief : Fota升级处理函数,将接收的数据进行校验,搬运至升级区域,并进行应答
- * @param {UINT8} *DataPtr
- * @param {INT32} connectId
- * @return {*}
- */
-void Fota_Func(uint8 *DataPtr, sint32 connectId)
-{
-	static uint32 currentAddr = 0;
-    Fota_Type Fota_S;
-    uint8 Fota_Answer[43];
-    uint8 Fota_Cmd;
-    sint8 ret;
-    uint8 *Data_Read_Buffer = NULL;
-    uint8 Data_Read_Crc;
-    if (*(DataPtr + 30) == 0x01)
-    {
-        uint32 FlashAddStart = 0;
-        uint32 appReceviedCRC;
-        Hal_FlsGetAppVectorTableStartAddr(&FlashAddStart);
-        Fota_S.Fota_Flash_Addres = FlashAddStart;
-        Fota_Cmd = *(DataPtr + 31);
-        Fota_Answer[0] = TCP_START_SYM1;
-        Fota_Answer[1] = TCP_START_SYM2;
-        Fota_Answer[2] = TCP_CONCMD_SYM;
-        switch (Fota_Cmd)
-        {
-        case 0x01:
-        {
-            Fota_S.Fota_All_Data_Len = *(DataPtr + 33) << 24 | *(DataPtr + 34) << 16 | *(DataPtr + 35) << 8 | *(DataPtr + 36);
-            Fota_S.Fota_Current_Addres = *(DataPtr + 37) << 24 | *(DataPtr + 38) << 16 | *(DataPtr + 39) << 8 | *(DataPtr + 40);
-            if (Fota_S.Fota_All_Data_Len >= 0x7FE00)
-            {
-                Fota_Answer[3] = 0x02;//上报错误
-            }
-            else
-            {
-                Fota_Answer[3] = 0x02;
-                appReceviedCRC = (uint32)(*(DataPtr + 42) << 8 | *(DataPtr + 43));
-                Hal_FlsErase(Fota_S.Fota_Flash_Addres, Fota_S.Fota_All_Data_Len, 5);
-                Hal_SetAppInfo(Fota_S.Fota_All_Data_Len, appReceviedCRC, CONTROLLER_SELF);
-            }
-            memcpy(&Fota_Answer[4], (DataPtr + 4), BATT_SN_LEN);
-            Fota_Answer[21] = TCP_ENCPT_DISABLE;
-            Fota_Answer[22] = 0x00;
-            Fota_Answer[23] = 0x12;
-            memcpy(&Fota_Answer[24], (DataPtr + 24), 18);
-            Fota_Answer[42] = bcc_chk_fota(Fota_Answer, 42);
-            tcpipConnectionSend(connectId, Fota_Answer, 43);
-            break;
-        }
-        case 0x02:
-        {
-            Fota_S.Fota_All_Data_Len = *(DataPtr + 33) << 24 | *(DataPtr + 34) << 16 | *(DataPtr + 35) << 8 | *(DataPtr + 36);
-            Fota_S.Fota_Current_Addres = *(DataPtr + 37) << 24 | *(DataPtr + 38) << 16 | *(DataPtr + 39) << 8 | *(DataPtr + 40);
-            currentAddr = Fota_S.Fota_Current_Addres;
-            Fota_S.Fota_Recv_Data_Len = *(DataPtr + 41);
-            Fota_S.Fota_Recv_DataPtr = (DataPtr + 42);
-            Fota_S.Fota_CRC = Fota_crc_chk(Fota_S.Fota_Recv_DataPtr, Fota_S.Fota_Recv_Data_Len);
-            if (Fota_S.Fota_CRC == *(DataPtr + Fota_S.Fota_Recv_Data_Len + 42))
-            {
-                uint8 Fota_Recv_Data_Len_8 = 0;
-                if (Fota_S.Fota_Recv_Data_Len % FLS_INTERNAL_WRITE_SIZE != 0)
-                {
-                	Fota_Recv_Data_Len_8 = Fota_S.Fota_Recv_Data_Len + FLS_INTERNAL_WRITE_SIZE - (Fota_S.Fota_Recv_Data_Len % FLS_INTERNAL_WRITE_SIZE);
-                }
-                else
-                {
-                	Fota_Recv_Data_Len_8 = Fota_S.Fota_Recv_Data_Len;
-                }
-                Data_Read_Buffer = malloc(Fota_S.Fota_Recv_Data_Len);
-                Hal_FlsWrite(Fota_S.Fota_Flash_Addres + Fota_S.Fota_Current_Addres, Fota_S.Fota_Recv_DataPtr, Fota_Recv_Data_Len_8, 100);
-                memset(Data_Read_Buffer, 0x00, Fota_S.Fota_Recv_Data_Len);
-                Hal_FlsRead(Fota_S.Fota_Flash_Addres + Fota_S.Fota_Current_Addres, Data_Read_Buffer, Fota_S.Fota_Recv_Data_Len, 100);
-                Data_Read_Crc = Fota_crc_chk(Data_Read_Buffer, Fota_S.Fota_Recv_Data_Len);
-                if (Data_Read_Crc == Fota_S.Fota_CRC)
-                {
-                    Fota_Answer[3] = 0x01;
-                }
-                else
-                {
-                    Fota_Answer[3] = 0x02;
-//                    Hal_FlsErase(Fota_S.Fota_Flash_Addres + Fota_S.Fota_Current_Addres, Fota_Recv_Data_Len_8, 5);
-                }
-            }
-            else //数据校验失败
-            {
-                Fota_Answer[3] = 0x02;
-            }
-            if (Data_Read_Buffer != NULL)
-                free(Data_Read_Buffer);
-            Data_Read_Buffer = NULL;
-            memcpy(&Fota_Answer[4], (DataPtr + 4), BATT_SN_LEN);
-            Fota_Answer[21] = TCP_ENCPT_DISABLE;
-            Fota_Answer[22] = 0x00;
-            Fota_Answer[23] = 0x12;
-            memcpy(&Fota_Answer[24], (DataPtr + 24), 18);
-            Fota_Answer[42] = bcc_chk_fota(Fota_Answer, 42);
-            tcpipConnectionSend(connectId, Fota_Answer, 43);
-            break;
-        }
-        case 0x03:
-        {
-            Fota_S.Fota_All_Data_Len = *(DataPtr + 33) << 24 | *(DataPtr + 34) << 16 | *(DataPtr + 35) << 8 | *(DataPtr + 36);
-            Fota_S.Fota_Current_Addres = *(DataPtr + 37) << 24 | *(DataPtr + 38) << 16 | *(DataPtr + 39) << 8 | *(DataPtr + 40);
-            Fota_Answer[3] = 0x01;
-            memcpy(&Fota_Answer[4], (DataPtr + 4), BATT_SN_LEN);
-            Fota_Answer[21] = TCP_ENCPT_DISABLE;
-            Fota_Answer[22] = 0x00;
-            Fota_Answer[23] = 0x12;
-            memcpy(&Fota_Answer[24], (DataPtr + 24), 18);
-            Fota_Answer[42] = bcc_chk_fota(Fota_Answer, 42);
-            tcpipConnectionSend(connectId, Fota_Answer, 43);
-            if (Fota_S.Fota_All_Data_Len == Fota_S.Fota_Current_Addres)
-            {
-                Hal_FlsCheckIsTransferSucceed();
-                Fota_update_flag = TRUE;
-            }
-            else
-            {
-                Fota_update_flag = FALSE;
-            }
-            break;
-        }
-        default:
-        {
-            Fota_Answer[3] = 0x02;
-            memcpy(&Fota_Answer[4], (DataPtr + 4), BATT_SN_LEN);
-            Fota_Answer[21] = TCP_ENCPT_DISABLE;
-            Fota_Answer[22] = 0x00;
-            Fota_Answer[23] = 0x12;
-            memcpy(&Fota_Answer[24], (DataPtr + 24), 18);
-            Fota_Answer[42] = bcc_chk_fota(Fota_Answer, 42);
-            tcpipConnectionSend(connectId, Fota_Answer, 43);
-            break;
-        }
-        }
-    }
-}
-/**
- * @brief : fota网络校验函数
- * @param {UINT8} *data
- * @param {UINT8} length
- * @return {*}
- */
-static uint8 bcc_chk_fota(uint8 *data, uint8 length)
-{
-    uint8 bcc_chk_return = 0x00;
-    uint8 count = 0;
-    while (count < length)
-    {
-        bcc_chk_return ^= data[count];
-        count++;
-    }
-    return bcc_chk_return;
-}
-/**
- * @brief : Fota校验函数
- * @param {UINT8} *data
- * @param {UINT8} length
- * @return {*}
- */
-static uint8 Fota_crc_chk(uint8 *data, uint8 length)
-{
-    uint8 reg_crc = 0x00;
-    while (length--)
-    {
-        reg_crc ^= *data++;
-    }
-    return reg_crc;
-}

+ 0 - 1
code/app/lib/AppFuncLib.h

@@ -42,5 +42,4 @@ int __ftoa(double val, char buf[32], int eps);
 int _sprintf(char *dst, const char *format, ...);
 //串口校验
 uint16 crc_chk(uint8 *data, uint8 length);
-void Fota_Func(uint8 *DataPtr, sint32 connectId);
 #endif /* APPFUNCLIB_H_ */

+ 1 - 13
code/hal/hal_adapter.c

@@ -31,10 +31,6 @@ uint32_t write_ringBuffer(uint8_t *buffer, uint32_t size, ringbuffer_t *ringBuf)
 uint32_t read_ringBuffer(uint8_t *buffer, uint32_t size, ringbuffer_t *ringBuf);
 uint8 ringBufferforUart[3][BUFFER_SIZE];
 ringbuffer_t uartRingBuffer[3];
-#if UARTPRINTF==1
-	uint8 ringbuffer[1024];
-	ringbuffer_t printfRingBuffer;
-#endif
 sint8 AtcmdDelayRecvFunc(uint8 recvChannel,char *ResultStrPtr,uint16 delayTime)
 {
 	sint8 outValue = -1;
@@ -61,7 +57,7 @@ sint8 AtcmdDelayRecvFunc(uint8 recvChannel,char *ResultStrPtr,uint16 delayTime)
 	}
 	return outValue;
 }
-#if UARTPRINTF==1
+#if 0
 	uint16 myPrintf(const char *fmt, ...)
 	{
 		int n;
@@ -113,14 +109,6 @@ uint32_t write_ringBuffer(uint8_t *buffer, uint32_t size, ringbuffer_t *ringBuf)
     memcpy(ringBuf_source + ringBuf_bw, buffer, size);
     ringBuf->bw = (ringBuf_bw + size) % ringBuf_len;
     ringBuf->btoRead += size;
-#if SEGGER_PRINTF==1
-    if(ringBuf->source==ringBufferforUart[1])
-    {
-    	//SEGGER_RTT_printf("[%d]buffer=%s\r\nringBuf->bw=%X,size=%X,%X\r\n",__LINE__,buffer,ringBuf->bw,size,ringBuf->bw-size+ringBuf_source);
-
-    	SEGGER_RTT_printf("[%d]buffer=%s\r\n\r\n",__LINE__,buffer);
-    }
-#endif
 /*
     if(ringBuf->br!=0)
     {

+ 0 - 7
code/hal/hal_adapter.h

@@ -53,8 +53,6 @@ typedef signed char INT8;
 typedef signed short INT16;
 typedef signed long INT32;
 
-#define UARTPRINTF 0
-#define SEGGER_PRINTF 0
 #define CAN0 0
 #define CAN1 1
 #ifndef min
@@ -259,9 +257,4 @@ void SystemPeripheralDeinit(void);
 void SystemPrepareForSleep(void);
 
 
-#if UARTPRINTF==1
-	uint16 myPrintf(const char *fmt, ...);
-	extern uint8 ringbuffer[1024];
-	extern ringbuffer_t printfRingBuffer;
-#endif
 #endif /* HAL_ADAPTER_H_ */

+ 4 - 2
code/main.c

@@ -62,7 +62,7 @@
 #include "AppTaskCan.h"
 #include "AppTaskGps.h"
 #include "Hal_Fls.h"
-
+#include "SEGGER_SYSVIEW.h"
 #include "cm_backtrace.h"
 #define APPNAME                        "S32K146_4G"
 #define HARDWARE_VERSION               "V1.0.0"
@@ -201,7 +201,9 @@ int main(void)
 			Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_LED3, STD_OFF);
 			Dio_WriteChannel(DioConf_DioChannel_PTE8_GPIO_OUT_MCU_LED4, STD_OFF);
 	}
-
+#ifdef SEGGER_SYSTEMVIEW
+	SEGGER_SYSVIEW_Conf();
+#endif
 
 #ifdef SEGGER_RTT_PRINTF
 	SEGGER_RTT_Init();