Polaris Sportsman 的 J1939 档案:12 个 PGN 与 250 kbit/s

作者:

在

结论:Polaris Sportsman 的这份 J1939 档案给出 250 kbit/s、29 位扩展 ID 下 12 个 PGN 的信号定义,但它们是 2022 款 Sportsman 570 的逆向结果,工具面向的 2026 车型仍需逐条复验。另外两处硬边界必须知道:仓库未找到许可证文件,且工具导出的 DBC 因多信号 PGN 会重复占用同一 CAN ID,未被作为可用文件归档。

12 个 PGN 分成两类看

整车走 J1939,位速率 250 kbps、29 位扩展 ID,硬件链路是 Polaris 8 针诊断口 → GT150 → DB9 → PCAN DSUB9,配合 PEAK PCAN-USB FD 适配器与 PCAN-Basic 驱动,Python 侧通过 python-can 的 pcan 接口调用 PCANBasic.dll。配置集中在 polaris_can/config.py:interface 为 pcan,channel 为 PCAN_USBBUS1,bitrate 为 250000。

把 12 个 PGN 按性质分类,比按地址排序有用得多:一类是状态枚举(取值是离散码),另一类是数值量(需要字节序与缩放)。

PGN(含字节位) 信号 取值 / 换算 类别
0x18F00500[5] 挡位 0x4C = L、0x48 = H、0x4E = N、0x52 = R、0x50 = P 状态枚举
0x18FEF100[0] 手刹 0x37 = 已拉起、0x33 = 已释放 状态枚举
0x18FEF1FE[3] 脚刹 0xDF = 踩下、0xCF = 释放 状态枚举
0x18FF6CFE[1] 安全带 0xF7 = 系好、0xF3 = 解开 状态枚举
0x18F006FE[1] 差速锁 0xDF = 锁止、0xCF = 打开 状态枚举
0x18FDDFFE[0] 四驱模式 0xFC = 2WD、0xFD = 4WD 状态枚举
0x18FEF200[6] 油门 0x19–0xFA 映射为 0–100% 数值量,有量程端点
0x18FEF100[1:2] 车速 小端 uint16 除以 500,单位 mph 数值量,需字节序
0x18FF6600[0:1] 发动机转速 小端 uint16 数值量,未给缩放
0x18FEEEFE[0] 冷却液温度 字节值 + 40°C 偏移 数值量,偏移方向需复核
0x18FEFC00[1] 油量 0–254 数值量,未给百分比换算
0x18FEE500[0:1] 发动机小时计 小端 uint16 数值量,未给缩放

这张表里最值得注意的是最后一列。状态枚举只要码值对得上就能用;而转速、油量、小时计三项只给了类型与字节序,没有给缩放因子,水温那条甚至写成「字节 + 40°C 偏移」——与常见的减 40 相反。这四项在使用前都必须用已知工况反推。

为什么导出的 DBC 不能直接用

工具提供了 polaris-can export-dbc,输出 cantools 兼容格式,可导入 SavvyCAN、Cabana、Vector CANoe。但归档说明明确指出:导出函数会为多信号 PGN 创建多个使用同一 CAN ID 的独立报文,因此该输出未被作为经过验证的 DBC 归档。

这个坑在 J1939 场景下很典型。像 0x18FEF100 这样同时承载手刹与车速的 PGN,在 DBC 里应当是同一条报文下的两个信号;若导出成两条同 ID 报文,解析器要么只认第一条,要么按 ID 覆盖,结果就是丢信号。因此正确做法是把这份 PGN 表当作原始事实,手工建 DBC,而不是依赖自动导出。

五种模式:哪一种是真正的逆向工具

工具提供 decode、log、discover、replay、export-dbc 五种模式,其中 discover 才是为新车型定位信号的核心手段。

模式 命令 输出 适用场景
实时解码 polaris-can decode 终端仪表盘,10 Hz 刷新,含帧率、总线负载百分比、唯一 ID 计数 已知信号的日常查看,可加 --output 落盘
记录 polaris-can log session1.log 微秒级时间戳的 candump 兼容日志 外场采集,后续导入 SavvyCAN 等工具
发现 polaris-can discover --warmup 30 基线冻结后报告新 ID 与变化字节 新车型定位信号:怠速 30 秒建基线,再逐个操作开关
回放 polaris-can replay session1.log --dashboard 离线回放,可实时或加速 无硬件时开发与验证
导出 polaris-can export-dbc polaris.dbc DBC 文件 仅作起点,多信号 PGN 需手工修正

discover 的工作流是:预热阶段(默认 30 秒,可用 --warmup 60 延长)记录基线流量并冻结,随后进入发现阶段,监控新出现的 ID 与发生变化的字节。文档给出的示例输出显示基线里冻结了 47 个 CAN ID,随后报告新 ID 与具体字节的旧值到新值变化。操作要领是预热期间车辆真正处于怠速,之后一次只动一个开关或踏板。

解码时匹配成功的信号会打印 [KNOWN],不匹配的被标为需要重新映射的候选——2026 与 2022 的差异正是靠这个标记暴露出来的。

常见问题

2022 年的 PGN 表能直接用在 2026 车型上吗?

不能直接套用。README 明确说明工具面向 2026 款 Sportsman 570 EPS,但内置的 12 个 PGN 定义来自 2022 款 Sportsman 570,属于基线事实,需要在目标车型上逐条验证。若发现不匹配,应用 discover 模式重建:先怠速建立基线,再逐个操作开关与踏板,观察新 ID 与字节变化。

为什么导出的 DBC 没有被当作可用文件归档?

因为导出函数对多信号 PGN 会生成多条使用同一 CAN ID 的独立报文。例如 0x18FEF100 同时承载手刹与车速,正确形态应是同一条报文下的两个信号;拆成两条同 ID 报文会导致解析器丢信号。因此该输出未通过验证,未被归档,建议以 PGN 表为事实源手工建库。

车速 PGN 0x18FEF100 的换算单位是什么?

原文给出的是小端 uint16 除以 500,单位为 mph。也就是说原始值需要先按小端字节序拼成 16 位无符号整数,再除以 500 得到英里每小时;若系统内部使用 km/h 或 m/s,还要再做一级单位换算。

没有 PCAN 硬件能不能用这套工具?

可以。replay 模式支持离线回放日志文件,可实时或加速播放并接入仪表盘,仓库也提供了 tests/sample.log,在硬件未连接时用示例数据即可跑通,单元测试同样不依赖硬件。真正需要硬件的只有 decode、log 与 discover 三种模式。

延伸阅读

参考资料

  • 项目 01 —— public-can-dbc-datasets/additional/marvbull-polaris-sportsman-can/README.md(250 kbit/s J1939 配置、12 个 PGN 的信号定义、五种工具模式与故障排查)
  • 项目 01 —— public-can-dbc-datasets/additional/marvbull-polaris-sportsman-can/SOURCE.md(快照提交、证据边界、PGN_MAP 的 12 个标识符与导出 DBC 的缺陷说明、权利状态)

免责声明

本文所述 PGN、码值与换算均来自公开开源仓库的自述与工具代码,属社区逆向工程产物,不代表车辆制造商的官方数据。信号定义来自 2022 款车型,未经独立抓包验证,不同年款、市场与 ECU 版本可能存在差异。仓库未找到许可证文件,相关材料应作为私有离线研究副本,在权利确认前不得再分发或集成。

更新记录

  • 2026-10-14 初稿

评论

发表回复

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