2012-09-16 70 views
0

我正尝试使用Java库通过使用OBD2协议的串行端口与汽车通信。协议很简单:您发送一个ASCII字符串(例如“01 0d”),并且汽车以ASCII值回答。我在网上找到了很多图书馆,但有一个概念我不明白。每发送一次命令后,程序员都打电话给sleep。这是为什么?例如:串行IO:与串行设备通信时(通过OBD2)睡眠

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

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

+0

不要高估编写示例代码的人的能力;-) – EJP

+0

我不要高估,我想知道为什么:) – esoni

+0

您可以请发布一些链接到您正在使用的图书馆?我是odb2的入门者! –

回答

0

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

0

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

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