gpt4 book ai didi

android - 了解来自 OBDII 协议(protocol)的数据

转载 作者:行者123 更新时间:2023-11-29 17:44:33 25 4
gpt4 key购买 nike

我目前正在开发一个连接到 OBD 设备(使用 ELM 327 Mini)并读取其数据的 Android 应用程序。

我对 OBDII 协议(protocol)比较陌生,我一个月前才开始使用它,但是使用官方文档,在互联网上四处寻找并使用 pires api,这为我的开发奠定了良好的基础需要(你可以找到 herehere )我已经设法完成了应用程序并在几辆车上进行了测试。在我在梅赛德斯-奔驰 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

是不是因为同时在不同的协议(protocol)下应答?这是 06 的意思吗?

此外,询问车辆的速度有时会返回 NO DATA,并在接下来的 2 秒内返回正确的值,例如 41 0D 00(例如),然后在接下来的 2 秒内再次返回 NO DATA。意思是,当 NO DATA 错误发生时,它是完全随机的。问题是汽车实际上支持 PID,因为它有时可以返回正确的数据。

我很确定这是关于 OBD 初始化的一些事情,也许我需要设置更高的超时或包含更多命令,但由于我不是 OBD 协议(protocol)的专家,我真的不知道如何我应该处理吗?我真的很感激任何帮助,只要指出我在官方文档中遗漏的内容或我可能犯的任何愚蠢错误。大多数情况下,我想了解正在发生的事情,以便我可以相应地处理数据。

非常感谢!

最佳答案

所以最后我发现了发生这种情况的原因,因为汽车有两个 ECU 响应我的请求。

我通过请求一些 header 为 ON (AT H1) 的 PID 找到了它。使用此命令,我能够看到答案数据来自 can ID 7E8(引擎)和 7E9(传输)。这是一个例子

[Req] 01 01
[Ans] 7E8 06 41 01 00 07 E9 00
[Ans] 7E9 06 41 01 00 04 00 00

要解决此问题,您可以执行命令 AT SH 7E0。这个命令的作用是告诉OBD只听7E8。

来源:This page where I asked this question too

关于android - 了解来自 OBDII 协议(protocol)的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27504587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com