Browse Source

版本号为:2.1.0.6,新增:故障解码,Fota优化,BMS升级优化,CAN优化,域名转换

CHENJIE-PC\QiXiang_CHENJIE 3 years ago
parent
commit
e9dc09b8cf
7 changed files with 199 additions and 44 deletions
  1. 5 5
      inc/TcpTask.h
  2. 2 0
      inc/app.h
  3. 0 14
      src/CANTask.c
  4. 2 0
      src/Fota.c
  5. 1 1
      src/Signal.c
  6. 8 5
      src/TcpTask.c
  7. 181 19
      src/UartTask.c

+ 5 - 5
inc/TcpTask.h

@@ -22,15 +22,15 @@ extern UINT32 TcpService;
 #define RUN_END_DELAY    (100)
 
 
-// #define QX_TCP_ADD              "iotp.fast-fun.cn"
-// #define QX_TCP_PORT					8712
+#define QX_TCP_ADD              "iotp.fast-fun.cn"
+#define QX_TCP_PORT					8712
 // #define QX_TCP_IPADRRES				"47.97.127.222"
 // #define QX_TCP_PORT					8712
 /*---------------测试IP地址-----------------------------------*/
 // #define QX_TCP_IPADRRES				"39.103.177.126"
 // #define QX_TCP_PORT					8712
-#define QX_TCP_ADD 				"rpi.it5000.com"
-#define QX_TCP_PORT					8812
+// #define QX_TCP_ADD 				"rpi.it5000.com"
+// #define QX_TCP_PORT					8812
 /*---------------测试IP地址END-----------------------------------*/
 #define BATT_SN_LEN             17
 #define TCP_START_SYM1			0x23
@@ -77,7 +77,7 @@ typedef struct BattInfoType
 	UINT8	battWorkState;
 	UINT8	battHeatEnableState;
 	UINT8 	battotherTempNum;
-	UINT8 	battotherTemp[BATT_OTHER_TEMP_NUM];
+	UINT8 	battotherTemp[BATT_OTHER_TEMP_NUM+NB_OTHER_TEMP_NUM];
 }BattInfoType;
 typedef struct BattMsgtoTcpType
 {	

+ 2 - 0
inc/app.h

@@ -43,6 +43,8 @@ extern "C" {
         #define BATT_OTHER_TEMP_NUM  (2)
     #endif
 #endif
+
+#define NB_OTHER_TEMP_NUM  (4)  //NB采集的温度个数
 #define BATT_CELL_VOL_NUM_2 (BATT_CELL_VOL_NUM*2)
 
 #define HWVERSION		    0x0102    //硬件主版本,现为V1.2板

+ 0 - 14
src/CANTask.c

@@ -88,20 +88,6 @@ static void Can_Receive()
 				{
 					PROC_CAN_STATE_SWITCH(PROCESS_CAN_STATE_SLEEP);
 				}
-				UINT16 ErrorNumTemp;
-				UINT8 ret;
-				ErrorNumTemp = 0x00FF;
-				if(osOK==osMutexAcquire(Error_Mutex, 100))
-				{   
-					ret = PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
-				}
-				else
-				{
-					#ifdef USING_PRINTF
-						printf("get Muxtex error\n");
-					#endif
-				}
-				osMutexRelease(Error_Mutex);
 				if(HAL_Can_Receive(CanRxMsg)>0)					
 				{						
 					for(i=0; i<2; i++)

+ 2 - 0
src/Fota.c

@@ -92,6 +92,7 @@ void Fota_Func(UINT8 *DataPtr,INT32 connectId)
                     else
                     {
                         Fota_Answer[3] = 0x02;
+                        BSP_QSPI_Erase_Safe(Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_S.Fota_Recv_Data_Len);
                     }
                 }
                 else//数据校验失败
@@ -202,6 +203,7 @@ void Fota_Func(UINT8 *DataPtr,INT32 connectId)
                     else
                     {
                         Fota_Answer[3] = 0x02;
+                        BSP_QSPI_Erase_Safe(Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_S.Fota_Recv_Data_Len);
                     }
                 }
                 else//数据校验失败

+ 1 - 1
src/Signal.c

@@ -80,7 +80,7 @@ UINT32	battBalanceoInfo = 0xFFFFFFFF;
 //Tcp
 UINT8 	TcpSendLen = 0;
 
-UINT16 ErrorNum[5];
+UINT16 ErrorNum[5]={0};
 
 osMutexId_t Error_Mutex = NULL;
 

+ 8 - 5
src/TcpTask.c

@@ -125,7 +125,7 @@ static void TcpTask(void* arg)
                         hints.ai_socktype = SOCK_STREAM;
                         getaddrinfo(QX_TCP_ADD, NULL, &hints, &servinfo);
                         Tcp_ip_des = ip4addr_ntoa((const ip4_addr_t *)(&(servinfo->ai_addr->sa_data[2])));
-                        #ifdef USING_PRINTF
+                        #ifdef USING_PRINTF1
                             printf("\nservinfo-%d:\n",servinfo->ai_addr->sa_len);
                             for(int i=0;i<4;i++)
                                 printf("%d ",servinfo->ai_addr->sa_data[2+i]);
@@ -361,7 +361,7 @@ static void TcpDataInfoAssembleSend()
         {   
             UINT16 ErrorTemp=0x00;
             ErrorTemp = GetErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum));
-            #ifdef USING_PRINTF
+            #ifdef USING_PRINTF1
                 printf("Temp-Error:%d\n",ErrorTemp);
             #endif
             BattToTcpInfo.battInfo.errClass = 0x00;
@@ -370,7 +370,7 @@ static void TcpDataInfoAssembleSend()
         }
         else
         {
-            #ifdef USING_PRINTF
+            #ifdef USING_PRINTF1
                 printf("Temp-Error:%d\n",ErrorTemp);
             #endif
             BattToTcpInfo.battInfo.errClass = 0x00;
@@ -407,10 +407,13 @@ static void TcpDataInfoAssembleSend()
 		}
 		BattToTcpInfo.battInfo.battWorkState = battWorkState;//电池状态,0表示静置,1表示放电,2表示充电
 		BattToTcpInfo.battInfo.battHeatEnableState = battHeatEnableState;
-		BattToTcpInfo.battInfo.battotherTempNum = BATT_OTHER_TEMP_NUM;//其他温度编号(包含环境温度mos温度以及接插件温度)2021-03-24其他温度修改
+		BattToTcpInfo.battInfo.battotherTempNum = BATT_OTHER_TEMP_NUM+NB_OTHER_TEMP_NUM;//其他温度编号(包含环境温度mos温度以及接插件温度)2021-03-24其他温度修改
 		BattToTcpInfo.battInfo.battotherTemp[0] = MOSTemp;
 		BattToTcpInfo.battInfo.battotherTemp[1] = packTemp;       
-        
+        BattToTcpInfo.battInfo.battotherTemp[2] = fastChargeTemp;
+        BattToTcpInfo.battInfo.battotherTemp[3] = normalChargeTemp;
+        BattToTcpInfo.battInfo.battotherTemp[4] = heatTemp1;
+        BattToTcpInfo.battInfo.battotherTemp[5] = heatTemp2;
         BattToTcpInfo.CRC = bcc_chk((UINT8 *)&BattToTcpInfo, sizeof(BattMsgtoTcpType)-1 );
         //osMutexRelease(UartMutex);
         if(UartBattInfoRecvFlag)

+ 181 - 19
src/UartTask.c

@@ -38,6 +38,7 @@ extern UINT32 Timer_count;
 extern volatile BOOL Sleep_flag; 
 extern AppNVMDataType AppNVMData;
 extern AppDataBody AppDataInfo;
+extern UINT8 WorkFlag;
 //全局变量输出区
 BOOL UartBattInfoRecvFlag  = false;
 QueueHandle_t UartWriteCmdHandle = NULL;
@@ -75,7 +76,7 @@ BOOL BattHeaterSwitch(UINT8* heaterSwitch);
 UINT16  encryptionAlgorithm (UINT16 plainText);
 UINT8  decryptionAlgorithm (UINT16 cipherText);
 UINT8 Uart_Encrypt_Send(void);
-
+UINT8 BmsErrorDecode(UINT32 battWarningState);
 //BMS升级函数声明
 UINT8 SP_BMS_Update_CheckSUM(UINT8* pSendData,UINT8 len);
 void SP_BMS_Update_Service();
@@ -176,7 +177,11 @@ static void UartTask(void* arg)
 				currentTimerCount = Timer_count;
 				if(BMS_Fota_update_flag)
 				{
-					PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_UPDATE);
+					if(WorkFlag==0x00)
+					{
+						PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_UPDATE);
+					}
+					
 				}
 				if(AppNVMData.isBattLocked==TRUE && ((UartReadMsg.data[(0x09+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+2)*2+1])>>1)&0x03!=0x00 && Timer_count%10==0)//try to lock
 				{
@@ -249,6 +254,7 @@ static void UartTask(void* arg)
                 break;
             }
 			case PROCESS_UART_STATE_UPDATE:
+				UartBattInfoRecvFlag =  FALSE;
 				#if  BMS_MANUFACTURE==1
 				{
 					SP_BMS_Update_Service();
@@ -347,9 +353,7 @@ static BOOL uartBattInfoDecode(UINT8* dataPtr)
 	minCellVol = (dataPtr[(0x1A+BATT_CELL_VOL_NUM+TEMP_NUM)*2] << 8) | dataPtr[(0x1A+BATT_CELL_VOL_NUM+TEMP_NUM)*2 + 1];
 
     battHeatEnableState = dataPtr[(0x1C+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1]&0x01;
-    
-	
-	
+
 	maxCellTemp = 0x00;
 	minCellTemp = 0xFF;
 	for(i=0;i<BATT_TEMP_NUM;i++)
@@ -359,20 +363,7 @@ static BOOL uartBattInfoDecode(UINT8* dataPtr)
 	}
 	nbSwVersion = APPSWVERSION;
 	nbHwVersion = HWVERSION;
-	UINT16 ErrorNumTemp;
-	UINT8 ret;
-	ErrorNumTemp = 0xFF00;
-	if(osOK==osMutexAcquire(Error_Mutex, 100))
-	{   
-		ret = PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
-	}
-	else
-	{
-		#ifdef USING_PRINTF
-			printf("get Muxtex error\n");
-		#endif
-	}
-    osMutexRelease(Error_Mutex);
+	BmsErrorDecode(battWarningState);
     return true;
 }
 
@@ -2726,4 +2717,175 @@ UINT16 MS_BMS_Update_CRC16(UINT8* pSendData,UINT16 len)
 	__invert_uint16(&wCRCin, &wCRCin);
 	crc_rslt = ((wCRCin << 8) & 0xFF00) | ((wCRCin >> 8) & 0x00FF);
 	return (crc_rslt);
+}
+
+UINT8 BmsErrorDecode(UINT32 battWarningState)
+{
+	UINT16 ErrorNumTemp;
+	UINT8 ret;
+	if(battWarningState==0)
+	{
+		return 0;
+	}
+	else
+	{
+		if(osOK==osMutexAcquire(Error_Mutex, 100))
+		{
+			ret = ((battWarningState) & 0x01) == 1 ;
+			if (ret)
+			{
+				ErrorNumTemp = 7;
+				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				//str += "ERROR:存在电芯过放告警故障!!\n";单体电压过低
+			}
+
+			ret = ((battWarningState >> 1) & 0x01) == 1 ;
+			if (ret)
+			{
+				ErrorNumTemp = 10;
+				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				//str += "ERROR:存在总电压过放告警故障!!\n";总电压过低
+			}
+
+			ret = ((battWarningState >> 2) & 0x01) == 1 ;
+			if (ret)
+			{
+				ErrorNumTemp = 8;
+				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				//str += "ERROR:存在电芯过压告警故障!!\n";
+			}
+
+			ret = ((battWarningState >> 3) & 0x01) == 1 ;
+			if (ret)
+			{
+				ErrorNumTemp = 11;
+				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				//str += "ERROR:存在总电压过压告警故障!!\n";
+			}
+
+			ret = ((battWarningState >> 4) & 0x01) == 1 ;
+			if (ret)
+			{
+				ErrorNumTemp = 12;
+				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				//str += "ERROR:存在放电过流告警故障!!\n";
+			}
+
+			ret = ((battWarningState >> 5) & 0x01) == 1 ;
+			if (ret)
+			{
+				ErrorNumTemp = 13;
+				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				//str += "ERROR:存在充电过流告警故障!!\n";
+			}
+
+			ret = ((battWarningState >> 6) & 0x01) == 1 ;
+			if (ret)
+			{
+				ErrorNumTemp = 2;
+				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				//str += "ERROR:存在放电过温告警故障!!\n";
+			}
+
+			ret = ((battWarningState >> 7) & 0x01) == 1 ;
+			if (ret)
+			{
+				ErrorNumTemp = 2;
+				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				//str += "ERROR:存在充电过温告警故障!!\n";
+			}
+
+			ret = ((battWarningState >> 8) & 0x01) == 1 ;
+			if (ret)
+			{
+				//str += "ERROR:存在环境高温告警故障!!\n";
+			}
+
+			ret = ((battWarningState >> 9) & 0x01) == 1 ;
+			if (ret)
+			{
+				//str += "ERROR:存在环境低温告警故障!!\n";
+			}
+
+			ret = ((battWarningState >> 10) & 0x01) == 1 ;
+			if (ret)
+			{
+				ErrorNumTemp = 27;
+				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				//str += "ERROR:存在battSOC低告警故障!!\n";
+			}
+
+			ret = ((battWarningState >> 11) & 0x01) == 1 ;
+			if (ret)
+			{
+				ErrorNumTemp = 3;
+				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				//str += "ERROR:存在MOS高温告警故障!!\n";
+			}
+
+			ret = ((battWarningState >> 16) & 0x01) == 1;
+			if (ret)
+			{
+				ErrorNumTemp = 18;
+				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				//str += "ERROR:存在温度采集失效/传感器故障!!\n";
+			}
+
+			ret = ((battWarningState >> 17) & 0x01) == 1;
+			if (ret)
+			{
+				ErrorNumTemp = 19;
+				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				//str += "ERROR:存在电压采集失效/断线故障!!\n";
+			}
+
+			ret = ((battWarningState >> 18) & 0x01) == 1;
+			if (ret)
+			{
+				ErrorNumTemp = 17;
+				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				//str += "ERROR:存在放电MOS失效故障!!\n";
+			}
+
+			ret = ((battWarningState >> 19) & 0x01) == 1;
+			if (ret)
+			{
+				ErrorNumTemp = 16;
+				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				//str += "ERROR:存在充电MOS失效故障!!\n";
+			}
+
+			ret = ((battWarningState >> 20) & 0x01) == 1;
+			if (ret)
+			{
+				ErrorNumTemp = 22;
+				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				//str += "ERROR:存在电芯不均衡告警!!\n";
+			}
+
+			ret = ((battWarningState >> 22) & 0x01) == 1;
+			if (ret)
+			{
+				ErrorNumTemp = 1;
+				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				//str += "ERROR:存在放电低温告警故障!!\n";
+			}
+
+			ret = ((battWarningState >> 23) & 0x01) == 1 ;
+			if (ret)
+			{
+				ErrorNumTemp = 1;
+				PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				//str += "ERROR:存在充电低温告警故障!!\n";
+			}
+		}
+		else
+		{
+			#ifdef USING_PRINTF
+				printf("get Muxtex error\n");
+			#endif
+		}
+		osMutexRelease(Error_Mutex);
+	}
+	return 1;
 }