4

我正在开发一个应用程序,我需要计算从 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 库的任何人。

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

4

3 回答 3

2

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

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

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

资料来源:模式 04 - 维基百科

于 2015-01-03T11:31:39.860 回答
1

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

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

于 2019-10-17T01:14:18.333 回答
0

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

于 2019-05-16T09:01:49.080 回答