Java 串行IO:与串行设备通信时休眠(通过OBD2)

Java 串行IO:与串行设备通信时休眠(通过OBD2),java,io,serial-port,obd-ii,Java,Io,Serial Port,Obd Ii,我正在尝试使用Java库通过使用OBD2协议的串行端口与汽车通信。协议很简单:您发送一个ASCII字符串(例如“01 0d”),汽车用ASCII值进行应答。我在网上找到了很多库,但有一个概念我在示例中不理解。每次发送命令后,程序员都会调用sleep。为什么呢?例如: send(pid) sleep(200) receive(response) 我不明白,因为read是一个阻塞函数调用,所以我应该能够等待read。为什么要额外调用sleep?几年前,我对(三菱/斯巴鲁)MUT-II协议做了大量的

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

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

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

几年前,我对(三菱/斯巴鲁)MUT-II协议做了大量的工作,该协议使用ISO9141协议,也是同样的方式。每次请求后暂停200毫秒。后来社区/论坛确认,实际上唯一需要的暂停是最初的5波特初始化之后的暂停,一旦更改为10400,就不需要再暂停了。

如果您要通过硬件接口(如OBDKey或类似的基于ELM327的设备),那么协议计时将由您负责,所以这不太可能是睡眠延迟的原因


你说得对,读不懂。但请注意,在建立COM/串行端口参数时,读取机制中可能会设置超时。在这种情况下,当超时过期时,read调用返回一些数据或没有数据。

不要高估编写示例代码的人员的能力;-)我并没有高估,我想知道为什么:)你能给你正在使用的图书馆发一些链接吗?我是odb2的初学者!!