Browse Source

EBC的CAN解析代码调试完成,无异常情况,后续将核对信号是否传输正确,以及解锁锁紧的控制逻辑写入

陈杰 3 years ago
parent
commit
7e41c63a6a

+ 79 - 15
System/Vehicle/AppFunc.c

@@ -14,6 +14,32 @@
 #include "math.h"
 #include "AppFunc.h"
 #include "Std_Types.h"
+void LockAndUnlockCtrl()
+{
+	static uint16 TimerCounter = 0;
+	TimerCounter = TimerCounter + 10;
+
+	if (!ebcd_flg_ebcEolDone) //下线检测模式
+	{
+		static uint16 Delay = 0;
+		Delay = Delay + 10;
+		if (Delay > 10000)
+		{
+			PSwtDrv_Interface(_PSWT_INDEX_HBAK1_CHAN, 1);
+		}
+		else
+		{
+			PSwtDrv_Interface(_PSWT_INDEX_HBAK1_CHAN, 0);
+		}
+		if (Delay > 20000)
+		{
+			Delay = 0;
+		}
+	}
+	else //正常工作模式
+	{
+	}
+}
 /**
  * @brief : 互锁检测函数
  * @param {*}
@@ -77,11 +103,47 @@ void GetDIOState(void)
 
 	//落座传感器检测,高有效,悬空为0则未接入,高电平为1则接入
 	memset(temp, 0x00, 4);
-	// DINDrv_SetChanThres(_DIN_INDEX_READYSENSOR1, 0, 4095 * 3);
-	// DINDrv_SetChanThres(_DIN_INDEX_READYSENSOR2, 0, 4095 * 3);
-	temp[0] = DINDrv_GetChanState(_DIN_INDEX_READYSENSOR1);
-	temp[1] = DINDrv_GetChanState(_DIN_INDEX_READYSENSOR2);
+	temp[0] = !DINDrv_GetChanState(_DIN_INDEX_READYSENSOR1);
+	temp[1] = !DINDrv_GetChanState(_DIN_INDEX_READYSENSOR2);
 	ebcd_st_pedstSensor = (getbit(temp[1], 0) << 1) | (getbit(temp[0], 0) << 0);
+
+	//根据上述量得到,运动状态值
+	if (ebcd_st_lockSensor == 0x0F)
+	{
+		ebcd_st_lockSucJug = 1;
+	}
+	else if (ebcd_st_lockSensor == 0x00)
+	{
+		ebcd_st_lockSucJug = 0;
+	}
+	else
+	{
+		ebcd_st_lockSucJug = 2;
+	}
+	if (ebcd_st_unlockSensor == 0x0F)
+	{
+		ebcd_st_unlockSucJug = 1;
+	}
+	else if (ebcd_st_unlockSensor == 0x00)
+	{
+		ebcd_st_unlockSucJug = 2;
+	}
+	else
+	{
+		ebcd_st_unlockSucJug = 0;
+	}
+	if (ebcd_st_pedstSucJug == 0x03)
+	{
+		ebcd_st_pedstSucJug = 1;
+	}
+	else if (ebcd_st_pedstSucJug == 0x00)
+	{
+		ebcd_st_pedstSucJug = 0;
+	}
+	else
+	{
+		ebcd_st_pedstSucJug = 2;
+	}
 }
 
 /**
@@ -102,8 +164,11 @@ void GetAIOValue(void)
 	uint32 PluginTemp4_R = 0;
 
 	AirPressureTemp_Vol = ATDDrv_GetChanResult(_ATD_INDEX_AIRPRESSURE);
+	AirPressureTemp_Vol = (uint16)(AirPressureTemp_Vol * 1000 / 4095.0);
 	/*气压数据转换*/
-	ebcd_P_airSensor = (uint16)(AirPressureTemp_Vol * 1000 / 4095.0);
+	AirPressureTemp_Vol = MAX(AirPressureTemp_Vol, 500);
+	AirPressureTemp_Vol = MIN(AirPressureTemp_Vol, 4500);
+	ebcd_P_airSensor = (uint8)((AirPressureTemp_Vol - 500) / 40);
 	/*温度采集获取*/
 	PluginTemp1_Vol = ATDDrv_GetChanResult(_ATD_INDEX_PLUGINTEMP1);
 	PluginTemp2_Vol = ATDDrv_GetChanResult(_ATD_INDEX_PLUGINTEMP2);
@@ -113,10 +178,10 @@ void GetAIOValue(void)
 	PluginTemp2_R = (uint32)((PluginTemp2_Vol / (5.0 * 4095 - PluginTemp2_Vol)) * 1000.0);
 	PluginTemp3_R = (uint32)((PluginTemp3_Vol / (5.0 * 4095 - PluginTemp3_Vol)) * 1000.0);
 	PluginTemp4_R = (uint32)((PluginTemp4_Vol / (5.0 * 4095 - PluginTemp4_Vol)) * 1000.0);
-	ebcd_T_plugin[0] = (uint8)Look1_u32u16(PluginTemp1_R, R_table, T_table, 240);
-	ebcd_T_plugin[1] = (uint8)Look1_u32u16(PluginTemp2_R, R_table, T_table, 240);
-	ebcd_T_plugin[2] = (uint8)Look1_u32u16(PluginTemp3_R, R_table, T_table, 240);
-	ebcd_T_plugin[3] = (uint8)Look1_u32u16(PluginTemp4_R, R_table, T_table, 240);
+	ebcd_T_plugin[0] = (uint8)Look1_u32u8(PluginTemp1_R, R_table, T_table, 240);
+	ebcd_T_plugin[1] = (uint8)Look1_u32u8(PluginTemp2_R, R_table, T_table, 240);
+	ebcd_T_plugin[2] = (uint8)Look1_u32u8(PluginTemp3_R, R_table, T_table, 240);
+	ebcd_T_plugin[3] = (uint8)Look1_u32u8(PluginTemp4_R, R_table, T_table, 240);
 }
 /**
  * @brief : lookUp Table Fun
@@ -126,7 +191,7 @@ void GetAIOValue(void)
  * @param {uint16} maxIndex
  * @return {*}
  */
-uint16 Look1_u32u16(uint32 u0, uint32 *bp0, uint16 *table, uint16 MaxLen)
+uint16 Look1_u32u8(uint32 u0, uint32 *bp0, uint8 *table, uint16 MaxLen)
 {
 	uint32 bpIdx = 0;
 	uint32 iLeft = 0;
@@ -307,14 +372,13 @@ void MotorTestFun(void)
 		}
 		else
 		{
-			if(MotorLifeTestCmd==1)
+			if (MotorLifeTestCmd == 1)
 			{
-				if(LockMotorNum<4 && testTimer>5000)
+				if (LockMotorNum < 4 && testTimer > 5000)
 				{
 					MotorControlCmd = 1;
-
 				}
-				else if( unLockMotorNum<5&&LockMotorNum==4 && testTimer>5000)
+				else if (unLockMotorNum < 5 && LockMotorNum == 4 && testTimer > 5000)
 				{
 					MotorControlCmd = 2;
 				}
@@ -519,7 +583,7 @@ void MotorTestFun(void)
 			MotorControlFunc(0, 0xF1);
 			unLockMotorNum = 5;
 			LockMotorNum = -1;
-			if(MotorLifeTestCmd==1)
+			if (MotorLifeTestCmd == 1)
 			{
 				LifeTestCounter++;
 				testTimer = 0;

+ 2 - 1
System/Vehicle/AppFunc.h

@@ -19,7 +19,8 @@
 void GetHVLockState(void);
 void GetDIOState(void);
 void GetAIOValue(void);
-uint16 Look1_u32u16(uint32 u0, uint32 *bp0, uint16 *table, uint16 MaxLen);
+void LockAndUnlockCtrl();
+uint16 Look1_u32u8(uint32 u0, uint32 *bp0, uint8 *table, uint16 MaxLen);
 #ifdef _APP_TEST_CODE
 void TestDeviceFun(void);
 #endif

+ 22 - 23
System/Vehicle/Communication/BcuCanProtocolFunc.c

@@ -709,7 +709,7 @@ void BcuDecodeFunction(UINT32 ID, UINT8 *rawData)
 		BMS11_Fult1_SOCChangeFast = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0x1);
 		BMS11_Fult1_BatSysNotMatch = (UINT8)(((*(UINT8 *)(rawData + 3)) >> 1) & 0x1);
 		BMS11_Fult1_HVILFault = (UINT8)(((*(UINT8 *)(rawData + 3)) >> 2) & 0x1);
-		BMS11_PackOutsideVolt = (UINT16)(((*(UINT16 *)(rawData + 4))) & 0xFFFF);
+		BMS11_PackOutsideVolt = ((*(UINT8 *)(rawData + 4))|((*(UINT8 *)(rawData + 5)))<<8);
 		BcuRxFlag[97] = 0x01;
 		break;
 	case 0x1882EFF4:
@@ -771,11 +771,10 @@ void BcuDecodeFunction(UINT32 ID, UINT8 *rawData)
 		BMS1_Life = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
 		BMS1_BalanceStatus = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 2) & 0x1);
 		BMS1_DCChrgConnectSt = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 3) & 0x3);
-		BMS1_ChrgMode = (UINT8)(((*(UINT16 *)(rawData + 4)) >> 7) & 0x3);
+		BMS1_ChrgMode = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 7) & 0x3);
 		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);//error
 		BMS1_RechrgCycels = (UINT32)((*(rawData + 5) >> 6)|(*(rawData + 6)<<2)|(*(rawData + 7)<<10));
 		BcuRxFlag[99] = 0x01;
 		break;
@@ -816,9 +815,9 @@ void BcuDecodeFunction(UINT32 ID, UINT8 *rawData)
 		break;
 	case 0x1888EFF4:
 		BMS7_MaxUcellSysNr = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
-		BMS7_MaxUcellNr = (UINT16)(((*(UINT16 *)(rawData + 1))) & 0xFFFF);
+		BMS7_MaxUcellNr = (UINT16)(((*(UINT8 *)(rawData + 1))) & 0xFFFF)|((((*(UINT8 *)(rawData + 2))) & 0xFFFF)<<8);
 		BMS7_MinUcellSysNr = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
-		BMS7_MinUcellNr = (UINT16)(((*(UINT16 *)(rawData + 4))) & 0xFFFF);
+		BMS7_MinUcellNr = (UINT16)(((*(UINT8 *)(rawData + 4))) & 0xFFFF)|((((*(UINT8 *)(rawData + 5))) & 0xFFFF)<<8);
 		BcuRxFlag[104] = 0x01;
 		break;
 	case 0x1889EFF4:
@@ -935,14 +934,14 @@ void BcuDecodeFunction(UINT32 ID, UINT8 *rawData)
 		BMS21_RatePower = (UINT16)(((*(UINT16 *)(rawData + 4))) & 0xFFFF);
 		BMS21_BattType = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xF);
 		BMS21_CoolType = (UINT8)(((*(UINT8 *)(rawData + 6)) >> 4) & 0x3);
-		BMS21_Manufacture = (UINT8)(((*(UINT16 *)(rawData + 6)) >> 6) & 0xF);
+		BMS21_Manufacture = (UINT8)(((*(UINT8 *)(rawData + 6)) >> 6) & 0xF);
 		BMS21_ProtocolEditionH = (UINT8)(((*(UINT8 *)(rawData + 7)) >> 2) & 0x3);
 		BMS21_ProtocolEditionL = (UINT8)(((*(UINT8 *)(rawData + 7)) >> 4) & 0xF);
 		BcuRxFlag[114] = 0x01;
 		break;
 	case 0x18E3EFF4:
 		BMS9_TotCSCNum = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
-		BMS9_PackTotCellNum = (UINT16)(((*(UINT16 *)(rawData + 1))) & 0xFFFF);
+		BMS9_PackTotCellNum = (UINT16)(((*(UINT8 *)(rawData + 1))) & 0xFFFF)|((((*(UINT8 *)(rawData + 2))) & 0xFFFF)<<8);
 		BMS9_PackTotTempNum = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
 		BMS9_HVBranchNum = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
 		BMS9_SingleHVBranchCellNum = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
@@ -992,25 +991,25 @@ void BcuDecodeFunction(UINT32 ID, UINT8 *rawData)
 		BcuRxFlag[121] = 0x01;
 		break;
 	case 0x18FF45F4:
-		BMS28_ReqMode = (UINT8)(((((*(UINT8 *)(rawData + 0)) >> 0) & 0x3) * 1) + (0));
-		BMS28_HVCmd = (UINT8)(((((*(UINT8 *)(rawData + 0)) >> 2) & 0x3) * 1) + (0));
-		BMS28_ChgSts = (UINT8)(((((*(UINT8 *)(rawData + 0)) >> 4) & 0x3) * 1) + (0));
-		BMS28_HVRelaySts = (UINT8)(((((*(UINT8 *)(rawData + 0)) >> 6) & 0x3) * 1) + (0));
-		BMS28_HVVolt = (UINT16)((((((*(UINT16 *)(rawData + 1) >> 8) & 0xFF) | ((*(UINT16 *)(rawData + 1) << 8) & 0xFF00) >> 0) & 0xFFFF) * 1) + (0));
-		BMS28_SetTemp = (UINT8)(((((*(UINT8 *)(rawData + 4)) >> 0) & 0xFF) * 1) + (0));
-		BMS28_Life = (UINT8)(((((*(UINT8 *)(rawData + 6)) >> 0) & 0xFF) * 1) + (0));
-		BMS28_CRC = (UINT8)(((((*(UINT8 *)(rawData + 7)) >> 0) & 0xFF) * 1) + (0));
+		BMS28_ReqMode = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 0) & 0x3);
+		BMS28_HVCmd = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 2) & 0x3);
+		BMS28_ChgSts = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 4) & 0x3);
+		BMS28_HVRelaySts = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 6) & 0x3);
+		BMS28_HVVolt = (UINT16)(((*(UINT8 *)(rawData + 1))<<8)|(*(UINT8 *)(rawData + 2)));
+		BMS28_SetTemp = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 0) & 0xFF);
+		BMS28_Life = (UINT8)(((*(UINT8 *)(rawData + 6)) >> 0) & 0xFF);
+		BMS28_CRC = (UINT8)(((*(UINT8 *)(rawData + 7)) >> 0) & 0xFF);
 		BcuRxFlag[122] = 0x01;
 		break;
 	case 0x18FFC13A:
-		TMS_WorkStatus = (UINT8)(((((*(UINT8 *)(rawData + 0)) >> 0) & 0x3) * 1) + (0));
-		TMS_HVRelayST = (UINT8)(((((*(UINT8 *)(rawData + 0)) >> 2) & 0x3) * 1) + (0));
-		TMS_OutletTemp = (UINT8)(((((*(UINT8 *)(rawData + 1)) >> 0) & 0xFF) * 1) + (0));
-		TMS_InletTemp = (UINT8)(((((*(UINT8 *)(rawData + 2)) >> 0) & 0xFF) * 1) + (0));
-		TMS_Version = (UINT8)(((((*(UINT8 *)(rawData + 3)) >> 0) & 0xFF) * 1) + (0));
-		TMS_ReqPow = (UINT16)((((((*(UINT16 *)(rawData + 5) >> 8) & 0xFF) | ((*(UINT16 *)(rawData + 5) << 8) & 0xFF00) >> 0) & 0xFFFF) * 1) + (0));
-		TMS_ErrCode = (UINT8)(((((*(UINT8 *)(rawData + 7)) >> 0) & 0x3F) * 1) + (0));
-		TMS_FaultLevel = (UINT8)(((((*(UINT8 *)(rawData + 7)) >> 6) & 0x3) * 1) + (0));
+		TMS_WorkStatus = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 0) & 0x3);
+		TMS_HVRelayST = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 2) & 0x3);
+		TMS_OutletTemp = (UINT8)(((*(UINT8 *)(rawData + 1)) >> 0) & 0xFF);
+		TMS_InletTemp = (UINT8)(((*(UINT8 *)(rawData + 2)) >> 0) & 0xFF);
+		TMS_Version = (UINT8)(((*(UINT8 *)(rawData + 3)) >> 0) & 0xFF);
+		TMS_ReqPow = (UINT16)(((*(UINT8 *)(rawData + 5))<<8)|(*(UINT8 *)(rawData + 6)));
+		TMS_ErrCode = (UINT8)(((*(UINT8 *)(rawData + 7)) >> 0) & 0x3F);
+		TMS_FaultLevel = (UINT8)(((*(UINT8 *)(rawData + 7)) >> 6) & 0x3);
 		BcuRxFlag[123] = 0x01;
 		break;
 	case 0x18FFD4F4:

+ 18 - 16
System/Vehicle/Communication/CANNet.c

@@ -29,11 +29,11 @@ void CANNet_Init(void)
 	/*示例代码*/
 
 	/*各个CAN节点初始化*/
-	MCANDrv_SetBaudrate(_CAN_INDEX_CAN0, 250000);
+	MCANDrv_SetBaudrate(_CAN_INDEX_CAN0, 500000);
 	MCANDrv_SetCANMode(_CAN_INDEX_CAN0, MCAN_NODEMODE_BUF);
 	MCANDrv_SetCallbackFunc(_CAN_INDEX_CAN0, (pFunc_RxMsgCallback)CANNet_RecvMsgCAN0, NULL_PTR);
 
-	MCANDrv_SetBaudrate(_CAN_INDEX_CAN1, 250000);
+	MCANDrv_SetBaudrate(_CAN_INDEX_CAN1, 500000);
 	MCANDrv_SetCANMode(_CAN_INDEX_CAN1, MCAN_NODEMODE_BUF);
 	MCANDrv_SetCallbackFunc(_CAN_INDEX_CAN1, (pFunc_RxMsgCallback)CANNet_RecvMsgCAN1, NULL_PTR);
 
@@ -208,25 +208,13 @@ void CAN1Net_Manage1ms(void)
 void CAN2Net_Manage1ms(void)
 {
 	MCANDrv_infoMsgS_TYPE infoMsgS;
+	static UINT32 Can2TimerCounter = 0;
+	Can2TimerCounter = Can2TimerCounter +1;
 #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])
@@ -244,6 +232,20 @@ void CAN2Net_Manage1ms(void)
 		}
 
 	}
+	else if(Can2TimerCounter % 100 == 1)
+	{
+		CANNet_infoMsgTxConfSA[2].infoMsgIDUI = 0x1CEE00F0;
+		infoMsgS.infoConfS = CANNet_infoMsgTxConfSA[2];
+		infoMsgS.datMsgUBA[0] = (uint8)(ebcd_st_lockSensor | (ebcd_st_unlockSensor << 4));
+		infoMsgS.datMsgUBA[1] = ebcd_st_pedstSensor;
+		infoMsgS.datMsgUBA[2] = ebcd_P_airSensor;
+		infoMsgS.datMsgUBA[3] = 0x00;
+		infoMsgS.datMsgUBA[4] = ebcd_T_plugin[0];
+		infoMsgS.datMsgUBA[5] = ebcd_T_plugin[1];
+		infoMsgS.datMsgUBA[6] = ebcd_T_plugin[2];
+		infoMsgS.datMsgUBA[7] = ebcd_T_plugin[3];
+		MCANDrv_SendMsg(infoMsgS);
+	}
 #endif
 #ifdef _APP_TEST_MOTOR_CODE
 	if (Can2TimerCounter % 100 == 1)

+ 33 - 26
System/Vehicle/Communication/CanVar.c

@@ -700,7 +700,7 @@ ebc应
 */
 uint8 ebcd_flg_Can2SendEnbale = 0;
 uint8 ebcd_st_toBleAns = 0;
-uint16 ebcd_P_airSensor = 0;
+uint8 ebcd_P_airSensor = 0;
 uint8 ebcd_T_plugin[4] = {0};		 //四个接插件温度
 uint8 ebcd_flg_forbidHVOn = 0;		 //禁止高压上电
 uint8 ebcb_flg_reqHvOff = 0;		 //请求高压下电
@@ -733,28 +733,35 @@ uint8 ebcd_st_unlockSucJug;			 //
 
 #define APPLAYERVER_START_SEC_VAR
 #include "MemMap.h"
-const uint16 T_table[240] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
-							 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
-							 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
-							 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
-							 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
-							 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
-							 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
-							 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239};
-const uint32 R_table[240] = {202269, 191063, 180554, 170694, 161438, 152746, 144580, 136905, 129687, 122898, 116508, 110493, 104827, 99488, 94455, 89710,
-							 85233, 81008, 77019, 73252, 69693, 66329, 63148, 60140, 57293, 54599, 52049, 49633, 47343, 45174, 43117, 41166, 39315, 37558,
-							 35891, 34307, 32802, 31373, 30014, 28722, 27493, 26324, 25211, 24152, 23144, 22183, 21268, 20395, 19564, 18771, 18015, 17293, 16604,
-							 15947, 15319, 14720, 14147, 13600, 13077, 12577, 12098, 11641, 11203, 10784, 10383, 10000, 9632, 9280, 8942,
-							 8619, 8309, 8012, 7727, 7454, 7191, 6940, 6698, 6466, 6244, 6030, 5825, 5627, 5438, 5255, 5080, 4911, 4749, 4593,
-							 4443, 4299, 4160, 4026, 3898, 3773, 3654, 3539, 3428, 3321, 3218, 3119, 3023, 2931, 2841, 2755, 2672, 2592, 2515,
-							 2441, 2369, 2299, 2232, 2167, 2104, 2044, 1985, 1928, 1874, 1821, 1769, 1720, 1672, 1626, 1581, 1537, 1495, 1455,
-							 1415, 1377, 1340, 1305, 1270, 1236, 1204, 1172, 1142, 1112, 1083, 1056, 1029, 1002, 977, 952, 928, 905, 883, 861,
-							 839, 819, 799, 779, 760, 742, 724, 707, 690, 674, 658, 642, 627, 613, 599, 585, 571, 558, 546, 533, 521, 509, 498, 487,
-							 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};
+uint8 ebcd_flg_ebcEolDone = 0;		 // EBC下线检测状态完成标志位
+const uint8 T_table[240] = {239, 238, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224,
+							223, 222, 221, 220, 219, 218, 217, 216, 215, 214, 213, 212, 211, 210, 209, 208, 207, 206, 205, 204, 203,
+							202, 201, 200, 199, 198, 197, 196, 195, 194, 193, 192, 191, 190, 189, 188, 187, 186, 185, 184, 183, 182,
+							181, 180, 179, 178, 177, 176, 175, 174, 173, 172, 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, 161,
+							160, 159, 158, 157, 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, 146, 145, 144, 143, 142, 141, 140,
+							139, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119,
+							118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97,
+							96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69,
+							68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41,
+							40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13,
+							12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
+const uint32 R_table[240] = {125, 127, 129, 131, 133, 136, 138, 141, 143, 145, 148, 151, 153, 156, 159, 162, 165,
+							 168, 171, 174, 177, 180, 183, 187, 190, 194, 198, 201, 205, 209, 213, 217, 221, 226, 230, 234, 239, 244, 249,
+							 254, 259, 264, 269, 274, 280, 286, 292, 298, 304, 310, 316, 323, 330, 337, 344, 351, 359, 366, 374, 382, 391,
+							 399, 408, 417, 426, 436, 445, 455, 466, 476, 487, 498, 509, 521, 533, 546, 558, 571, 585, 599, 613, 627, 642,
+							 658, 674, 690, 707, 724, 742, 760, 779, 799, 819, 839, 861, 883, 905, 928, 952, 977, 1002, 1029, 1056, 1083,
+							 1112, 1142, 1172, 1204, 1236, 1270, 1305, 1340, 1377, 1415, 1455, 1495, 1537, 1581, 1626, 1672, 1720, 1769,
+							 1821, 1874, 1928, 1985, 2044, 2104, 2167, 2232, 2299, 2369, 2441, 2515, 2592, 2672, 2755, 2841, 2931, 3023,
+							 3119, 3218, 3321, 3428, 3539, 3654, 3773, 3898, 4026, 4160, 4299, 4443, 4593, 4749, 4911, 5080, 5255, 5438,
+							 5627, 5825, 6030, 6244, 6466, 6698, 6940, 7191, 7454, 7727, 8012, 8309, 8619, 8942, 9280, 9632, 10000, 10383,
+							 10784, 11203, 11641, 12098, 12577, 13077, 13600, 14147, 14720, 15319, 15947, 16604, 17293, 18015, 18771,
+							 19564, 20395, 21268, 22183, 23144, 24152, 25211, 26324, 27493, 28722, 30014, 31373, 32802, 34307, 35891,
+							 37558, 39315, 41166, 43117, 45174, 47343, 49633, 52049, 54599, 57293, 60140, 63148, 66329, 69693, 73252,
+							 77019, 81008, 85233, 89710, 94455, 99488, 104827, 110493, 116508, 122898, 129687, 136905, 144580,
+							 152746, 161438, 170694, 180554, 191063, 202269};
+
+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"
 /*************************************************************
@@ -783,9 +790,9 @@ uint32 Control_Times = 0;
 #include "MemMap.h"
 #endif
 #ifdef _APP_TEST_MOTOR_CODE
-uint8 MotorControlCmd = 0;		//电机自动控制模式,0-不控制,1-控制锁紧,2-控制解锁
-uint8 MotorDebugCmd = 0;		//电机调试模式。0-不控制,1-持续锁紧,2-持续解锁
-uint8 MotorControlEnable = 0;	//电机控制使能,每bit代表一个电机从低位开始, 0-不控制,1-控制
+uint8 MotorControlCmd = 0;	   //电机自动控制模式,0-不控制,1-控制锁紧,2-控制解锁
+uint8 MotorDebugCmd = 0;	   //电机调试模式。0-不控制,1-持续锁紧,2-持续解锁
+uint8 MotorControlEnable = 0;  //电机控制使能,每bit代表一个电机从低位开始, 0-不控制,1-控制
 uint8 MotorControlLockNum = 0; //调试参数
 uint8 MotorControlunLockNum = 0;
 uint8 MotorLifeTestCmd = 0;

+ 11 - 10
System/Vehicle/Communication/CanVar.h

@@ -543,7 +543,7 @@ extern uint8 bled_flg_bleDisconn;         // ble
 //正式变量
 extern uint8 ebcd_flg_Can2SendEnbale;
 extern uint8 ebcd_st_toBleAns;
-extern uint16 ebcd_P_airSensor;
+extern uint8 ebcd_P_airSensor;
 extern uint8 ebcd_T_plugin[4];          //四个接插件温度
 extern uint8 ebcd_flg_forbidHVOn;       //禁止高压上电
 extern uint8 ebcb_flg_reqHvOff;         //请求高压下电
@@ -552,13 +552,14 @@ extern uint8 ebcd_flg_dChrgLockErr;     //
 extern uint8 ebcd_flg_chrgLockErr;      //充电互锁故障状态
 extern uint8 ebcd_flg_dChgCnctOverTemp; //放电连接器过温标志
 extern uint8 ebcd_st_ebcWork;           // Ebc当前状态 0-行车,1-通讯,2-换电
-extern uint8 ebcd_Nr_errMax;            //故障等级:当前故障最大等级
-extern uint8 ebcd_Num_faultCode;        // ebc故障码,未定义
-extern uint8 ebcd_st_chargingMod;       //充电模式,1-车载充电,2-换电站充电
-extern uint8 ebdc_st_lockUpState;       //锁止机构状态,0-故障,1-解锁成功,2-上锁成功
-extern uint8 ebdc_st_ConnecState;       //换电连接器状态(充电回路&放电回路同时闭合代表闭合,有一路断开则为断开),0_未连接 1_连接
+extern uint8 ebcd_Nr_errMax;      //故障等级:当前故障最大等级
+extern uint8 ebcd_Num_faultCode;  // ebc故障码,未定义
+extern uint8 ebcd_st_chargingMod; //充电模式,1-车载充电,2-换电站充电
+extern uint8 ebdc_st_lockUpState; //锁止机构状态,0-故障,1-解锁成功,2-上锁成功
+extern uint8 ebdc_st_ConnecState; //换电连接器状态(充电回路&放电回路同时闭合代表闭合,有一路断开则为断开),0_未连接 1_连接
 
-extern const uint16 T_table[240];
+extern uint8 ebcd_flg_ebcEolDone;
+extern const uint8 T_table[240];
 extern const uint32 R_table[240];
 extern const uint8 DataPackCounter[21];
 extern const uint8 DataPackBegin[21];
@@ -587,9 +588,9 @@ extern uint32 Control_Times;
 #include "MemMap.h"
 #endif
 #ifdef _APP_TEST_MOTOR_CODE
-extern uint8 MotorControlCmd;      //电机自动控制模式,0-不控制,1-控制锁紧,2-控制解锁
-extern uint8 MotorDebugCmd;        //电机调试模式。0-不控制,1-持续锁紧,2-持续解锁
-extern uint8 MotorControlEnable;   //电机控制使能,每bit代表一个电机从低位开始, 0-不控制,1-控制
+extern uint8 MotorControlCmd;     //电机自动控制模式,0-不控制,1-控制锁紧,2-控制解锁
+extern uint8 MotorDebugCmd;       //电机调试模式。0-不控制,1-持续锁紧,2-持续解锁
+extern uint8 MotorControlEnable;  //电机控制使能,每bit代表一个电机从低位开始, 0-不控制,1-控制
 extern uint8 MotorControlLockNum; //调试参数
 extern uint8 MotorControlunLockNum;
 extern uint8 MotorLifeTestCmd;

+ 1 - 0
System/Vehicle/VehCo.c

@@ -168,6 +168,7 @@ void VehCo_Ctrl(void)
     GetHVLockState();
     GetDIOState();
     GetAIOValue();
+    LockAndUnlockCtrl();
 #endif
 }
 #endif //_SAMPLE_CODE_