Outlander PHEV 的 CAN 日志:双通道同录与三条总线怎么分工

作者:

在

结论:这份 Outlander PHEV 日志集的价值不在报文清单,而在「双通道同时录 + 视频打时间戳」这个组合。三个总线分两组录制:主线 C 总线(带诊断口那条)与 EV-CAN 同录,EV-CAN 与 BMU-CAN 同录,因此同一个物理事件能在两条总线上互相对齐。BMU 侧 0x3C2 每 100 ms 报一次电池电流,零点在 0x80000000,是天然的时间基准。

两条录制配置决定了能回答什么问题

采集者用的是 GVRET 硬件,日志存成 SavvyCAN 可读的 CSV。通道分配是理解整套日志的钥匙:main-ev 目录里通道 0 是主线 C 总线(即带诊断连接器那条),通道 1 是 EV-CAN;ev-bmu 目录里通道 0 是 EV-CAN,通道 1 是 BMU-CAN。

目录 通道 0 通道 1 能对齐的事件
main-ev 主线 C 总线(诊断口所在) EV-CAN 车身动作与驱动系统响应
ev-bmu EV-CAN BMU-CAN 用电设备动作与电池电流变化

这个配置带来一个直接好处:EV-CAN 在两组里都出现,因此可以把两组日志通过 EV-CAN 上的共同事件接起来,间接得到「车身动作 → 电池电流」的因果链,而不需要三次同时录制。

时间戳的来源与精度

每个日志目录下的说明都给出一串 TS 数值,单位是秒,来自 SavvyCAN 文件时间戳,由人工对照视频读出。作者明确说明这些时间戳「不是 100% 准确」。使用时应当把它当作事件排序依据而非精确时延依据——它能告诉你「压缩机启动发生在按下 AC 之后」,但不能告诉你相差了多少毫秒。

BMU 侧:0x3C2 是整套日志的锚点

0x3C2 是这堆日志里最有用的报文,因为它同时满足三个条件:高频、物理量连续、与下游事件强相关。它的前 4 字节是一个大端值,表示电流流向;零点为 0x80000000,大于该值表示电流从电池流出(放电),小于该值表示充电电流。第 5 字节在所有状态下都是 C8,作者推测为状态字节。

字段 位置 取值含义 备注
电流值 字节 1–4 大端,零点 0x80000000 大于零点为放电,小于为充电
状态 字节 5 恒为 C8 含义未确认
周期 — 100 ms 适合做事件对齐

作者专门提到该总线上大部分报文已在 SimpBMS 项目的解码文档里有说明,因此 BMU 侧的解读工作主要集中在少数几条上。这也是做车型逆向时的常见省力路径:先找社区已有的解码文档,再补自己的缺口。

EV 侧:0x388 的逐字节观察

0x388 被判断为空调压缩机状态报文,是这份日志里逐字节记录最完整的一条。它的价值在于提供了一个「状态机 + 设定值」同帧的范例。

字节 观察行为 推断
字节 0 压缩机启动后由 01 变 81,停止后变 82 运行状态位
字节 1 多为 00,字节 0 由 81 变 82 时变为 02 次级状态位
字节 2–5 数值干净,疑似设定值 可能是传感器输出或目标值
字节 6 常见(可能恒为)00 未使用
字节 7 压缩机关为 02,开为 06 压缩机开关指示

这条报文的可靠性来自交叉验证:作者记录了 EV 模式开空调时 0x388 的首次非零时刻(TS 247.92380 出现第一条 01 00 00 00 00 00 00 06,TS 251.12 字节 2–3 首次非零),并指出 BMU 通道上 0x3C2 的电流尖峰与视频、与 0x388 的取值变化几乎完全吻合。三条独立证据对齐,才把一个「疑似」变成可用结论。

负向对照的价值

日志集里有两个刻意做的对照实验。一个是「enable-ac-no-refrigerant」:在冷媒被抽掉之后开空调,TS 669 之后电池电流没有明显变化,因此判断压缩机根本没启动,空调控制器可能检测到低压而拒绝吸合。另一个是「ac-on-no-refrigerant」,在主线 C 总线上重录了一遍。这类「什么都没发生」的日志在逆向里极有价值——它给出了信号在负条件下的基线。

类似的还有加热器那两段。作者原本想录 EV 模式下的加热器工作,后来发现这辆车根本没有装电加热器,只有暖风水泵在转。这段日志因此被保留为一个明确的反例:报文可能照发,但末端执行器不存在。

日志清单与使用场景

整套日志按录制场景命名,覆盖的模式差异决定了各自适合回答什么问题。EV 目录下有 8 组,主线目录下有 3 组。

场景 适合用来找什么
normal-mode-gear-selection 挡位切换对应的报文变化(N/D/R/P 反复切换)
charge-mode 与 long-charge-mode-novideo 充电模式进入与发动机介入/退出的时序
driving-ev 低速前进后退、B 挡与 4WD Lock 模式下的驱动报文
ac-on-ev-mode 压缩机启停与 0x388、0x3C2 电流的对应关系
enable-ac-no-refrigerant 负向对照:无冷媒时电流与状态报文的基线
heater-attempt-ev-mode 与 ev-heater-mode-maybe-again 反例:无电加热器时的报文行为
steering-lock-to-lock 方向盘左右打死过程中的转向角报文
parking-brake 驻车制动反复拉放的单变量对照

其中 parking-brake 那组是很好的单变量样本:从 TS 370 到 TS 392,驻车制动每隔约 2 秒拉放一次,连续十次,几乎没有其他干扰动作。要定位一个开关量报文,这种设计比长距离行驶高效得多。

常见问题

这两组日志为什么不一次录三条总线?

因为录制设备只有两个通道,作者改为分两组录制并让 EV-CAN 在两组中都出现,从而用 EV-CAN 上的共同事件把两组日志接起来,间接得到主线 C 总线与 BMU-CAN 之间的对应关系,无需三通道硬件。

日志里的时间戳能用来算精确时延吗?

不能。TS 数值是从 SavvyCAN 文件时间戳人工对照视频读出的,作者明确说明不是百分之百准确。它适合确定事件先后顺序与大致间隔,不适合作为毫秒级时延测量的依据。

0x3C2 的电流值怎么判断是充电还是放电?

以前 4 字节的大端值与零点 0x80000000 比较:大于零点对应电流从电池流出(放电),小于零点对应充电电流。该报文每 100 ms 发送一次,第 5 字节在所有状态下恒为 C8。

0x388 能确认是空调压缩机状态吗?

属于强推断而非定论。作者给出了逐字节观察:字节 0 在压缩机启动后由 01 变 81、停止后变 82,字节 7 在压缩机开时为 06、关时为 02;同时 BMU 侧 0x3C2 的电流尖峰与视频记录、与 0x388 取值变化几乎完全吻合。三条证据对齐,但仍应视为高置信度推断。

为什么还要录「无冷媒」和「没有电加热器」这种日志?

因为负向对照能给出信号在条件不满足时的基线。无冷媒时 TS 669 之后电池电流无明显变化,说明压缩机未启动,控制器可能因低压拒绝吸合;加热器那两段则证明这辆车未装电加热器,报文可能照发但末端执行器不存在。这类样本能防止把「报文存在」误读成「功能存在」。

延伸阅读

参考资料

  • 项目 05 —— public-can-dbc-datasets/additional/projectgus-outlander-phev-logs/README.md(车辆状态、日志格式 GVRET CSV 与三个目录的分工)
  • 项目 05 —— public-can-dbc-datasets/additional/projectgus-outlander-phev-logs/ev-bmu/README.md(通道分配、0x3C2 电流编码、0x388 逐字节观察与各组日志时间戳)
  • 项目 05 —— public-can-dbc-datasets/additional/projectgus-outlander-phev-logs/main-ev/README.md(主线 C 总线三组日志的场景与时间戳)
  • 项目 05 —— public-can-dbc-datasets/additional/projectgus-outlander-phev-logs/cmu/README.md(CMU EEPROM 的 sigrok 逻辑分析仪采集说明)

免责声明

本文所述日志来自一辆 2019 年款 Outlander PHEV 事故车的采集记录,车辆状态与配置的代表性有限。文中报文 ID、字节取值与时间戳均为该公开仓库的观测记录,未经独立复现,其中多处标注为推断而非确认。请勿据此对车辆进行任何发送或控制操作,实际工作请以自有采集与官方资料为准。

更新记录

  • 2026-10-14 初稿

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注