第 01 节开始前:准备 ECU、A2L 和 CAN 连接
XCP 用来读取 ECU 内部变量,也可以修改允许标定的参数。A2L 文件告诉软件这些变量的名称、地址、类型、换算和访问权限;加载 A2L 后,还要连接对应 ECU,才能获得实时值。
本教程使用 BUSMASTER 3.2.2.50(Build 558)简体中文版,演示 XCP on Classic CAN、单 ECU 会话。先完成两个变量的读取和连续采集,再按需练习一个标量参数的写入与回读。
| 需要准备 | 如何选择 |
|---|---|
| BUSMASTER 与分析仪 | 安装 BUSMASTER 及对应分析仪驱动,确认所选 CAN 通道空闲。首次使用可先完成基础收发教程中的设备配置。 |
| 支持 XCP 的 ECU | 使用 ECU 供应方提供的匹配 A2L、波特率、请求/响应 ID、访问权限和事件通道。文件里的地址必须对应当前 ECU 软件。 |
| 独立的教学环境(可选) | 没有 ECU 时,可使用随附的 XCP ECU Simulator。模拟器与主站各使用一台分析仪,选择实际接线的 CAN 通道,并通过 CANH、CANL 和参考地组成同一条总线。 |
| 总线设置 | 本例两端均设置为 500 kbit/s Classic CAN,并各配置 120 Ω 终端。接入已有网络时,按该网络的拓扑配置终端。 |
启动教学模拟器
- 下载并完整解压模拟器 ZIP,保留启动脚本、EXE、BMAPI.dll 和 test_xcp.a2l 在同一目录。
- 在解压目录打开 PowerShell,先列出通道:
.\start_xcp_simulator.cmd -ListChannels - 复制模拟器侧设备的 UID,替换下面引号内的占位符,再启动所选通道。
-Channel 0表示物理 CH1。.\start_xcp_simulator.cmd -Device '<模拟器设备UID>' -Channel 0 - 看到
status=ready后,核对其中的设备和通道,并保留窗口运行。截图中的主站使用另一台设备的物理 CH3,映射为逻辑 CAN 1;模拟器使用物理 CH1。使用其他通道时,让接线、启动参数与软件配置对应。
本例使用标准帧,主站请求 ID 为 0x555,从站响应/DTO ID 为 0x556,DAQ 事件通道为 3,默认周期为 10 ms。结束练习后,在模拟器窗口按 Ctrl+C,等待正常退出。
模拟器文件信息
运行程序版本:Win32 Universal 20260903。
SHA-256:bc491b98154c2dc5528c9f8bfefdf03f5165da3bcb66a4288dba6bf29fdd6b49
第 02 节配置主 CAN,并打开 XCP 窗口
- 使用新的教学工程,或先另存现有工程。打开 CAN 选项卡,选择 BUSMUST CAN 驱动,在硬件配置中选中连接 ECU 的分析仪与物理通道。
- 将该通道配置为 Classic CAN、500 kbit/s(教学模拟器参数)。真实 ECU 则使用它要求的波特率和接线。暂时保持主 CAN 断开,便于完成曲线配置。
- 在 CAN → 高级协议 → XCP 打开主窗口,再单击顶部的设置。
请区分物理通道与软件逻辑通道:截图中的“CAN 1”映射到分析仪物理 CH3。XCP 设置中应选择这个逻辑 CAN 通道,并核对旁边显示的实际设备和 500 kbit/s;XCP 会复用 BUSMASTER 的主 CAN 连接。
第一次进入主窗口时,左侧是 A2L 浏览器,右侧是将要读取的工作集。底部依次显示操作提示、CAN、XCP ECU、测量和 A2L 状态。CAN 已连接、XCP ECU 已连接、测量运行中是三个不同状态。
第 03 节导入 A2L,并核对连接与采集参数
- 在 XCP 设置 → A2L 区域单击浏览…,选择模拟器包里的
test_xcp.a2l,等待加载完成。 - 确认 MODULE = TEST_ECU。如果真实 A2L 有多个 MODULE 或 XCP 传输层实例,必须选择与当前 ECU 接口对应的项。
- 在“连接”区域选择主站逻辑 CAN 通道,核对下表参数。本例 A2L 未提供 XCP_ON_CAN,界面显示“没有 XCP_ON_CAN;保留当前 CAN ID”,因此需要手动填写 ID。
- 在“采集”区域选择动态 DAQ,填入默认事件通道 3,再单击确定返回主窗口。
| 设置项 | 本教学示例 | 换成真实 ECU 时 |
|---|---|---|
| 主站 CTO CAN ID | 0x555 | ECU 指定的主站命令请求 ID |
| 从站响应/DTO ID | 0x556 | ECU 指定的响应和测量数据 ID |
| 29 位扩展 ID | 不勾选;标准 11 位 ID | 与 ECU 定义一致 |
| 超时 | 500 ms | 使用 ECU 允许的通信超时 |
| 采集模式 / 事件 | 动态 DAQ / 3 | 核对设备支持的采集模式和事件通道;需要先确认基本读取能力时,选择轮询。 |
| 轮询间隔 | 100 ms;动态 DAQ 时该项禁用 | 轮询模式使用此间隔;DAQ 的采样周期由 ECU 事件决定。 |
第 04 节添加工作集,并提前配置物理值曲线
- 在左侧搜索
EngineSpeed,选中对应的 MEASUREMENT 对象,单击添加 >>。再搜索SpeedLimit,添加对应的 CHARACTERISTIC 对象。 - 确认右侧工作集恰好包含这两个对象,且“采集”列均已勾选。对象类型、单位和访问权限都由 A2L 定义。
| 对象 | 用途 | 本示例含义 |
|---|---|---|
| EngineSpeed | 测量量,R | 转速物理值,单位 rpm,会随模拟器运行变化。 |
| SpeedLimit | 可写标定量,R/W | 发动机转速限值,单位 rpm;用于练习可写标量参数的写入与回读。 |
主 CAN 断开时可以修改信号图配置。先添加物理值元素并设置缓冲区,再连接 ECU:
- 单击 XCP 窗口右上角的 × 返回主界面;工作集保留在当前工程中。
- 在 CAN → 信号图 → 配置 打开“配置信号曲线窗口”,单击配置信号…。
- 在“选择元素”左侧展开 XCP → TEST_ECU → EngineSpeed → 物理值,选中“物理值”后单击添加。同样添加 SpeedLimit → 物理值。
- 核对右侧元素列表包含两个变量,单击确定返回曲线配置,再单击确定返回主界面。
使用“物理值”可以直接观察 A2L 换算后的数值。本例采用的换算为物理值 = 原始值 + 5;例如 SpeedLimit 原始值 300 对应界面中的 305。
随后打开 CAN 信号图窗口,单击图形区域的配置,设置缓冲区条数。默认容量为 5000 点,可设置为 1000~10000 点;同一总线信号图中的所有元素合计占用该容量。缓冲区满后,较早样本会被后续数据替换。
按变量数量、采样频率和目标时长选择容量。本例两个变量各约每 10 ms 更新一次,合计每秒约 200 点,默认容量约保留最近 25 秒。完成配置后返回主界面,继续连接。
第 05 节先连接,再完成一次读取
- 确认 ECU 或教学模拟器已经就绪,在 BUSMASTER 主界面连接 CAN。
- 重新打开 XCP 主窗口,核对底部 CAN 状态为已连接,再单击顶部连接。
- 等待 XCP ECU 状态变为已连接。选中右侧 EngineSpeed 行,单击立即读取;再选中 SpeedLimit 行读取一次。也可用 Ctrl 或 Shift 选中多个需要读取的行。
- 检查“值”“单位”“质量”和“最近结果”。本例应显示有效数值、rpm、正常和读取成功。SpeedLimit 初值为 305;EngineSpeed 随读取时刻变化。
第 06 节启动连续采集,并观察曲线
- 确认右侧两个变量的“采集”均已勾选,单击启动采集。按钮随即变为“停止采集”,底部测量状态应为 DAQ 运行中。
- 观察 EngineSpeed 的值继续更新,SpeedLimit 保持参考值。运行时添加、移除、移动和修改采集选择被禁用;需要修改工作集时先停止采集。
- 隐藏 XCP 窗口,打开 CAN → 信号图,确认元素列表包含两个 XCP 变量,并有新的曲线样本。
- 数值超出默认 0~100 时,选择 Y 或 XY 后单击自动范围。需要继续跟踪最新时间,单击跟随最新。自动范围会暂停时间轴跟随;再次跟随会转到最新时间。
DAQ 按设备事件采样,界面按显示更新周期刷新。通过底部运行状态、曲线样本时间和导出数据查看采集结果;恒定变量显示为水平线。
按需读取、轮询、动态 DAQ、自动,该怎样选?
| 模式 | 适合的起点 | 设置与操作 |
|---|---|---|
| 仅按需读取 | 确认连接和少量对象 | 单击“立即读取”取得一次值。 |
| 轮询 | 不确定 ECU 的 DAQ 能力时 | 按设定间隔读取勾选对象。负载过高时增大间隔或减少对象。 |
| 动态 DAQ | 已确认支持动态 DAQ 的 ECU;本教学模拟器 | 由 ECU 事件驱动,事件通道必须正确。本例使用事件 3,周期由模拟器设为 10 ms。 |
| 自动 | 允许软件优先尝试 DAQ | 软件优先配置 DAQ;遇到能力不支持或 ECU 拒绝等情况时,显示原因并改用轮询。启动后查看底部测量状态,确认实际模式。通信超时按第 9 节恢复会话。 |
本例选择动态 DAQ,事件通道为 3,采样周期为 10 ms。
第 07 节可选:修改一个标定量,并读回确认
测量练习结束后可直接进入第 8 节。练习标定前,先记录目标参数原值,并核对其可写权限、取值范围和设备状态。本例使用 SpeedLimit。
- 回到 XCP 主窗口,先单击停止采集,保持 XCP ECU 连接。
- 选中 SpeedLimit,立即读取并记录原值 305。双击该行的值单元格,或选中该行按 F2。
- 输入物理值 350,按 Enter。该操作会立即写入 ECU,并自动回读校验。
- 确认值为 350、质量为正常、最近结果为写入校验成功。再按相同方法写回 305,确认恢复成功后继续。
写入超时、结果不明确时,查看主窗口下方的“日志 / 诊断”区域并恢复通信;随后读取目标参数的当前值,再决定是否重新写入。
第 08 节结束采集,导出数据并保存工程
CSV 保存样本,CFX 保存配置。分别保存这两类文件。信号图的导出按钮在主 CAN 断开后可用,按以下顺序完成:
- 在 XCP 主窗口停止采集;如做过标定,先确认已恢复需要保留的值。
- 单击 XCP 的断开,再回到主界面断开主 CAN。在重新连接前完成导出;主 CAN 新连接会清空信号图缓冲区。
- 打开已有的 CAN 信号图,单击底部导出。在“导出”窗口的 CSV → 文件 中填写完整目标路径,或通过“…”选择路径,再单击 CSV 区域的导出。
- 打开生成的 CSV,查看目标变量名、时间和数值列。Time(in mSec) 列使用毫秒,图中横轴使用秒;例如,CSV 中的
15306.7 ms对应图中的15.3067 s。 - 关闭导出窗口,使用主界面的文件 → 保存 / 另存为保存
.cfx。它保留 XCP 参数、A2L 引用、工作集、采集选择和曲线配置;A2L 文件仍需保留在可访问的位置。 - 关闭 BUSMASTER;若使用教学模拟器,也正常停止模拟器。
下次加载 CFX 后,核对 A2L 路径和硬件映射,再建立 CAN、XCP 连接并读取或采集当前值。历史样本通过另存的 CSV 查阅。
第 09 节遇到问题时,从哪个状态查起?
| 现象 | 先确认 | 下一步 |
|---|---|---|
| A2L 加载了,但没有实时值 | CAN、XCP ECU 是否分别已连接;是否选中行执行立即读取 | 建立 CAN 和 XCP ECU 连接后,先完成一次立即读取,再启动连续采集。 |
| 连接 XCP 超时 | ECU / 模拟器是否就绪,实际接线、500 kbit/s、标准帧、0x555 / 0x556 是否一致 | 核对两端通道与终端,确认它们不是同一物理通道且没有被其他程序占用。真实 ECU 使用自己的参数。 |
| 对象显示不支持或无地址 | 对象的属性、类型、换算、地址及当前 MODULE | 在对象属性中核对地址、类型、换算和 MODULE。MissingAddress 缺少 ECU 地址;首次练习选择 EngineSpeed 和 SpeedLimit。 |
| 动态 DAQ 启动失败 | ECU 是否支持动态 DAQ,事件通道是否正确 | 查看主窗口下方的“日志 / 诊断”。模拟器使用事件 3;根据 ECU 的事件定义修正配置,或切换轮询确认基本读取是否正常。 |
| 值有更新,曲线却看不到 | 是否已加入 XCP 物理值元素、是否有采样、坐标范围是否包含数据 | 先自动范围;运行时需要追踪最新时间再点跟随最新,停止后查看历史区间。 |
| 停止后值显示已过期 | 测量是否已停止或连接已断开 | 这是缓存时效提示;需要新值时重新连接并读取或采集。 |
| 导出或配置按钮灰色 | 主 CAN 是否仍在连接 | 先停止采集、断开 XCP,再断开主 CAN,保留当前缓冲后导出。 |
| 通信超时后提示不同步 | 当前诊断日志和未确认命令 | 断开 XCP,再断开并重连主 CAN,重新建立 XCP 会话。对未确认的标定写入,先查实际值。 |
| 修改 CAN 发送任务后 XCP 超时 | 是否在 XCP 采集或等待响应期间新增、删除或修改了 CAN 发送任务 | 调整 CAN 发送任务前,先停止采集并断开 XCP;完成修改后重新连接 XCP。已提示通信不同步时,断开并重连主 CAN,再建立 XCP 会话。 |
完成本教程后,应能独立确认四件事:连接到了正确 ECU;读到了带正确单位的当前值;连续采集与曲线对应;CSV 与 CFX 分别保存了数据和配置。