Browse Source

换电控制器内网CAN功能完善

CHENJIE-PC\QiXiang_CHENJIE 3 years ago
parent
commit
eb552efbca

+ 2 - 2
Global/SysConf.h

@@ -29,6 +29,6 @@
 #define MAX(a, b) (((a) > (b)) ? (a) : (b))
 #define MIN(a, b) (((a) < (b)) ? (a) : (b))
 //#define _APP_TEST_CODE
-//#define _APP_RELEASE_CODE
-#define _APP_TEST_MOTOR_CODE
+#define _APP_RELEASE_CODE
+//#define _APP_TEST_MOTOR_CODE
 #endif

+ 31 - 5
System/Vehicle/AppFunc.c

@@ -243,8 +243,12 @@ void MotorTestFun(void)
 	static uint16 MotorLockReadyTimer = 0;
 	static sint8 LockMotorNum = -1;
 	static sint8 unLockMotorNum = -1;
-
+	static uint32 testTimer = 0;
 	GetDIOState();
+	GetAIOValue();
+	testTimer = testTimer + 10;
+	MotorControlLockNum = LockMotorNum;
+	MotorControlunLockNum = unLockMotorNum;
 	if (MotorControlCmd == 0) //可进入调试模式
 	{
 		if (MotorDebugCmd == 1)
@@ -303,10 +307,25 @@ void MotorTestFun(void)
 		}
 		else
 		{
-			MotorControlFunc(0, 0xF1);
-			LockMotorNum = -1;
-			unLockMotorNum = -1;
-			return;
+			if(MotorLifeTestCmd==1)
+			{
+				if(LockMotorNum<4 && testTimer>5000)
+				{
+					MotorControlCmd = 1;
+
+				}
+				else if( unLockMotorNum<5&&LockMotorNum==4 && testTimer>5000)
+				{
+					MotorControlCmd = 2;
+				}
+			}
+			else
+			{
+				MotorControlFunc(0, 0xF1);
+				LockMotorNum = -1;
+				unLockMotorNum = -1;
+				return;
+			}
 		}
 	}
 	else if (MotorControlCmd == 1) //控制锁紧的自动流程
@@ -388,6 +407,7 @@ void MotorTestFun(void)
 				unLockMotorNum = -1;
 				MotorRunTimer = 0;
 				MotorLockReadyTimer = 0;
+				testTimer = 0;
 			}
 			else
 			{
@@ -499,6 +519,12 @@ void MotorTestFun(void)
 			MotorControlFunc(0, 0xF1);
 			unLockMotorNum = 5;
 			LockMotorNum = -1;
+			if(MotorLifeTestCmd==1)
+			{
+				LifeTestCounter++;
+				testTimer = 0;
+				EEPROMDrv_bSaveInstantUB = 1;
+			}
 			break;
 		}
 		default:

+ 2 - 1
System/Vehicle/Communication/BcuCanProtocolFunc.c

@@ -775,7 +775,8 @@ void BcuDecodeFunction(UINT32 ID, UINT8 *rawData)
 		BMS1_ChrgStatus = (UINT8)(((*(UINT8 *)(rawData + 5)) >> 1) & 0x3);
 		BMS1_HeatingStatus = (UINT8)(((*(UINT8 *)(rawData + 5)) >> 3) & 0x1);
 		BMS1_CoolingStatus = (UINT8)(((*(UINT8 *)(rawData + 5)) >> 4) & 0x3);
-		BMS1_RechrgCycels = (UINT32)(((*(UINT32 *)(rawData + 5)) >> 6) & 0x3FFFF);
+		//BMS1_RechrgCycels = (UINT32)(((*(UINT32 *)(rawData + 5)) >> 6) & 0x3FFFF);//error
+		BMS1_RechrgCycels = (UINT32)((*(rawData + 5) >> 6)|(*(rawData + 6)<<2)|(*(rawData + 7)<<10));
 		BcuRxFlag[99] = 0x01;
 		break;
 	case 0x1884EFF4:

+ 35 - 25
System/Vehicle/Communication/BleCanProtocolFunc.c

@@ -20,24 +20,22 @@
  * @param {uint8} CmdIdx
  * @return {*}
  */
-void Can2ProtocolCode(uint8 CmdIdx)
+void Can2ProtocolCode(uint8 CmdIdx,uint8 DataIdx,uint8 Byte0Num,uint32 *InnerCanID,uint8 *Data)
 {
     uint8 BlePwrControl;       //蓝牙电源开关控制  FF-关闭,0A-打开
     uint8 BlePwrControl_Flag;  //蓝牙电源开关控制使能  00-不控制,01-控制
     uint8 BleRoleControl;      //蓝牙主从控制  01-主机,02-从机
     uint8 BleRoleControl_Flag; //蓝牙主从控制使能  00-不控制,01-控制
     uint8 BleName[8];
-    uint32 InnerCanID;
-    uint8 Data[8];
-    uint8 DataIdx;
-    uint8 Byte0Num;
+    //上述变量下线检测时调用修改
+
     // CmdIdx EBC对BLE命令列表
     switch (CmdIdx)
     {
     case 0x00: // ebc->ble数据传输通道
     {
-        Can2DataCode(DataIdx, Byte0Num);
-        InnerCanID = 0x1CEE0000;
+        Can2DataCode(DataIdx, Byte0Num,Data);
+        *InnerCanID = 0x1CEE0000;
         break;
     }
     case 0x01: //查询BLE软件版本
@@ -50,7 +48,7 @@ void Can2ProtocolCode(uint8 CmdIdx)
         Data[5] = 0x00;
         Data[6] = 0x00;
         Data[7] = 0x00;
-        InnerCanID = 0x1CEE0001;
+        *InnerCanID = 0x1CEE0001;
         break;
     }
     case 0x02: //查询BLE连接状态
@@ -63,7 +61,7 @@ void Can2ProtocolCode(uint8 CmdIdx)
         Data[5] = 0x00;
         Data[6] = 0x00;
         Data[7] = 0x00;
-        InnerCanID = 0x1CEE0002;
+        *InnerCanID = 0x1CEE0002;
         break;
     }
     case 0x03: //让BLE断开连接
@@ -76,7 +74,7 @@ void Can2ProtocolCode(uint8 CmdIdx)
         Data[5] = 0x00;
         Data[6] = 0x00;
         Data[7] = 0x00;
-        InnerCanID = 0x1CEE0003;
+        *InnerCanID = 0x1CEE0003;
         break;
     }
     case 0x04: //改无线设备名称 名称为ASCII码值
@@ -89,7 +87,7 @@ void Can2ProtocolCode(uint8 CmdIdx)
         Data[5] = BleName[5];
         Data[6] = BleName[6];
         Data[7] = BleName[7];
-        InnerCanID = 0x1CEE0004;
+        *InnerCanID = 0x1CEE0004;
         break;
     }
     case 0x05: // BLE设备蓝牙开关查询及控制,默认为查询
@@ -110,7 +108,7 @@ void Can2ProtocolCode(uint8 CmdIdx)
         Data[5] = 0x00;
         Data[6] = 0x00;
         Data[7] = 0x00;
-        InnerCanID = 0x1CEE0005;
+        *InnerCanID = 0x1CEE0005;
         break;
     }
     case 0x06: // BLE 主从机切换及查询,默认为查询
@@ -131,7 +129,7 @@ void Can2ProtocolCode(uint8 CmdIdx)
         Data[5] = 0x00;
         Data[6] = 0x00;
         Data[7] = 0x00;
-        InnerCanID = 0x1CEE0006;
+        *InnerCanID = 0x1CEE0006;
         break;
     }
     default:
@@ -143,9 +141,8 @@ void Can2ProtocolCode(uint8 CmdIdx)
  * @param {*}
  * @return {*}
  */
-void Can2DataCode(uint8 DataIdx, uint8 Byte0Num)
+void Can2DataCode(uint8 DataIdx, uint8 Byte0Num,uint8 Data[])
 {
-    uint8 Data[8];
     switch (DataIdx)
     {
     case 0x01: //主机数据类型1的应答
@@ -339,7 +336,6 @@ void Can2DataCode(uint8 DataIdx, uint8 Byte0Num)
     {
         bcud_st_bcuComun = (BMS1_Life != 0xFF);
         bcud_pct_bcuSoh = BMS2_SOH;
-
         bcud_V_battU = BMS2_PackInsideVolt;
         if (BMS1_SysSts == 2)
         {
@@ -569,6 +565,7 @@ void Can2DataCode(uint8 DataIdx, uint8 Byte0Num)
         default:
             break;
         }
+    break;
     }
     case 0x05:
     {
@@ -580,8 +577,17 @@ void Can2DataCode(uint8 DataIdx, uint8 Byte0Num)
         Data[5] = 0x00;
         Data[6] = 0x00;
         Data[7] = 0x00;
+        break;
     }
     default:
+        Data[0] = 0x00;
+        Data[1] = 0x00;
+        Data[2] = 0x00;
+        Data[3] = 0x00;
+        Data[4] = 0x00;
+        Data[5] = 0x00;
+        Data[6] = 0x00;
+        Data[7] = 0x00;
         break;
     }
 }
@@ -591,24 +597,22 @@ void Can2DataCode(uint8 DataIdx, uint8 Byte0Num)
  * @param {uint8} CmdIdx
  * @return {*}
  */
-void Can2ProtocolDecode(uint8 CmdIdx)
+void Can2ProtocolDecode(uint32 Can2ID,uint8 Data[])
 {
-    uint32 Can2ID;
-    uint8 Data[8];
     switch (Can2ID)
     {
-    case 0x0000:
+    case 0x1CEF0000:
     {
-        Can2DataDecode();
+        Can2DataDecode(Data);
         bled_flg_bleConn = 1;
         break;
     }
-    case 0x0001:
+    case 0x1CEF0001:
     {
         bled_Nr_softVer = (Data[0] << 24) | (Data[1] << 16) | (Data[2] << 8) | (Data[3]);
         break;
     }
-    case 0x0002:
+    case 0x1CEF0002:
     {
         if (Data[0] != 0xFF)
         {
@@ -629,35 +633,41 @@ void Can2ProtocolDecode(uint8 CmdIdx)
  * @param {*}
  * @return {*}
  */
-void Can2DataDecode(void)
+void Can2DataDecode(uint8 Data[])
 {
-    uint8 Data[8];
     uint8 CmdIndex = Data[0];
+    ebcd_st_toBleAns = CmdIndex;
+    ebcd_flg_Can2SendEnbale = TRUE;//所有的信息均立即回复
     switch (CmdIndex)
     {
     case 0x01: //心跳数据,为了维持通讯
     {
         bled_flg_Heart = 1;
+        ebcd_flg_Can2SendEnbale = TRUE;
         break;
     }
     case 0x02: //获取换电控制器信息
     {
         bled_flg_getEbcData = 1;
+        ebcd_flg_Can2SendEnbale = TRUE;
         break;
     }
     case 0x03: //获得车辆信息
     {
         bled_flg_getVcuData = 1;
+        ebcd_flg_Can2SendEnbale = TRUE;
         break;
     }
     case 0x04: //获取电池信息
     {
         bled_flg_getBmsData = 1;
+        ebcd_flg_Can2SendEnbale = TRUE;
         break;
     }
     case 0x05: //握手
     {
         bled_flg_handShake = 1;
+        ebcd_flg_Can2SendEnbale = TRUE;
         break;
     }
     case 0x06: //解锁

+ 4 - 4
System/Vehicle/Communication/BleCanProtocolFunc.h

@@ -17,8 +17,8 @@
 #include "CanVar.h"
 #ifndef SYSTEM_VEHICLE_CANPROTOCOL_H_
 #define SYSTEM_VEHICLE_CANPROTOCOL_H_
-void Can2ProtocolCode(uint8 CmdIdx);
-void Can2ProtocolDecode(uint8 CmdIdx);
-void Can2DataCode(uint8 DataIdx, uint8 Byte0Num);
-void Can2DataDecode(void);
+void Can2ProtocolCode(uint8 CmdIdx,uint8 DataIdx,uint8 Byte0Num,uint32 *InnerCanID,uint8 *Data);
+void Can2ProtocolDecode(uint32 Can2ID,uint8 Data[]);
+void Can2DataCode(uint8 DataIdx, uint8 Byte0Num,uint8 Data[]);
+void Can2DataDecode(uint8 Data[]);
 #endif /* SYSTEM_VEHICLE_CANPROTOCOL_H_ */

+ 61 - 15
System/Vehicle/Communication/CANNet.c

@@ -16,13 +16,14 @@
 #include "HardwareLib.h"
 #include "CANNet.h"
 #include "AccPedCD.h"
-
+#include "BleCanProtocolFunc.h"
+#include "BcuCanProtocolFunc.h"
+#include "VcuCanProtocolFunc.h"
 MCANDrv_infoMsgConfS_TYPE CANNet_infoMsgTxConfSA[3];
 MCAN_stRetE_TYPE CAN1Result;
 uint16 CANNet_idxSchedUB;
 MCANDrv_infoMsgConfS_TYPE CANNet_InfoRxMsgConfSA[128];
 uint8 CANNet_datRxMsgBufM[128][9];
-uint8 Can2counter = 0;
 void CANNet_Init(void)
 {
 	/*示例代码*/
@@ -39,15 +40,15 @@ void CANNet_Init(void)
 	/*第2路CAN用于CCP、UDS协议,由底层配置*/
 	// MCANDrv_SetCallbackFunc(_CAN_INDEX_CAN2, (pFunc_RxMsgCallback)CANNet_RecvMsgCAN2, NULL_PTR);
 
-	/*接收报文初始化*/
-	CANNet_InfoRxMsgConfSA[0].infoMsgIDUI = 0x0000007E3UL;
+	/*接收报文初始化,主要配置CAN2*/
+	CANNet_InfoRxMsgConfSA[0].infoMsgIDUI = 0x1CEF0000UL;
 	CANNet_InfoRxMsgConfSA[0].infoMsgParU.B.CAN = 2;
 	CANNet_InfoRxMsgConfSA[0].infoMsgParU.B.MO = 3;
 	CANNet_InfoRxMsgConfSA[0].infoMsgParU.B.DIR = _MCAN_DIR_RX;
 	CANNet_InfoRxMsgConfSA[0].infoMsgParU.B.DLC = 8;
 	CANNet_InfoRxMsgConfSA[0].infoMsgParU.B.IDE = _MCAN_IDE_EXT;
 	MCANDrv_SetMsgObj(CANNet_InfoRxMsgConfSA[0], CANNet_RecvMsgCAN2);
-	CANNet_InfoRxMsgConfSA[1].infoMsgIDUI = 0x0000007E4UL;
+	CANNet_InfoRxMsgConfSA[1].infoMsgIDUI = 0x1CEF0001UL;
 	CANNet_InfoRxMsgConfSA[1].infoMsgParU.B.CAN = 2;
 	CANNet_InfoRxMsgConfSA[1].infoMsgParU.B.MO = 4;
 	CANNet_InfoRxMsgConfSA[1].infoMsgParU.B.DIR = _MCAN_DIR_RX;
@@ -117,8 +118,13 @@ void CANNet_RecvMsgCAN1(MCANDrv_infoMsgS_TYPE infoMsgS)
 	//	}
 	BcuDecodeFunction(infoMsgS.infoConfS.infoMsgIDUI, infoMsgS.datMsgUBA);
 }
+/*备注,CAN2接收报文时,需要配置接收报文的MO号,如果不配置,将进入不了CAN中断*/
 void CANNet_RecvMsgCAN2(MCANDrv_infoMsgS_TYPE infoMsgS)
 {
+#ifdef _APP_RELEASE_CODE
+	Can2ProtocolDecode(infoMsgS.infoConfS.infoMsgIDUI,infoMsgS.datMsgUBA);
+#endif
+#ifdef _APP_TEST_MOTOR_CODE
 	switch (infoMsgS.infoConfS.infoMsgIDUI)
 	{
 	case 0x0000007E3:
@@ -126,17 +132,19 @@ void CANNet_RecvMsgCAN2(MCANDrv_infoMsgS_TYPE infoMsgS)
 		MotorControlEnable = infoMsgS.datMsgUBA[0] & 0x0F;
 		MotorControlCmd = (infoMsgS.datMsgUBA[0] & 0xF0) >> 4;
 		MotorDebugCmd = infoMsgS.datMsgUBA[1] & 0xFF;
+		MotorLifeTestCmd = infoMsgS.datMsgUBA[2] & 0xFF;
 		break;
 	}
 	case 0x0000007E4:
 	{
-		LockDelay = MAX((UINT16)((infoMsgS.datMsgUBA[1] << 8) | (infoMsgS.datMsgUBA[0])), 1000);
-		RunFailedDelay = MAX((UINT16)(((infoMsgS.datMsgUBA[3] << 8) | infoMsgS.datMsgUBA[2])), 3000);
+		LockDelay = MAX((UINT16)((infoMsgS.datMsgUBA[1] << 8) | (infoMsgS.datMsgUBA[0])), 100);
+		RunFailedDelay = MAX((UINT16)(((infoMsgS.datMsgUBA[3] << 8) | infoMsgS.datMsgUBA[2])), 1000);
 		break;
 	}
 	default:
 		break;
 	}
+#endif
 }
 //发送消息管理
 void CAN0Net_Manage1ms(void)
@@ -199,20 +207,57 @@ void CAN1Net_Manage1ms(void)
 }
 void CAN2Net_Manage1ms(void)
 {
-	static UINT32 Can2TimerCounter = 0;
 	MCANDrv_infoMsgS_TYPE infoMsgS;
+#ifdef _APP_RELEASE_CODE
+	uint8 cmdIdx = 0x00;
+	uint8 DataIdx = 0x00;
+	static uint8 AnsNum = 0x00;//应答次数
+	DataIdx = ebcd_st_toBleAns;
+	/*test
+	static UINT32 Can2TimerCounter = 0;
+	if(Can2TimerCounter%1000==0)
+	{
+		CANNet_infoMsgTxConfSA[2].infoMsgIDUI = 0x1CEE0000;
+		infoMsgS.infoConfS = CANNet_infoMsgTxConfSA[2];
+		memset(infoMsgS.datMsgUBA, 0x00, 8);
+		infoMsgS.datMsgUBA[0] = DataIdx;
+		infoMsgS.datMsgUBA[1] = ebcd_st_toBleAns;
+		infoMsgS.datMsgUBA[2] = AnsNum;
+		MCANDrv_SendMsg(infoMsgS);
+	}
+	Can2TimerCounter++;
+	test*/
+	if(ebcd_flg_Can2SendEnbale==TRUE&&DataIdx>0)
+	{
+		if(AnsNum<DataPackCounter[DataIdx])
+		{
+			Can2ProtocolCode(cmdIdx,DataIdx,(DataPackBegin[DataIdx]+AnsNum),&(CANNet_infoMsgTxConfSA[2].infoMsgIDUI),&(infoMsgS.datMsgUBA[0]));
+			infoMsgS.infoConfS = CANNet_infoMsgTxConfSA[2];
+			MCANDrv_SendMsg(infoMsgS);
+			AnsNum++;
+		}
+		else
+		{
+			AnsNum = 0;
+			ebcd_st_toBleAns = 0;
+			ebcd_flg_Can2SendEnbale = FALSE;
+		}
+
+	}
+#endif
+#ifdef _APP_TEST_MOTOR_CODE
 	if (Can2TimerCounter % 100 == 1)
 	{
 		CANNet_infoMsgTxConfSA[2].infoMsgIDUI = 0x7F3;
 		infoMsgS.infoConfS = CANNet_infoMsgTxConfSA[2];
-		infoMsgS.datMsgUBA[0] = (ebcd_st_lockSensor | (ebcd_st_unlockSensor << 4)) & 0xFF;
+		infoMsgS.datMsgUBA[0] = (uint8)(ebcd_st_lockSensor | (ebcd_st_unlockSensor << 4));
 		infoMsgS.datMsgUBA[1] = MotorControlEnable;
 		infoMsgS.datMsgUBA[2] = MotorControlCmd;
 		infoMsgS.datMsgUBA[3] = MotorDebugCmd;
-		infoMsgS.datMsgUBA[4] = MotorControlFeedBack;
-		infoMsgS.datMsgUBA[5] = MotorDirecFeedBack;
-		infoMsgS.datMsgUBA[6] = 0x00;
-		infoMsgS.datMsgUBA[7] = 0x00;
+		infoMsgS.datMsgUBA[4] = MotorControlLockNum;
+		infoMsgS.datMsgUBA[5] = MotorControlunLockNum;
+		infoMsgS.datMsgUBA[6] = ebcd_P_airSensor;
+		infoMsgS.datMsgUBA[7] = ebcd_P_airSensor>>8;
 		MCANDrv_SendMsg(infoMsgS);
 	}
 	else if (Can2TimerCounter % 100 == 2)
@@ -223,13 +268,14 @@ void CAN2Net_Manage1ms(void)
 		infoMsgS.datMsgUBA[1] = LockDelay >> 8;
 		infoMsgS.datMsgUBA[2] = RunFailedDelay;
 		infoMsgS.datMsgUBA[3] = RunFailedDelay >> 8;
-		infoMsgS.datMsgUBA[4] = 0x00;
-		infoMsgS.datMsgUBA[5] = 0x00;
+		infoMsgS.datMsgUBA[4] = LifeTestCounter;
+		infoMsgS.datMsgUBA[5] = LifeTestCounter>>8;
 		infoMsgS.datMsgUBA[6] = 0x00;
 		infoMsgS.datMsgUBA[7] = 0x00;
 		MCANDrv_SendMsg(infoMsgS);
 	}
 	Can2TimerCounter = Can2TimerCounter + 1;
+#endif
 #ifdef _APP_TEST_CODE
 	switch (CANNet_idxSchedUB)
 	{

+ 11 - 5
System/Vehicle/Communication/CanVar.c

@@ -539,9 +539,9 @@ UINT8 Gun2DCNegTemp = 0x00;				   //
 UINT8 Gun2DCPosTemp = 0x00;				   //充电口2正温感值,,精度_1,_偏移_-40,单位_℃
 UINT8 HeatPosRelaySt = 0x00;			   //加热正继电器状态,0_断开;1_闭合;2_粘连;3_无效;,精度_1,_偏移_0,单位_
 UINT8 HeatNegRelaySt = 0x00;			   //加热负继电器状态,0_断开;1_闭合;2_粘连;3_无效;,精度_1,_偏移_0,单位_
-UINT8 UcellFrameNum = 0x00;				   //单体电压帧序号,有效值1~255,精度_1,_偏移_0,单位_
+UINT8 UcellFrameNum = 0x01;				   //单体电压帧序号,有效值1~255,精度_1,_偏移_0,单位_
 UINT8 UcellCSCNum = 0x00;				   //子系统编号CSC,有效值1~255,精度_1,_偏移_0,单位_
-UINT8 TempFrameNum = 0x00;				   //温度帧序号,有效值1~255,精度_1,_偏移_0,单位_
+UINT8 TempFrameNum = 0x01;				   //温度帧序号,有效值1~255,精度_1,_偏移_0,单位_
 UINT8 TempCSCNum = 0x00;				   //子系统编号CSC,有效值1~255,精度_1,_偏移_0,单位_
 UINT8 CurCSC_TempN = 0x00;				   //当前CSC下的第N个探针的温度,255 "Invalid" 0xFF 无效 有效值 0~254,单位 ℃,范围(-50~204)℃,,精度_1,_偏移_-50,单位_℃
 UINT8 CurCSC_TempN1 = 0x00;				   //当前CSC下的第N1个探针的温度,255 "Invalid" 0xFF 无效 有效值 0~254,单位 ℃,范围(-50~204)℃,,精度_1,_偏移_-50,单位_℃
@@ -698,7 +698,9 @@ uint8 bled_flg_bleDisconn = 0;		   // ble
 /*
 ebc应用层变量
 */
-uint8 ebcd_P_airSensor = 0;
+uint8 ebcd_flg_Can2SendEnbale = 0;
+uint8 ebcd_st_toBleAns = 0;
+uint16 ebcd_P_airSensor = 0;
 uint8 ebcd_T_plugin[4] = {0};		 //四个接插件温度
 uint8 ebcd_flg_forbidHVOn = 0;		 //禁止高压上电
 uint8 ebcb_flg_reqHvOff = 0;		 //请求高压下电
@@ -751,6 +753,8 @@ const uint32 R_table[240] = {202269, 191063, 180554, 170694, 161438, 152746, 144
 							 476, 466, 455, 445, 436, 426, 417, 408, 399, 391, 382, 374, 366, 359, 351, 344, 337, 330, 323, 316, 310, 304, 298, 292,
 							 286, 280, 274, 269, 264, 259, 254, 249, 244, 239, 234, 230, 226, 221, 217, 213, 209, 205, 201, 198, 194, 190, 187, 183,
 							 180, 177, 174, 171, 168, 165, 162, 159, 156, 153, 151, 148, 145, 143, 141, 138, 136, 133, 131, 129, 127, 125};
+const uint8 DataPackCounter[21] = {1,1,7,5,16,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
+const uint8 DataPackBegin[21] = {0,0x11,0x21,0x31,0x40,0x51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
 #define APPLAYERVER_STOP_SEC_VAR
 #include "MemMap.h"
 /*************************************************************
@@ -782,12 +786,14 @@ uint32 Control_Times = 0;
 uint8 MotorControlCmd = 0;		//电机自动控制模式,0-不控制,1-控制锁紧,2-控制解锁
 uint8 MotorDebugCmd = 0;		//电机调试模式。0-不控制,1-持续锁紧,2-持续解锁
 uint8 MotorControlEnable = 0;	//电机控制使能,每bit代表一个电机从低位开始, 0-不控制,1-控制
-uint8 MotorControlFeedBack = 0; //调试参数
-uint8 MotorDirecFeedBack = 0;
+uint8 MotorControlLockNum = 0; //调试参数
+uint8 MotorControlunLockNum = 0;
+uint8 MotorLifeTestCmd = 0;
 #define EEPDATA_START_SEC_VAR
 #include "MemMap.h"
 uint16 RunFailedDelay = 30000; //电机最大运动时间,超时则取消控制
 uint16 LockDelay = 1000;	   //电机传感器到位后,延时锁紧时间
+uint16 LifeTestCounter = 0;
 #define EEPDATA_STOP_SEC_VAR
 #include "MemMap.h"
 #endif

+ 9 - 3
System/Vehicle/Communication/CanVar.h

@@ -541,7 +541,9 @@ extern uint8 bled_flg_role;               // ble
 extern uint8 bled_flg_bleConn;            // ble蓝牙连接状态
 extern uint8 bled_flg_bleDisconn;         // ble蓝牙断开状态
 //正式变量
-extern uint8 ebcd_P_airSensor;
+extern uint8 ebcd_flg_Can2SendEnbale;
+extern uint8 ebcd_st_toBleAns;
+extern uint16 ebcd_P_airSensor;
 extern uint8 ebcd_T_plugin[4];          //四个接插件温度
 extern uint8 ebcd_flg_forbidHVOn;       //禁止高压上电
 extern uint8 ebcb_flg_reqHvOff;         //请求高压下电
@@ -558,6 +560,8 @@ extern uint8 ebdc_st_ConnecState;       //
 
 extern const uint16 T_table[240];
 extern const uint32 R_table[240];
+extern const uint8 DataPackCounter[21];
+extern const uint8 DataPackBegin[21];
 #ifdef _APP_TEST_CODE
 extern uint16 CANNet_rAccPedUW;
 extern uint32 PressureValue;
@@ -586,12 +590,14 @@ extern uint32 Control_Times;
 extern uint8 MotorControlCmd;      //电机自动控制模式,0-不控制,1-控制锁紧,2-控制解锁
 extern uint8 MotorDebugCmd;        //电机调试模式。0-不控制,1-持续锁紧,2-持续解锁
 extern uint8 MotorControlEnable;   //电机控制使能,每bit代表一个电机从低位开始, 0-不控制,1-控制
-extern uint8 MotorControlFeedBack; //调试参数
-extern uint8 MotorDirecFeedBack;
+extern uint8 MotorControlLockNum; //调试参数
+extern uint8 MotorControlunLockNum;
+extern uint8 MotorLifeTestCmd;
 #define EEPDATA_START_SEC_VAR
 #include "MemMap.h"
 extern uint16 RunFailedDelay; //电机最大运动时间,超时则取消控制
 extern uint16 LockDelay;      //电机传感器到位后,延时锁紧时间
+extern uint16 LifeTestCounter;
 #define EEPDATA_STOP_SEC_VAR
 #include "MemMap.h"
 #endif

+ 5 - 5
System/Vehicle/Communication/VcuCanProtocolFunc.c

@@ -489,7 +489,6 @@ void VcuEncodeFunction(UINT32 ID, UINT8 *rawData)
 	{
 		UINT16 BMS_Cell_Volt_Buffer[3] = {0x00};
 		UcellCSCNum = 0x01; // 瀹氫箟涓�1
-		UcellFrameNum = UcellFrameNum + 1;
 		for (UINT8 i = 0; i < 3; i++)
 		{
 			if (((UcellFrameNum - 1) * 3 + i) < sizeof(BMS_Cell_Volt) / 2)
@@ -498,7 +497,7 @@ void VcuEncodeFunction(UINT32 ID, UINT8 *rawData)
 			}
 			else
 			{
-				UcellFrameNum = 0;
+				UcellFrameNum = 1;
 				break;
 			}
 		}
@@ -507,22 +506,22 @@ void VcuEncodeFunction(UINT32 ID, UINT8 *rawData)
 		*(UINT16 *)(rawData + 2) = *(UINT16 *)(rawData + 2) | ((BMS_Cell_Volt_Buffer[0] << 0) & 0xFFFF);
 		*(UINT16 *)(rawData + 4) = *(UINT16 *)(rawData + 4) | ((BMS_Cell_Volt_Buffer[1] << 0) & 0xFFFF);
 		*(UINT16 *)(rawData + 6) = *(UINT16 *)(rawData + 6) | ((BMS_Cell_Volt_Buffer[2] << 0) & 0xFFFF);
+		UcellFrameNum = UcellFrameNum + 1;
 		break;
 	}
 	case 0x18C2D0F3:
 	{
 		UINT8 BMS_Cell_TempN_Buffer[6] = {0x00};
 		TempCSCNum = 0x01; // 瀹氫箟涓�1
-		TempFrameNum = TempFrameNum + 1;
 		for (UINT8 i = 0; i < 6; i++)
 		{
 			if (((TempFrameNum - 1) * 6 + i) < sizeof(BMS_Cell_TempN))
 			{
-				BMS_Cell_TempN_Buffer[i] = BMS_Cell_TempN[(TempFrameNum - 1) * 3 + i] + 10;
+				BMS_Cell_TempN_Buffer[i] = BMS_Cell_TempN[(TempFrameNum - 1) * 6 + i] + 10;
 			}
 			else
 			{
-				TempFrameNum = 0;
+				TempFrameNum = 1;
 				break;
 			}
 		}
@@ -534,6 +533,7 @@ void VcuEncodeFunction(UINT32 ID, UINT8 *rawData)
 		*(UINT8 *)(rawData + 5) = *(UINT8 *)(rawData + 5) | ((BMS_Cell_TempN_Buffer[3] << 0) & 0xFF);
 		*(UINT8 *)(rawData + 6) = *(UINT8 *)(rawData + 6) | ((BMS_Cell_TempN_Buffer[4] << 0) & 0xFF);
 		*(UINT8 *)(rawData + 7) = *(UINT8 *)(rawData + 7) | ((BMS_Cell_TempN_Buffer[5] << 0) & 0xFF);
+		TempFrameNum = TempFrameNum + 1;
 		break;
 	}
 	case 0x18E1D0F3:

+ 2 - 1
System/Vehicle/VehCo.c

@@ -108,8 +108,9 @@ void VehCo_Manage1ms(void)
 #ifdef _APP_RELEASE_CODE
     CAN0Net_Manage1ms();
     CAN1Net_Manage1ms();
-#endif
     CAN2Net_Manage1ms();
+#endif
+    //CAN2Net_Manage1ms();
 }
 
 //停机准备状态操作,10ms运行一次