0

我正在尝试使用 Java 库通过串行端口使用 OBD2 协议与汽车通信。协议很简单:您发送一个 ASCII 字符串(例如“01 0d”),然后汽车以 ASCII 值回答。我在网上找到了很多库,但在示例中有一个我不理解的概念。在每个发送命令之后,程序员都会调用sleep. 这是为什么?例如:

send(pid)
sleep(200)
receive(response)

我不明白,因为read是阻塞函数调用,所以我应该可以等待read。为什么要额外调用sleep?

4

2 回答 2

0

几年前,我使用(Mitsubishi/Subaru)MUT-II 协议做了很多工作,它使用 ISO9141 协议,并且方式相同。每次请求后暂停 200 毫秒。后来社区/论坛证实,唯一真正需要的暂停是在初始 5 波特初始化之后的那个,一旦更改为 10400,就不需要再暂停了。

于 2012-10-05T20:10:42.510 回答
0

如果您要通过硬件接口(如 OBDKey 或类似的基于 ELM327 的设备),那么协议时序会为您处理好,因此这不太可能是睡眠延迟的原因。

你是对的,读取确实阻塞。但请注意,在建立 COM/串口参数时,读取机制中可能会设置超时。在这种情况下,当超时到期时,对 read 的调用会返回一些数据或没有数据。

于 2012-12-31T16:19:37.753 回答