结论:Fiat Ducato X250 的一个反直觉特征是OBD 口后面不是发动机 CAN,而是一张 50 kbit/s 的车身 CAN:引脚 6/14 承载 B-CAN,500 kbit/s 上什么都没有;发动机 ECU 走引脚 7 的 K 线(ISO 14230-4 KWP2000)。好消息是仪表需要的多数发动机量(转速、冷却液温度、车速、里程、续航)都被广播到这张车身网上,所以一个只监听、不发送的 CAN 记录器就能读到。源文档记录 18 个 ID、约 90 帧/秒,并逐条说明每个信号是怎么在实车上核对出来的。下述结论仅限源文档记录的那一台 2009 X250。
车辆与适用范围
源文档是一位车主的业余项目,属于单台车、单人实验。作者明确声明「只做监听、绝不发送」,并说明是配合一款支持 MQTT 的 OBD-CAN 记录适配器完成的;文档还提到另一台车(同平台另一辆 van)提供了油量数据。作者列出该平台同款车型(Citroën Jumper / Peugeot Boxer 2006–2014),但只有 Ducato X250 被测试过。
| 项 | 内容 |
|---|---|
| 车型 | Fiat Ducato X250,2.3 MultiJet 柴油(车身改装为 Elnagh Prince 55L 房车,7.15 m) |
| 年款 / 市场版本 | 2009(第一代 X250,模拟仪表 + 橙色 LCD);意大利(EU)市场 |
| ECU / 改装状态 | 原厂线束未改;OBD 口插一款 OBD-CAN 记录适配器(只监听模式);发动机 ECU 走 K 线 |
| 采集跨度 | 5 段真实抓包(怠速、门与灯、杂项动作、冷启动与轰油、约 20 分钟 7 km 行驶),约 90 帧/秒 |
| 适用范围 | 仅限这一台 Ducato X250;同平台 Jumper/Boxer 未测试,车身电路(例如车门与柜锁共用一条回路)因改装而异 |
总线与寻址
源文档把物理层写在最前面:OBD 引脚 6/14 是车身 CAN(B-CAN),50 kbit/s、11 位 ID;引脚 7 是发动机 ECU 的 K 线。作者特别提醒:把记录器设成 500 kbit/s 时「什么都看不到」,因为这张网上没有 500 kbit/s 的流量。
| 项 | 内容 |
|---|---|
| 物理层 | 双绞线 CAN,B-CAN 高/低;OBD 引脚 6/14 |
| 链路层 / 比特率 | 50 kbit/s(源文档明示;500 kbit/s 无流量) |
| 寻址方式 | 11 位 ID,文档记录 18 个 ID |
| CAN FD | 否;按经典 CAN 处理 |
| 发动机 ECU | 走 OBD 引脚 7 的 K 线(ISO 14230-4 KWP2000) |
| 模式 | 只监听(Silent / listen-only),记录器不在总线上发送 |
已解码信号
源文档对每个信号都写了「怎么验证」的一列,并明确保留未完成核对的条目。下表抽取代表性信号;油量与瞬时油耗两条按源文档原样保留其未完成核对的标注。
| 信号 | 位置(ID / 字节 / 位) | 解码 | 证据 |
|---|---|---|---|
| 制动踏板 | 0x180,b0 位 7 | 位 | 踩踏板 |
| 示宽灯 / 近光 / 远光 | 0x180,b1 位 5 / 3 / 4 | 各自为 1 位 | 灯光开关、拨杆 |
| 左 / 右转向灯 | 0x180,b2 = 0x40 / 0x20 | 随闪光跳变 | 拨杆 |
| 发动机是否运转 | 0x281 | 用「转速 > 300」判定(不用 b1 位 7) | 3 次钥匙测试(仅通电、启动、运转后停机) |
| 冷却液温度 | 0x281,b3 | b3 − 40 → °C | 表针居中时 81 °C |
| 转速 | 0x281,b5 与 b6 | (b6×256 + b5) / 8 → rpm | 怠速约 830,轰油 1800 / 3000 |
| 车速 | 0x286,b2 与 b3 | (b2×256 + b3) / 16 → km/h | 4 段稳态行驶与 GPS 差在 1% 内 |
| 车速(副本) | 0x2A0,b0 与 b1 | (b0×256 + b1) / 16 → km/h | 同 0x286 |
| 驻车制动 | 0x380,b0 位 5 | 位 | 拉手刹 |
| 任一车门开 | 0x380,b1 | 任一门开时为 0x0C,全关为 0x00 | 驾驶室门、房车门、储物柜共一条回路 |
| 倒挡 | 0x380,b2 位 2 | 位 | 挂倒挡进出 3 次 |
| 启动电池电压 | 0x380,b3 | b3 × 0.16 → V | 与启动电池上的分流计对比 20 分钟行驶 |
| 低油量告警 | 0x380,b4 位 1 | 0x02 表示进入储备 | 与仪表储备灯同亮时 b5 = 11、续航 110 km |
| 油量 | 0x380,b5 | b5 → 升 | 另一台满油 90 L 罐读 91;本文档尚未在本车下次加油时交叉核对 |
| 驾驶员安全带 | 0x39A,b2 位 0 | 1 = 未系(副本见 0x3C3 b4 位 1) | 系/解 3 次,跟随仪表告警灯 |
| 里程 | 0x603,b1 低半字节 + b2 + b3 | 20 位 → km | 61744 与仪表一致,行驶 7 km 后 +7 |
| 续航 | 0x603,b4 位 2-0 + b5 | 11 位 → km | 272 与仪表一致 |
| 瞬时油耗 | 0x603,b0 + b1 高半字节,BCD | BCD → L/100km(示例 11 6x = 11.6) | 源文档标注「待行驶中验证」 |
| 行程平均油耗 / 平均车速 / 时间 / 距离 | 0x643,b0-b7 | 油耗 BCD、车速 km/h、时间 BCD、距离 20 位×0.1 km | 与仪表行程电脑一致 |
| 仪表时钟 | 0x683,b0 / b1,BCD | 时 / 分 BCD | 与本车仪表钟一致(本车约慢 3 分钟) |
读取方法与注意事项
第一是速率设置:把记录器设成 50K、静默(Silent)模式,并在协议上选 slcan 以便抓包;源文档提醒设成 500K 会完全看不到流量。第二是总线上没有的东西:增压压力、发动机负荷、进气温度与故障码都在 K 线上,CAN-only 的记录器看不到;源文档把这条写进「不在本总线」一节。
第三是时间边界的陷阱。源文档给出三条:车钥匙拔出时整条总线静默,什么也读不到;熄火瞬间的最后一帧会「说谎」(油量 0、驻车制动释放、发动机仍报运转),不要基于该边沿做自动化;判断发动机是否运转要用「转速 > 300」,不要用 0x281 的 b1 位 7——它在仅通电、发动机未启动时就是 1,熄火最后一帧和行驶后 ECU 继续发送约 20 秒时也会误报。
第四是数据回读的取舍:里程、续航与油量没有过期机制,停车时会保留最后值,但在重启或 MQTT 重载后会变成未知值,直到下次通电;需要的话要在自己一侧加保留(retain)。此外作者提到,同一 ID 上的多个按位条目在实践中不一定都能可靠发布,所以灯、刹车、转向被合成一个 24 位原始值再在上层拆分。
证据等级与边界
可视为实车证据的是绝大多数条目——源文档逐条写了验证方式(踩踏板、切灯、GPS 对比、与分流计/仪表比对)。属于明确未完成的是油量(本文档尚未在本车加油时交叉核对,数字来自另一台车)与瞬时油耗(标注为待行驶中验证)。
不能外推的地方有两处。第一,这台是改装房车,车门、房车门与储物柜共用一条回路,所以 0x380 只能给「某个门开着」,不能分辨具体是哪扇门——同平台不同车身(van、底盘车、房车)的门路会不同。第二,源文档只测试了这一台 Ducato X250;同平台的 Jumper/Boxer 未测试,年款差异也可能改变 ID 与位定义。
关于「安全访问」类问题:源文档未提供任何绕过方法,且不建议尝试;它是纯监听项目,明确「不要在总线上发送报文」。本文只整理公开文档登记的只读信号。
常见问题
Ducato X250 的 OBD 口能读到发动机数据吗?
能读到一部分。源文档说明 OBD 引脚 6/14 是 50 kbit/s 的车身 CAN,引脚 7 是 K 线的发动机 ECU;转速、冷却液温度、车速、里程、续航这些被广播到车身网上的量,CAN-only 记录器可以只监听读到,而增压压力、负荷、进气温度与故障码在 K 线上读不到。
为什么设成 500K 看不到任何报文?
因为这张 OBD 口的车身 CAN 跑在 50 kbit/s,源文档说 500 kbit/s 上什么都没有。应设为 50K。
怎么判断发动机是否在运转?
用「转速 > 300」。源文档明确不要用 0x281 的 b1 位 7:它在仅通电、发动机未启动时就是 1,熄火最后一帧和行驶后 ECU 继续发送约 20 秒时也会误报。
为什么熄火后油量显示为 0?
因为源文档记录熄火瞬间的最后一帧会给出异常值(油量 0、驻车制动释放、发动机仍报运转)。作者建议不要基于这个边沿触发自动化,并让实时传感器用超时机制转为「不可用」而不是冻结。
延伸阅读
- 车电接入:为什么 ESP32 的 TWAI 不等于 OBD 接口 —— 说明「OBD 口后面是什么总线」需要按车确认。
- 车载信号为什么会说谎:TTL、源时间与 500 ms 新鲜度阈值 —— 与本文熄火最后一帧、无过期机制的判读一致。
- 同一个「转向灯」在三家车厂是三种实现:车辆状态归一化的坑 —— 对照本文「同一 ID 多字段、副本信号」的归一化问题。
- BMW E46 PT-CAN 数据档案:MS42/MS43 的 500 kbps 报文表 —— 同为「只监听广播帧」的欧系车解码纪律。
- 84% 的 PID 没有公开证据:OBD 私有协议解析的现实边界 —— 呼应本文「未核对的条目不写成结论」。
参考资料
- 项目 01 ——
public-can-dbc-datasets/additional/danderik88-fiat-ducato-x250/README.md(主来源:车辆、总线、取数路径与坑点)。 - 项目 01 ——
public-can-dbc-datasets/additional/danderik88-fiat-ducato-x250/docs/can-id-reference.md(逐 ID 的信号表与验证方式)。 - 项目 01 ——
public-can-dbc-datasets/additional/danderik88-fiat-ducato-x250/captures/README.md(5 段真实抓包的用途说明)。
说明:本文整理自第三方开源项目的公开文档,仅代表该文档所记录的单个车辆样本,不代表同型号全系车型。CAN 与诊断操作存在风险,任何实车操作前请自行复核并遵守当地法规。
更新记录
首次发布 2026-10-11 最近核对:2026-10-11
发表回复