0

OBD2 経由で MUTII プロトコルを使用する mitsubishi lancer mx 1997 用の Java obd2 スキャナー アプリを作成しようとしています。jd2xxライブラリを使用してMUTリクエストコードを読むのを手伝ってくれる人はいますか? 以下のプログラムを試してみましたが、エンジン RPM を読み取れませんでした。

package lancerscan;

import jd2xx.JD2XX;

public class Test2 {

    public static void main(String[] args) throws Exception {

    JD2XX jd = new JD2XX();
    jd.open(0);
    jd.setBaudRate(38400);
    jd.setDataCharacteristics(
            8, JD2XX.STOP_BITS_1, JD2XX.PARITY_NONE);
    jd.setFlowControl(
            JD2XX.FLOW_NONE, 0, 0);
    jd.setTimeouts(1000, 1000);

    String msg = "21";
    int ret = jd.write(msg.getBytes());
    System.out.println(ret + " bytes sent.");

    int rd = jd.read();
    System.out.println(">>>" + rd);

    int status = jd.getQueueStatus();
    byte[] data = new byte[(int) status];
    long lngBytesReturned = jd.read(data, 0, data.length);

    System.out.println("======= " + lngBytesReturned);
    }
}

エンジン RPM の MUT リクエスト コードは 0x21 です。その他の MUT リクエスト コードは、こちらで確認できます。

正常に動作する同様の C プログラムはこちらです。メインプロジェクトファイルはこちら

ありがとう、ハルシャ

4

2 に答える 2

2

まず、例とは異なるボーレートを使用します。例では使用して15625 baudいますが、使用しています38400 baud

次に、いくつかのセットアップ コマンドがありません。これが違いを生むかどうかはわかりませんが、コードと例の間で何かが異なります。

0x00三菱では、ピンの 1 つにのレートで送信することにより、車の ECU を診断モードに設定する必要が5 baudあります。OpenPort 1.3D ケーブルでは、これはブレークをオンに設定して1800 msからオフにすることを意味します。これはlibftdimut.cファイルのftdimut_init()コマンドで行われていることがわかります。

      printf("Sending 0x00 at 5 baud\n");

      printf("Break on......\n");
      ftStatus = FT_SetBreakOn(ftdimut_ftHandle);
      if(ftStatus != FT_OK) return ftStatus;
      ftdimut_msleep(1800);
      printf("Break off......\n");
      ftStatus = FT_SetBreakOff(ftdimut_ftHandle);
      if(ftStatus != FT_OK) return ftStatus;

車の ECU は、ECU ID を含む 4 バイトを送信します。これを使用して、ECU が正しく診断モードに入ったことを確認できます。これはlibftdimut.cで確認できます。

      ftStatus = FT_Read(ftdimut_ftHandle, buf, 4, &bytesRead);
      if(ftStatus != FT_OK) return ftStatus;

      if(bytesRead == 4) {
        return FT_OK;
      }

4 バイトが戻ってきたと仮定すると、0x17またはなどの診断コードの送信を開始できます0x21

于 2014-05-30T08:37:00.617 に答える
1

私のブログであなたの投稿を見たところです。niallm の回答は正しいです。最初に KLine の駆動を含む 5 ボーの初期化を行う必要があります。その回答に投稿された 5 ボーの初期化のようなものを使用できます。プロトコルに関する詳細情報:

http://evoecu.logic.net/wiki/MUT_Protocol

4バイトの応答を取得した後、15625ボーでリクエストの送信を開始できます(94 3000GTと通信しているため、CELライトの点滅が停止します)。私の場合も、変換された値(0x21 = 10進数で33)をバイト配列として送信します.

于 2014-05-30T19:22:34.863 に答える