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

时间:2012-09-16 20:26:09

标签: java io serial-port obd-ii

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

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

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

2 个答案:

答案 0 :(得分:0)

几年前,我在(三菱/斯巴鲁)MUT-II协议上做了很多工作,使用的是ISO9141协议,它也是一样的。每次请求后暂停200ms。社区/论坛后来证实,实际需要的唯一停顿是在最初的5波特初始化之后,一旦改为10400,则不再需要暂停。

答案 1 :(得分:0)

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

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