Parcourir la source

2.3.0.28 增加保护板读取soc测试数据,测试环境,修改了GPS上传部分始终会上传累计里程

CHENJIE-PC\QiXiang_CHENJIE il y a 3 ans
Parent
commit
cb65310375
8 fichiers modifiés avec 140 ajouts et 25 suppressions
  1. 23 2
      inc/Signal.h
  2. 4 4
      inc/TcpTask.h
  3. 1 1
      inc/app.h
  4. 0 1
      inc/hal_module_adapter.h
  5. 4 4
      src/GpsTask.c
  6. 21 2
      src/Signal.c
  7. 5 3
      src/TcpTask.c
  8. 82 8
      src/UartTask.c

+ 23 - 2
inc/Signal.h

@@ -1,3 +1,4 @@
+
 #include "commontypedef.h"
 #include "cmsis_os2.h"
 extern	UINT16	COMOutTable[29];
@@ -51,6 +52,26 @@ extern UINT16   ErrorNum[5];//故障代码
 extern UINT8 	TcpSendLen;
 
 extern osMutexId_t Error_Mutex;
-//测试
+
+#define SOC_TEST
+#ifdef SOC_TEST
 extern UINT8 SOC1;
-extern UINT8 SOC2;
+extern UINT8 SOC2;
+extern UINT16 Data_33 ;
+extern UINT16 Data_34 ;
+extern UINT32 Data_35 ;
+extern UINT16 Data_37 ;
+extern UINT16 Data_38 ;
+extern UINT16 Data_39 ;
+extern UINT16 Data_3A ;
+extern UINT16 Data_3B ;
+extern UINT16 Data_3C ;
+extern UINT16 Data_3D ;
+extern UINT16 Data_3E ;
+extern UINT16 Data_3F ;
+extern UINT16 Data_40 ;
+extern UINT16 Data_41 ;
+extern UINT16 Data_42 ;
+extern UINT16 Data_43 ;
+extern INT16  Data_Current ;
+#endif

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

+ 1 - 1
inc/app.h

@@ -51,7 +51,7 @@ extern "C" {
 #define	BLSWVERSION		0x01020000    //BootLoader版本号V1.2.0.0
 #define	DRVSWVERSION		0x01050000     //驱动层版本号V1.4.0.0  驱动层1.5.0.0,增加了三轴
 //#define	APPSWVERSION		0x01020209     
-#define	APPSWVERSION		0x0203001B
+#define	APPSWVERSION		0x0203001C
 //#define	APPSWVERSION		0x0201000E
 //--------------------------------------------------------------------------------
 

+ 0 - 1
inc/hal_module_adapter.h

@@ -7,7 +7,6 @@ extern "C" {
 #include "commontypedef.h"
 #include "sensor.h"
 #include "can.h"
-
 #define USING_PRINTF
 #define DEBUGLOG
 

+ 4 - 4
src/GpsTask.c

@@ -142,12 +142,12 @@ static void GpsTask(void* arg)
                             }
 
                         }
-                        GpsData[16] = AppDataInfo.AccMileage>>24;
-                        GpsData[17] = AppDataInfo.AccMileage>>16;
-                        GpsData[18] = AppDataInfo.AccMileage>>8;
-                        GpsData[19] = AppDataInfo.AccMileage;
                     }
                 }
+                GpsData[16] = AppDataInfo.AccMileage>>24;
+                GpsData[17] = AppDataInfo.AccMileage>>16;
+                GpsData[18] = AppDataInfo.AccMileage>>8;
+                GpsData[19] = AppDataInfo.AccMileage;
                 osMutexRelease(GpsMutex);
             }
             if(msg.dataPtr)

+ 21 - 2
src/Signal.c

@@ -81,6 +81,25 @@ UINT8 	TcpSendLen = 0;
 UINT16 ErrorNum[5]={0};
 
 osMutexId_t Error_Mutex = NULL;
-//测试
+
+#ifdef SOC_TEST
 UINT8 SOC1 = 100;
-UINT8 SOC2 = 100;
+UINT8 SOC2 = 100;
+UINT16 Data_33 = 0;
+UINT16 Data_34 = 0;
+UINT32 Data_35 = 0;
+UINT16 Data_37 = 0;
+UINT16 Data_38 = 0;
+UINT16 Data_39 = 0;
+UINT16 Data_3A = 0;
+UINT16 Data_3B = 0;
+UINT16 Data_3C = 0;
+UINT16 Data_3D = 0;
+UINT16 Data_3E = 0;
+UINT16 Data_3F = 0;
+UINT16 Data_40 = 0;
+UINT16 Data_41 = 0;
+UINT16 Data_42 = 0;
+UINT16 Data_43 = 0;
+INT16  Data_Current = 0;
+#endif

+ 5 - 3
src/TcpTask.c

@@ -564,7 +564,7 @@ static void TcpDataInfoAssembleSend()
         //osMutexAcquire(UartMutex, osWaitForever);//Bms版本号上传2021-03-24修改
         
 		VerMsgToTcpInfo.VerInfo.BMSHwVersion[0] = bmsHwVersion /10;
-		VerMsgToTcpInfo.VerInfo.BMSHwVersion[1] = bmsHwVersion%10;
+		VerMsgToTcpInfo.VerInfo.BMSHwVersion[1] = bmsHwVersion %10;
 		VerMsgToTcpInfo.VerInfo.BMSSwVersion[0] = 0;
 		VerMsgToTcpInfo.VerInfo.BMSSwVersion[1] = 0;
 		VerMsgToTcpInfo.VerInfo.BMSSwVersion[2] = bmsSwVersion/10;
@@ -608,8 +608,10 @@ static void TcpDataInfoAssembleSend()
         DebugMsgtoTcpType DebugMsgInfo;
         UINT8 *SendBuffer = NULL;
         UINT8 BufferLen = 0;
-        UINT8 rbuf[50];
-        sprintf((char *)rbuf,"%x,%x,%x,%d,%d",AppDataInfo.AccMileage,BattRemainCap,battProtectState,SOC2,SOC1);//累计里程,剩余容量,保护状态
+        UINT8 rbuf[100];
+        sprintf((char *)rbuf,"%d,%x,%x,%d,%d,%d,%d,---%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x",
+        Data_Current,BattRemainCap,battProtectState,SOC2,SOC1,battSOC,AppDataInfo.RelayControl,
+        Data_33,Data_34,Data_35,Data_37,Data_38,Data_39,Data_3A,Data_3B,Data_3C,Data_3D,Data_3E,Data_3F,Data_40,Data_41,Data_42,Data_43);//累计里程,剩余容量,保护状态,BMS-SOC,acc_soc,disp-soc,relay,
         BufferLen  = strlen(rbuf);
         SendBuffer = malloc(BufferLen+sizeof(DebugMsgInfo));
         memcpy(SendBuffer+sizeof(DebugMsgInfo)-1, rbuf,BufferLen);

+ 82 - 8
src/UartTask.c

@@ -78,6 +78,11 @@ UINT16  encryptionAlgorithm (UINT16 plainText);
 UINT8  decryptionAlgorithm (UINT16 cipherText);
 UINT8 Uart_Encrypt_Send(void);
 UINT8 BmsErrorDecode(UINT32 battWarningState);
+
+#ifdef SOC_TEST
+void Uart_Data_recv_SOC_test(void);
+#endif
+
 //BMS升级函数声明
 UINT8 SP_BMS_Update_CheckSUM(UINT8* pSendData,UINT8 len);
 void SP_BMS_Update_Service();
@@ -115,7 +120,7 @@ static void UartTask(void* arg)
     //上电起始控制区域
 	UINT8 ret = 0x00,Ringtimes = 0;
 	UINT8 HeatSwitch = 0;
-
+	UINT8 heatErrorCounter = 0;
     while (1)
     {
         switch (gProcess_Uart_Task)
@@ -169,9 +174,20 @@ static void UartTask(void* arg)
 				{
 					AppDataInfo.RelayControl=FALSE;
 				} 
-				if(maxCellTemp>=50&&minCellTemp>=50&&battHeatEnableState==0x00)
+				if(maxCellTemp>=90&&minCellTemp>=90&&battHeatEnableState==0x00&&MOSTemp>=120)//温度的判定需要加40摄氏度,如果模组最高>50度,模组最低>50度,mos温度>80度,并且加热关闭,持续超过10s,则断开继电器
 				{
-					AppDataInfo.RelayControl=TRUE;
+					heatErrorCounter++;
+					if(heatErrorCounter>100)
+					{
+						heatErrorCounter = 0;
+						AppDataInfo.RelayControl=TRUE;
+						if(osOK==osMutexAcquire(Error_Mutex, 100))
+						{
+							UINT8 ErrorNumTemp = 20;
+							PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+						}
+						osMutexRelease(Error_Mutex);
+					}
 				}
 				if(UartReadMsg.Header[2]>0)
 				{
@@ -323,6 +339,13 @@ static void UartTask(void* arg)
 				#ifdef USING_PRINTF1
                     printf("[%d]lock:%X,permit:%X,Mos:%x\n",__LINE__,AppNVMData.isBattLocked,(UartReadMsg.data[(0x1B+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+BATT_OTHER_TEMP_NUM)*2+1])&0x03,((UartReadMsg.data[(0x09+BATT_CELL_VOL_NUM+BATT_OTHER_TEMP_NUM)*2+1])>>1)&0x03);
                 #endif
+				//SOC问题测试
+				#ifdef SOC_TEST
+					if(bmsSwVersion==8)
+					{	
+						Uart_Data_recv_SOC_test();
+					}
+				#endif
                 break;
             }
             case PROCESS_UART_STATE_WRITE:
@@ -452,8 +475,18 @@ static BOOL uartBattInfoDecode(UINT8* dataPtr)
     battHeatEnableState = dataPtr[(0x1C+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1]&0x01;
 
 	//SOC问题紧急修复
+	#ifdef SOC_TEST
+	Data_Current = (dataPtr[(0x02+BATT_CELL_VOL_NUM)*2]<<8)|(dataPtr[(0x02+BATT_CELL_VOL_NUM)*2+1]);
 	static UINT8 Soc_change_flag = 0;//0-BMS原始值,1-计算值
-	SOC1 = min((battPackVol*45-27000)/100,SOC1);
+	if((battI>10200U)||(battWorkState==2))//放电电流超过20A,使用上一时刻值,//如果有充电,使用计算值,最大不超过100
+	{
+		SOC1 = max((battPackVol*45-27000)/100,SOC1);
+		SOC1 = min(100,SOC1);
+	}
+	else
+	{
+		SOC1 = min((battPackVol*45-27000)/100,SOC1);
+	}
 	SOC2 = battSOC;
 	if(Soc_change_flag == 0)//使用原始值
 	{
@@ -469,11 +502,9 @@ static BOOL uartBattInfoDecode(UINT8* dataPtr)
 			Soc_change_flag = 0;
 		}
 	}
-
 	if(Soc_change_flag==0)
 	{
 		battSOC = SOC2;
-		SOC1 = SOC2;
 	}
 	else
 	{
@@ -485,6 +516,8 @@ static BOOL uartBattInfoDecode(UINT8* dataPtr)
 		}
 		osMutexRelease(Error_Mutex);
 	}
+	#endif
+    //SOC紧急修复
 	maxCellTemp = 0x00;
 	minCellTemp = 0xFF;
 	for(i=0;i<BATT_TEMP_NUM;i++)
@@ -497,9 +530,50 @@ static BOOL uartBattInfoDecode(UINT8* dataPtr)
 	BmsErrorDecode(battWarningState);
     return true;
 }
+#ifdef SOC_TEST
+void Uart_Data_recv_SOC_test(void)
+{
 
-
-
+	UINT16 CRC_chk_buffer;
+	Uart_Read_Msg_Type Uart_Read_Msg;
+	memset(&(Uart_Read_Msg),0x00,sizeof(Uart_Read_Msg_Type));
+	UartReadMsgType UartReadMsg;
+	memset(&(UartReadMsg.UartFlag),0x00,sizeof(UartReadMsgType));
+	UINT8 Reg = 0,Uart_Uds_LEN = 0,Uart_Recv_LEN;
+	Reg = 0x33+BATT_CELL_VOL_NUM+BATT_TEMP_NUM + BATT_OTHER_TEMP_NUM;
+	Uart_Read_Msg.Bms_Address = BMS_ADDRESS_CODE;
+	Uart_Read_Msg.Bms_Funcode = UART_READ_CODE;
+	Uart_Read_Msg.Reg_Begin_H = Reg>>8;
+	Uart_Read_Msg.Reg_Begin_L= Reg;
+	Uart_Read_Msg.Reg_Num_H = 0;
+	Uart_Read_Msg.Reg_Num_L = 16;
+	Uart_Uds_LEN = 17*2;
+	memset(UartReadMsg.Header,0x00,Uart_Uds_LEN);
+	CRC_chk_buffer = crc_chk((UINT8 *)&Uart_Read_Msg,6);
+	Uart_Read_Msg.CRC_L = CRC_chk_buffer;
+	Uart_Read_Msg.CRC_H = CRC_chk_buffer>>8;
+	Uart_Recv_LEN = Uart_DataRecv_func(Uart_Read_Msg,(UINT8*)(UartReadMsg.Header));
+	if(Uart_Recv_LEN>0)
+	{
+		Data_33 = (UartReadMsg.data[0]<<8|UartReadMsg.data[1]);
+		Data_34 = (UartReadMsg.data[2]<<8|UartReadMsg.data[3]);
+		Data_35 = (UartReadMsg.data[4]<<24|UartReadMsg.data[5]<<16|UartReadMsg.data[6]<<8|UartReadMsg.data[7]);
+		Data_37 = (UartReadMsg.data[8]<<8|UartReadMsg.data[9]);
+		Data_38 = (UartReadMsg.data[10]<<8|UartReadMsg.data[11]);
+		Data_39 = (UartReadMsg.data[12]<<8|UartReadMsg.data[13]);
+		Data_3A = (UartReadMsg.data[14]<<8|UartReadMsg.data[15]);
+		Data_3B = (UartReadMsg.data[16]<<8|UartReadMsg.data[17]);
+		Data_3C = (UartReadMsg.data[18]<<8|UartReadMsg.data[19]);
+		Data_3D = (UartReadMsg.data[20]<<8|UartReadMsg.data[21]);
+		Data_3E = (UartReadMsg.data[22]<<8|UartReadMsg.data[23]);
+		Data_3F = (UartReadMsg.data[24]<<8|UartReadMsg.data[25]);
+		Data_40 = (UartReadMsg.data[26]<<8|UartReadMsg.data[27]);
+		Data_41 = (UartReadMsg.data[28]<<8|UartReadMsg.data[29]);
+		Data_42 = (UartReadMsg.data[30]<<8|UartReadMsg.data[31]);
+		Data_43 = (UartReadMsg.data[32]<<8|UartReadMsg.data[33]);
+	}
+}
+#endif