# UDS14229 **Repository Path**: syfchao/UDS14229 ## Basic Information - **Project Name**: UDS14229 - **Description**: No description available - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 1 - **Created**: 2021-03-15 - **Last Updated**: 2025-08-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README **ISO-14229背景简介** ISO-14229它就是一个用于汽车行业诊断通信的需求规范,它只规定了与诊断相关的服务需求 诊断最先用于汽车尾气排放的监测,后来发展为包括对汽车行驶故障的监测,而ISO-14229只定义非排放相关的诊断需求。 用途: ECU开发时要用到它来构建bootloader,上传和下载数据; 测试时要用它来读写RAM、ROM,控制外设; 在产线上,要用它来校准机械件,刷新软件; 在行驶过程中,要用它来监测各种故障,并记下故障码; 在4S店,技师需要用它来读出故障码,判断故障发生点还可以用来升级ECU程序。 车联网中远程诊断,其中一些就是通过OBD口联网,读取车内故障码,车辆信息,或者油量、速度等等车相关的参数。 那么如何用软件实现目统一诊断协议14229 1、基本逻辑实现 2、添加10服务 19服务 3、仅实现协议层逻辑 CAN驱动层调用请自行完成 4、调用接口以实现, 但仍需优化 5、接口说明 (UDS14229.h) /********用户设置CAN接受信息*******/ /********接收CAN总线上的数据*******/ char getDID(); char* getData(); char setDID(char id); char* setData(char* data); /********设置服务运行属性**************/ typedef struct canUDSMessage_t{ char did; //服务类型 char data[8]; //服务数据 }canUDSMessage; typedef struct ServiceStartUpState{ unsigned int timeBegin; //服务开始时间 unsigned int timeEnd; //服务结束时间 unsigned int outTime; //超时时间 bool startUpFlag; //服务启动标志位 bool outTimeFlag; //超时标志位 canUDSMessage mcanSendUDSMessage; //消息体 }ServiceStartUpState_t; void setServiceInf(string className,ServiceStartUpState_t* inf); ServiceStartUpState_t* getServiceInf(string className); /********向CAN总线发送服务请求数据**************/ /********CAN驱动发送需要实现**************/ bool UDS14229Client10(void); bool UDS14229Client19(char* data); /********对接收到CAN总线应答信息的处理**************/ /********未完成解析 后续完善**************/ bool UDS14229Service10(char* data); bool UDS14229Service19(char* data); 运行示例: main.cpp 欢迎各位提出问题 修改 维护 :pray: