不用手写UDS代码了!Excel配置一键生成诊断服务
正文
去4S店修车时,师傅用电脑连接你的车,读取故障码、看数据流、刷软件…
这就是UDS诊断。
上篇讲了DBC生成器,今天讲另一个神器:UDS诊断配置生成器。
同样是填Excel表,自动生成全套诊断代码。
项目地址
GitHub:
https://github.com/xiaozhaodebug/STM32_AUTOSAR
UDS生成器位置:
tools/code_generators/uds_generator/├── uds_generator.py # Python生成器├── generate_uds.sh # 一键脚本├── UDS_Config_Template.xlsx # 配置模板└── generated/ # 生成代码示例 ├── UdsConfig_Generated.h ├── UdsConfig_Generated.c └── INTEGRATION.md
支持的UDS服务
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
快速开始
方式一:一键脚本(推荐)
cd STM32_AUTOSAR/tools/code_generators/uds_generator# 第1步:创建示例配置./generate_uds.sh --example# 生成 UDS_Config_Example.xlsx# 第2步:编辑配置表# 用Excel打开 UDS_Config_Example.xlsx 修改配置# 第3步:生成代码./generate_uds.sh UDS_Config_Example.xlsx# 第4步:集成到工程cp generated/* ../../../AUTOSAR/UdsConfig/
生成的文件:
-
UdsConfig_Generated.h – 头文件(宏定义、函数声明) -
UdsConfig_Generated.c – 实现文件(数据表、函数实现) -
INTEGRATION.md – 集成指南
方式二:手动分步
Step 1:创建配置模板
cd STM32_AUTOSAR/tools/code_generators/uds_generatorpython3 uds_generator.py --example
Step 2:编辑Excel配置
打开 UDS_Config_Example.xlsx,包含6个工作表:
1. SessionConfig – 会话配置(0x10服务)
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
参数说明:
-
P2_max:服务器响应超时时间(典型50ms) -
P2*_max:服务器扩展响应超时(典型5000ms) -
S3_client:客户端保持会话间隔(典型2000ms) -
S3_server:服务器会话超时(典型5000ms)
2. DIDConfig – 数据标识符(0x22/0x2E服务)
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
参数说明:
-
ReadOnly:Yes=只读,No=可读写 -
SecurityLevel:所需安全级别(0=不需要) -
SessionMask:支持的会话(位掩码,0x07=支持所有会话) -
DataType:ASCII/HEX/UINT8/UINT16/UINT32
3. SecurityConfig – 安全访问(0x27服务)
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
参数说明:
-
MaxAttempts:最大尝试次数(超过后锁定) -
DelayTime:锁定后延时(ms) -
Algorithm:密钥算法(XOR_Seed/AES128)
4. RoutineConfig – 例行程序(0x31服务)
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5. DTCConfig – 故障码(0x19服务)
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6. Communication – 通信配置
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Step 3:生成代码
python3 uds_generator.py UDS_Config_Example.xlsx generated/
输出:
[INFO] 生成 UdsConfig_Generated.h[INFO] 生成 UdsConfig_Generated.c[INFO] 生成 INTEGRATION.md[INFO] 完成!请查看 generated/ 目录
Step 4:集成到项目
将生成的代码复制到项目:
cp generated/* ../../../AUTOSAR/UdsConfig/
在 AUTOSAR_Cfg.h 中包含:
#include"UdsConfig_Generated.h"/* DCM配置使用生成的表 */#define DCM_NUM_DIDS (sizeof(Uds_DidTable)/sizeof(Uds_DidTable[0]))#define DCM_NUM_DTCS (sizeof(Uds_DtcTable)/sizeof(Uds_DtcTable[0]))
生成的代码结构
UdsConfig_Generated.h
/* Session Configuration */#define UDS_SESSION_DEFAULTSESSION 0x01U#define UDS_SESSION_PROGRAMMINGSESSION 0x02U#define UDS_SESSION_EXTENDEDSESSION 0x03U/* DID Definitions */#define UDS_DID_VIN 0xF190U /* 车辆识别号 */#define UDS_DID_ECU_NAME 0xF197U /* ECU名称 */#define UDS_DID_SYSTEMSTATE 0xF100U /* 系统状态 *//* Security Levels */#define UDS_SECURITY_LEVEL1 0x01U#define UDS_SECURITY_LEVEL2 0x02U/* Communication */#define UDS_CAN_REQUEST_FUNC_ID 0x007DFU#define UDS_CAN_REQUEST_PHYS_ID 0x00735U#define UDS_CAN_RESPONSE_ID 0x0073DU/* Function Declarations */voidUds_Init(void);voidUds_Cyclic(void);voidUds_RxIndication(constuint8_t* data, uint16_t len);
UdsConfig_Generated.c
/* DID Data Storage */static uint8 Uds_DidData_VIN[17] = (uint8*)"123456789ABCDEFGH";static uint8 Uds_DidData_ECU_Name[16] = (uint8*)"STM32F407_CAN ";static uint8 Uds_DidData_SystemState[4] = {0x00, 0x00, 0x00, 0x00};/* DID Configuration Table */staticconst Uds_DidConfigType Uds_DidTable[] = { { /* 0xF190 - 车辆识别号 */ .did = 0xF190, .dataPtr = Uds_DidData_VIN, .dataLen = 17, .readOnly = True, .securityLevel = 0x01, .sessionMask = 0x07 }, { /* 0xF197 - ECU名称 */ .did = 0xF197, .dataPtr = Uds_DidData_ECU_Name, .dataLen = 16, .readOnly = True, .securityLevel = 0x01, .sessionMask = 0x07 },/* ... more DIDs ... */};/* Session Configuration Table */staticconst Uds_SessionConfigType Uds_SessionTable[] = { { .sessionType = 0x01, .p2Max = 50, .p2StarMax = 5000, .s3Server = 5000, .supportedServices = {0x10, 0x11, 0x19, 0x22, 0x3E} },/* ... more sessions ... */};
实战测试
使用项目自带的诊断测试工具
cd STM32_AUTOSAR/tools/diagnostic_tools# 运行诊断测试python3 diag_test.py can0
测试内容:
-
0x10 – DiagnosticSessionControl(会话控制) -
0x11 – ECUReset(ECU复位) -
0x22 – ReadDataByIdentifier(读取DID) -
VIN (0xF190) -
ECU Name (0xF197) -
System State (0xF100) -
0x3E – TesterPresent(诊断仪在线) -
0x27 – SecurityAccess(安全访问)
输出示例:
=== DBC Matrix Diagnostic Test ===RX:0x7DF (Functional), 0x735 (Physical)TX:0x73D (Response)[TEST 1] 0x10 - DiagnosticSessionControlSending:1001 (Default Session)Response:500100321388 [OK][TEST 2] 0x22 - ReadDataByIdentifierSending:22 F1 90 (Read VIN)Response:62 F1 90313233... [OK]
手动用PCAN测试
# 1. 进入扩展会话# 发送: 735#0210030000000000# 响应: 73D#065003003201F400# 2. 读取VIN# 发送: 735#0322F19000000000# 响应: 73D#106214F1904C5356 (第一帧)# 发送: 735#3000000000000000 (流控帧)# 响应: 73D#214E484B31323334 (连续帧)
添加自定义DID实战
场景:添加车速DID(0x0100)
第1步:修改Excel
在DIDConfig工作表添加一行:
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
第2步:重新生成代码
./generate_uds.sh UDS_Config_Example.xlsx
第3步:实现业务逻辑
在应用层添加车速更新:
/* 在main.c或应用层文件中 */#include"UdsConfig_Generated.h"voidUpdateVehicleSpeed(void){extern uint8 Uds_DidData_VehicleSpeed[2];uint16_t speed = GetActualSpeed(); /* 从传感器读取 */ Uds_DidData_VehicleSpeed[0] = (speed >> 8) & 0xFF; Uds_DidData_VehicleSpeed[1] = speed & 0xFF;}
第4步:测试
# 读取车速# 发送: 735#0322010000000000# 响应: 73D#04620100XXXX0000 (XXXX为车速值)
常见问题
Q1: ImportError: No module named ‘openpyxl’
pip3 install openpyxl
Q2: 生成的代码编译错误
检查Excel格式:
-
十六进制值使用0x前缀(如0xF190) -
布尔值使用Yes/No -
数值列不要包含文本
Q3: DID读取返回否定响应
检查:
-
SecurityLevel是否匹配当前安全级别 -
SessionMask是否支持当前会话 -
DataLength是否与数据匹配
Q4: 安全访问解锁失败
检查:
-
是否正确实现了密钥算法 -
种子是否正确生成 -
是否在延时时间内完成解锁
学习价值
通过这个工具,你能学到:
-
UDS协议基础
-
诊断服务的请求/响应格式 -
会话管理和安全访问 -
DID、RID、DTC的概念 -
配置驱动思想
-
Excel配置到自动生成代码 -
改配置不用改代码 -
便于维护和移植 -
诊断测试方法
-
使用Python脚本自动化测试 -
使用PCAN手动测试 -
诊断故障排查
资源领取
扫码关注,回复【AUTOSAR】领取:
-
UDS配置Excel模板(带完整示例) -
Python诊断测试脚本 -
UDS协议速查表

关于我
我是小昭debug,在这里,我会持续分享一些嵌入式技术、职业干货,以及关于个人成长的思考,相信我这里的输出绝对都是实在的干货。
如果你平时也遇到过被卡住,或者想和同行一起抱团取暖,欢迎关注我。
后台发送 “2”,即可获取《车载嵌入式软件入门资料》。
添加微信并备注”进群”,我邀你加入高质量的学习交流群,大家一起成长!
关键词标签:UDS 诊断 AUTOSAR DCM DID 汽车电子 代码生成 配置驱动
夜雨聆风