問題タブ [rxtx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1115 参照

java - RXTX のコンスタント ポーリングは必要ですか?

この問題を解決しようとしている間(助けをいただければ幸いです)、PortMon を使用して RXTX のアクティビティを監視しながら RXTX を実行しところ、Java クライアントが gnu.io.SerialPort オブジェクトからのみ読み取りを行う場合でも、データが利用可能かどうかを RXTX が常にチェックしていることに気付きました。 SerialPortEventListener を介して。

どうしてこれなの?それは、RXTX 関係者による不適切な実装の選択、Sun による不適切な API の選択 (RXTX は javax.comm API に従うため)、またはネイティブ コードでサポートされている Java の実行の制限ですか?

一方、ハイパーターミナルはポーリングを行いません (問題なく動作します)。これを可能にする隠しWindowsシステムコールにアクセスできますか?

0 投票する
3 に答える
21316 参照

java - JavaRXTXとArduino間のシリアル通信

シリアルポートを使用して、PC(NetbeansとRXTXを使用するWindows 7)とArduinoProの間で通信しようとしています。Arduinoは実際にはFTDIケーブルを使用してPCに接続されています。

このコードは、ここにあるJavaSimpleRead.Javaに基づいています。

現在、Arduinoは起動時に文字列を出力するだけです。私のJavaプログラムは、読み取られたバイト数を出力してから、内容を出力する必要があります。Javaプログラムは動作します。

文字列が長い場合(> 10バイト程度)、出力は分割されます。

したがって、Arduinoで印刷する場合

私のJavaプログラムの出力は次のようになります。

また

デバッガーを使用して手動でコードを実行すると、結果の文字列は常に本来あるべき状態、つまり1つの20バイト文字列になるため、タイミングの問題だと思います。

私はいろいろなことをいじっていますが、問題を解決することができませんでした。

これが私に問題を与えているコードの部分です:

0 投票する
3 に答える
1333 参照

java - SerialPortEventListenerの実装

私は、シリアルプロトコルを介してArduinoを制御できるFirmataプロトコルで遊んでいます。DATA_AVAILABLEイベントをリッスンしているSerialPortEventListenerを使用してセンサー値を読み取っています。しかし、更新されたセンサー値がアプリケーションによって登録されるまでに1秒かかる多くの遅延に気付きました。プロトコルは、57600のボーレートで実行されます。私の質問は、イベントリスナーが別のスレッドで実行されるのか、それともアプリケーションとリスナーは同じスレッドで実行され、私のアプリケーションは物事を遅くします。

編集:私の自己を明確にするために、私は理論的には別のスレッドでシリアル送信を読み取るか、イベントリスナーを使用する方が速いかどうかを尋ねていますか?

0 投票する
6 に答える
103271 参照

java - JavaでUSBポートにアクセスする方法

USBポートにアクセスしてUSB経由で接続されたデバイスとの間で読み取りおよび書き込みを行うJavaアプリケーションを作成しようとしています。私が直面している問題は、そのようなことを行うためにJavaで正確に何を使用すべきかわからないことです。オンラインで検索して、と呼ばれるものを見つけましJUSBたが、すべての投稿はかなり古いようです。

現在、RXTXライブラリを使用していますが、同期エラーが発生することがあります。C#を使用して同等の処理を行うと、必要なコードがはるかに少なくなり、同じ同期エラーに直面することはありません。

私の質問は、USBポートにアクセスするために使用できる最新バージョンのJREに組み込まれているものはありますか同等のC#コードと同じくらい簡単です)?

0 投票する
2 に答える
4081 参照

java - javaシリアルI/O:USBシリアル接続/切断を堅牢な方法で処理

USB通信ポートを提供するFTDI2232Hを使用して、JavaでのシリアルI/O処理にrxtxを使用しています。1つの例外を除いて、これはうまく機能します。USBケーブルを抜いて、実行時にCOMポートが消えると、左右に例外が発生します。

また、ケーブルを再度接続しても、回復しません。

rxtxをUSB通信ポートの接続/切断で正しく動作させる方法はありますか?(rxtxメーリングリストに投稿しようとしましたが、奇妙な理由で、リストに登録していてもメッセージを送信できません。リスト管理者にメールを送信しましたが、応答がありません。)

そうでない場合、それを行う別のシリアルI / Oフレームワークはありますか?

0 投票する
2 に答える
2406 参照

java - RXTX仮想シリアルポートの読み取りの問題

背景:Windows Server 2003 R2、RealPortソフトウェアで作成されたワイヤーサービス仮想シリアルポート、COM5として構成されたシリアルポート、9600ボー、8データビット、パリティビットなし、1ストップビット、フロー制御なし、RXTX2.1-7を使用。

ポートCOM5が見つかり、シリアルポートはportId.openメソッドを使用して作成され、ポートパラメーターとフロー制御は上記のデバイスドライバー設定と一致するように設定されます。serialPort IntupStreamを取得し、InputStreamReaderでラップして、入力エンコーディングを制御できるようにします。デフォルトのエンコーディングはもちろんCp1252です。8データビットを使用している場合、エンコーディングはISO-8859-1、別名Latin1である必要があることを読みました。そして、InputStreamReaderメソッドを使用しています。intc = isr.read(); ケースSerialPort.Event.DATA_AVAILABLEのwhileループで整数cを出力し、文字((char)c)にキャストします。問題は、数字と結果の文字のシフトが大きすぎることです(範囲は135〜250です)。メッセージはすべて「AllRights Reserved。)」で終わり、各メッセージの最後の文字は同じです。でも、シフトは文字間で一貫していません。他のエンコーディングを試しました:UTF8/UTF-8は数値をさらに高くシフトします。ascii/us-asciiもそうです。Cp1252は、65533、8222、および8240にシフトされる3文字を除いて、数値を130〜350の範囲にシフトします。注:InputStreamReader.getEncoding()の使用UTF8およびUTF-8はUTF8であり、asciiおよびus-asciiはASCIIです。

私が試すべき他のエンコーディングはありますか?他の誰かがこの種のものを見ましたか?

0 投票する
2 に答える
3177 参照

java - Java/RXTX の問題 Windows XP

私は現在、小さなバー用に作成した Java/MySQL POS システムをテストしており、キャッシュ ドローに問題があります。

キャッシュ ドロワーには、USB->シリアル ボックス経由で接続された RJ11 プラグがあり、デバイスにデータを書き込むと、ドローが開きます。

RXTX に問題がありますが、それが私のコードなのか、デバイスのライブラリなのかドライバーなのかわかりませんでした。

理想的には、ユーザーがシステムにログインすると接続が作成され、ログアウトすると閉じられるようにしたいのですが、今のところ、コードは接続を開き、データを書き込み、販売が開始されると閉じるだけです(保存ボタンを押してから引き出しが開くまでに 1 ~ 2 秒の遅延があり、イライラします)。

アプリが最初に起動したとき、ドロワーはいくつかの売上 (パターンを特定していない) では正常に動作しますが、その後動作を停止します。NoSuchPort、PortInUse、または単純な AccessDenied メッセージのいずれかが混在して、さまざまな例外が発生していることを示しています。通常、アプリを再起動し、USB を切断/再接続すると、さらに数回販売できるようになります。

ハイパーターミナルを使用してデバイスに接続でき、問題なく一貫して動作します。

Java コード:

ハイパーターミナルが (PortMon をチェックして) 使用する設定にできる限り近づけようとして、いくつかの異なる設定を試しましたが、まだ機能しません。

どんな提案でも大歓迎です!

ありがとう、ライアン。

0 投票する
3 に答える
16177 参照

java - スレッド割り込みが入力ストリーム読み取りでのブロッキング呼び出しを終了しない

RXTXを使用してシリアルポートからデータを読み取ります。読み取りは、次の方法で生成されたスレッド内で行われます。

SerialReaderクラスは、Runnableを実装し、無期限にループし、ポートから読み取り、データを有用なパッケージに構築してから、他のアプリケーションに送信します。しかし、私はそれを次の単純さに減らしました:

ユーザーが停止ボタンをクリックすると、次の機能が起動し、理論的には入力ストリームを閉じて、ブロックしているbyteChan.read(buffer)呼び出しから抜け出します。コードは次のとおりです。

ただし、このコードを実行すると、ClosedByInterruptExceptionが発生することはありません。これは、入力ストリームが閉じたときに発生する必要があります。さらに、serial.close()の呼び出しで実行がブロックされます。これは、基になる入力ストリームが読み取り呼び出しでブロックされているためです。割り込み呼び出しをbyteChan.close()に置き換えてみましたが、AsynchronousCloseExceptionが発生するはずですが、同じ結果が得られます。

私が欠けているものについての助けをいただければ幸いです。

0 投票する
1 に答える
956 参照

java - Ant経由で起動した場合、JavaアプリはJNIを異なる方法でロードします

JNIライブラリを含むJavaアプリケーションでRXTXを使用しています。.jniファイルを。に配置しました/Libray/Java/Extensions。通常の方法でアプリケーションを手動で起動すると、java -jar /path/to/app.jarすべてが正常に機能します。ただし、NetbeansまたはAntを介して起動しようとすると、次のように失敗します。

.jniを別の場所に移動し、.jniを使用してJVMをポイントした場合のアナログ動作-Djava.library.path。手動で動作しますが、Antでは失敗します。

Mac OSX10.6.4を実行しているJava1.664ビット、Ant 1.7.1、RXTX 2.1-7r2(安定版)を使用しています

0 投票する
3 に答える
3186 参照

java - Java: シリアル ポートの受信データに対する Observer または synchronized+notify()

データが入ってくるシリアルポートがあります。シリアルポートイベントリスナーを使用して、RXTXライブラリとのシリアルポート接続を実装しました。そのため、シリアル ポートで使用可能な受信データがある場合は常に、同期関数 serialEvent(SerialPortEvent oEvent) が実行されます。基本的に、データが継続的に入ってくるため、プログラムは無限ループになります。受信データを整数の配列に整理しました。ここで、この配列を他のクラスと共有して、この配列を使用してさまざまなタスクを実行したいと考えています。シリアル イベント リスナーがループで実行され、配列が変化し続けるため、他のすべてのクラスでこの変更された配列データを共有したいと言えます。以前に java.util.observables について学んだことがあります。また、オンラインで検索すると、sychronized () および notify()/notifyAll() を使用してスレッド間で変数を共有している人もいます。

どちらを使用するのが最適かわかりません。この場合、両方が機能する場合、私が注意する必要がある最も重要な部分は何ですか? 私が望むものを達成する他の方法はまだありますか?