Browse Source

金茂科易优化,存储了VIN

CHENJIE-PC\QiXiang_CHENJIE 3 years ago
parent
commit
0743fb1809
5 changed files with 153 additions and 121 deletions
  1. 3 2
      inc/AppConfig.h
  2. 1 0
      inc/AppFunc.h
  3. 135 111
      src/AppFunc.c
  4. 1 1
      src/AppTaskCan.c
  5. 13 7
      src/AppTaskMain.c

+ 3 - 2
inc/AppConfig.h

@@ -8,10 +8,10 @@
  ****************************************************************************/
 #ifndef  APPCONFIG_H
 #define  APPCONFIG_H
-#define BMS_MANUFACTURE             (2)                 //BMS制造商表示1-超力源,2-美顺
+#define BMS_MANUFACTURE             (3)                 //BMS制造商表示1-超力源,2-美顺
 #define BMS_INFO                    (1)                 //1-1表示超力源4830,1-2表示超力源6060,2-1表示美顺6455
 #define DATA_MODULE_TYPE            (1)                 //1表示NB模块,2表示4G cat1
-#define EOLSTATE                    (1)                 //1表示下线检测跳过,使用默认值,0表示使用下线检测
+#define EOLSTATE                    (0)                 //1表示下线检测跳过,使用默认值,0表示使用下线检测
 #define DEFAULT_SN                  "RLTEST00000000001" //默认上传的SN编码
 #define	APPSWVERSION		        0x03000001          //数据模块软件版本号
 
@@ -108,6 +108,7 @@ typedef struct _AppDataType
     UINT16 sohv_V_chrgStartStatE[28];   //充电开始时刻的单体电压(数组)读取量;
     UINT16 sohd_Q_chrgE;                //充入容量读取量;
     UINT16 sohv_Q_packCapArrE[10];     //10次整包容量(数组)读取量;
+    UINT8  VIN[17];                     //电池SN号码
 }AppDataBody;
 typedef struct _AppDataHeader
 {

+ 1 - 0
inc/AppFunc.h

@@ -45,6 +45,7 @@ void canRxDiagnose(void);
 UINT8 canCOMInTableIndexFind(UINT32 canID);
 void canRxMsgSetInvalidValue(UINT32 ID);
 BOOL snCodeCompare(UINT8* savedSN, UINT8* receivedSN);
+BOOL VINCodeCompare(UINT8* saveVIN, UINT8* receivedVIN);
 void canTxTest(void);
 
 

+ 135 - 111
src/AppFunc.c

@@ -2,7 +2,7 @@
  *
  * Copy right:   RL.Chen J and Zhen C
  * File name:    AppFunc.c
- * Description:  搴旂敤灞傚嚱鏁拌皟鐢ㄦ枃?
+ * Description:  搴旂敤灞傚嚱鏁拌皟鐢ㄦ枃锟�?
  * History:      2021-03-15
  *
  ****************************************************************************/
@@ -24,7 +24,7 @@ UINT8 bcc_chk(UINT8* data, UINT16 length)
 }
 /***********************************************************************************************************************
  * LED鎺у埗鍑芥暟
- * 杈撳叆锛氳繍琛岀姸?
+ * 杈撳叆锛氳繍琛岀姸锟�?
  * 杈撳嚭锛歀ED鎺у埗
  * 澶勭悊锛氭牴鎹�笉鍚岀姸鎬佽繘琛孡ED鏄剧ず
 ***********************************************************************************************************************/
@@ -42,7 +42,7 @@ void LEDDisplay(void)
 	#ifdef USING_PRINTF1
 		printf("[%d]-%d-%d-%d\n",__LINE__,LightTimer,ErrorLightTimer,battSoc);
 	#endif	
-	if(AppDataInfo.BattLock==TRUE || battSoc>100/socAccuracy)//鐢垫睜鏁村�浜庨攣瀹氱姸?
+	if(AppDataInfo.BattLock==TRUE || battSoc>100/socAccuracy)//鐢垫睜鏁村�浜庨攣瀹氱姸锟�?
 	{
 		if(LightTimer<(UINT8)(LEDFlashPeriod*DutyRatio)) 
 		{	
@@ -72,7 +72,7 @@ void LEDDisplay(void)
 		}
 		return;
 	}
-	else						//鐢垫睜鏈��浜庨攣瀹氱姸?
+	else						//鐢垫睜鏈��浜庨攣瀹氱姸锟�?
 	{
 		if(currentState!=AppDataInfo.BattLock)
 		{
@@ -150,8 +150,8 @@ void LEDDisplay(void)
 /***********************************************************************************************************************
  * BMS鏁呴殰瑙g爜鍑芥暟
  * 杈撳叆锛欱MS鏁呴殰缂栫爜
- * 杈撳嚭锛氱姸鎬佸弬?
- * 澶勭悊锛氬皢BMS鏁呴殰缂栫爜渚濇�瑙d负鏍囧噯鏁呴殰?
+ * 杈撳嚭锛氱姸鎬佸弬锟�?
+ * 澶勭悊锛氬皢BMS鏁呴殰缂栫爜渚濇�瑙d负鏍囧噯鏁呴殰锟�?
 ***********************************************************************************************************************/
 static UINT8 BmsErrorDecode(UINT32 battWarningState)
 {
@@ -178,7 +178,7 @@ static UINT8 BmsErrorDecode(UINT32 battWarningState)
 			{
 				ErrorNumTemp = 10;
 				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
-				//str += "ERROR锛氬瓨鍦ㄦ€荤數鍘嬭繃鏀惧憡璀︽晠闅滐紒锛乗n";鎬荤數鍘嬭繃?
+				//str += "ERROR锛氬瓨鍦ㄦ€荤數鍘嬭繃鏀惧憡璀︽晠闅滐紒锛乗n";鎬荤數鍘嬭繃锟�?
 			}
 
 			ret = ((battWarningState >> 2) & 0x01) == 1 ;
@@ -262,7 +262,7 @@ static UINT8 BmsErrorDecode(UINT32 battWarningState)
 			{
 				ErrorNumTemp = 18;
 				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
-				//str += "ERROR锛氬瓨鍦ㄦ俯搴﹂噰闆嗗け?浼犳劅鍣ㄦ晠闅滐紒锛乗n";
+				//str += "ERROR锛氬瓨鍦ㄦ俯搴﹂噰闆嗗け锟�?浼犳劅鍣ㄦ晠闅滐紒锛乗n";
 			}
 
 			ret = ((battWarningState >> 17) & 0x01) == 1;
@@ -270,7 +270,7 @@ static UINT8 BmsErrorDecode(UINT32 battWarningState)
 			{
 				ErrorNumTemp = 19;
 				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
-				//str += "ERROR锛氬瓨鍦ㄧ數鍘嬮噰闆嗗け?鏂�嚎鏁呴殰锛侊紒\n";
+				//str += "ERROR锛氬瓨鍦ㄧ數鍘嬮噰闆嗗け锟�?鏂�嚎鏁呴殰锛侊紒\n";
 			}
 
 			ret = ((battWarningState >> 18) & 0x01) == 1;
@@ -324,10 +324,10 @@ static UINT8 BmsErrorDecode(UINT32 battWarningState)
 	return 1;
 }
 /***********************************************************************************************************************
- * 鑾峰彇鏁呴殰鐮佸嚱?
+ * 鑾峰彇鏁呴殰鐮佸嚱锟�?
  * 杈撳叆锛氭晠闅滄暟缁勫拰闀垮害
- * 杈撳嚭锛氭晠闅滀唬?
- * 澶勭悊锛氫粠鏁呴殰鏁扮粍涓�幏鍙栨晠闅滅爜锛屽苟灏嗕箣鍓嶇殑鏁呴殰鐮佸悜鍓嶇Щ?
+ * 杈撳嚭锛氭晠闅滀唬锟�?
+ * 澶勭悊锛氫粠鏁呴殰鏁扮粍涓�幏鍙栨晠闅滅爜锛屽苟灏嗕箣鍓嶇殑鏁呴殰鐮佸悜鍓嶇Щ锟�?
 ***********************************************************************************************************************/
 UINT16 GetErrorNum(UINT16 *ErrorArray,UINT8 Errorlen)
 {
@@ -342,10 +342,10 @@ UINT16 GetErrorNum(UINT16 *ErrorArray,UINT8 Errorlen)
 	return OutNum;
 }
 /***********************************************************************************************************************
- * 鏁呴殰鐮佹敞鍏ュ嚱?
+ * 鏁呴殰鐮佹敞鍏ュ嚱锟�?
  * 杈撳叆锛氭晠闅滄暟缁勶紝鏁呴殰闀垮害锛屾晠闅滅爜
- * 杈撳嚭锛氱姸?
- * 澶勭悊锛氬皢鏁呴殰鐮佸啓鍏ュ埌鏁呴殰鏁扮粍涓�紝濡傛灉瀛樺湪鍒欎笉鍐欏叆锛屽�鏋滃瓨鍦ㄥ垯涓嶅啓?
+ * 杈撳嚭锛氱姸锟�?
+ * 澶勭悊锛氬皢鏁呴殰鐮佸啓鍏ュ埌鏁呴殰鏁扮粍涓�紝濡傛灉瀛樺湪鍒欎笉鍐欏叆锛屽�鏋滃瓨鍦ㄥ垯涓嶅啓锟�?
 ***********************************************************************************************************************/
 UINT8 PutErrorNum(UINT16 *ErrorArray,UINT8 Errorlen,UINT16 ErrorNum)
 {
@@ -423,7 +423,7 @@ void SaveAppData(void)
  * 杩愯�鏁版嵁鍔犺浇鍑芥暟
  * 杈撳叆锛氱┖
  * 杈撳嚭锛氱┖
- * 澶勭悊锛氬皢杩愯�鏁版嵁杩涜�鍔犺浇锛岃嫢鏂板�浜嗘暟鎹�」锛屽垯淇濇寔鍓嶉潰鏁版嵁椤逛笉?
+ * 澶勭悊锛氬皢杩愯�鏁版嵁杩涜�鍔犺浇锛岃嫢鏂板�浜嗘暟鎹�」锛屽垯淇濇寔鍓嶉潰鏁版嵁椤逛笉锟�?
 ***********************************************************************************************************************/
 void LoadAppData(void)
 {
@@ -635,17 +635,17 @@ void LoadAppConfig(void)
     return;
 }
 /***********************************************************************************************************************
- * 閰嶇疆鏂囦欢鍒濆�鍖栧嚱?
+ * 閰嶇疆鏂囦欢鍒濆�鍖栧嚱锟�?
  * 杈撳叆锛氱┖
  * 杈撳嚭锛氱┖
- * 澶勭悊锛氬皢鍏ㄥ眬閰嶇疆鏂囦欢杩涜�鍒濆�?
- * 娉ㄦ剰锛氶厤缃�暟鎹�笉澧炲姞鏁版嵁椤癸紝鑻ュ�鍔犳暟鎹�」锛岄渶瑕佷慨鏀瑰姞杞藉嚱?
+ * 澶勭悊锛氬皢鍏ㄥ眬閰嶇疆鏂囦欢杩涜�鍒濆�锟�?
+ * 娉ㄦ剰锛氶厤缃�暟鎹�笉澧炲姞鏁版嵁椤癸紝鑻ュ�鍔犳暟鎹�」锛岄渶瑕佷慨鏀瑰姞杞藉嚱锟�?
 ***********************************************************************************************************************/
 static void setDefaultAppConfigData(void)
 {
     UINT8  i = 0;
     memset(&AppNVMData, 0x00, sizeof(AppConfigDataType));
-	AppNVMData.appDataModify = TRUE;		//鏁版嵁鏇存敼鏍囧織?
+	AppNVMData.appDataModify = TRUE;		//鏁版嵁鏇存敼鏍囧織锟�?
 	// char sn[BATT_SN_LEN];
 	// appGetSNNumSync(sn);
 	memcpy(AppNVMData.battSN,DEFAULT_SN,BATT_SN_LEN);
@@ -662,11 +662,11 @@ static void setDefaultAppConfigData(void)
 	return;
 }
 /***********************************************************************************************************************
- * 杩愯�鏁版嵁鍒濆�鍖栧嚱?
+ * 杩愯�鏁版嵁鍒濆�鍖栧嚱锟�?
  * 杈撳叆锛氱┖
  * 杈撳嚭锛氱┖
- * 澶勭悊锛氬皢杩愯�鏁版嵁杩涜�鍒濆�?
- * 娉�細姣忓�鍔犱竴椤规暟鎹�」锛岄渶瑕佸�鍔犻粯璁ゅ€?
+ * 澶勭悊锛氬皢杩愯�鏁版嵁杩涜�鍒濆�锟�?
+ * 娉�細姣忓�鍔犱竴椤规暟鎹�」锛岄渶瑕佸�鍔犻粯璁わ拷?
 ***********************************************************************************************************************/
 static void setDefaultAppDataInfo(void)
 {
@@ -698,8 +698,8 @@ static void setDefaultAppDataInfo(void)
 /***********************************************************************************************************************
  * Fota鍗囩骇澶勭悊鍑芥暟
  * 杈撳叆锛氱綉缁滄帴鏀剁殑鏁版嵁锛岀綉缁滈摼鎺�D
- * 杈撳嚭?x00琛ㄧず鏁版嵁鏈�噯澶囧畬鎴愶紝0x01琛ㄧず鏁版嵁妯″潡OTA鏁版嵁鍑嗗�瀹屾垚?x88琛ㄧずBMS鐨凮TA鏁版嵁鍑嗗�瀹屾垚
- * 澶勭悊锛氬皢鎺ユ敹鐨勬暟鎹�繘琛屾牎楠岋紝鎼�繍鑷冲崌绾у尯鍩燂紝骞惰繘琛屽簲?
+ * 杈撳嚭锟�?x00琛ㄧず鏁版嵁鏈�噯澶囧畬鎴愶紝0x01琛ㄧず鏁版嵁妯″潡OTA鏁版嵁鍑嗗�瀹屾垚锟�?x88琛ㄧずBMS鐨凮TA鏁版嵁鍑嗗�瀹屾垚
+ * 澶勭悊锛氬皢鎺ユ敹鐨勬暟鎹�繘琛屾牎楠岋紝鎼�繍鑷冲崌绾у尯鍩燂紝骞惰繘琛屽簲锟�?
 ***********************************************************************************************************************/
 void Fota_Func(UINT8 *DataPtr,INT32 connectId)
 {
@@ -978,10 +978,10 @@ static UINT8 Fota_crc_chk(UINT8* data,UINT8 length)
 
 
 /***********************************************************************************************************************
- * 鍛ㄦ湡鎬ф姤鏂囨媶?
+ * 鍛ㄦ湡鎬ф姤鏂囨媶锟�?
  * 杈撳叆锛氭姤鏂嘔D銆乧an鎶ユ枃鏁版嵁锛堟寚閽堬級
- * 杈撳嚭?-
- * 澶勭悊锛氭牴鎹�笉鍚岀殑ID锛屽皢鏁版嵁杩涜�鎷嗗寘锛屽苟鏀剧疆鍒扮浉搴旂殑鍙橀噺?
+ * 杈撳嚭锟�?-
+ * 澶勭悊锛氭牴鎹�笉鍚岀殑ID锛屽皢鏁版嵁杩涜�鎷嗗寘锛屽苟鏀剧疆鍒扮浉搴旂殑鍙橀噺锟�?
 ***********************************************************************************************************************/
 void DecodeFunction(UINT32 ID,UINT8* rawData)
 {
@@ -1870,9 +1870,9 @@ void DecodeFunction(UINT32 ID,UINT8* rawData)
 
 
 /***********************************************************************************************************************
- * 鍛ㄦ湡鎬ф姤鏂囪瘖?
+ * 鍛ㄦ湡鎬ф姤鏂囪瘖锟�?
  * 杈撳叆锛氭姤鏂嘔D
- * 杈撳嚭?-
+ * 杈撳嚭锟�?-
  * 澶勭悊锛氬懆鏈熸€ц瘖鏂瑿AN鎶ユ枃鏄�惁涓㈠け
 ***********************************************************************************************************************/
 void canRxDiagnose(void)
@@ -2348,9 +2348,9 @@ void canRxDiagnose(void)
 
 
 /***********************************************************************************************************************
- * 鍛ㄦ湡鎬ф姤鏂囪瘖?
+ * 鍛ㄦ湡鎬ф姤鏂囪瘖锟�?
  * 杈撳叆锛氭姤鏂嘔D
- * 杈撳嚭?-
+ * 杈撳嚭锟�?-
  * 澶勭悊锛氬懆鏈熸€ц瘖鏂瑿AN鎶ユ枃鏄�惁涓㈠け
 ***********************************************************************************************************************/
 void canTxTest(void)
@@ -2665,7 +2665,7 @@ void canTxTest(void)
  * 鎶ユ枃搴忓彿鏌ユ壘
  * 杈撳叆锛氭姤鏂嘔D
  * 杈撳嚭锛氭姤鏂嘔D鍦–OMInTable涓�殑搴忓彿
- * 澶勭悊?-
+ * 澶勭悊锟�?-
 ***********************************************************************************************************************/
 UINT8 canCOMInTableIndexFind(UINT32 canID)
 {
@@ -2683,10 +2683,10 @@ UINT8 canCOMInTableIndexFind(UINT32 canID)
 
 
 /***********************************************************************************************************************
- * 鎶ユ枃闀挎椂涓㈠抚锛屾暟鎹�疆涓烘棤鏁堝€?
+ * 鎶ユ枃闀挎椂涓㈠抚锛屾暟鎹�疆涓烘棤鏁堬拷?
  * 杈撳叆锛氭姤鏂嘔D
- * 杈撳嚭?-
- * 澶勭悊锛氭姤鏂囬暱鏃朵涪甯у悗锛屽�搴旂殑ID鐨勪俊鍙峰€间负鏃犳晥?
+ * 杈撳嚭锟�?-
+ * 澶勭悊锛氭姤鏂囬暱鏃朵涪甯у悗锛屽�搴旂殑ID鐨勪俊鍙峰€间负鏃犳晥锟�?
 ***********************************************************************************************************************/
 void canRxMsgSetInvalidValue(UINT32 ID)
 {
@@ -3587,7 +3587,31 @@ BOOL snCodeCompare(UINT8* savedSN, UINT8* receivedSN)
 	}
 	return ret;
 }
-
+BOOL VINCodeCompare(UINT8* saveVIN, UINT8* receivedVIN)
+{
+	BOOL ret = false;
+	for(int i=0;i<17;i++)
+	{
+		//the sn number should be '0'-'9' or 'a'-'z' or 'A'-'Z'
+		if((receivedVIN[i]>='0'&&receivedVIN[i]<='9') || (receivedVIN[i]>='a'&&receivedVIN[i]<='z')|| (receivedVIN[i]>='A'&&receivedVIN[i]<='Z'))
+		{
+			if(saveVIN[i] == receivedVIN[i]) //if they are same, we should not modify the savedSN
+			{				
+				continue;
+			}
+			else
+			{
+				ret = true;				
+			}
+		}
+		else //if the code is invalid, we should not modify the savedSN
+		{
+			ret = false;
+			return ret;
+		}
+	}
+	return ret;
+}
 
 
 
@@ -3621,37 +3645,37 @@ void TcpDataAssemble(UINT8 Tcptype,UINT8 *SendBuffer,UTC8TimeType UTC8TimeTcp)
 			*(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	总里程
+			memcpy(SendBuffer+0x25,AppDataInfo.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)	=	(maxTempSubsysCode&0xFF);		//uint8	最高温度子系统号
-			*(SendBuffer+0x43)	=	(maxTempCellCode&0xFF);		//uint8	最高温度探针单体代号
-			*(SendBuffer+0x44)	=	(minTempSubsysCode&0xFF);		//uint8	最低温度子系统号
-			*(SendBuffer+0x45)	=	(minTempCellCode&0xFF);		//uint8	最低温度探针子系统代号
-			*(SendBuffer+0x46)	=	(maxVolSubsysCode&0xFF);		//uint8	最高电压电池子系统号
-			*(SendBuffer+0x47)	=	((maxVolCellCode>>8)&0xFF);		//uint16	最高电压电池单体代号
+			*(SendBuffer+0x40)	=	(numOfChrgableSubsys&0xFF);		//uint8	锟缴筹拷锟斤拷锟较低筹拷锟�
+			*(SendBuffer+0x41)	=	(chrgableSubsysCode&0xFF);		//uint8	锟缴筹拷绱�拷锟斤拷锟较低筹拷锟�
+			*(SendBuffer+0x42)	=	(maxTempSubsysCode&0xFF);		//uint8	锟斤拷锟斤拷露锟斤拷锟较低筹拷锟�
+			*(SendBuffer+0x43)	=	(maxTempCellCode&0xFF);		//uint8	锟斤拷锟斤拷露锟教斤拷氲ワ拷锟斤拷锟斤拷
+			*(SendBuffer+0x44)	=	(minTempSubsysCode&0xFF);		//uint8	锟斤拷锟斤拷露锟斤拷锟较低筹拷锟�
+			*(SendBuffer+0x45)	=	(minTempCellCode&0xFF);		//uint8	锟斤拷锟斤拷露锟教斤拷锟斤拷锟较低筹拷锟斤拷锟�
+			*(SendBuffer+0x46)	=	(maxVolSubsysCode&0xFF);		//uint8	锟斤拷叩锟窖癸拷锟斤拷锟斤拷系统锟斤拷
+			*(SendBuffer+0x47)	=	((maxVolCellCode>>8)&0xFF);		//uint16	锟斤拷叩锟窖癸拷锟截碉拷锟斤拷锟斤拷锟�
 			*(SendBuffer+0x48)	=	(maxVolCellCode&0xFF);
-			*(SendBuffer+0x49)	=	(minVolSubsysCode&0xFF);		//uint8	最低电压电池子系统号
-			*(SendBuffer+0x4A)	=	((minVoCelllCode>>8)&0xFF);		//uint16	最低电压电池单体代号
+			*(SendBuffer+0x49)	=	(minVolSubsysCode&0xFF);		//uint8	锟斤拷偷锟窖癸拷锟斤拷锟斤拷系统锟斤拷
+			*(SendBuffer+0x4A)	=	((minVoCelllCode>>8)&0xFF);		//uint16	锟斤拷偷锟窖癸拷锟截碉拷锟斤拷锟斤拷锟�
 			*(SendBuffer+0x4B)	=	(minVoCelllCode&0xFF);
-			*(SendBuffer+0x4C)	=	(ebcStatus&0xFF);		//uint8	换电控制器状态
-			*(SendBuffer+0x4D)	=	(ebcAskHVOn&0xFF);		//uint8	禁止高压上电
-			*(SendBuffer+0x4E)	=	(ebcAskHVOff&0xFF);		//uint8	请求高压下电
-			*(SendBuffer+0x4F)	=	(retainLockSignal&0xFF);		//uint8	锁紧机构锁止信号
-			*(SendBuffer+0x50)	=	(dischargeLockSignal&0xFF);		//uint8	放电互锁信号
-			*(SendBuffer+0x51)	=	(chargeLockSignal&0xFF);		//uint8	充电互锁信号
-			*(SendBuffer+0x52)	=	(chargeFlag&0xFF);		//uint8	充电标志位
-			*(SendBuffer+0x53)	=	((vcuDCVol>>8)&0xFF);		//uint16	电机控制器直流母线电压
+			*(SendBuffer+0x4C)	=	(ebcStatus&0xFF);		//uint8	锟斤拷锟斤拷锟斤拷锟斤拷锟阶刺�
+			*(SendBuffer+0x4D)	=	(ebcAskHVOn&0xFF);		//uint8	锟斤拷止锟斤拷压锟较碉拷
+			*(SendBuffer+0x4E)	=	(ebcAskHVOff&0xFF);		//uint8	锟斤拷锟斤拷锟窖癸拷碌锟�
+			*(SendBuffer+0x4F)	=	(retainLockSignal&0xFF);		//uint8	锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷止锟脚猴拷
+			*(SendBuffer+0x50)	=	(dischargeLockSignal&0xFF);		//uint8	锟脚电互锟斤拷锟脚猴拷
+			*(SendBuffer+0x51)	=	(chargeLockSignal&0xFF);		//uint8	锟斤拷缁ワ拷锟斤拷藕锟�
+			*(SendBuffer+0x52)	=	(chargeFlag&0xFF);		//uint8	锟斤拷锟斤拷志位
+			*(SendBuffer+0x53)	=	((vcuDCVol>>8)&0xFF);		//uint16	锟斤拷锟斤拷锟斤拷锟斤拷锟街憋拷锟侥革拷叩锟窖�
 			*(SendBuffer+0x54)	=	(vcuDCVol&0xFF);
 			*(SendBuffer+0x55)  =   bcc_chk(SendBuffer,0x55); 
 			break;
@@ -3683,55 +3707,55 @@ void TcpDataAssemble(UINT8 Tcptype,UINT8 *SendBuffer,UTC8TimeType UTC8TimeTcp)
 			*(SendBuffer+0x24)	=	(UTC8TimeTcp.second&0xFF);		//uint8	second
 			*(SendBuffer+0x25)	=	(csq&0xFF);		//uint8	csq
 			*(SendBuffer+0x26)	=	(bmsStatus&0xFF);		//uint8	BMS状态
-			*(SendBuffer+0x27)	=	(chrgConctStatus&0xFF);		//uint8	充电连接状态
-			*(SendBuffer+0x28)	=	(bmsErrClass&0xFF);		//uint8	BMS故障等级
-			*(SendBuffer+0x29)	=	(bmsErrNum&0xFF);		//uint8	BMS故障码
-			*(SendBuffer+0x2A)	=	(highVolPwrDwnReq&0xFF);		//uint8	下高压请求
-			*(SendBuffer+0x2B)	=	(chrgStatus&0xFF);		//uint8	充电状态
+			*(SendBuffer+0x27)	=	(chrgConctStatus&0xFF);		//uint8	锟斤拷锟斤拷锟斤拷锟阶刺�
+			*(SendBuffer+0x28)	=	(bmsErrClass&0xFF);		//uint8	BMS锟斤拷锟较等硷拷
+			*(SendBuffer+0x29)	=	(bmsErrNum&0xFF);		//uint8	BMS锟斤拷锟斤拷锟斤拷
+			*(SendBuffer+0x2A)	=	(highVolPwrDwnReq&0xFF);		//uint8	锟铰革拷压锟斤拷锟斤拷
+			*(SendBuffer+0x2B)	=	(chrgStatus&0xFF);		//uint8	锟斤拷锟阶刺�
 			*(SendBuffer+0x2C)	=	(battSoc&0xFF);		//uint8	SOC
-			*(SendBuffer+0x2D)	=	(battSOH&0xFF);		//uint8	电池SOH
-			*(SendBuffer+0x2E)	=	((packTotalVol>>8)&0xFF);		//uint16	电池总电压
+			*(SendBuffer+0x2D)	=	(battSOH&0xFF);		//uint8	锟斤拷锟絊OH
+			*(SendBuffer+0x2E)	=	((packTotalVol>>8)&0xFF);		//uint16	锟斤拷锟斤拷艿锟窖�
 			*(SendBuffer+0x2F)	=	(packTotalVol&0xFF);
-			*(SendBuffer+0x30)	=	((packTotalCurr>>8)&0xFF);		//uint16	电池总电流
+			*(SendBuffer+0x30)	=	((packTotalCurr>>8)&0xFF);		//uint16	锟斤拷锟斤拷艿锟斤拷锟�
 			*(SendBuffer+0x31)	=	(packTotalCurr&0xFF);
-			*(SendBuffer+0x32)	=	((insulationR>>8)&0xFF);		//uint16	绝缘电阻
+			*(SendBuffer+0x32)	=	((insulationR>>8)&0xFF);		//uint16	锟斤拷缘锟斤拷锟斤拷
 			*(SendBuffer+0x33)	=	(insulationR&0xFF);
-			*(SendBuffer+0x34)	=	(mainPosRlyStatus&0xFF);		//uint8	主正继电器开闭状态
-			*(SendBuffer+0x35)	=	(preRlyStatus&0xFF);		//uint8	预充继电器开闭状态
-			*(SendBuffer+0x36)	=	(mainNegRlyStatus&0xFF);		//uint8	总负继电器开闭状态
-			*(SendBuffer+0x37)	=	(thrRlyStatus&0xFF);		//uint8	三合一继电器开闭状态
-			*(SendBuffer+0x38)	=	(ptc1RlyStatus&0xFF);		//uint8	PTC1继电器开闭状态
-			*(SendBuffer+0x39)	=	(airCondRlyStatus&0xFF);		//uint8	空调继电器开闭状态
-			*(SendBuffer+0x3A)	=	(dcChrg1PosRlyStatus&0xFF);		//uint8	快充1正继电器开闭状态
-			*(SendBuffer+0x3B)	=	(dcChrg1NegRlyStatus&0xFF);		//uint8	快充1负继电器开闭状态
-			*(SendBuffer+0x3C)	=	(dcChrg2PosRlyStatus&0xFF);		//uint8	快充2正继电器开闭状态
-			*(SendBuffer+0x3D)	=	(dcChrg2NegRlyStatus&0xFF);		//uint8	快充2负继电器开闭状态
-			*(SendBuffer+0x3E)	=	(heatPosRlyStatus&0xFF);		//uint8	加热正继电器开闭状态
-			*(SendBuffer+0x3F)	=	(heatNegRlyStatus&0xFF);		//uint8	加热负继电器开闭状态
-			*(SendBuffer+0x40)	=	(coolRlyStatus&0xFF);		//uint8	水冷继电器开闭状态
-			*(SendBuffer+0x41)	=	(ptc2RlyStatus&0xFF);		//uint8	PTC2继电器开闭状态
-			*(SendBuffer+0x42)	=	(mainPosRlyErrStatus&0xFF);		//uint8	主正继电器故障状态
-			*(SendBuffer+0x43)	=	(preRlyErrStatus&0xFF);		//uint8	预充继电器故障状态
-			*(SendBuffer+0x44)	=	(mainNegRlyErrStatus&0xFF);		//uint8	总负继电器故障状态
-			*(SendBuffer+0x45)	=	(thrRlyErrStatus&0xFF);		//uint8	三合一继电器故障状态
-			*(SendBuffer+0x46)	=	(ptc1RlyErrStatus&0xFF);		//uint8	PTC1电器故障状态
-			*(SendBuffer+0x47)	=	(airCondRlyErrStatus&0xFF);		//uint8	空调电器故障状态
-			*(SendBuffer+0x48)	=	(dcChrg1PosRlyErrStatus&0xFF);		//uint8	快充1正电器故障状态
-			*(SendBuffer+0x49)	=	(dcChrg1NegRlyErrStatus&0xFF);		//uint8	快充1负电器故障状态
-			*(SendBuffer+0x4A)	=	(dcChrg2PosRlyErrStatus&0xFF);		//uint8	快充2正电器故障状态
-			*(SendBuffer+0x4B)	=	(dcChrg2NegRlyErrStatus&0xFF);		//uint8	快充2负电器故障状态
-			*(SendBuffer+0x4C)	=	(heatPosRlyErrStatus&0xFF);		//uint8	加热正电器故障状态
-			*(SendBuffer+0x4D)	=	(heatNegRlyErrStatus&0xFF);		//uint8	加热负电器故障状态
-			*(SendBuffer+0x4E)	=	(coolRlyErrStatus&0xFF);		//uint8	水冷电器故障状态
-			*(SendBuffer+0x4F)	=	(ptc2RlyErrStatus&0xFF);		//uint8	PTC2电器故障状态
-			*(SendBuffer+0x50)	=	((CELL_NUM>>8)&0xFF);		//uint16	单体电池总数
+			*(SendBuffer+0x34)	=	(mainPosRlyStatus&0xFF);		//uint8	锟斤拷锟斤拷锟教碉拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x35)	=	(preRlyStatus&0xFF);		//uint8	预锟斤拷痰锟斤拷锟斤拷锟斤拷锟阶刺�
+			*(SendBuffer+0x36)	=	(mainNegRlyStatus&0xFF);		//uint8	锟杰革拷锟教碉拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x37)	=	(thrRlyStatus&0xFF);		//uint8	锟斤拷锟斤拷一锟教碉拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x38)	=	(ptc1RlyStatus&0xFF);		//uint8	PTC1锟教碉拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x39)	=	(airCondRlyStatus&0xFF);		//uint8	锟秸碉拷锟教碉拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x3A)	=	(dcChrg1PosRlyStatus&0xFF);		//uint8	锟斤拷锟�1锟斤拷锟教碉拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x3B)	=	(dcChrg1NegRlyStatus&0xFF);		//uint8	锟斤拷锟�1锟斤拷锟教碉拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x3C)	=	(dcChrg2PosRlyStatus&0xFF);		//uint8	锟斤拷锟�2锟斤拷锟教碉拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x3D)	=	(dcChrg2NegRlyStatus&0xFF);		//uint8	锟斤拷锟�2锟斤拷锟教碉拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x3E)	=	(heatPosRlyStatus&0xFF);		//uint8	锟斤拷锟斤拷锟斤拷锟教碉拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x3F)	=	(heatNegRlyStatus&0xFF);		//uint8	锟斤拷锟饺革拷锟教碉拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x40)	=	(coolRlyStatus&0xFF);		//uint8	水锟斤拷痰锟斤拷锟斤拷锟斤拷锟阶刺�
+			*(SendBuffer+0x41)	=	(ptc2RlyStatus&0xFF);		//uint8	PTC2锟教碉拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x42)	=	(mainPosRlyErrStatus&0xFF);		//uint8	锟斤拷锟斤拷锟教碉拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x43)	=	(preRlyErrStatus&0xFF);		//uint8	预锟斤拷痰锟斤拷锟斤拷锟斤拷锟阶刺�
+			*(SendBuffer+0x44)	=	(mainNegRlyErrStatus&0xFF);		//uint8	锟杰革拷锟教碉拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x45)	=	(thrRlyErrStatus&0xFF);		//uint8	锟斤拷锟斤拷一锟教碉拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x46)	=	(ptc1RlyErrStatus&0xFF);		//uint8	PTC1锟斤拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x47)	=	(airCondRlyErrStatus&0xFF);		//uint8	锟秸碉拷锟斤拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x48)	=	(dcChrg1PosRlyErrStatus&0xFF);		//uint8	锟斤拷锟�1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x49)	=	(dcChrg1NegRlyErrStatus&0xFF);		//uint8	锟斤拷锟�1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x4A)	=	(dcChrg2PosRlyErrStatus&0xFF);		//uint8	锟斤拷锟�2锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x4B)	=	(dcChrg2NegRlyErrStatus&0xFF);		//uint8	锟斤拷锟�2锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x4C)	=	(heatPosRlyErrStatus&0xFF);		//uint8	锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x4D)	=	(heatNegRlyErrStatus&0xFF);		//uint8	锟斤拷锟饺革拷锟斤拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x4E)	=	(coolRlyErrStatus&0xFF);		//uint8	水锟斤拷锟斤拷锟斤拷锟斤拷锟阶刺�
+			*(SendBuffer+0x4F)	=	(ptc2RlyErrStatus&0xFF);		//uint8	PTC2锟斤拷锟斤拷锟斤拷锟斤拷状态
+			*(SendBuffer+0x50)	=	((CELL_NUM>>8)&0xFF);		//uint16	锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
 			*(SendBuffer+0x51)	=	(CELL_NUM&0xFF);
 			for(UINT16 index = 0; index < CELL_NUM;index++)
 			{
 				*(SendBuffer+0x52+ index*2)	=	((battCellU[index]>>8)&0xFF);
 				*(SendBuffer+0x52+ index*2 +1)	=	((battCellU[index])&0xFF);
 			}
-			*(SendBuffer+0x352)	=	(CELL_TEMP_NUM&0xFF);		//uint8	可充电储能温度探针个数
+			*(SendBuffer+0x352)	=	(CELL_TEMP_NUM&0xFF);		//uint8	锟缴筹拷绱�拷锟斤拷露锟教斤拷锟斤拷锟斤拷
 			memcpy(SendBuffer+0x353,battCellTemp,CELL_TEMP_NUM);
 			*(SendBuffer+0x393)  =   bcc_chk(SendBuffer,0x393); 
 			break;
@@ -3761,43 +3785,43 @@ void TcpDataAssemble(UINT8 Tcptype,UINT8 *SendBuffer,UTC8TimeType UTC8TimeTcp)
 			*(SendBuffer+0x22)	=	(UTC8TimeTcp.hour&0xFF);		//uint8	hour
 			*(SendBuffer+0x23)	=	(UTC8TimeTcp.minute&0xFF);		//uint8	minute
 			*(SendBuffer+0x24)	=	(UTC8TimeTcp.second&0xFF);		//uint8	second
-			*(SendBuffer+0x25)	=	((accChrgAh>>24)&0xFF);		//uint32	累计充入Ah数
+			*(SendBuffer+0x25)	=	((accChrgAh>>24)&0xFF);		//uint32	锟桔计筹拷锟斤拷Ah锟斤拷
 			*(SendBuffer+0x26)	=	((accChrgAh>>16)&0xFF);
 			*(SendBuffer+0x27)	=	((accChrgAh>>8)&0xFF);
 			*(SendBuffer+0x28)	=	(accChrgAh&0xFF);
-			*(SendBuffer+0x29)	=	((accDischrgAh>>24)&0xFF);		//uint32	累计放出Ah数
+			*(SendBuffer+0x29)	=	((accDischrgAh>>24)&0xFF);		//uint32	锟桔计放筹拷Ah锟斤拷
 			*(SendBuffer+0x2A)	=	((accDischrgAh>>16)&0xFF);
 			*(SendBuffer+0x2B)	=	((accDischrgAh>>8)&0xFF);
 			*(SendBuffer+0x2C)	=	(accDischrgAh&0xFF);
-			*(SendBuffer+0x2D)	=	((accChrgkWh>>24)&0xFF);		//uint32	累计充入kWh数
+			*(SendBuffer+0x2D)	=	((accChrgkWh>>24)&0xFF);		//uint32	锟桔计筹拷锟斤拷kWh锟斤拷
 			*(SendBuffer+0x2E)	=	((accChrgkWh>>16)&0xFF);
 			*(SendBuffer+0x2F)	=	((accChrgkWh>>8)&0xFF);
 			*(SendBuffer+0x30)	=	(accChrgkWh&0xFF);
-			*(SendBuffer+0x31)	=	((accDischrgkWh>>24)&0xFF);		//uint32	累计放出kWh数
+			*(SendBuffer+0x31)	=	((accDischrgkWh>>24)&0xFF);		//uint32	锟桔计放筹拷kWh锟斤拷
 			*(SendBuffer+0x32)	=	((accDischrgkWh>>16)&0xFF);
 			*(SendBuffer+0x33)	=	((accDischrgkWh>>8)&0xFF);
 			*(SendBuffer+0x34)	=	(accDischrgkWh&0xFF);
-			*(SendBuffer+0x35)	=	((accRecvryChrgAh>>24)&0xFF);		//uint32	累计动能回馈充入Ah数
+			*(SendBuffer+0x35)	=	((accRecvryChrgAh>>24)&0xFF);		//uint32	锟桔计讹拷锟杰伙拷锟斤拷锟斤拷锟斤拷Ah锟斤拷
 			*(SendBuffer+0x36)	=	((accRecvryChrgAh>>16)&0xFF);
 			*(SendBuffer+0x37)	=	((accRecvryChrgAh>>8)&0xFF);
 			*(SendBuffer+0x38)	=	(accRecvryChrgAh&0xFF);
-			*(SendBuffer+0x39)	=	((accRecvryChrgkWh>>24)&0xFF);		//uint32	累计动能回馈充入kWh数
+			*(SendBuffer+0x39)	=	((accRecvryChrgkWh>>24)&0xFF);		//uint32	锟桔计讹拷锟杰伙拷锟斤拷锟斤拷锟斤拷kWh锟斤拷
 			*(SendBuffer+0x3A)	=	((accRecvryChrgkWh>>16)&0xFF);
 			*(SendBuffer+0x3B)	=	((accRecvryChrgkWh>>8)&0xFF);
 			*(SendBuffer+0x3C)	=	(accRecvryChrgkWh&0xFF);
-			*(SendBuffer+0x3D)	=	((accStationChrgAh>>24)&0xFF);		//uint32	累计换电站充入Ah数
+			*(SendBuffer+0x3D)	=	((accStationChrgAh>>24)&0xFF);		//uint32	锟桔计伙拷锟斤拷站锟斤拷锟斤拷Ah锟斤拷
 			*(SendBuffer+0x3E)	=	((accStationChrgAh>>16)&0xFF);
 			*(SendBuffer+0x3F)	=	((accStationChrgAh>>8)&0xFF);
 			*(SendBuffer+0x40)	=	(accStationChrgAh&0xFF);
-			*(SendBuffer+0x41)	=	((accStationChrgkWh>>24)&0xFF);		//uint32	累计换电站充入kWh数
+			*(SendBuffer+0x41)	=	((accStationChrgkWh>>24)&0xFF);		//uint32	锟桔计伙拷锟斤拷站锟斤拷锟斤拷kWh锟斤拷
 			*(SendBuffer+0x42)	=	((accStationChrgkWh>>16)&0xFF);
 			*(SendBuffer+0x43)	=	((accStationChrgkWh>>8)&0xFF);
 			*(SendBuffer+0x44)	=	(accStationChrgkWh&0xFF);
-			*(SendBuffer+0x45)	=	((accGunChrgAh>>24)&0xFF);		//uint32	累计插枪充电充入Ah数
+			*(SendBuffer+0x45)	=	((accGunChrgAh>>24)&0xFF);		//uint32	锟桔计诧拷枪锟斤拷锟斤拷锟斤拷Ah锟斤拷
 			*(SendBuffer+0x46)	=	((accGunChrgAh>>16)&0xFF);
 			*(SendBuffer+0x47)	=	((accGunChrgAh>>8)&0xFF);
 			*(SendBuffer+0x48)	=	(accGunChrgAh&0xFF);
-			*(SendBuffer+0x49)	=	((accGunChrgkWh>>24)&0xFF);		//uint32	累计插枪充电充入kWh数
+			*(SendBuffer+0x49)	=	((accGunChrgkWh>>24)&0xFF);		//uint32	锟桔计诧拷枪锟斤拷锟斤拷锟斤拷kWh锟斤拷
 			*(SendBuffer+0x4A)	=	((accGunChrgkWh>>16)&0xFF);
 			*(SendBuffer+0x4B)	=	((accGunChrgkWh>>8)&0xFF);
 			*(SendBuffer+0x4C)	=	(accGunChrgkWh&0xFF);

+ 1 - 1
src/AppTaskCan.c

@@ -103,7 +103,7 @@ static void CanTask()
 					delayconuter++;
 					osDelay(1);			
 				}					
-				if(delayconuter>=100)
+				if(delayconuter>=1000)
 				{
 					delayconuter=0;
 					clrbit(PadInterrupt,0);

+ 13 - 7
src/AppTaskMain.c

@@ -104,13 +104,19 @@ static void MainTask(void* arg)
                         	MEMCPY(&(AppNVMData.battSN[5]),SN,12);
                         	AppNVMData.EOLState=1;
                         	AppNVMData.appDataModify = TRUE;
-                        	
-
-                        	printf("AppNVMData.battSN = ");
-		                    for(int j =0;j<17;j++)
-		                    	printf("%x\t",AppNVMData.battSN[j]);
-							printf("\n\n");
+                        	// printf("AppNVMData.battSN = ");
+		                    // for(int j =0;j<17;j++)
+		                    // 	printf("%x\t",AppNVMData.battSN[j]);
+							// printf("\n\n");
 						}                        
+                    }
+                    if(canVINMsgRxCmpltFlag ==TRUE)
+                    {
+                        if(VINCodeCompare(AppDataInfo.VIN, VIN))
+                        {
+                            MEMCPY(AppDataInfo.VIN,VIN,17);
+                            AppNVMData.appDataModify = TRUE;
+                        }
                     }                    
                 }
                 if(AppDataInfo.appDataModify)
@@ -129,7 +135,7 @@ static void MainTask(void* arg)
                     WorkTimerEnd = FALSE;
                     NVIC_EnableIRQ(PadWakeup1_IRQn);
                 }
-                if(TcpErrorcount>=10 &&PadInterrupt==0x00)
+                if(TcpErrorcount>=10)
                 {
                     AppDataInfo.appDataModify = true;
                     AppDataInfo.SysReStartCount = AppDataInfo.SysReStartCount +1;