Android OBD-II 如何清除行驶距离(PID0131)?
Android OBD-II How to clear distance travelled (PID0131)?
我正在开发一个应用程序,我需要计算从 A 点到 B 点(开车)的距离。
我问了 Elm Electronics(芯片组制造商),他们说没有标准的 OBD-II PID 来计算里程表的 return 里程数,尽管汽车制造商可能会提供 PID。由于这种方式不标准,所以我找到了另一种方式。
PID 0131(代码清除后行驶的距离),return我认为可能会有帮助。如果我能够在 A 点清除它并在 B 点读取它的值,那么我就完成了:)
我想了很多来猜测 "codes cleared" 是什么意思,但我无法理解它是什么意思?还有我的另一个重要问题,如何清除代码或重置此 PID?
如有任何建议,我们将不胜感激。谢谢。
更新
我刚刚在两辆车上进行了测试。
- 在奔驰汽车上,OBD-II 命令不起作用。我无法获得任何数据:(
- 我在 Persona 汽车(马来西亚本地)上得到了正确的回复,但是 0x0131 PID 总是 returned 7F01,即使经过几公里后也是 16608KM。我试图通过发送 04 命令来重置它(正如埃里克在他的回答中所建议的那样),但是,什么都不清楚 :) 我仍然得到 7F01 作为响应。
任何正在寻找 OBD-II 库的人都可以使用我的库 from here。
所以,我打算做的是,因为我能够获得速度 (v),所以我能够根据 d = v * t
公式计算距离。
Elm Electronics 是对的。重置故障代码解决方案是可能的,但可能是不需要的解决方法。
模式04用于重置代码。发送 04 将重置 MIL(故障指示灯)并重置您要重置的代码。
在评论中,Chris 建议使用该值,而不是自己跟踪该值。这样你就不需要滥用模式 04。
Th 0131 值在 65535 公里处溢出。但是当你把你的车送去维修时,他们可以重新设置这个值,当然这取决于谁在维修你的车。
我认为您可以使用 PID 0x011F(运行 引擎启动时间 )和 PID 0x010D(车速)。如果将这些值保存在 SD 卡中,则可以将这两个值相乘。
有两个PIds:0x0121 Distance travelled with malfunction indicator lamp (MIL) on
和MIL保持距离0x0131 Distance travelled since codes cleared
使用模式 0x04 清除 MIL 后保持距离。通过说代码,它意味着诊断故障代码(DTC)。当其中一个继续计算距离时,另一个是固定的,并且仅根据 MIL 打开或关闭为它们完成激活。
为了获得里程数,afaik,除了这两个 PID 之外,您还需要将里程表的当前里程数作为参考。例如,如果里程表*上的当前里程是 X 并且这两个 PID 的第一次读数是 Y 和 Z分别是,x和y是这两个PID的实时读数,这两个公式可以给你里程数和行程距离:
Real-Time mileage** = X + (y - Y) + (z - Z)
Trip distance (MIL Off) = x(end) - x(start)
Trip distance (MIL On) = y(end) - y(start)
*里程表本应由PID 0x01A6 Odometer
提供,但几乎所有车辆都不支持。
**这两个 PID 的读数溢出也应考虑在内。
我正在开发一个应用程序,我需要计算从 A 点到 B 点(开车)的距离。
我问了 Elm Electronics(芯片组制造商),他们说没有标准的 OBD-II PID 来计算里程表的 return 里程数,尽管汽车制造商可能会提供 PID。由于这种方式不标准,所以我找到了另一种方式。
PID 0131(代码清除后行驶的距离),return我认为可能会有帮助。如果我能够在 A 点清除它并在 B 点读取它的值,那么我就完成了:)
我想了很多来猜测 "codes cleared" 是什么意思,但我无法理解它是什么意思?还有我的另一个重要问题,如何清除代码或重置此 PID?
如有任何建议,我们将不胜感激。谢谢。
更新
我刚刚在两辆车上进行了测试。
- 在奔驰汽车上,OBD-II 命令不起作用。我无法获得任何数据:(
- 我在 Persona 汽车(马来西亚本地)上得到了正确的回复,但是 0x0131 PID 总是 returned 7F01,即使经过几公里后也是 16608KM。我试图通过发送 04 命令来重置它(正如埃里克在他的回答中所建议的那样),但是,什么都不清楚 :) 我仍然得到 7F01 作为响应。
任何正在寻找 OBD-II 库的人都可以使用我的库 from here。
所以,我打算做的是,因为我能够获得速度 (v),所以我能够根据 d = v * t
公式计算距离。
Elm Electronics 是对的。重置故障代码解决方案是可能的,但可能是不需要的解决方法。
模式04用于重置代码。发送 04 将重置 MIL(故障指示灯)并重置您要重置的代码。
在评论中,Chris 建议使用该值,而不是自己跟踪该值。这样你就不需要滥用模式 04。 Th 0131 值在 65535 公里处溢出。但是当你把你的车送去维修时,他们可以重新设置这个值,当然这取决于谁在维修你的车。
我认为您可以使用 PID 0x011F(运行 引擎启动时间 )和 PID 0x010D(车速)。如果将这些值保存在 SD 卡中,则可以将这两个值相乘。
有两个PIds:0x0121 Distance travelled with malfunction indicator lamp (MIL) on
和MIL保持距离0x0131 Distance travelled since codes cleared
使用模式 0x04 清除 MIL 后保持距离。通过说代码,它意味着诊断故障代码(DTC)。当其中一个继续计算距离时,另一个是固定的,并且仅根据 MIL 打开或关闭为它们完成激活。
为了获得里程数,afaik,除了这两个 PID 之外,您还需要将里程表的当前里程数作为参考。例如,如果里程表*上的当前里程是 X 并且这两个 PID 的第一次读数是 Y 和 Z分别是,x和y是这两个PID的实时读数,这两个公式可以给你里程数和行程距离:
Real-Time mileage** = X + (y - Y) + (z - Z)
Trip distance (MIL Off) = x(end) - x(start)
Trip distance (MIL On) = y(end) - y(start)
*里程表本应由PID 0x01A6 Odometer
提供,但几乎所有车辆都不支持。
**这两个 PID 的读数溢出也应考虑在内。