BUSMUST · 使用教程

BUSMASTER E2E 发送保护

从第一条保护报文到信号联动、工程保存和问题日志。

中文界面 · 核对版本 3.2.2.51 / Build 571 · 2026-11-11

点击截图可直接查看内嵌原图,支持适应窗口、原始尺寸和下载;宽表格与功能区截图可横向滚动。

BUSMASTER E2E 发送保护使用教程

适用本文核对版本 BUSMASTER 3.2.2.51(Build 571),截图使用中文界面。其他版本请先确认 CAN 功能区存在 E2E 入口,发送列表存在 动态报文 列。

E2E(End-to-End,端到端)保护在业务数据中加入计数器、CRC 等保护信息,供接收方按约定检查数据。BUSMASTER 可以在原 CAN 发送窗口中逐帧计算这些字段,保留原有的手动发送、周期和发送次数操作。

本教程先用 AUTOSAR P01 / BOTH 发出四条可核对的报文,再介绍其他内置算法和工程配置。无需编写节点仿真程序,也无需为内置算法安装外部示例 DLL。

学习顺序

篇目 完成后你能做什么
01|发送第一条 E2E 报文 找到入口,配置 P01,并在接收端核对四帧计数器与完整载荷。
02|选择算法与填写参数 区分五种内置 profile,正确填写 DataID、首帧计数、DataID 列表和头部位置。
03|DBC 与保护信号联动 从 DBC 选择计数器、校验信号,核对派生位置及业务数据。
04|算法管理与自定义 DLL 使用随软件预置的 DLL 示例、编译配套源码、配置布局及转换位,并管理独立报文副本。
05|周期发送、复位与保存工程 设置有限周期,判断状态何时继续或重建,并保存、迁移 CFX。
06|接收核对、日志与排障 区分发送和接收证据,找到诊断日志并整理问题资料。

配套资料

请从 BUSMUST 下载中心 获取适用版本。首次配置分析仪可先阅读 基础收发教程。

使用范围

当前功能提供 CAN / CAN FD 发送侧 Protect,支持 P01、P02、P04、P05、P06。它不会仅凭收到一条 CAN 报文就自动完成 AUTOSAR 接收 Check 或接收状态机判定。接入真实 ECU 时,算法、参数、字段位置及长度必须与对端约定一致。

本教程示例用于理解操作;实际项目的 CAN ID、DataID、周期、通道及终端配置由项目通信定义决定。

最近核对:2026 年 11 月 11 日。

01|发送第一条 E2E 报文

本篇使用 AUTOSAR P01 / BOTH。先保持业务数据不变,观察软件写入的计数器和 CRC;完成后应能在接收端核对四条完整载荷。

1. 准备软件与 CAN 连接

需要准备 本例设置与核对方法
BUSMASTER 本文核对版本为 3.2.2.51(Build 571),中文界面。
发送接口 在 CAN → 驱动选择、通道配置 中选择实际接线的 CAN 通道。逻辑通道 1 对应哪个物理口,以这里的映射为准。
接收端 另一条已接线的 CAN 接口,或按相同 E2E 参数接收的设备,用于核对实际 Rx。
总线 本例为普通 CAN、500 kbit/s;两端 CAN_H、CAN_L 和参考地按接口要求连接,终端按实际总线拓扑配置。

先保持 CAN 断开,完成下面的发送配置。首次练习不需要 DBC,也不需要外部 DLL。

本文实机示例使用 X1 PRO 的 CH1 发送、另一台 X1 的 CH1 接收,两端采用正常模式、500 kbit/s,各启用一个 120 Ω 终端。逻辑发送通道为 1;CAN FD 数据速率预设为 2 Mbit/s,但本篇普通 CAN 数据帧不使用该速率。你的设备型号可以不同,接线、映射和终端须按实际网络核对。

2. 找到两个不同用途的入口

CAN 功能区:数据库旁是 E2E,发送窗口位于仿真窗口组

图 1: CAN 保持断开,左侧按钮显示“连接”;尚未配置驱动或通道时该按钮为灰色。在 CAN 功能区打开 发送窗口。数据库右侧的 E2E 按钮用于管理算法候选项;给报文选择算法、填写参数和发送,都在原发送窗口中完成。

3. 新建一条普通 CAN 报文

在 配置发送报文 - CAN → 发送帧列表 中,双击 [双击添加报文],按普通报文方式填写:

项目 本例值
帧 ID 0x2A0,11 位标准 ID
通道 实际配置的发送通道;本例为逻辑通道 1
数据长度 8 字节
报文类型 Std,普通 CAN 数据帧
RTR 不勾选
发送次数 1
重复周期前的复选框 不勾选,先练习手动单次发送
数据字节 00 00 00 00 00 00 00 00

若已加载第 03 篇的教学 DBC,这条报文可显示为 E2E_P01_Message;未加载时可以显示原始 ID。两者使用同一个 0x2A0。

4. 在“动态报文”中选择算法

编辑这条报文的 动态报文 单元格,在下拉菜单下方选择 AUTOSAR P01 / BOTH。

动态报文下拉:不处理、原花样和 E2E 算法使用横线分隔

图 2: 横线用于分组。每条报文一次选择一种处理方式;选择 E2E 后,不会同时执行原来的 ID/数据花样。

选中该发送行,在下方打开 E2E 页签。默认宽度下,信号详情 与 E2E 共用页签区域;窗口足够宽时会并排显示,功能和参数相同。

P01 发送配置:DataID、首帧计数、模式和两个保护字段

图 3: P01 示例。DataID 为 0x0123,首帧计数为 0,模式为 BOTH;计数器位于起始位 8、宽 4 位,校验字段位于起始位 0、宽 8 位,两者均为 Intel。

填写并逐项核对:

E2E 参数 本例值
DataID 0x0123,十六进制
首帧计数 0
DataID 模式 BOTH
计数器来源 手工;起始 8、位 4、字节序 Intel
校验字段来源 手工;起始 0、位 8、字节序 Intel

输入后按 Tab、下拉选项确认后,软件会检查并保存参数,不需要再点击应用按钮。提示无效时先查看恢复后的值,按提示修正 DataID 范围、字段位置或报文长度,再按 Tab。两个字段都要移动时,逐项填写,全部完成后再切行或发送。

5. 连续手动发送四次

  1. 回到 CAN 功能区,点击 连接,同时让接收端进入接收状态。
  2. 返回发送窗口,选中 0x2A0,确认重复周期未启用。
  3. 点击一次 发送报文,在接收端找到对应 ID、通道、帧类型和 8 字节载荷。
  4. 保持连接和配置不变,再点击三次 发送报文。

在本例参数和全零业务数据下,接收端应依次得到:

次序 完整载荷(HEX) 计数器
1 CC 00 00 00 00 00 00 00 0
2 91 01 00 00 00 00 00 00 1
3 76 02 00 00 00 00 00 00 2
4 2B 03 00 00 00 00 00 00 3

字节 0 是 CRC,字节 1 的低 4 位是计数器。CRC 会随计数器变化;不要只检查某一字节“在变”,应核对完整载荷及顺序。

数据字节视图保留的是业务模板。 本例这里仍显示全零;逐帧变化的 CRC 和计数器请在接收端查看。

本例参考值只适用于上述模式、DataID、位置、首帧计数和业务数据。改了任一相关参数后,应使用对应项目的参考值核对。

6. 结束本次练习

停止接收,断开本次 CAN 连接。需要继续练习时,注意 重新连接会按配置重建初始状态;如需理解继续发送和复位的区别,见第 05 篇。

系列概览 · 下一篇:选择算法与填写参数

02|选择算法与填写参数

按对端通信定义选择算法。本篇沿用第 01 篇的 P01 报文练习模式切换,再分别配置其他内置算法。

1. 五种内置算法怎么选?

下表为当前软件的单帧 CAN / CAN FD 支持范围:

算法 载荷字节范围 计数器范围 未另设首帧计数时的首帧值 主要参数
P01 2~30,固定长度 0~14 0 DataID、BOTH/ALT/LOW/NIBBLE 模式、CRC 与计数器位置;NIBBLE 还需相应字段位置
P02 2~64,固定长度 0~15 1 16 项 DataID 列表,固定保护字段布局
P04 12~64 0~65535 0 32 位 DataID、头部偏移、允许长度范围
P05 3~64,固定长度 0~255 0 16 位 DataID、头部偏移
P06 5~64 0~255 0 16 位 DataID、头部偏移、允许长度范围

选择内置算法时,软件会调整必要的长度、帧类型及 RTR。例如默认 P04 可把 8 字节 Std 调整为 12 字节 FD,保留原有字节并补零;已有较长数据不会自动截短,BRS 按网络设置。使用自定义 DLL 时,按 DLL 提供方的说明配置报文长度和字段。

普通 CAN 最多 8 字节;CAN FD 可用长度为 0~8、12、16、20、24、32、48、64 字节,再与算法允许范围取交集。例如 P04 必须使用 CAN FD,P01 的上限为 30 字节,因此不能使用 32 字节载荷。

2. P01:切换 DataID 模式

CAN ID 位于发送列表,用于标识总线报文。DataID 位于 E2E 参数区,用于参与对应 profile 的保护计算。两者分别配置,软件不会把 CAN ID 自动当作 DataID。

沿用第 01 篇:CAN ID 为 0x2A0,DataID 为 0x0123。填写 DataID 时使用十六进制;CRC 的变化不意味着 DataID 本身一定以一个独立字段出现在总线上。

切换前取消该行周期勾选并断开 CAN,选择 0x2A0 的 E2E 页签。保持 8 字节、全零业务模板、首帧计数 0、计数器 8 / 4 / Intel、校验字段 0 / 8 / Intel。

BOTH → LOW

LOW 只接受一个字节的 DataID,不能直接沿用第 01 篇的 0x0123。

  1. 先将 DataID 改为 0x23,按 Tab 结束输入。
  2. 在 DataID模式 中选择 LOW,确认选择。
  3. 核对 DataID 显示 0x0023(或 0x23)、模式为 LOW,两个保护字段位置保持不变。
  4. 点击 复位,连接 CAN,手动发送。按 LOW 的参数核对载荷,不再使用第 01 篇 BOTH 的 CRC 参考值。

若误先选择 LOW 而提示配置无效,检查模式是否已恢复;先改 DataID 为 0x23,结束输入后重新选择 LOW。

LOW → ALT 或 BOTH

  1. 先选择 ALT 或 BOTH,确认选择。
  2. 再将 DataID 改回 0x0123,按 Tab 结束输入。
  3. 点击 复位后发送。ALT 按计数器交替使用 DataID 字节;BOTH 使用两个字节。

只有恢复为第 01 篇全部参数,并从首帧计数 0 开始,才重新使用该篇的四帧参考载荷。

切换到 NIBBLE

  1. 先选择 NIBBLE,确认选择;参数区会出现 半字节位。
  2. 将 DataID 填为 0x0123,按 Tab 结束输入。NIBBLE 的 DataID 范围为 0x000~0xFFF。
  3. 将 半字节位 填为 12,按 Tab 结束输入;计数器仍为 8 / 4 / Intel,校验仍为 0 / 8 / Intel。
  4. 核对三个字段没有重叠,再点击 复位、连接并发送。

这里的 12 是 bit 位置:字节 1 的高半字节保存 DataID 高字节中的低 4 位,本例为 1;低半字节保存 Counter。首帧 Counter=0 时,接收载荷的字节 1 应为 10,下一帧应为 11。字节 0 为当前模式计算出的 CRC。

3. P02:填写 16 项 DataID 列表

在发送行的 动态报文 中选择 AUTOSAR P02,下方 E2E 区会切换成 DataID 列表。

图中的 0x2A1 是单独建立的 P02 示例行,0x2A0 仍保留 P01;参数区只显示当前选中行。

P02 参数:两行共 16 个 DataID 字节和首帧计数

图 4: 从左到右、从上到下,依次是列表索引 0~15。每一格填写一个十六进制字节;图中 01 到 10 是教学值,10 表示十六进制 0x10。

P02 按计数器值选择列表项。默认首帧计数器为 1,因此首帧用索引 1 对应的字节,而不是把左上角索引 0 当作首帧项。若项目要求首帧为 0,请明确设置首帧计数 0,并按该设置重新核对参考载荷。

16 项都必须来自项目定义;不要只填当前计数器会用到的那一格。修改完成后结束编辑,检查是否有非法值提示。

4. P04、P05、P06:可直接填写的发送示例

每种算法单独建立一行,逻辑通道沿用第 01 篇的 1。先断开 CAN,取消所有教学行的周期勾选,业务模板全部填零。每行发送次数为 1,RTR 不勾选;P04 使用支持 CAN FD 的对端,本例不启用 BRS。

填写项 P04 示例 P05 示例 P06 示例
帧 ID 0x2A2 0x2A3 0x2A4
报文类型 Std-FD,BRS 关闭 Std Std
数据长度 16 8 8
动态报文 AUTOSAR P04 AUTOSAR P05 AUTOSAR P06
DataID(Hex) 0x12345678 0x0123 0x0123
首帧计数 0 0 0
头部位 8 8 8
最小字节/最大字节 16 / 16 无此项,按本行 8 字节发送 8 / 8
计数器/校验来源 均为手工 均为手工 均为手工

按下面顺序填写:

  1. 在发送列表设置帧 ID、类型、长度和次数,选择对应 动态报文。
  2. 打开该行 E2E 页签,填写 DataID、首帧计数。P04、P06 的 长度(字节) 有左右两个输入框:先在左框填最小字节数,再在右框填最大字节数,每次按 Tab 结束输入。
  3. 最后填写 头部位 8,按 Tab;检查派生位置与下表一致。派生字段为灰色时无需另行修改。
  4. 点击该行 复位,准备接收端后连接,手动点击 发送报文 两次,核对 ID、类型、长度及 Counter 的 0 → 1。
  5. 练习下一行前先断开 CAN,其他行周期保持关闭。
派生字段 P04 P05 P06
计数器:起始 / 位 / 字节序 31 / 16 / Motorola 24 / 8 / Intel 40 / 8 / Intel
校验:起始 / 位 / 字节序 79 / 32 / Motorola 8 / 16 / Intel 15 / 16 / Motorola

头部位 8 表示整个头部后移 1 字节。 在以上全零模板中,字节 0 保持 00;P04 的 16 位 Counter 占字节 3~4,P05 的 Counter 在字节 3,P06 的 Counter 在字节 5。

按上表完成配置、点击 复位后,前两帧应为以下完整载荷。P04 为 16 字节 Std-FD,BRS 关闭;P05、P06 为 8 字节 Std。

算法 Counter 完整载荷(HEX,按字节 0 起排列)
P04 0 00 00 10 00 00 12 34 56 78 B7 4B 5C 35 00 00 00
P04 1 00 00 10 00 01 12 34 56 78 47 C5 A6 40 00 00 00
P05 0 00 AA 72 00 00 00 00 00
P05 1 00 CB CA 01 00 00 00 00
P06 0 00 1B 4C 00 08 00 00 00
P06 1 00 B1 1D 00 08 01 00 00

这些参考载荷对应本节固定参数与全零业务模板;修改 DataID、首帧计数、头部位置或业务值后,应使用修改后的参数核对。

5. 头部偏移、起始位和长度单位

字段 单位与含义 核对重点
首帧计数 对应 profile 的计数器整数 在该 profile 允许范围内;P01 不使用计数值 15。
头部位 bit,整个 E2E 头部相对载荷起点的偏移 P04/P05/P06 按字节对齐;8 表示后移 1 字节,不是 8 字节。
起始 bit,保护字段起始位置 与 Intel/Motorola 的 DBC 位编号一起解释。
位 bit,字段宽度 与计数器/CRC 类型一致,不能与业务字段重叠。
长度(字节)左框/右框 byte,分别为最小/最大载荷长度;管理器中显示为最小字节数/最大字节数 实际发送长度须在范围内,并满足算法和帧类型约束。

标准 profile 对字段组合有约束,某些派生字段显示为只读。不要为了消除提示而随意改字节序或扩大范围;先确认所选算法和通信定义是否一致。

使用 DBC 选择来源时,软件会按合法的信号位置更新相关布局,操作见下一篇。

6. 修改后怎样判断已经生效?

结束文本编辑或确认下拉选择后,检查三件事:没有未解决的输入提示;相关位置与字节序符合预期;接收端完整载荷与新参数匹配。

若要同时移动计数器和校验字段,先修改第一个位置并按 Tab,再修改另一个位置并按 Tab;两项填完后核对来源、位宽和字节序,再切行或发送。出现无效提示时,先查看输入框恢复的值,按提示修正超范围、重叠或越界字段,再结束输入。无需点击应用。

改变参数后,该发送项会按新设置重新开始计数;确认同一个值或取消选择则保持当前计数。若只想从首帧计数重新发送,点击该项的 复位。

上一篇:发送第一条 E2E 报文 · 系列概览 · 下一篇:DBC 与保护信号联动

03|DBC 与保护信号联动

本篇沿用 0x2A0、8 字节、P01 / BOTH、DataID 0x0123 的报文。DBC 用于描述信号,E2E 参数区负责选择保护字段及相应算法参数。

若刚完成第 02 篇的模式练习,先断开 CAN、取消该行周期,在 E2E → DataID模式 中恢复 BOTH;DataID 保持 0x0123、首帧计数 0、计数器 8 / 4 / Intel、校验 0 / 8 / Intel,再进行下面的 DBC 练习。

1. 加载教学 DBC

下载 E2E_P01.dbc,通过 CAN 功能区的 数据库 入口,按 CAN FD 与 DBC 工作流 将文件加入当前 CAN 工程。

返回发送窗口,选中 0x2A0。名称可显示为 E2E_P01_Message,信号详情应出现:

信号 布局 本例用途
Checksum 起始位 0、8 位、Intel P01 的 CRC 字节
AliveCounter 起始位 8、4 位、Intel P01 计数器
CommandValue 起始位 16、16 位、Intel 普通业务值,教学初始值为 0

未出现这些信号时,先确认 DBC 已加入当前 CAN 工程、报文 ID 为标准帧 0x2A0、数据长度为 8。仅在磁盘上放置文件不会自动完成数据库加载。

2. 在 E2E 中明确选择两个来源

  1. 选中这条发送行,打开下方 E2E 页签。
  2. 在 计数器 → 来源 下拉中选择 AliveCounter,确认选择。
  3. 在 校验字段 → 来源 下拉中选择 Checksum,确认选择。
  4. 检查计数器显示为起始 8、位 4、Intel;校验显示为起始 0、位 8、Intel。

宽窗中信号详情与 E2E 并排,分别选中 AliveCounter 和 Checksum

图 5: 窗口足够宽时,信号详情与 E2E 并排。选择信号后,位置、位宽和字节序由所选信号派生;灰色字段表示该处不能直接修改。

下拉按当前算法提供可用来源。此例 P01 校验字段可选 8 位 Checksum,16 位 CommandValue 不会列为校验来源;无 DBC 时选择手工。若交换两个保护字段,依次选择两项来源,全部选完后再核对位置和发送;提示无效时,检查位宽、重叠及是否超出报文长度。

3. 业务值与保护输出怎样配合?

确认同一项已生效配置时,计数继续。要从首帧计数重新发送,请点击 复位;周期运行时先停止周期。

当 CommandValue=0、其余业务字节为零且首帧计数为 0 时,复位后可使用第 01 篇的四帧参考值核对。若修改业务值,软件先取得业务报文,再计算 E2E;CRC 因业务数据变化而改变是正常现象。

数据字节和信号详情用于编辑、显示业务模板。要确认实际保护字段,应查看真正发出的报文或接收端载荷,不能要求模板中的 CRC 和计数器跟着每次发送刷新。

4. 没有 DBC、或 DBC 发生变化怎么办?

  • 没有 DBC: 两个来源保留 手工,按通信定义填写允许编辑的位置。内置算法仍可使用。
  • 信号不符合标准布局: 按当前算法检查长度、位宽、字节序及头部位置。
  • 更新了同名信号: 已应用的来源和位置不会只因名称相同就静默重猜。确认新定义后,在对应来源下拉中明确重新选择,再核对派生字段。
  • 返回手工: 在来源中选择 手工,按当前算法允许的字段编辑并结束输入。

Intel 与 Motorola 的起始位表示方式不同。核对实际占用的位,不要只比较两个起始位数字是否相等。

上一篇:选择算法与填写参数 · 系列概览 · 下一篇:算法管理与自定义 DLL

04|算法管理与自定义 DLL

CAN 功能区 数据库 旁的 E2E 按钮管理算法候选项;选择报文算法、填写常用参数和发送,仍在原发送窗口中完成。

1. 默认七项算法

新建配置默认提供五种 AUTOSAR 内置算法,以及两套随软件预置的 DLL 示例:

默认算法目录:五种标准 Profile 和两套计数校验示例

名称 计算规则
AUTOSAR P01 / BOTH、P02、P04、P05、P06 对应第 02 篇标准发送保护;P01 可调整 DataID 模式。
CRC8-2F + RC4b CRC-8:多项式 0x2F、寄存器初始值 FF、最终 XOR FF、不反射;配合 4 位滚动计数器。
SUM8-XOR + RC4b 覆盖字节累加取低 8 位,再 XOR FF;配合 4 位滚动计数器。

RC4b 是 4-bit Rolling Counter,4 位滚动计数器,15 后回到 0。

两套 DLL 已随上位机提供,直接使用时不需要自己编译。旧工程保持保存的目录,曾移除的候选或显式空目录不会在重开时自动补回;需要恢复时明确添加,或在独立新建工程中练习。

2. 使用随软件预置的 DLL 示例发送

本节复用第 02 篇的 0x2A1、Std、8 字节教学行,把 P02 改为 DLL 算法;需要保留 P02 时另建练习行。先断开 CAN、取消周期,保持业务模板全零。

  1. 在该行 动态报文 中选择 CRC8-2F + RC4b。
  2. 打开 E2E 页签,核对首帧计数 1;计数器为手工、起始 48、位宽 4、Intel;校验字段为手工、起始 56、位宽 8、Intel。
  3. 准备接收端后连接,逐次手动发送并核对实际 Rx。
  4. 结束后断开,可改选 SUM8-XOR + RC4b,使用相同默认布局再练习。

CRC8-2F + RC4b 的首帧计数与可配置保护字段

图 8: 当前行已从 P02 改为 DLL,不能继续用 P02 参考载荷。两示例不使用 DataID,因此该字段不显示。

默认布局中,字节 6 低 4 位为 Counter,字节 7 为校验。算法先写 Counter,再计算除校验字节外的全部载荷字节;不自动加入 CAN ID 或 DataID。

算法与次序 完整载荷(HEX)
CRC8-2F 首帧,Counter=1 00 00 00 00 00 00 01 45
CRC8-2F 第二帧,Counter=2 00 00 00 00 00 00 02 34
SUM8-XOR 首帧,Counter=1 00 00 00 00 00 00 01 FE
SUM8-XOR 第二帧,Counter=2 00 00 00 00 00 00 02 FD

内部复位为 0、发送前递增,所以默认首帧为 1,与第 01 篇 P01 的首帧 0 不同。明确指定首帧计数时按填写值开始,包括 0;复位恢复该初始序列。CRC8 的结果须用 CRC 算法核对,不能使用 SUM8 的参考值。

3. 修改布局,核对真实输出

在发送行 E2E 区修改起始位、字节序与首帧计数,即可调整这两个 DLL 示例的保护字段;计数器固定 4 位,校验固定 8 位。选择 DBC 来源时,位置随所选信号更新。

以 SUM8-XOR + RC4b 为例:停止周期并断开后,设首帧计数 3,计数器起始 12、4 位、Intel,校验起始 0、8 位、Intel;其他业务位全零。重新连接后第一帧应为:

CF 30 00 00 00 00 00 00

SUM8-XOR 非默认布局:首帧 3、计数器起始 12、校验起始 0

30 的高半字节是 Counter 3;0x30 XOR 0xFF = 0xCF。这是演示布局联动的扩展示例,实际位置仍按项目通信定义。

每项输入后按 Tab。需要移动两个字段时依次改完,再核对两处位置和字节序;提示无效时,查看恢复后的值并修正重叠或越界字段。Intel/Motorola 的位编号不同,请按通信定义填写。

4. 候选目录与报文副本

点击 添加… 选择内置算法,或选择 DLL 文件入口;选中算法后填写参数,按 Tab 结束单元格编辑。

P04 候选参数:头部偏移和长度范围

点击 确定 保存算法列表,点击 取消 放弃本次修改。发送行的常用参数则在结束编辑后直接生效。

操作 结果
修改报文 A 的参数 只改变 A;目录及报文 B 不跟着变化。
修改管理器候选 影响今后选择该候选;已有行保留原副本。
移除在用候选后确定 只移除目录和下拉选项,现有报文保留原算法、参数和状态。
多条报文使用同一 DLL 每条拥有独立参数、计数器及 Context,不按 CAN ID 或 DLL 路径合并。

移除候选不会删除 DLL 文件;磁盘上移走在用库则会造成缺库,相关保护项不会自动退成裸发送。要更新已有行,明确重新选择并核对;真实配置变化会重建该项状态。

5. 编译自己的 DLL

下载 两套算法的源码和独立工程。包内含源码、工程、support、许可证及 BMCLI 示例,不含预编译 DLL。

已经安装 BMAPI SDK 时,可直接进入 BMAPI SDK/example/e2e_counter_checksum,找到同一组源码和 E2E_Algorithms.sln,按下列步骤修改、编译。

  1. 整体解压到可写位置,保留 support 子目录。
  2. 在 Visual Studio Installer 准备 使用 C++ 的桌面开发、MSVC v142 x86/x64 工具集与 Windows 10 SDK。
  3. 打开 E2E_Algorithms.sln,选择 Release / Win32,生成解决方案。
  4. 在 bin/Release/ 找到 crc8_2f_rc4b.dll、sum8_xor_rc4b.dll。
  5. 回到 CAN 功能区 E2E → 添加… → DLL 文件入口,选择新文件,核对元数据和参数后确定。到发送行选择导入的候选,填写布局并核对发送结果。

无需加入 BUSMASTER 主解决方案;示例独立编译并使用静态 C 运行库。Win32 BUSMASTER 必须使用匹配的 32 位插件;其他工具的 DLL 不能仅凭扩展名兼容。

修改目标 文件或入口
两个项目入口 crc8_2f_rc4b.c、sum8_xor_rc4b.c
校验公式及共享保护流程 counter_checksum_impl.h 中 calculate_checksum
Context、调用和字段配置说明 support/bm_e2e_plugin_api.h、包内 README
接口导出 保留 BM_E2E_GetPluginApi;新算法或不兼容配置使用新的 provider 身份。

许可见包内 COPYING 文件。

6. 在算法管理中填写 DLL 参数

在 CAN 功能区点击 E2E,选中 DLL 示例后,在下方参数表填写这些设置;起始位和首帧计数仍在发送行的 E2E 页签中调整。

设置 含义与本例
Profile / Variant DLL 内的分支,不是 CAN ID;两示例为 1 / 0。
Context 字节数 每报文独立运行状态,两示例为 16;不是报文长度。
Config 两示例使用 layout-v1,传递实际起始位、位宽和字节序。
参数(Hex) CRC8 为 01 2F FF FF:版本 01、多项式、初始寄存器、最终 XOR。SUM8 默认为 01 00 00 00:版本、转换位开关、LSB0 位位置低/高字节。
额外可写位 默认无需填写;开启 SUM8 转换位时须声明该位,并与 Counter、校验字段分离。

以上参数格式只用于这两个 DLL 示例;其他 DLL 的参数、报文长度和字段按提供方说明填写。

SUM8 转换位:让字节 2 的最低位每帧翻转

下面使用 8 字节、全零业务模板、默认计数器 48 / 4 / Intel 和校验 56 / 8 / Intel,转换位选择 bit 16,即字节 2 的最低位。

  1. 取消目标发送行的周期勾选,断开 CAN。在 CAN 功能区点击 E2E,选中 SUM8-XOR + RC4b。
  2. 在管理器下方参数表中找到 额外可写位,填写 00 00 01,按 Tab 结束编辑。
  3. 在同一参数表的 参数(Hex) 中填写 01 01 10 00,按 Tab。01 为参数版本,第二个 01 开启转换位,10 00 以小端整数指定 bit 16。Config 保持 layout-v1,Profile 1、Variant 0、Context 16。
  4. 点击 确定 保存算法列表。返回发送窗口,在目标行 动态报文 中重新选择 SUM8-XOR + RC4b,使新参数复制到这条报文;原来已选过的行不会自动跟着列表变化。
  5. 在该行 E2E 区填写首帧计数 1,核对计数器 48 / 4 / Intel、校验 56 / 8 / Intel,业务模板仍为全零,发送次数为 1。
  6. 点击 复位,连接 CAN,手动发送两次,在接收端查看下表。

额外可写位是十六进制字节掩码,不是 bit 编号列表。 从左到右分别对应载荷字节 0、1、2……;每个字节用 1 标记允许 DLL 修改的位。因此 00 00 01 只额外允许修改字节 2 的最低位,未填写的后续掩码字节按 0 处理。计数器和校验位由 layout-v1 自动包含,这里只填写额外的转换位。

发送次序 完整载荷(HEX) 查看位置
1 00 00 01 00 00 00 01 FD 字节 2 的 bit0 为 1,字节 6 低半字节 Counter=1
2 00 00 00 00 00 00 02 FD 字节 2 的 bit0 变为 0,Counter=2

继续发送时该位按 1、0、1、0 翻转。这两帧的字节 7 恰好都为 FD,因为参与累加的总和相同。结束后断开 CAN;需要关闭转换位时,在管理器将参数恢复为 01 00 00 00、清空额外可写位,确定后到目标行重新选择该示例。

配套 counter-checksum.bmgw 供支持外部 E2E 的 32 位 Windows BMCLI 使用相同编译输出,相对库路径指向 bin/Release/。它使用网络 e2e-demo、ID 0x2A7 和 0x2A8,与本篇界面练习行分别说明。需要 accepted-v1/contract_version 支持,BMCLI 1.6.5 build 151 不适用;绑定和命令以包内 README 及实际版本帮助为准。

上一篇:DBC 与保护信号联动 · 系列概览 · 下一篇:周期发送、复位与保存工程

05|周期发送、复位与保存工程

E2E 继续使用原发送行的通道、帧 ID、类型、数据长度、周期和次数,不需要打开另一套发送窗口。

1. 先区分手动发送和周期任务

第 01 篇通过四次手动点击产生四帧。需要自动发送四帧时,改用有限周期:

  1. 先停止当前任务,并保持 CAN 断开,避免配置过程中发送。
  2. 选中第 01 篇的 0x2A0 行,核对 P01 / BOTH、DataID 0x0123、首帧计数 0,8 字节业务模板全零,计数器 8 / 4 / Intel、校验 0 / 8 / Intel。
  3. 将 发送次数 设置为 4,重复周期(ms) 设置为 200。
  4. 勾选该行重复周期前的复选框;其他教学行保持不勾选。
  5. 准备好接收端,再点击 CAN 连接。已启用的周期行会按原发送任务逻辑开始运行。
  6. 在接收端核对恰好四帧、计数器顺序及完整载荷,等待有限任务完成。

周期运行时不要再手动点击 发送报文 来“启动周期”。手动点击是额外一次发送,会改变你看到的总帧数及计数器序列。

本教程在上述 X1 实机链路使用 P01、首帧计数 0、全零业务数据核对:接收端持续观察 8 秒,收到第 01 篇的四帧,后续没有第 5 帧。

要暂停某条周期行,取消它的重复周期复选框;要结束本次总线会话,使用 CAN 断开连接。正式网络上的周期和次数以项目定义为准。

2. 哪些操作会继续计数,哪些会重建状态?

操作 对该发送项状态的影响
同一连接中手动再发送;周期停止后继续 沿用已接受的保护状态,继续计数。
点击该项 E2E 区的 复位 按该项配置首帧计数重建保护状态。
合法参数真正变化 按新配置重建该项状态。
同值确认、打开后取消 保持当前计数。
新建/加载工程、断开后重新连接 重建相应运行状态;不会从 CFX 恢复刚才已经跑到的实时计数。
从管理器移除候选项 不改变已配置报文的参数和运行状态。

复位只作用于当前发送项。需要“下一帧从首帧计数开始”时,先停止周期,选择正确报文,再复位并发送,避免操作过程中还有其他帧继续发出。

发送失败或结果不明确时,先停止周期,查看对应时间的诊断日志和接收记录,再按提示恢复。

3. 保存 CFX 工程

完成参数编辑后,使用 BUSMASTER 的 保存/另存为 将工程保存为 .cfx。

CFX 保存候选目录、各发送项已应用的算法与参数、信号来源及相关配置;不保存实时 Context 或正在变化的运行计数器。

为了确认下次能够恢复:

  1. 停止本次任务,断开 CAN,保存到一个明确的工程文件。
  2. 关闭工程后重新打开,先保持离线。
  3. 逐行核对 ID、通道、帧类型、长度、动态报文、DataID、首帧计数和来源。
  4. 检查周期复选框与发送次数,避免重连时启动不需要的任务。
  5. 确认依赖文件齐全后,再连接并执行所需发送。

4. 换电脑或换目录时要带什么?

一起保留 CFX 使用的 DBC 和外部算法 DLL;仅有 CFX 不会自动附带这些文件。按工程实际引用核对绝对/相对路径,另存为后也要重新打开检查。

在新电脑上通过通道配置重新核对逻辑通道与实际设备口的映射。

加载旧工程后,逐行检查 动态报文 选项;提示缺少 DLL 时,按第 04 篇恢复相应文件,再连接发送。

上一篇:算法管理与自定义 DLL · 系列概览 · 下一篇:接收核对、日志与排障

06|接收核对、日志与排障

遇到问题时,先分清报文没有发送、已经发送但对端没收到,还是对端收到后不接受 E2E 参数。这三种现象需要不同证据。

1. 发送结果应该在哪里确认?

观察位置 能确认什么
发送列表、数据字节和信号详情 编辑发送定义与业务模板。
报文窗口的 Tx 记录 本机发送方向的观察。
独立接线接口或设备的 Rx 对端实际看到的 ID、类型、长度、数据和顺序。
E2E 诊断日志 算法、配置、保护、提交结果及状态摘要,帮助定位第一处失败。
ECU 的 E2E Check 结果 查看 ECU 按项目通信定义是否接受该帧。

报文窗口若使用覆盖模式,同 ID 的新报文可能更新同一行。核对四帧顺序时使用适合的追加显示或 CAN 日志,不要把屏幕行数直接当作累计收帧数。

2. 找到客户现场诊断日志

E2E 诊断使用独立 UTF-8 文件,位置在 实际运行的 BUSMASTER.exe 所在目录:

<BUSMASTER 安装目录>\e2e_diagnostic_log.txt

达到文件大小上限时,上一份会保留为:

e2e_diagnostic_log.txt.previous

复现后尽快保留当前文件和存在的 previous 文件。正常退出程序后再复制,可以同时取得结束摘要。若文件没有生成或不能更新,确认查找的是实际运行目录,并检查该目录的可写性和磁盘空间;不能仅凭没有日志就判断没有发生发送。

诊断日志记录算法管理、配置、初始化/保护、提交结果、复位及结束摘要。它与功能区 日志记录 保存的 CAN 报文日志用途不同:前者解释操作和保护状态,后者保存实际报文,排查现场问题时两者可以配合使用。

3. 哪些字段值得先看?

字段或内容 如何使用
process_id、session_id、operation_id 区分本次进程、会话和连续操作,不把多个会话的记录拼成一次发送。
item、channel、message_id 对照当前出问题的发送行、逻辑通道和 CAN ID。
stage、result、code 查看先在哪个阶段失败,例如库解析、保护或提交。
accepted/rejected/outcome_unknown 区分接受、拒绝与结果不明确,不能把“保护计算成功”当成“对端已收到”。
first_counter、last_counter、next_counter 对照复位、继续发送、重连及接收端观察到的序列。
logger_queue_drops 大于 0 时说明日志可能不完整,应连同原文件提供,而非据此推算精确发帧数。

摘要用于说明状态,不保证每条物理报文都对应一行诊断日志。需要逐帧核对时,以实际接收和 CAN 记录为准。

4. 按现象排查

现象 先检查 后续处理
找不到 E2E 或“动态报文” 软件版本、当前是否为 CAN 发送窗口 使用包含该功能的适用版本;E2E 管理按钮在数据库旁。
选了算法却看不到参数 是否选中正确发送行;当前页签是否为 E2E 默认宽度下切换页签;加宽后可以与信号详情并排。
E2E 参数和“复位”变灰 CAN 已连接,且该行勾选了周期 取消该行周期勾选,或断开 CAN 后再编辑、复位。
数据字节里 CRC/计数器没有变化 当前看的是业务模板还是实际报文 在真正的 Tx/Rx 或 CAN 日志中核对保护输出。
软件提示长度、位置或输入非法 当前生效值、profile、实际帧长、头部偏移、位宽、重叠 完成后的非法编辑会恢复原合法配置;检查回退结果。仍不能满足项目要求时修正完整参数,不通过不处理绕过保护。
按 Esc 后发送按钮不可用 CAN 是否已断开 主窗口中 Esc 是 CAN 断开快捷键;重新核对连接状态。它不是所有位置通用的编辑取消键。
DataID 相同但 CRC 不同 模式、Counter、业务数据、长度和字段布局 使用完整参数和完整载荷对照;DataID 不是唯一输入。
P02 第一帧计数为 1 是否保留该 profile 的默认首帧计数 默认首帧为 1;项目要求为 0 时明确设置并重新核对参考值。
修改算法管理后原报文未变化 是否期待候选项自动回写 每行是独立副本;在目标行明确重新选择并核对参数。
删除候选后报文仍能使用 是否只移除了候选,没有移走 DLL 文件 这是软关联行为;若需关闭该行保护,在该行选择其他处理方式。
找不到 DLL 或加载失败 库路径、文件及其依赖 按第 04 篇的 DLL 要求检查后重新加载,查看日志中的失败阶段。
已连接但没有 Rx 物理口映射、波特率、接线、终端、过滤器和对端状态 先完成普通 CAN 收发,再核对 E2E。
周期帧数比预期多 是否同时启用了多行周期,或额外点了手动发送 停止本次任务,按逐行计划与接收日志核对。
重开工程后计数从头开始 是否把配置保存当作运行状态保存 CFX 不保存运行 Context/计数;按首帧计数重建属于预期行为。

5. 联系技术支持时提供哪些资料?

请把同一次问题的材料放在一起:

  1. 软件完整版本/Build、分析仪型号和相关通道设置。
  2. 出问题的 CFX,使用的 DBC;如为外部算法,附相应 DLL 版本及必要参数说明。
  3. 一条具体报文的 ID、帧类型、长度、算法、DataID/列表、首帧计数和字段位置。
  4. 简短复现步骤、发生时间、预期结果与实际结果。
  5. 当前 e2e_diagnostic_log.txt、存在的 .previous,以及对应时间段的 CAN 记录或完整收帧载荷。
  6. 能定位发送行、参数和就地提示的截图。

完成本系列后,应能独立确认:选对了算法;参数与对端一致;实际接收载荷按预期变化;工程与依赖文件可恢复;发生问题时能够找到对应诊断日志。

上一篇:周期发送、复位与保存工程 · 系列概览

E2E 教学示例

用于《BUSMASTER E2E 发送保护使用教程》,核对版本 3.2.2.51(Build 571)。

文件

  • E2E_P01.dbc:标准 ID 0x2A0,名称 E2E_P01_Message,8 字节。Checksum 位于 0|8 Intel,AliveCounter 位于 8|4 Intel,CommandValue 位于 16|16 Intel。
  • p01-reference.csv:P01 / BOTH、DataID 0x0123、首帧 Counter 0、业务模板全零时的前四帧完整载荷。

使用

先按第 01 篇配置原 CAN 发送行。需要练习信号来源时,通过数据库入口加载 DBC,再在 E2E 区明确选择 AliveCounter 和 Checksum。

DBC 只描述信号,不会替你设定 DataID、选择算法、连接硬件或启动发送。DataID 在报文 E2E 参数区设置。

保持 CRC 字段从 bit0 开始、Counter 从 bit8 开始,未使用位和业务字段均为零,才能使用这里的完整参考载荷。改变业务值、首帧计数、布局或 DataID 后需重新计算对应参考值。

E2E_Algorithms_Source.zip 提供两套算法源码、独立工程、support、许可证和 BMCLI .bmgw 示例,不含生成 DLL。打开 E2E_Algorithms.sln,以 v142、Release / Win32 生成后,DLL 位于 bin/Release。上位机已随包提供两套算法,直接使用无需先编译。

已安装 SDK 时,例程位于 BMAPI SDK/example/e2e_counter_checksum。五种 AUTOSAR Profile 为内置算法,CRC8-2F + RC4b 与 SUM8-XOR + RC4b 为随软件预置的 DLL 示例。

本包不包含驱动或自动启动发送脚本;.bmgw 需按说明显式绑定测试网络后启动。

查看原图

下载原图