Vtrux 与 Coda EV:网关型改装车的 CAN 信号档案

作者:

在

结论:Vtrux(2014 款 Silverado 1500 的 EREV 改装车)最典型的数据特征是「一车三总线 + 主动网关」:OBD-II 口后面不是一条总线,而是三条独立 CAN,由 VCM 做跨总线网关,并且 VCM 会主动改写 ECM 的发动机数据——真实转速只在 OBD 总线上,Vehicle 总线上是约 800 RPM 的合成值。同仓库记录的 Coda EV 则是「一车四总线 + 网关转发」。以下结论仅限源文档记录的这两辆车及其固件与校准。

车辆与适用范围

本文数据来自第三方开源项目对两台实车的逆向记录:一台是 2014 款 Silverado 1500 的 EREV 改装车 Vtrux,另一台是 Coda EV 纯电轿车,两者出自同一仓库。

项 内容
车型 Vtrux —— 2014 款 Silverado 1500 的 EREV 改装车;同仓库另记录一台 Coda EV 轿车
年款 / 市场版本 Vtrux 底车为 2014 款;Coda 年款与市场版本源文档未确认
动力与改装状态 A123 LFP 电池包 116 节串联,标称约 383 V(约 360 V@10% SoC 至约 422 V 充满);原 GM 变速箱换成双 Remy 电机配 Dana TM4 CO150 逆变器;Woodward Motohawk 整车控制器(Via Motors VCM)兼作 GM CAN 网关
采集跨度 源文档为多条实车日志(充电、公路巡航、隔离与互锁故障、过热等场景)加台架回放,未给出统一时长与帧数
适用范围 仅限源文档记录的这两辆车与所列日志;不适用于量产 Silverado,也不保证适用于同型号其他改装车

总线与寻址

两台车都以经典 CAN 与 11 位标准帧为主,源文档未给出这两辆车的总线波特率。Vtrux 的核心特征是「三总线 + 主动网关」,Coda 是「四总线 + 网关转发」。日志通道编号都会随采集器插拔顺序变化,因此必须按报文内容识别总线。

项 内容
帧格式 车控主用 11 位标准帧;Bel 充电机/逆变器与 DCDC 使用 29 位 J1939 扩展帧
Vtrux 三条总线 Powertrain(DLC 引脚 CAN-H 1 / CAN-L 9)、Vehicle(引脚 6 / 14)、OBD(引脚 10 / 2)
Vtrux 总线识别 含 0x051 即 Powertrain;含 0x1E5 与 0x500 即 Vehicle;含 0x040–0x044 即 OBD。不要用 0x441–0x464 判 OBD,该区间含被网关桥接的 GMLAN 报文
Coda 四条总线 B CAN(引脚 2 / 3)、D CAN(引脚 10 / 11)、C CAN(引脚 7 / 15,直读单体电压)、Diag CAN(引脚 6 / 14,标准 OBD 引脚);另有不可经 OBD 访问的私有 Motor CAN(DLCM↔MCM)
Coda 总线识别 C CAN 恒含 0x000–0x019(104 节单体电压);B CAN 含 0x1D5、0x48A、0x275、0x381、0x383;D CAN 含 0x308、0x312、0x325、0x330、0x580
网关 Vtrux 用 VCM 跨三总线选择性桥接并改写 ECM 数据;Coda 用 GWM 把 Diag CAN 路由到 J1962 并选择性转发

已解码信号

下表从源文档已标注置信度的条目中抽取。Vtrux 的置信度分级为 CONFIRMED(编码与用途均已独立验证)、CONFIRMED-SYMM(由对称结构推出)、CONFIRMED-DECOMPILE(编码由反编译确认,用途仍为标签)、PARTIAL(编码确认但角色或刻度存疑)与 REMOVED(已按策略移除)。Coda 部分沿用源文档的 CONFIRMED 标注。

信号 位置(ID / DID / 字节) 解码 证据
bcm_soc(电池 SoC) 0x0410 B3 raw × 0.5 % CONFIRMED(与 0x411 高分辨率 SoC 相关 r=0.9999)
bcm_ibat(电池电流) 0x0410 B4:B5(大端 uint16) raw × 0.025 − 1000 A CONFIRMED(raw=40000 对应 0 A,发电机启停处穿越零点)
bcm_vbat(电池包电压) 0x0410 B6[3:0]:B7(12 位) raw × 0.25 V CONFIRMED(接触器闭合后与 GENE_HighPwr_Volt 差不超过 1.25 V;启动哨兵值 1023.5 V 表示无效)
bcm_cell_vmax / vmin 0x0430 B0[4:0]:B1 / B2[4:0]:B3(13 位) raw × 0.001 V CONFIRMED(稳定窗口内 r 大于 0.99)
bcm_cell_tmax / tmin 0x0430 B4 / B5 raw × 0.5 − 40 ℃ CONFIRMED
bcm_lvbat(12 V 电压) 0x0430 B7 raw × 0.1 V CONFIRMED(140=14.0 V DCDC 工作,127=12.7 V 静置)
bcm_mainc_stat(主接触器状态) 0x0440 B0[5:2](4 位,16 态) 状态机枚举 CONFIRMED(充电日志观测到 ALL_OPEN→CLOSE_MAINR→WAIT_PRECHARGE→… 的状态转移)
bcm_vbus_pos / vbus_neg 0x0440 B4:B5[7:4] / B5[3:0]:B6(12 位) raw × 0.25 V / raw × 0.25 − 500 V CONFIRMED(正、负直流母线对地电压)
GENE_Mot_Trq(发电机扭矩回馈) 0x0471 B0:B1(小端 uint16) raw × 0.125 − 4096 Nm CONFIRMED(与 0x051 扭矩指令相关 r=0.9984)
GENE_HighPwr_Volt 0x0482 B1:B2[2:0](11 位小端) raw × 1 V CONFIRMED(高速巡航稳定在 383–384 V)
GENE_HighPwr_Curr 0x0482 B3:B4[5:0](14 位小端) raw × 0.25 − 2048 A CONFIRMED(巡航约 −40 A)
parkLockState(驻车锁状态) 0x055C B0[2:0](3 位,7 项) 枚举 CONFIRMED(两车原始日志交叉验证)
ess_power(电池包功率) 0x0598 B0:B1 (raw − 32768)× 0.01 kW CONFIRMED(线上格式不变;源文档另记录某类商业诊断工具自身解码有偏置,该信号已迁出原 DBC 归入实验 DBC)
VehicleOdometer(整车里程) 0x0625 B0:B1:B2(24 位大端) raw × 1 km CONFIRMED(日志 raw=95,517 km 与仪表读数一致)
DLCM_TorqueRequest(Coda 扭矩请求) 0x212 B4[3:0]:B5(12 位 nibble 拆分) raw × 0.244 Nm,零点 raw=2000 CONFIRMED(与 0x1C0 扭矩相关 r=0.999,峰值 293 Nm)

读取方法与注意事项

最关键的工程约束是总线识别。两台车的日志通道号都不可信——采集器插拔顺序一变,同一通道对应的总线就变了。做法是用 anchor ID 判定:先用一条稳定广播的专属 ID 认出总线,再做解析。Vtrux 还提醒,0x441–0x464 区间混入了被 VCM 桥接到 Vehicle 总线的 GMLAN 报文,用它判 OBD 会误判。

第二条是网关的影响。Vtrux 的 VCM 会对转发内容做改写:ECM 的真实转速只出现在 OBD 总线(0x0C9,熄火时为 0,运转时为真实值),而 Vehicle 总线上是约 800 RPM 的合成值。轮速被掩零后,ECM 自行算出零车速并广播 0x3E9,形成级联——这不是 VCM 直接改写车速,而是屏蔽输入后的自然结果。因此同一物理量在不同总线上可能有不同含义。

第三条是周期与新鲜度。同一 ID 在不同固件上周期可能不同(例如某电池电流报文在一种 BMS 变体上是 1 Hz,另一种上是 10 Hz),源文档做相关分析时对不同周期分别用了零阶保持与线性插值,并指出周期差异会影响标定。解析前应先统计每个 ID 的实测频率。

证据等级与边界

源文档对每条信号都给了证据分级。CONFIRMED 表示编码与用途都被独立验证(物理试验、日志相关或与参考交叉匹配);CONFIRMED-DECOMPILE 只说明编码来自反编译,用途仍是原厂标签;CONFIRMED-SYMM 由已确认信号的对称结构推出,没有独立测试;PARTIAL 表示编码确认但角色或刻度仍有未决问题——例如油压信号 GeneOilPress 的零点偏移未确认,其换算在怠速下会得到物理上不合理的数值。

还有一类被明确记录为「异常」的条目。0x0451 曾被某类商业诊断工具误标为牵引逆变器扭矩,日志显示它其实是 GMLAN 报文,源文档已把对应条目移除;牵引逆变器热信号的真实 ID 是 0x044A,而非工具里列的 0x0459(后者在所有日志中为零帧)。

边界上必须强调:以上结论仅来自源文档记录的这一台 Vtrux 与这一台 Coda 及其固件与校准。不同年款、不同 BMS 变体,甚至同一车型换了电池包,位置与刻度都可能变化,实车读取前应先在目标车上复核。

常见问题

Vtrux 的 OBD 口能直接抓到全部三条总线吗?

三条总线在 J1962 口上都有引脚可达(Powertrain 1/9、Vehicle 6/14、OBD 10/2),但日志里的通道号是任意的,必须用 anchor ID 判断当前通道对应哪条总线。另外 VCM 会对桥接内容做过滤与改写,因此「在车上抓到」不等于「拿到原始数据」。

为什么同一辆车上车速会有两个来源?

因为 VCM 掩零了发给 ECM 的轮速输入,ECM 于是算出零车速并广播 0x3E9,OBD 总线上的该广播因此恒为零。真实车速在 Vehicle 总线上,由 VCM 用真实轮速生成;标准 OBD PID 0x0D 也返回真实车速,但它由 VCM 自己应答,而不是把请求桥接给 ECM。

标注 CONFIRMED 的信号可以直接拿来用吗?

可以用,但要区分级别。CONFIRMED 表示编码与用途都被独立验证;CONFIRMED-DECOMPILE 与 CONFIRMED-SYMM 只解决了「编码是什么」,用途仍是推断或标签,源文档已明确保留这一不确定性。PARTIAL 条目在使用前应先补验证。

这些解码能套用到别的 Vtrux 或 Coda 上吗?

不能。源文档的全部结论都限定在被记录的这两辆车及其固件与校准上,并明确指出不同 BMS 变体、不同固件之间字节偏移与周期存在差异。换车使用前必须重新复核。

延伸阅读

参考资料

  • 项目 01 —— public-can-dbc-datasets/additional/nickyivyca-vtrux-coda/projects/vtrux/README.md(Vtrux 总线、网关与模块拓扑主来源)
  • 项目 01 —— public-can-dbc-datasets/additional/nickyivyca-vtrux-coda/projects/vtrux/notes/epri-verification.md(已解码信号的置信度分级与证据)
  • 项目 01 —— public-can-dbc-datasets/additional/nickyivyca-vtrux-coda/projects/coda/README.md(Coda 四总线、anchor ID 与解码条目)

说明:本文整理自第三方开源项目的公开文档,仅代表该文档所记录的单个车辆样本,不代表同型号全系车型。CAN 与诊断操作存在风险,任何实车操作前请自行复核并遵守当地法规。

更新记录

首次发布 2026-10-11 最近核对:2026-10-11

评论

发表回复

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