【问题标题】:Android OBD-II How to clear distance travelled (PID0131)?Android OBD-II 如何清除行驶距离(PID0131)?
【发布时间】:2015-01-02 02:45:06
【问题描述】:

我正在开发一个应用程序,我需要计算从 A 点到 B 点(乘汽车)的距离。

我问过Elm Electronics(芯片组制造商),他们说没有标准的 OBD-II PID 从里程表返回里程,尽管汽车制造商可能会提供 PID。由于这种方式不标准,所以我找到了另一种方式。

PID 0131(清除代码后的旅行距离)正在返回一些我认为可能有用的东西。如果我能够在 A 点清除它并在 B 点读取它的值,那么我就完成了:)

我想了很多来猜测“代码已清除”是什么意思,但我不明白这是什么意思?还有我的另一个重要问题,如何清除代码或重置此 PID?

任何建议将不胜感激。谢谢。


更新

我刚刚在两辆汽车上进行了测试。

  1. 在奔驰车上没有 OBD-II 命令有效。我无法获得任何数据:(
  2. 我在 Persona car (Local Malaysia) 上得到了正确的回复,但 0x0131 PID 总是返回 7F01,即 16608KM,即使经过几公里。我尝试通过发送 04 命令来重置它(正如 Eric 在他的回答中所建议的那样),但是,一切都没有弄清楚 :) 我仍然得到 7F01 作为响应。

我的图书馆可供任何正在寻找 OBD-II 库 from here 的人使用。

所以,我打算做的是,因为我能够获得速度 (v),所以我能够根据 d = v * t 公式计算距离。

【问题讨论】:

  • 这里有一个提示,可以使用任何obd2阅读器或断开汽车电池来清除代码。基本上,你的方法是行不通的。
  • @ElliottFrisch 感谢您的快速回复。我实际上使用的是蓝牙 ELM327,它是一个阅读器并连接到我的应用程序。我可以发送代码并获得结果。但我想知道我可以通过命令重置(清除代码)吗?
  • 根据this 是的。这是Z
  • 我有一台 Actron,所以我真的帮不上什么忙……祝你好运!
  • @Mr.Hyde,不,您应该每秒读取v 并将其保存在某处(在内存中,例如列表或数据库中),然后将它们全部添加以找到最终距离。

标签: android obd-ii


【解决方案1】:

Elm Electronics 是对的。重置故障代码解决方案是可能的,但可能是不需要的解决方法。

模式 04 用于重置代码。发送 04 将重置 MIL(故障指示灯)并重置您要重置的代码。

在 cmets 中,Chris 建议使用该值,而不是自己跟踪该值。这样您就不需要误用 Mode 04。 Th 0131 值在 65535 公里处溢出。但是,当您将汽车送去维修时,他们可能会重置此值,这取决于谁在维修您的汽车。

来源:Mode 04 - Wikipedia

【讨论】:

  • 为不相关的目的清除诊断代码听起来不是个好主意。
  • 确实如此,读者们请注意!但是,这是他可以利用问题中提到的 0131 PID 的唯一方法。
  • 这个值会很快溢出吗?否则存储要减去的原始值应该可以工作,除非其他人(如合法引擎服务)在两者之间清除它,但这也会破坏这种方法。
  • @EricSmekens 感谢您的回复。我还没有测试,但我认为根据您的参考它是正确的。很快就会测试它。
  • @EricSmekens,你有长途旅行吗?我也必须这样做。让我知道任何解决方案。
【解决方案2】:

有两个PId:0x0121Distance travelled with malfunction indicator lamp (MIL) on保持MIL开启的距离和0x0131Distance travelled since codes cleared使用模式清除MIL后保持距离0x04。通过说代码,它意味着诊断故障代码(DTC)。当其中一个继续计算距离时,另一个是固定的,并且仅根据 MIL 的打开或关闭为它们完成激活。

为了获得里程,afaik,除了这两个 PID 之外,您还需要将里程表的当前里程作为参考。例如,如果里程表* 上的当前里程为 X 并且这两个 PID 的第一次读数分别为 YZ,并且xy 是这两个 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 的读数溢出也应考虑在内。

【讨论】:

    【解决方案3】:

    我认为您可以使用 PID 0x011F自引擎启动后的运行时间)和 PID 0x010D车速)。如果将这些值保存在 SD 卡中,则可以将这两个值相乘。

    【讨论】:

    • 简单的乘法在这里没有给出正确的答案。您需要获取有关行程持续时间的速度读数积分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多