自定义 PID · OBD-II · iPhone · CarPlay · WrenchTime Pro
iPhone 上的自定义 OBD-II PID,读取你的车不愿主动告诉你的数据
WrenchTime 里的自定义 PID 是一条你自己定义的原始 OBD-II 请求,用来读取 App 默认不显示的数据:变速箱或机油温度、增压压力、厂商专有的传感器、一个开关量。你选择服务(01、21 或 22)、标识符、要询问的模块以及它的寻址方式,然后用字节宽度、符号、比例和偏移量,或者用一个基于字节 A 到 H 的公式,把回应的字节变成一个数字,再选择它的画法:环形仪表、纯数字、状态灯或对照表。这个读数会出现在“实时数据与状态”里,出现在 WrenchTime Live 仪表盘上的一张卡片里,出现在 CarPlay 上的一块磁贴里,并且可以随每段行程一起记录。你不必从零开始:“从目录导入”会列出 OBDb 社区已经为最接近你车型的型号整理好的读数,而别人以链接分享的 PID 到手时所有设置都已填好。它需要低功耗蓝牙 ELM327 适配器或 OBDLink MX+,以及 WrenchTime Pro。它只能读取:在自定义 PID 里输入任何内容,都无法清除、写入、重新编程或驱动车上的任何东西。

什么是自定义 PID,什么时候需要它?
WrenchTime 自己会读取模式 01 的标准参数:转速、车速、负荷、油门、冷却液和进气温度、燃油存量、电压、进气歧管压力和燃油流量(见 iPhone 上的 OBD-II App 指南)。车知道的很多数值不在其中,因为标准并不要求它们,或者厂商把它们放在发动机以外的模块里。变速箱油温、机油温度、涡轮增压、DPF 碳烟负荷或变速箱挡位通常都属于这一类。自定义 PID 就是你自己去询问其中某一项的方式。你可以从社区目录导入一个,打开别人以链接分享的一个,或者自己带来请求和公式,来源可以是你车辆的资料、车主论坛,或者你已经在别的 App 里用的清单。这个工具在“车辆”标签页里,位于打开“车辆工具”的心跳按钮之后,每个 PID 只属于一辆车。
我的车的 PID 去哪里找?
先去社区目录找。“新建 PID”旁边的“从目录导入”会打开 OBDb 的目录,这是一个开放的社区项目,整理了每个车型会回应哪些信号。它从你车辆的品牌开始;选择最接近你车型的型号,它的信号就会列出来,一点即可导入,成为仍可编辑的普通自定义 PID。在车辆详情里设置车型年份后,列表会筛选到那一年,每个信号都标明已验证或未验证;目录归在该车型其他年份下的信号会单独列出,因为它的年份数据并不完整。App 暂时无法读取的信号会标为不支持,而不是隐藏起来。目录在你打开时才获取,从不随 App 一起打包,并会保留一份副本供离线时使用。其中的定义以 CC BY-SA 4.0 授权,并在目录页面上注明出处。
我能和别人分享自定义 PID 吗?
可以,以链接的形式。打开一个已保存的 PID 并分享它:链接里装着完整的定义,包括请求、解码和显示方式,中间不经过任何服务器。打开链接的人,或在自己的 PID 列表里用“粘贴链接”粘贴它的人,会在导入任何内容之前先看到请求和解码,并选择把它加到自己的哪辆车上;以仅查看方式共享给他的车辆无法接收。来自别人的链接和其他自定义 PID 一样只发送只读请求,但请只导入你信任的人分享的内容。这是在车友会或车型论坛里传递一个好用 PID 的最简单方法。
自定义 PID 可以发送哪些请求?
三种读取服务,除此之外没有别的,发给你选定的模块,使用该模块所用的那种 CAN 寻址方式。
- 服务 01、21 和 22 01 是标准的当前数据服务,21 是较早的、使用一个字节标识符的厂商专有读取服务,22 是使用两个字节标识符的 UDS 按标识符读取,大多数较新的厂商数值都在这里。
- ECU 地址头 自动(7DF,每个 OBD-II 模块都会监听的功能性请求)、发动机(7E0)、变速箱(7E1),或者用于其他任何模块的三位自定义地址头。地址头只为这一条请求设置,并在请求结束后立刻恢复为 7DF。带自定义地址头的 PID 按慢速层级轮询,大约每八秒一次,因为每次读取都要和适配器多来回好几次。
- 标准、扩展或 29-bit 寻址 标准寻址使用 11-bit CAN 标识符,大多数车辆都是这样。扩展寻址用于位于网关之后、要求前置目标字节的模块,需要一个响应 ID,并且适配器要支持它。29-bit 寻址用于诊断使用 29-bit 标识符的车辆;请求以 18DA 开头时,响应 ID 可以留空,因为它由请求推导出来。
- 借用另一种宽度,只用一轮 29-bit 的 PID 可以用在 OBD 接口以 11-bit 应答的车上,反过来也一样:WrenchTime 会为这个读数把适配器切到另一种协议,读完立刻切回来,而且同时到期的几个这样的 PID 会共用一次切换,让实时数据保持流畅。这次切换从不使用会把协议写进适配器存储器的那条指令。如果适配器拒绝切换,这些 PID 在本次会话里就会被跳过,而不会被强行读取。
怎样把回应变成一个数字?
去掉服务回显和标识符之后,回应的数据字节依次命名为 A、B、C,直到 H,你可以从两种读法里选一种。编辑器里的“测试”区会用“立即读取”把请求发送一次,并把原始回应和解码后的数值并排显示,所以字节或比例错了,在保存之前就能看出来。
- 简洁 读取一个、两个或四个字节(A、AB 或 ABCD),按无符号或 8-bit、16-bit 有符号处理,然后乘以一个比例并加上一个偏移量。大多数公开的 PID 定义都符合这种形式。
- 公式 一个基于 A 到 H 的 Torque 风格表达式,支持 + - * / ^ 和括号,另有用于一个有符号字节的 SIGNED(A)、用于有符号 16-bit 数值的 INT16(A:B),以及用于单个位的 BIT(A:n)。像 A * 0.75 - 40 这样的公式,可以照着通常公布的样子直接输入。
- 单位换算 可选,在解码之后进行:摄氏度与华氏度互换,kPa 或 bar 与 psi 互换,km/h 与 mph 互换。单位标签本身是自由文本,因为 App 无从知道厂商是用什么单位来记录一个数值的。
- 轮询层级 快速(约每秒三次)、普通(约每秒一次)或慢速(约每八秒一次),和内置读数采用同一套节奏。适配器的吞吐量有限,所以如果实时数据出现卡顿,就把某个 PID 调慢,或者删掉一个。
自定义读数可以怎样显示?
每个 PID 都有一种显示类型,所有显示它的界面都使用同一种,所以一个读数在手机上和在车里看起来是一样的。简称是能放进仪表卡片和 CarPlay 磁贴的那个名字。
- 仪表 一个环,带有你自己设定的最小值和最大值,以及可选的、低侧和高侧的注意和危险色带,所以变速箱温度会在你定下的位置变成琥珀色,再变成红色。
- 数值 一个普通的数值,旁边是它的单位标签,适合没有实际意义量程的读数。
- 状态 一盏读作开或关的指示灯。除非你选定了某一个特定位,否则任何非零的值都算作激活,“激活时提醒”会在它亮起时把它染成危险色。
- 对照表 把一个值映射到一个标签的若干行,让挡位选择器或模式字节显示为 P、R、N、D 或 Eco,而不是一个数字。
自定义 PID 会出现在哪里?
出现在三个地方,全都来自同一个适配器会话。在“设置”、“连接”下的“实时数据与状态”里,这辆车已启用的自定义 PID 跟在内置仪表之后,单独成为一个分区。在 WrenchTime Live 仪表盘上,自定义 PID 卡片可以像其他仪表一样添加,而且它是唯一可以出现多次的卡片,所以两个自定义读数可以放在同一页上。车辆不止一辆时,小组件库可以让你选择列出哪一辆车的自定义 PID:属于另一辆车的卡片会写明它读取的是哪一辆,并在仪表盘切到那辆车时活起来,因为每个 PID 都是通过它自己那辆车的适配器读取的。在 CarPlay 上,自定义 PID 是一块磁贴,你可以在“设置”、“CarPlay”里把它放进“Live”标签页的布局,采用和手机上相同的范围与色带来绘制。状态类 PID 在 CarPlay 上始终是一块带色的磁贴,驾驶时绝不会弹出提醒。CarPlay 属于 WrenchTime Pro。

自定义读数可以随每段行程一起记录吗?
可以,按 PID 逐个设置。打开“行程中记录”,这个读数就会随该适配器记录的每段驾驶一起保存,与内置遥测一起存入行程,并经过简化以控制行程的存储体积。记录下来的自定义 PID 可以在行程图表里作为一个单独的通道选择,也可以在全屏路线的时间轴菜单里选择,它会沿着这段驾驶画出来,它的仪表在回放时会跟着动。这个开关默认是关的,因为每多记录一个读数,行程就会变大,而适配器的吞吐量还要与它读取的其他一切共用。一段行程最多可以记录十六个自定义读数。和其余的 OBD-II 遥测一样,除了通过你自己的 iCloud,什么都不会离开你的设备。
怎样在 iPhone 上读取变速箱温度?
用一个受支持的 OBD-II 适配器和一个自定义 PID。变速箱温度不是标准的 OBD-II 参数,所以它的请求取决于品牌,往往还取决于变速箱。先看看“从目录导入”:如果社区已经为你的车型整理过,就可以直接导入。否则就找到适合你车辆的服务、标识符和公式,爱好者论坛和别的 App 用的 PID 清单通常会公布它们;然后在 WrenchTime 里,添加一个自定义 PID,按清单所写选择服务 22 或 21,把 ECU 地址头设为变速箱(7E1)或清单给出的地址头,如果变速箱位于 29-bit 的模块上就选择 29-bit 寻址,然后输入公式。用“立即读取”确认返回的是一个合理的温度,选择带注意和危险色带的“仪表”,如果想要每段驾驶里的温度,就打开“行程中记录”。如果模块没有回应,也许这辆车根本没有通过 OBD 接口开放这个数值,这是任何 App 都绕不过去的。
我能更改内置仪表的刻度吗?
可以,而且这个工具是免费的。“仪表刻度”就在同一个“车辆工具”列表里,可以为某一辆车改写任何内置 OBD-II 读数的仪表:它的最小值和最大值、一条注意色带和一条危险色带(每一侧都可选),以及转速表的红线。红线更低的柴油车,或者平时就更热的冷却液温度,这样就能画在该在的位置。这个改写是按车辆设置的,其他每辆车都保留出厂的数字,每个通道或者整辆车都可以重置。这个读数出现的所有地方,在“实时数据与状态”、Live 仪表盘和 CarPlay 上,都按同一个刻度绘制。自定义 PID 不需要它:它的仪表范围在 PID 本身里设定。
自定义 PID 能改变我车里的任何东西吗?
不能。请求构造器只接受服务 01、21 和 22,别无其他,所以清除故障码、执行器测试、会话控制、安全访问、写入、编码和例程,无论输入什么,都无法从自定义 PID 发出。每个地址字段都会检查长度是否严格符合、是否只含十六进制字符,不符合就拒绝而不是裁剪,所以文字无法夹带第二条指令上线。每次读取之后地址头都会恢复,适配器保存的协议也绝不会被改写。“故障码”工具通过自己那条受保护的路径清除故障码,要求发动机熄火并经过两次确认,绝不会通过自定义 PID。从目录导入或从链接打开的 PID 会经过同样的检查,所以别人写的定义也发不出任何手动输入的定义发不出的内容。如果你在找 iPhone 上 Torque Pro 风格的工具,我们的 iPhone 上的 Torque Pro 一文比较了哪些可以沿用、哪些不能。
常见问题
iPhone 上有 Torque Pro 自定义 PID 的替代品吗?
WrenchTime 的自定义 PID 在 iPhone 上覆盖了同样的范围:服务 01、21 和 22,自定义 ECU 地址头,以及基于字节 A 到 H、带 SIGNED、INT16 和 BIT 函数的 Torque 风格公式,所以大多数公开的 Torque PID 定义都可以照原样输入。它需要低功耗蓝牙 ELM327 适配器或 OBDLink MX+,以及 WrenchTime Pro。它不读取 Torque 的 PID 文件,但 PID 可以从 OBDb 社区目录导入,或从别人分享的链接打开,其余的则手动输入。
WrenchTime 自带厂商 PID 清单吗?
没有附带,但可以导入。“从目录导入”会列出 OBDb 社区为最接近你车型的型号整理好的 PID,按车型年份筛选,并标明已验证或未验证。目录里没有的,你可以根据车辆资料或公开清单自己定义,“立即读取”测试会显示原始回应,让你在保存之前核对一个定义。
可以分享自定义 PID 吗?
可以,以一个装着完整定义的链接分享。打开或粘贴它的人会先看到请求和解码,再选择把它加到哪辆车上。
我能用 iPhone 读取变速箱温度吗?
在很多车上可以,方法是用一个指向变速箱模块的自定义 PID,前提是你知道你这个品牌的请求和公式。并不是每辆车都会通过 OBD 接口开放这个数值。
自定义 PID 免费吗?
自定义 PID 属于 WrenchTime Pro。“仪表刻度”工具可以按车辆改变内置仪表的范围、色带和红线,它是免费的。
自定义 PID 会损坏或重新编程我的车吗?
不会。只能发送读取类的服务 01、21 和 22。写入、清除、执行器测试、安全访问、会话控制和例程,从设计上就会被拒绝。
自定义 PID 能用在 CarPlay 上吗?
能。自定义 PID 可以作为一块磁贴放进 CarPlay 的“Live”标签页,采用和手机上相同的仪表范围与色带来绘制。CarPlay 属于 WrenchTime Pro。
自定义 PID 会同步到我的其他设备吗?
会。自定义 PID 随它的车辆一起保存,并像这辆车的其余数据一样通过你自己的 iCloud 同步。适配器的绑定本身则留在创建它的那部手机上。
献给宁愿弄清楚、也不愿猜的人。
免费下载。一辆车,实打实的功能,没有广告。你的车库会感谢你。
在 App Store 下载 WrenchTime