0

Java ライブラリを使用して、OBD2 プロトコルを使用してシリアル ポート経由で車と通信しようとしています。プロトコルは単純です。ASCII 文字列 (例: "01 0d") を送信すると、車は ASCII 値で応答します。Web で多くのライブラリを見つけましたが、例で理解できない概念が 1 つあります。各 send コマンドの後、プログラマーは を呼び出しますsleep。何故ですか?例えば:

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

はブロッキング関数呼び出しであるため、わかりません。read待機できるはずreadです。への追加の呼び出しはなぜsleepですか?

4

2 に答える 2

0

ハードウェア インターフェース (OBDKey や同様の ELM327 ベースのデバイスなど) を経由している場合は、プロトコルのタイミングが処理されるため、スリープ遅延の原因になる可能性は低いです。

そうです、 read はブロックします。ただし、COM / シリアル ポート パラメータを確立する際に、読み取りメカニズムにタイムアウトが設定される場合があることに注意してください。この場合、タイムアウトの期限が切れると、 read の呼び出しはデータの一部またはデータなしで返されます。

于 2012-12-31T16:19:37.753 に答える
0

数年前、ISO9141 プロトコルを使用する (三菱/スバル) MUT-II プロトコルで多くの作業を行いましたが、同じ方法でした。1 つのリクエストごとに 200 ミリ秒の一時停止。実際に必要な唯一の一時停止は、最初の 5 ボー初期化後の一時停止であり、10400 に変更されると、それ以上の一時停止は不要であることがコミュニティ/フォーラムによって後で確認されました。

于 2012-10-05T20:10:42.510 に答える