簡體   English   中英

串行IO:睡眠與串行設備通信時(通過OBD2)

[英]Serial IO: sleeping when communicating with a serial device (via OBD2)

我正在嘗試使用Java庫通過使用OBD2協議的串行端口與汽車通信。 該協議很簡單:您發送一個ASCII字符串(例如“ 01 0d”),然后汽車會以ASCII值應答。 我在網絡上找到了很多庫,但是在示例中有一個我不理解的概念。 在每個發送命令之后,程序員將調用sleep 這是為什么? 例如:

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

我不明白,因為read是一個阻塞函數調用,所以我應該能夠等待read 為什么要額外打電話sleep

幾年前,我對(Mitsubishi / Subaru)MUT-II協議做了很多工作,該協議使用的是ISO9141協議,而且方法是相同的。 每個單個請求后200ms暫停。 社區/論壇后來確認,實際上唯一需要的暫停是最初5波特初始化后的暫停,一旦更改為10400,就不再需要暫停。

如果您正在通過硬件接口(例如OBDKey或類似的基於ELM327的設備)進行操作,則將為您解決協議定時問題,因此這不太可能成為睡眠延遲的原因。

您是對的,閱讀確實有誤。 但是請注意,建立COM /串行端口參數時,在讀取機制中可能會設置超時。 在這種情況下,超時到期后,對read的調用將返回部分或沒有數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM