2

Linux (ubuntu) で DLP-IO20 ボードと通信しようとしていますが、毎回エラーが発生します。Windows で同じプログラムがうまく動作します。

ボードと通信するために、最初にすべての FTDI ドライバーをインストールしてから、Linux libjd2xx.so 用のライブラリーを生成しました。

JD2XX.java ファイルの Main プログラムを実行しようとすると、次のエラーが表示されます。

インデックス: 0、フラグ: 0x0、タイプ: 0x5、ID: 0x4036001、場所: 0x204、シリアル: 12345678、説明: DLP-IO20、ハンドル: 0x0 スレッド「メイン」での例外 java.io.IOException: 無効なハンドル (1)

ご覧のとおり、ボード情報はプログラムによって読み取られますが、コマンドをボードに送信しようとすると、上記の例外がスローされます。例外をスローした行は、次のコードの最後の行です。

 DeviceInfo di = jd.getDeviceInfoDetail(0);
    System.out.println(di.toString());
    jd.open(0);
    String msg = "Hello dude. This is the message.";
    int ret = jd.write(msg.getBytes());

なにか提案を?

4

2 に答える 2

1

以下は Java の回答ではありませんが、ドライバーをインストールせずに DLP-IO8 と非常に簡単かつ直接通信する方法を示しています。

Linux では、デバイスはファイルによって抽象化されます (デバイスにアクセスするために関数を呼び出さなければならない Windows などとは異なり.dllます)。

DLP-IO8 を USB ポートに差し込むと、/dev/ttyUSB0ファイルが表示されます。(端末で実行できるように異なる場合があり、 dmesg接続/切断されたすべての USB デバイスとその場所のログが表示されるため、DLP-IO8 がどこにあるかを推測できます)

これで、ドライバーなどは必要ありません。/dev/ttyUSB0お使いのDLP-IO20に対応しているので、DLP-IO8に読み書き/dev/ttyUSB0するために読み書きできます。

したがって、DLP のドキュメントから、115200 のボーで通信する必要があります。このボー値は次のように設定できます。

sudo stty -F /dev/ttyUSB0 115200

DLP のドキュメントによると、チャネル 1 の電圧値を取得する場合は、ASCII 文字'Z'を DLP-IO8 に送信する必要があります。2 つのターミナルを開き、そのうちの 1 つで次を実行します。

sudo cat /dev/ttyUSB0

何がボードを返しているかを確認するために。他のターミナルで次を実行します。

echo -en '\x5A' > /dev/ttyUSB0

'Z'文字(ASCII 番号が5A16 進数)を送信するため。これで、第 1 ターミナルに電圧値が表示されます。

したがって、純粋な Java で行う方法がわからない場合は、いつでも Java からこれらのシステム コマンドを実行できます。

于 2015-09-04T19:43:35.260 に答える
0

FTDIドライバーに付属のreadexampleプログラムを実行してみてください(release / examples / EEPROM / readで思い出してください)。問題がないか確認してください。

どうしても必要な場合は、ftdi_sioがインストールされているかどうかを確認し、「rmmodftdi_sio」を使用して削除してみてください(これでうまくいきました

于 2013-01-30T23:16:18.320 に答える