Android OBD-II如何清除行进距离(PID0131)?

时间:2015-01-02 02:45:07

标签: android obd-ii

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

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

PID 0131(自代码清除以来行进的距离),正在返回我认为可能有用的内容。如果我能够在A点清除它并在B点读取它的值那么我就完成了:)

我想了很多猜测"代码已清除"意思是但我无法意识到这意味着什么?还有我的另一个重要问题,如何清除代码或重置此PID?

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


更新

我刚试了两辆车。

  1. 在奔驰车上没有OBD-II指令有效。我无法获得任何数据:(
  2. 我在Persona汽车(马来西亚本土)上得到了正确答复,但是0x0131 PID总是返回7F01,即使经过几公里后也是16608KM。我尝试通过发送04命令来重置它(正如Eric在他的回答中建议的那样),但是,没有什么是明确的:)我仍然得到7F01作为回应。
  3. 我的图书馆可供任何正在寻找OBD-II lib from here的人使用。

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

3 个答案:

答案 0 :(得分:1)

榆树电子是对的。重置故障代码解决方案是可能的,但可能是不需要的解决方法。

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

在评论中,Chris建议使用该值,而不是自己跟踪这个值。这样你就不必滥用模式04了。 Th 0131值溢出65535 km。但是当你带车进行维修时,他们可以重置这个值,这取决于谁维护你的车辆。

来源:Mode 04 - Wikipedia

答案 1 :(得分:1)

有两个PIds: 0x0121 Distance travelled with malfunction indicator lamp (MIL) on用于保持MIL处于打开状态的距离,而 0x0131 Distance travelled since codes cleared用于在清除MIL之后保持该距离。通过使用模式 0x04 。说代码意味着诊断故障代码(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的读数溢出。

答案 2 :(得分:0)

我认为您可以使用 PID 1F 自发动机启动后的运行时间)和 PID 0D 车辆速度)。如果将此值保存在SD卡中,则可以将这两个值相乘。