DTC更新

This commit is contained in:
sunbeam 2024-03-08 11:27:37 +08:00
parent ff4b4c51bc
commit cfca022cc0
5 changed files with 75 additions and 46 deletions

View File

@ -1,8 +1,8 @@
/************************************************************ /************************************************************
| : DCM_DTC.c | : DCM_DTC.c
| DTC相关服务函数 | DTC相关服务函数
| |
| |
***********************************************************/ ***********************************************************/
//DCM_DTC.c //DCM_DTC.c
#include "Dcm_App_Cfg.h" #include "Dcm_App_Cfg.h"
@ -13,6 +13,27 @@
//#include "r_fdl_types.h" //#include "r_fdl_types.h"
#include "Dcm_extern.h" #include "Dcm_extern.h"
const TsDcm_h_DtcGroupType CaDcm_u_DtcTable[DCM_SUPDTC_COUNT]={
{ 0,0xA8,0x80,0x16},
{ 1,0xA8,0x80,0x17},
{ 2,0xA8,0x80,0x88},
{ 3,0xA8,0x81,0x23},
{ 4,0xA8,0x82,0x23},
{ 5,0xA8,0x83,0x23},
{ 6,0xA8,0x84,0x23},
{ 7,0xA8,0x85,0x23},
{ 8,0xA8,0x86,0x25},
{ 9,0xC1,0x00,0x8}},
{10,0xD1,0x10,0x87},
{11,0xD2,0x06,0x82},
{12,0xD4,0x06,0x83},
{13,0xD2,0x0B,0x82},
{14,0xD4,0x0B,0x83},
{15,0xD2,0x14,0x82},
{16,0xD4,0x14,0x83}
};
/*
const TsDcm_h_DtcGroupType CaDcm_u_DtcTable[DCM_SUPDTC_COUNT]={ const TsDcm_h_DtcGroupType CaDcm_u_DtcTable[DCM_SUPDTC_COUNT]={
{ 0,0xF0,0x06,0x16}, { 0,0xF0,0x06,0x16},
{ 1,0xF0,0x06,0x17}, { 1,0xF0,0x06,0x17},
@ -29,10 +50,10 @@ const TsDcm_h_DtcGroupType CaDcm_u_DtcTable[DCM_SUPDTC_COUNT]={
{12,0x91,0x86,0x14}, {12,0x91,0x86,0x14},
{13,0xC0,0x73,0x00}, {13,0xC0,0x73,0x00},
}; };
*/
DtcStutas_T DtcStutas[DCM_SUPDTC_COUNT]; // DTC 状态数组 DtcStutas_T DtcStutas[DCM_SUPDTC_COUNT]; // DTC 状态数组
static uint16 tDiagStart; //上电复位后网络诊断延迟时间 static uint16 tDiagStart; //上电复位后网络诊断延迟时间
uint16 tDiagStartVolt; // 电源电压异常恢复后诊断延迟时间 uint16 tDiagStartVolt; // 电源电压异常恢复后诊断延迟时间
/********************************************************/ /********************************************************/
@ -501,10 +522,10 @@ static void MotorLockChk(void)
static void CanDTC_CycChk(void) static void CanDTC_CycChk(void)
{ {
PowerVoltageChk(); PowerVoltageChk();
TempMotorFeedbackChk(); //TempMotorFeedbackChk();
ModeMotorFeedbackChk(); //ModeMotorFeedbackChk();
RecMotorFeedbackChk(); //RecMotorFeedbackChk();
EvaSensorChk(); //EvaSensorChk();
} }
extern uint8 GetNormalMsgSts(void); extern uint8 GetNormalMsgSts(void);
@ -522,7 +543,7 @@ void CanDTC_Task(void)
//CanDTC_CompErrChk(); //CanDTC_CompErrChk();
//CanDTC_MotorRunTimeChk(); //CanDTC_MotorRunTimeChk();
MotorLockChk(); //MotorLockChk();
if(DtcTestCycleTim < DTC_TEST_CYCLE_TIM) if(DtcTestCycleTim < DTC_TEST_CYCLE_TIM)
{ {
@ -594,14 +615,14 @@ uint8 MngDcm_ReportNumberOfDTCByStatusMask(void)
LaDcm_u_TempBuffer[3] = ISO_14229_1_DTC_FORMAT; LaDcm_u_TempBuffer[3] = ISO_14229_1_DTC_FORMAT;
LaDcm_u_TempBuffer[4] = 0; LaDcm_u_TempBuffer[4] = 0;
LaDcm_u_TempBuffer[5] = DtcCnt; LaDcm_u_TempBuffer[5] = DtcCnt;
SetCanTp_TxBuffer(6U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/ SetCanTp_TxBuffer(6U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
LeDcm_u_Result = CeDcm_e_ResultPosRsp; LeDcm_u_Result = CeDcm_e_ResultPosRsp;
} }
else else
{ {
/*设置NRC31*/ /*设置NRC31*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/ MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/ SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
LeDcm_u_Result = CeDcm_e_ResultNegRsp; LeDcm_u_Result = CeDcm_e_ResultNegRsp;
} }
return LeDcm_u_Result; return LeDcm_u_Result;
@ -630,17 +651,17 @@ uint8 MngDcm_ReportDTCByStatusMask(void)
LaDcm_u_TempBuffer[DtcReporLength++] = CaDcm_u_DtcTable[DtcIndex].DtcHigh; LaDcm_u_TempBuffer[DtcReporLength++] = CaDcm_u_DtcTable[DtcIndex].DtcHigh;
LaDcm_u_TempBuffer[DtcReporLength++] = CaDcm_u_DtcTable[DtcIndex].DtcMiddle; LaDcm_u_TempBuffer[DtcReporLength++] = CaDcm_u_DtcTable[DtcIndex].DtcMiddle;
LaDcm_u_TempBuffer[DtcReporLength++] = CaDcm_u_DtcTable[DtcIndex].DtcLow; LaDcm_u_TempBuffer[DtcReporLength++] = CaDcm_u_DtcTable[DtcIndex].DtcLow;
LaDcm_u_TempBuffer[DtcReporLength++] = GetDtcStutas(DtcIndex); LaDcm_u_TempBuffer[DtcReporLength++] = GetDtcStutas(DtcIndex) & DTC_STATUS_AVAILABILITY_MASK;
} }
} }
SetCanTp_TxBuffer(DtcReporLength,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/ SetCanTp_TxBuffer(DtcReporLength,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
LeDcm_u_Result = CeDcm_e_ResultPosRsp; LeDcm_u_Result = CeDcm_e_ResultPosRsp;
} }
else else
{ {
/*设置NRC31*/ /*设置NRC31*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/ MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/ SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
LeDcm_u_Result = CeDcm_e_ResultNegRsp; LeDcm_u_Result = CeDcm_e_ResultNegRsp;
} }
return LeDcm_u_Result; return LeDcm_u_Result;
@ -670,14 +691,14 @@ uint8 MngDcm_ReportDTCSnapshotRecordByDTCNumber(void)
DtcReporLength = 6; DtcReporLength = 6;
if(GetDtcSnapshotRecord(DtcIndex,LaDcm_u_TempBuffer+6,&DtcReporLength,DtcSnapshotRecordNum) != DCM_NORESULT) if(GetDtcSnapshotRecord(DtcIndex,LaDcm_u_TempBuffer+6,&DtcReporLength,DtcSnapshotRecordNum) != DCM_NORESULT)
{ {
SetCanTp_TxBuffer(DtcReporLength,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/ SetCanTp_TxBuffer(DtcReporLength,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
LeDcm_u_Result = CeDcm_e_ResultPosRsp; LeDcm_u_Result = CeDcm_e_ResultPosRsp;
} }
else else
{ {
/*设置NRC31*/ /*设置NRC31*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/ MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/ SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
LeDcm_u_Result = CeDcm_e_ResultNegRsp; LeDcm_u_Result = CeDcm_e_ResultNegRsp;
} }
break; break;
@ -685,9 +706,9 @@ uint8 MngDcm_ReportDTCSnapshotRecordByDTCNumber(void)
} }
if((DtcIndex == DCM_SUPDTC_COUNT) && (DtcReporLength == 0)) if((DtcIndex == DCM_SUPDTC_COUNT) && (DtcReporLength == 0))
{ {
/*设置NRC31*/ /*设置NRC31*/
MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/ MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/
SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/ SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/
LeDcm_u_Result = CeDcm_e_ResultNegRsp; LeDcm_u_Result = CeDcm_e_ResultNegRsp;
} }
@ -731,7 +752,7 @@ uint8 MngDcm_ReportDTCExtendedDataRecordByDTCNumber(void)
LaDcm_u_TempBuffer[23] = 0xFF; LaDcm_u_TempBuffer[23] = 0xFF;
LaDcm_u_TempBuffer[24] = 0xFF; LaDcm_u_TempBuffer[24] = 0xFF;
LaDcm_u_TempBuffer[25] = 0xFF; LaDcm_u_TempBuffer[25] = 0xFF;
SetCanTp_TxBuffer(25,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/ SetCanTp_TxBuffer(25,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
LeDcm_u_Result = CeDcm_e_ResultPosRsp; LeDcm_u_Result = CeDcm_e_ResultPosRsp;
break; break;
} }
@ -760,7 +781,7 @@ uint8 MngDcm_ReportSupportedDTC(void)
LaDcm_u_TempBuffer[DtcReporLength++] = CaDcm_u_DtcTable[DtcIndex].DtcLow; LaDcm_u_TempBuffer[DtcReporLength++] = CaDcm_u_DtcTable[DtcIndex].DtcLow;
LaDcm_u_TempBuffer[DtcReporLength++] = DTC_STATUS_AVAILABILITY_MASK; LaDcm_u_TempBuffer[DtcReporLength++] = DTC_STATUS_AVAILABILITY_MASK;
} }
SetCanTp_TxBuffer(DtcReporLength,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/ SetCanTp_TxBuffer(DtcReporLength,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/
LeDcm_u_Result = CeDcm_e_ResultPosRsp; LeDcm_u_Result = CeDcm_e_ResultPosRsp;
return LeDcm_u_Result; return LeDcm_u_Result;
} }

View File

@ -7,12 +7,12 @@
#define DCM_19SUPDTCEXTDATARECORD_COUNT (4U) #define DCM_19SUPDTCEXTDATARECORD_COUNT (4U)
/* 19 06支持的DTCExtDataRecord 参数个数 */ /* 19 06֧<EFBFBD>ֵ<EFBFBD>DTCExtDataRecord <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define DCM_SUPDTC_COUNT ( 14U ) #define DCM_SUPDTC_COUNT ( 17U )
/* 产品支持的DTC个数 */ /* <EFBFBD><EFBFBD>Ʒ֧<EFBFBD>ֵ<EFBFBD>DTC<EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define DTC_TEST_CYCLE_TIM 40U // 40mS一个周期 #define DTC_TEST_CYCLE_TIM 40U // 40mSһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ISO_15031_6_DTC_FORMAT 0U #define ISO_15031_6_DTC_FORMAT 0U
#define ISO_14229_1_DTC_FORMAT 1U #define ISO_14229_1_DTC_FORMAT 1U
@ -21,19 +21,19 @@
#define DTC_STATUS_AVAILABILITY_MASK 0x09U #define DTC_STATUS_AVAILABILITY_MASK 0x09U
typedef uint8 (*ReportDTCExtDataFun)(uint8* LeDemDtcNum,uint8 LeDemParameter,uint8* LeDemDataRecord); typedef uint8 (*ReportDTCExtDataFun)(uint8* LeDemDtcNum,uint8 LeDemParameter,uint8* LeDemDataRecord);
/*19 06 服务支持的 DTCExtDataRecordNumber 列表结构体*/ /*19 06 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>ֵ<EFBFBD> DTCExtDataRecordNumber <20>б<EFBFBD><D0B1><EFBFBD><E1B9B9>*/
typedef struct typedef struct
{ {
uint8 DTCExtDataRecordNumber; /*扩展数据number*/ uint8 DTCExtDataRecordNumber; /*<EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>number*/
ReportDTCExtDataFun Function; /*扩展数据number 对应函数的处理函数*/ ReportDTCExtDataFun Function; /*<EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>number <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
}DTCExtDataRecordType; }DTCExtDataRecordType;
typedef struct typedef struct
{ {
uint8 DtcIndex; uint8 DtcIndex;
uint8 DtcHigh; /*DTC 高字节*/ uint8 DtcHigh; /*DTC <EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>*/
uint8 DtcMiddle; /*DTC 中间字节*/ uint8 DtcMiddle; /*DTC <EFBFBD>м<EFBFBD><EFBFBD>ֽ<EFBFBD>*/
uint8 DtcLow; /*DTC 低字节*/ uint8 DtcLow; /*DTC <EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>*/
}TsDcm_h_DtcGroupType; }TsDcm_h_DtcGroupType;
typedef enum typedef enum
@ -93,6 +93,8 @@ extern DtcStutas_T DtcStutas[DCM_SUPDTC_COUNT];
#define AC_LOW_VOLTAGE 0 #define AC_LOW_VOLTAGE 0
#define AC_OVER_VOLTAGE 1 #define AC_OVER_VOLTAGE 1
#define AC_BusOff 3
#define AC_TEMP_MOTOR_SHORT_CUT_TO_VCC 2 #define AC_TEMP_MOTOR_SHORT_CUT_TO_VCC 2
#define AC_TEMP_MOTOR_SHORT_CUT_TO_GND 3 #define AC_TEMP_MOTOR_SHORT_CUT_TO_GND 3
#define AC_TEMP_MOTOR_LOCK 4 #define AC_TEMP_MOTOR_LOCK 4
@ -104,7 +106,7 @@ extern DtcStutas_T DtcStutas[DCM_SUPDTC_COUNT];
#define AC_REC_MOTOR_LOCK 10 #define AC_REC_MOTOR_LOCK 10
#define AC_EVA_SENSOR_SHORT_CUT_TO_VCC 11 #define AC_EVA_SENSOR_SHORT_CUT_TO_VCC 11
#define AC_EVA_SENSOR_SHORT_CUT_TO_GND 12 #define AC_EVA_SENSOR_SHORT_CUT_TO_GND 12
#define AC_BusOff 13
extern uint8_t BusOffCnt ; extern uint8_t BusOffCnt ;

View File

@ -503,12 +503,13 @@ void GetManufacturingDate(unsigned char* date)
//获取can总线出错状<E99499>? //获取can总线出错状<E99499>?
//返回<E8BF94>?? //返回<E8BF94>??
/******************************/ /******************************/
extern unsigned char ucBusOffModeState;
unsigned char GetCanBusOffErr(void) unsigned char GetCanBusOffErr(void)
{ {
// if(BusOff_flag==0) if(ucBusOffModeState>=8)
// return 0; return 1;
// else else
// return 1; return 0;
} }
/******************************/ /******************************/
//获取BCM节点丢失状<E5A4B1>? //获取BCM节点丢失状<E5A4B1>?

View File

@ -78,7 +78,7 @@ void __near RSCAN_INTCANGRECC_interrupt(void)
R_CAN_ReadRxFIFO(CAN_RXFIFO1, &RxCanMessage); R_CAN_ReadRxFIFO(CAN_RXFIFO1, &RxCanMessage);
if ((RxCanMessage.IDL == CANTP_ADDR_PHY_REQ) || (RxCanMessage.IDL == CANTP_ADDR_FUNC_REQ)) if ((RxCanMessage.IDL == CANTP_ADDR_PHY_REQ) || (RxCanMessage.IDL == CANTP_ADDR_FUNC_REQ))
{ {
if (RxCanMessage.IDL == CANTP_ADDR_FUNC_REQ && RxCanMessage.DB[1] == 0x3E && RxCanMessage.DB[2] == 0x80) if (RxCanMessage.IDL == CANTP_ADDR_FUNC_REQ && RxCanMessage.DB[1] == 0x3E && RxCanMessage.DB[2] == 0x80 && RxCanMessage.DB[0] == 0x02)
resetS3Server(); /*重置S3server计时*/ resetS3Server(); /*重置S3server计时*/
else else
RxIndicationCanIf_Messages(0, RxCanMessage.IDL, RxCanMessage.DLC, RxCanMessage.DB); RxIndicationCanIf_Messages(0, RxCanMessage.IDL, RxCanMessage.DLC, RxCanMessage.DB);

View File

@ -561,6 +561,11 @@ void BusOff_Detect(void)
} }
else else
{ {
if (ucBusOffModeState < 8)
{
ucBusOffModeState++;
}
uiBusOffCnt = SLOW_BUSOFF_THRESHOULD; //soft recover uiBusOffCnt = SLOW_BUSOFF_THRESHOULD; //soft recover
} }
BusOff_Recovery(); BusOff_Recovery();