我正在开发一个应用程序,我需要计算从A点到B点的距离(乘车)。
我问过Elm Electronics(芯片组制造商)他们说没有标准的OBD-II PID可以从里程表返回里程数,尽管汽车制造商可能提供PID。由于这种方式不标准,我找到了另一种方式。
PID 0131(自代码清除以来行进的距离),正在返回我认为可能有用的内容。如果我能够在A点清除它并在B点读取它的值那么我就完成了:)
我想了很多猜测"代码已清除"意思是但我无法意识到这意味着什么?还有我的另一个重要问题,如何清除代码或重置此PID?
任何建议都将不胜感激。感谢。
我刚试了两辆车。
我的图书馆可供任何正在寻找OBD-II lib from here的人使用。
所以,我打算做的是,因为我能够获得速度(v),所以我能够根据d = v * t
公式计算距离。
答案 0 :(得分:1)
模式04用于重置代码。发送04将重置MIL(故障指示灯)并重置您要重置的代码。
在评论中,Chris建议使用该值,而不是自己跟踪这个值。这样你就不必滥用模式04了。 Th 0131值溢出65535 km。但是当你带车进行维修时,他们可以重置这个值,这取决于谁维护你的车辆。
答案 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卡中,则可以将这两个值相乘。