6

OBD コネクタを使用して、エンジン RPM、速度などの複数の値を一度に更新する必要がある 1 つのアプリケーションを開発しています。非同期のコマンド/レスポンスを実現する必要があります。このために[gcdAsyncSocket writeData:data withTimeout:-1 tag:uniqueTag];、一意のタグを使用して非同期でコマンドを送信しています。

しかし、gcdAsync のデリゲート メソッド「socketDidReadDatawithTag」が呼び出されると、データは返されますが、適切ではありません。それぞれ 263 と 264 であり、 socketDidReadDatawithTag でタグ 264 を使用して応答を解析すると、時々 RPM のデータが返されます。(応答が混乱するか、OBD デバイスが非同期応答を処理できない)

    NSLog(@"Command Sent for Async : %@",commandString);
    NSData *data = [commandString dataUsingEncoding:NSASCIIStringEncoding];

    long obdObjectTag = [obdObject getPIDTag];//Unique Tag
    [gcdAsyncSocket writeData:data withTimeout:-1 tag:obdObjectTag];

    NSData *readData = [@">" dataUsingEncoding:NSASCIIStringEncoding];
    [gcdAsyncSocket readDataToData:readData withTimeout:-1 tag:obdObjectTag];

また、socketdidReadDatawithTagデータとタグが一致していません。

4

1 に答える 1

0

OBD-II コネクタ (ELM-327 だと思います) は、私の知る限り、実際には非同期呼び出しを処理できません。

一度に複数のリクエストを処理することはできません。1 つのコマンドを送信すると、OBD-II デバイスは OBD バスからその情報を収集し、応答を返します。次に、次のコマンドを処理します。もちろん、送信したコマンドはバッファに格納され、1 つずつ処理されます。これはあなたがそれを作るのに問題があるかもしれないと思っていますが、よくわかりません.

私はiosプログラミングとそれらのタグで何が起こるかについてまったく詳しくありません。それらのタグを設定して、データがどのパラメータであるかを識別しますか? 返信データでは、それがどのパラメータを意味するかを確認することもできるため、回答自体で、データが RPM やスピードなどを表していることがわかります。

OBD-IIの部分がそれに光を当てていることを願っています. おそらくいくつかの議論のために、この質問をさらにチェックします。

于 2013-12-31T10:26:50.200 に答える