【发布时间】:2014-12-16 12:22:10
【问题描述】:
我目前正在开发一个连接到 OBD 设备(使用 ELM 327 Mini)并读取其数据的 Android 应用程序。
我对 OBDII 协议比较陌生,一个月前我才开始使用它,但是使用官方文档,在 Internet 上四处查看并使用 pires api,这为我开发的内容奠定了良好的基础需要(您可以找到here 和here) 我已经设法完成了应用程序并在几辆汽车上进行了测试。在我在梅赛德斯-奔驰 C 级 w204 上测试该应用程序之前,结果大部分都很好。
在这辆车上,我的应用程序从 OBD 读取的数据是我无法理解的。我试图寻找类似的例子,但我没有成功,我发现自己完全陷入困境,无法找到解决这个问题的方法。
我将给你写几个这个数据的例子,但首先我想告诉你我是如何在每次我的应用程序连接到 OBD 时初始化它的,因为我的直觉告诉我我没有使用正确的命令或者那里有几个我失踪了。但正如我所说,我的应用程序可以与其他汽车完美配合。
AT 命令:
AT Z
AT L0
AT SP 6 or AT SP 0
首先,初始化完成后,我发送 PID 00 (01 00) 以了解汽车支持的 01 到 20 的 PID。这是我的第一个问题
有时我会收到
[Req] 01 00
[Ans] 01 00 41 00 98 18 00 01
[Ans] 1: 06 41 00 BF FF E8 93
有时
[Req] 01 00
[Ans] 01 00 41 00 95 00 20 13
注意:我手动添加了 [Req] 和 [Ans],唯一的目的是让它更易于理解。
真正困扰我的是答案不同的事实。有时它会回答 41 00 95 00 20 13 和其他 41 00 98 18 00 01,这怎么可能?同一辆车的 PID 答案应该总是相同的,我认为这辆车不能动态改变 PID 支持的情况。
另一个原因是为什么有时 PID 00 会用 1 或 2 行来回答。在第一个示例中,您可以看到第一行是对 pid 00 的正常答案,但是它有第二个答案,即 1: 06 41 00 BF FF E8 93,我真的不知道这是什么意思。
我有另一个 pid 01 的例子
[Req] 01 01
[Ans] 01 01 41 01 00 07 E9 00
[Ans] 1: 06 41 01 00 04 00 00
[Req] 01 01
[Ans] 01 01 41 01 00 04 00 00
是因为它同时在不同的协议中应答吗? 06是这个意思吗?
此外,询问车辆的速度有时它会返回 NO DATA,然后在接下来的 2 秒内它会返回一个正确的值,例如 41 0D 00(例如),然后在接下来的 2 秒内它会再次返回 NO DATA。这意味着,当 NO DATA 错误发生时,它是完全随机的。问题是汽车实际上支持 PID,因为它有时可以返回正确的数据。
我很确定这与 OBD 的初始化有关,也许我需要设置更高的超时时间或包含更多的命令,但由于我不是 OBD 协议方面的专家,我真的不知道如何我应该处理吗?我非常感谢任何形式的帮助,只需指出我在官方文档中遗漏的一些内容或我可能犯的任何愚蠢错误。大多数情况下,我想了解正在发生的事情,以便能够相应地处理数据。
非常感谢!
【问题讨论】: