Skip to content

功能 ​

Black Magic Diag 是面向 CAN 和 DoIP 的 UDS 诊断工程工作台。它不是通用 OBD 扫描器:你定义项目需要的 ECU、DID、例程和故障格式,然后直接使用它们。项目存放在由你掌控的本地[工作区](/zh/features/workspace)中。

ECU 参数 ​

  • 使用类型化视图读写数据标识符(DID):unsigned、signed、ASCII、hex、enum 和 combined 字段。
  • 从打包数据中提取位或字节范围;原始字节保持可见。
  • 读取整个 ECU、一组参数或单个值。
  • 用 Incubator 发现未知标识符:加载 DID 列表、扫描范围并检查响应。
带类型化视图的参数编辑器

进一步了解 DID 参数 →

诊断与 DTC ​

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

进一步了解诊断 →

实时测量 ​

  • 轮询测量值,周期从 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 进行安全访问。
UDS 工具面板

进一步了解 UDS 工具集 →

CAN 与 DoIP ​

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

进一步了解传输方式 →

脚本与自动化 ​

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

进一步了解脚本与自动化 →

报告与导出 ​

  • 为当前项目生成 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
UdsTransportUdsCan(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。

免费核心。本地工作区。无需云端。