功能
Black Magic Diag 是面向 CAN 和 DoIP 的 UDS 诊断工程工作台。它不是通用 OBD 扫描器:你定义项目需要的 ECU、DID、例程和故障格式,然后直接使用它们。项目存放在由你掌控的本地[工作区](/zh/features/workspace)中。
ECU 参数
- 使用类型化视图读写数据标识符(DID):unsigned、signed、ASCII、hex、enum 和 combined 字段。
- 从打包数据中提取位或字节范围;原始字节保持可见。
- 读取整个 ECU、一组参数或单个值。
- 用 Incubator 发现未知标识符:加载 DID 列表、扫描范围并检查响应。

诊断与 DTC
- 读取活动和已存储故障码,清除故障码并读取支持的故障码列表。
- 查看每个故障码附带的快照(冻结帧)数据。
- 支持 J2012、ISO 14229-1 和 J1939-73 格式。
- 从 JSON 或 TXT 加载全局或项目专用 DTC 数据库。
- 用颜色区分状态:Active、Stored、Not Active。

实时测量
- 轮询测量值,周期从 100 ms 到 10 s。
- 同时绘制多个信号:独立曲线或归一化组合图。
- 保留可配置的历史缓冲区,并记录到 CSV。
- 测量值与其他操作使用同一 UDS 会话读取。

UDS 工具集
- Tester present 0x3E,周期可配置。
- Session control 0x10、ECU reset 0x11、security access 0x27。
- Routine control 0x31 和 IO control 0x2F。
- 直接内存读取 0x23 和写入 0x3D,支持地址、块和大小字段。
- 通过按项目定义的外部 Seed2Key DLL 进行安全访问。

CAN 与 DoIP
- 通过 J2534 pass-through 适配器使用 CAN,支持 11 位和 29 位标识符。
- 总线扫描:广播请求或连续 ID 范围,然后把找到的 ECU 加入项目。
- 通过以太网使用 DoIP(ISO 13400):本地接口、目标地址、tester 地址和发现。
- 每个 ECU 在项目内选择自己的传输类型。

脚本与自动化
- 用于参数、例程、IO 控制、原始 UDS 请求、内存访问和固件辅助函数的 Lua API。
- 用 JSON 定义的操作按钮:发送 DID 写入或运行 Lua 脚本。
- MCP 服务器和聊天代理,具有 read、write 和 live-write 权限范围。
- AI 助手可以调用与脚本相同的工具;每次调用都会显示在日志中。

报告与导出
- 为当前项目生成 HTML、Markdown 或 PDF 报告。
- 将 ECU 表格导出为 CSV,保存数据转储并稍后重新加载。
- 会话日志带时间戳写入工作区。
固件
- 加载 Intel HEX、Motorola S-record 或原始二进制映像。
- 检查大小、CRC-32 和地址块。
- 通过车辆专用窗口或 Lua 固件 API 进行刷写。
项目模型
- 工作区是一个包含
data/、logs/和projects/的目录。 - 项目(
.bmprj)列出 ECU;每个 ECU 保存为独立的.bmecu文件。 - 数据转储(
.bmdump)和 DID 列表(.bmdid)可在不同机器之间移植。
底层实现
给想了解 UI 之下发生什么的工程师:
| 层 | 职责 |
|---|---|
| Win32 + DirectX 10 + Dear ImGui | 窗口、渲染、可停靠面板 |
BmApp | 工作区路径、全局状态、窗口注册表 |
Project | 加载和保存 .bmprj 与 .bmecu 文件 |
Ecu + Task | 每个 ECU 一个任务槽,在工作线程上执行 |
View | 解释 DID 字节:uint、int、ascii、hex、enum、combined |
UdsTransport | UdsCan(J2534)或 UdsDoip(TCP/TLS) |
- UI 运行在主线程上;
pollEcuTasks()每帧启动待处理的工作,结果通过 UI 队列返回。 - 关闭项目会先中止 ECU 任务,然后等待其结束。一个 ECU 永远不会同时运行两个任务。
- 测量为每条曲线保留环形缓冲区;
Combined对每条曲线单独归一化,Separate保留实际单位。短时链路错误会重试,长时间连续错误会停止测量。 - DID 写入、例程启动、IO 控制、内存写入和原始 UDS 都经过同一个确认点。AI 和 MCP 使用同一条命令总线,并受
read/write/admin权限范围约束。 - Lua 在沙箱中运行,没有任意文件、进程或操作系统访问权限。
- 构建:
msbuild BlackMagic.slnx /p:Configuration=Release /p:Platform=x86。测试:ctest --test-dir build_tests -C Debug --output-on-failure。UI 测试:BlackMagic.exe --ui-test。
