问题标签 [obd-ii]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - OBD-ii阅读器冻结而不是实时
我正在开发 OBD-ii 阅读器。
我正在使用基本的蓝牙聊天与 OBD-ii 设备进行通信,使用正则表达式来捕获回复并在文本视图中显示它们。
这是我发送 PID 代码以请求数据的地方:
然后在这里取数据:
然后我使用这个正则表达式来监听 > 这意味着 OBD 已经完成了对命令的处理,然后应该回到开始并再次请求 PID 代码。
当我运行应用程序时,需要很长时间才能开始给我任何值,但是它们是准确的。我有从 OBD 收到的数据的日志。然而,我的日志出现了一些我不明白的东西。我还注意到向我显示 dataRecieved 的 textView 出现了未知字符并说 STOPPED,然后冻结并在片刻后再次启动。这是一些日志...
ios - 如何从流中获取指定的数据?
我做了简单的应用程序连接到 tcp 流服务器(车载 OBD wifi 连接)。它可以连接并且运行良好 - 我可以发送消息并从汽车中获取答案。现在我只想从答案中读取指定的数据。当我向汽车发送请求时,例如 01041,它会回答如下内容:
搜索:好的
41 04 7楼
我想创建一个仅包含此答案的最后一个字节的变量。在本例中,它将是 7F。我想这样做是因为我想在 Label 中显示该数据。所以我需要跳过这个示例行搜索并跳过第 2 行中的前 2 个字节以仅获得 7F。我该怎么做?
我在http://www.raywenderlich.com教程的帮助下完成了 tcp 连接,所以我不太了解它来解决我的问题。
这一行 [self.RPM setText:[self.RPM.text stringByAppendingString:output]]; 在标签中显示答案,但它显示了一切。我想我需要创建新的变量输出并以某种方式对其进行编辑,但我不知道如何
android - 了解来自 OBDII 协议的数据
我目前正在开发一个连接到 OBD 设备(使用 ELM 327 Mini)并读取其数据的 Android 应用程序。
我对 OBDII 协议比较陌生,一个月前我才开始使用它,但是使用官方文档,在互联网上四处查看并使用 pires api,这为开发我需要的东西(其中你可以在这里和这里找到)我已经成功地完成了应用程序并在几辆汽车上进行了测试。在我在梅赛德斯-奔驰 C 级 w204 上测试该应用程序之前,结果大部分都很好。
在这辆车上,我的应用程序从 OBD 读取的数据是我无法理解的。我试图寻找类似的例子,但我没有成功,我发现自己完全陷入困境,无法找到解决这个问题的方法。
我将给你写几个这个数据的例子,但首先我想告诉你我是如何在每次我的应用程序连接到 OBD 时初始化它的,因为我的直觉告诉我我没有使用正确的命令或者有一些我失踪了。但正如我所说,我的应用程序与其他汽车完美配合。
AT 命令:
首先,在初始化完成后,我发送 PID 00 (01 00) 以了解汽车支持从 01 到 20 的 PID。这是我的第一个问题
有时我收到
而有时
注意:我手动添加了 [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 的例子
是因为它同时在不同的协议中回答吗?06是这个意思吗?
此外,询问车辆的速度有时会返回 NO DATA,然后在接下来的 2 秒内返回正确的值,例如 41 0D 00(例如),然后在接下来的 2 秒内再次返回 NO DATA。这意味着,当 NO DATA 错误发生时,它是完全随机的。问题是汽车实际上支持 PID,因为它有时可以返回正确的数据。
我很确定这与 OBD 的初始化有关,也许我需要设置更高的超时时间或包含更多命令,但由于我不是 OBD 协议的专家,我真的不知道我应该如何处理. 我非常感谢任何形式的帮助,只需指出我在官方文档中遗漏的一些内容或我可能犯的任何愚蠢错误。大多数情况下,我想了解正在发生的事情,以便我可以一致地处理数据。
非常感谢!
android - 开发者友好的 OBD-II 端口汽车诊断工具?
我希望简化我记录的有关我的汽车的一些数据。我目前的方法是手动编辑电子表格,其中包含大量列,我必须在每次填写和服务时填写。我已经开始创建一个将保存到托管数据库的 android 应用程序,但我想进一步简化它。与其要求里程表、行程、机油寿命等输入,我更愿意从OBD-II诊断端口获取这些信息。
我见过几个有自己的应用程序的,但我正在寻找一个支持第三方轮询和 API 的。有没有人有这方面的经验?
android - Android OBD-II 如何清除行驶距离(PID0131)?
我正在开发一个应用程序,我需要计算从 A 点到 B 点(乘汽车)的距离。
我问过Elm Electronics(芯片组制造商),他们说没有标准的 OBD-II PID 从里程表返回里程,尽管汽车制造商可能会提供 PID。由于这种方式不是标准的,所以我找到了另一种方式。
PID 0131(自代码清除后的距离)正在返回一些我认为可能有用的东西。如果我能够在 A 点清除它并在 B 点读取它的值,那么我就完成了:)
我想了很多猜测“代码已清除”是什么意思,但我不明白这是什么意思?还有我的另一个重要问题,如何清除代码或重置此 PID?
任何建议将不胜感激。谢谢。
更新
我刚刚在两辆汽车上进行了测试。
- 在奔驰车上没有 OBD-II 命令有效。我无法获得任何数据:(
- 我在 Persona car (Local Malaysia) 上得到了正确的回复,但是即使经过几公里,0x0131 PID 总是返回 7F01,即 16608KM。我试图通过发送 04 命令来重置它(正如 Eric 在他的回答中所建议的那样),但是,没有什么清楚的:) 我仍然得到 7F01 作为响应。
我的图书馆可用于从此处寻找 OBD-II 库的任何人。
所以,我打算做的是,因为我能够获得速度(v),所以我能够根据d = v * t
公式计算距离。
can-bus - 通过用于 OBD2 的 CAN 总线的 KWP 快速协议
我对我的 CAR 的 ODB 功能有疑问。我有一个带有 AT90CAN128 uE 的 USB 加密狗,uE 有 CAN 驱动程序,我可以用它来读取总线上的数据流量。我有一辆宝马 116i,但这辆车对 obd2 使用了 KWP-fast 协议。我想问我是否可以使用 CAN 总线向 ECU 发送查询以获取 obd2 可用变量。我不确定,因为在工作中我们通过 CAN 总线使用 KWP2000 协议,但我没有规范,我们使用 CANoe 上的现成工具。
python - Python 串行每秒 5 波特
我正在编写一些代码以使用Python Serial从OBD II 模拟器中读取。如果我使用每秒 115200 波特进行连接,我可以正常与它通信。
但为了初始化它,我需要以每秒 5 波特的速度通过串行写入 0x33。但我可以在 Python Serial 中使用的唯一波特率如下:
有人知道如何以每秒 5 波特的速度发送数据吗?
我尝试了许多疯狂的事情(比如在阅读之间睡觉),但没有任何成功。
任何帮助将不胜感激!
java - java.io.IOException:bt 套接字关闭,读取返回:-1
当我正在开发 OBD 阅读器演示时。通过我的应用程序我正在尝试连接 obd 阅读器设备,并且我的应用程序安装在 Nexus 7 中。OBD 阅读器设备正在连接到谷歌播放上可用的其他应用程序,但如果我正在连接我的应用程序出现错误java.io.IOException:bt套接字关闭,读取返回:连接建立后-1。任何建议...... ==================== =====================================
java - 如何与 OBD-II 设备通信
有OBD-II
类似http://www.rczd.com/c/2015/Car_Diagnostic_Tools_0223/41193.html的设备,
该设备提供商没有其网页或文档来源。我们在包装盒中有简短的“快速入门”,并保证它支持OBD-II PIDs
.
最近我曾经关注https://en.wikipedia.org/wiki/OBD-II_PIDs#Mode_1_PID_41
问题是,如果有任何通用模式如何与这个 icar 设备通信。
在我用来连接之前,我已经(freematics)dongle
发送了我已经解析过的数据流。
当前一个在我们向它发送一个请求后只发送一个值(它是同步的,每次不能处理多个请求)。
我想获得最新的OBD-II
参数来显示它们(经常)。
有任何想法吗 ?
can-bus - 使用 ELM327 接收 CAN 消息时的流量控制消息
我正在尝试制作一个在 Windows 下运行并与 ELM327 设备通信的软件。我创建了第一个版本,然后我进入了我的 SMART ForTwo (SMART 451) 车辆,并设法与仪表板连接(发送 CAN ID 为 782,接收 CAN ID 为 783)。但是我对流控制有一个很大的问题。这是日志:
TX:ATI RX:ELM327 v1.5a
发送:ATE0 接收:ATE0 正常
发送:ATSP6 接收:好的
TX:ATH1 RX:好的
TX:ATL1 RX:好的
TX:ATCFC1 接收:好的
TX:ATFCSM0 RX:正常
TX:ATAL RX:好的
TX:ATSH782 RX:好的
发送:ATCRA783 接收:?
TX:ATST64 RX:好的
发送:1092 接收:783 02 1A 87
发送:1A87 接收:783 10 16 5A 87 05 6E 00 08
我使用了另一个工具,我看到 ELM327 设备立即发送流控制帧。它是这样的:
891.438 782 02 1A 87
891.444 783 10 16 5A 87 05 6E 00 08
891.444 782 30 00 00 00 00 00 00 00
如您所见 - 流量控制帧与第一帧完全相同,即从其他设备发送。我确信另一台设备在接收“流控制”帧时有问题。我研究了 ELM327 文档,但没有找到任何有关如何延迟流控制帧的信息。我应该如何正确发送请求“1A 87”并接收响应?