Java シリアル通信の概要、組み込みシステムやセンサー ネットワークの多くのアプリケーションやテストでは、PC を介した組み込みデバイスやセンサー ノードとの通信が必要です。その中で、最も一般的に使用されるインターフェイスは、RS-232 シリアル ポートとパラレル ポートです (USB インターフェイスの複雑さと大量のデータ転送を必要としないという事実を考慮すると、USB インターフェイスはまだ贅沢すぎて使用できません)さらに、現在、SUN に加えて、USB を直接サポートする Java ライブラリは他にありません。
SUN の CommAPI は、一般的に使用される RS232 シリアル ポート通信と IEEE1284 パラレル ポート通信をそれぞれサポートします。 RS-232-C (EIA RS-232-C としても知られ、以下 RS232 と呼びます) は、電子工業会 (EIA) が Bell Systems、モデム メーカー、およびシリアル通信用のコンピュータ端末メーカーと共同で 1970 年に開発しました。規格。 RS232 は、データの送受信を同時に行うことができる全二重通信プロトコルです。
1 共通 Java シリアル ポート パッケージ
現在、一般的な Java シリアル ポート パッケージには、1998 年に SUN によってリリースされたシリアル ポート通信 API が含まれています。 IBM シリアル通信 API とオープンソース実装。 SUN の API は Windows 上で一般的に使用されており、IBM の実装は SUN と API レベルで同じであるため、オープンソースの実装は 2 つの大手メーカーの製品ほど安心できません。ここでは、SUN のシリアル ポート API の使用方法のみを紹介します。 Windows プラットフォーム。
その指示 (Readme.html) によると、シリアル通信にシリアル ポート パッケージを使用する場合は、環境変数の設定に加えて、win32com.dll を bin ディレクトリにコピーする必要があります。 lib ;javax.comm.properties も lib ディレクトリにコピーします。ただし、実際にシリアル ポート パッケージを実行して使用する場合、これらを実行するだけでは十分ではありません。
通常、「java MyApp」を実行すると、MyApp は JRE 下の仮想マシンによって起動されるためです。上記のファイルを JDK の対応するディレクトリにコピーするだけなので、アプリケーションはシリアル ポートが見つからないというメッセージを表示します。この問題の解決策は非常に簡単で、上記のファイルを JRE の対応するディレクトリに配置するだけです。
ネットワーク アプリケーションでシリアル ポート API を使用すると、他のより複雑な問題が発生することに注意してください。ご興味がございましたら、CSDN コミュニティの投稿「javacomm20 を使用して Web ページ上のクライアント シリアル ポートを読み取るアプレットの問題について」をご覧ください。
2 シリアル ポート API の概要
2.1 javax.comm.CommPort
これは、基礎となるシステムによってサポートされるポートを記述するために使用される抽象クラスです。これには、すべての異なる通信ポートに共通するいくつかの高レベル IO 制御メソッドが含まれています。 SerialPort と ParallelPort はどちらもそのサブクラスであり、前者はシリアル ポートの制御に使用され、後者はパラレル ポートの制御に使用されます。両方とも、基礎となる物理ポートの制御方法が異なります。ここでは SerialPort のみに注目します。
2.2 javax.comm.CommPortIdentifier
このクラスは主にシリアルポートの管理と設定に使用され、シリアルポートのアクセス制御のためのコアクラスです。主に以下のメソッドが含まれます
利用可能な通信ポートがあるかどうかを判断する
IO操作のために通信ポートを開く
ポートの所有権を決定する
ポートの所有権の競合を処理する
ポートの所有権の変更によって引き起こされるイベントを管理する
2.3 javax.comm.SerialPort
このクラスは、RS-232 シリアル通信ポートの基礎となるインターフェイスを記述するために使用され、シリアル通信に必要な最小限の関数セットを定義します。これを通じて、ユーザーはシリアル ポートの読み取り、書き込み、設定を直接行うことができます。
2.4 シリアル ポート API の例
長い文章は、小さな例ほど明確にすることはできません。シリアル ポート パッケージに付属するサンプルを見てみましょう。SerialDemo の小さなコードで、理解を深めます。シリアル ポート API コア クラスの使用方法についての知識。
2.4.1 このマシンで使用可能なすべてのシリアル ポートを一覧表示します
void listPortChoices() { CommPortIdentifier portId; Enumeration en = CommPortIdentifier.getPortIdentifiers(); // iterate through the ports. while (en.hasMoreElements()) { portId = (CommPortIdentifier) en.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { System.out.println(portId.getName()); } } portChoice.select(parameters.getPortName()); }
上記のコードは、現在のシステムで使用可能なすべてのシリアル ポート名を一覧表示できます。私のマシンでの出力結果は COM1 と COM3 です。
2.4.2 シリアルポートパラメータの設定
シリアルポートには通常、シリアルポートを開く前に設定できる次のパラメータがあります: ボーレート、入出力フロー制御、データビット数、ストップビット、パリティなど。
SerialPort sPort; try { sPort.setSerialPortParams(BaudRate,Databits,Stopbits,Parity); //设置输入/输出控制流 sPort.setFlowControlMode(FlowControlIn | FlowControlOut); } catch (UnsupportedCommOperationException e) {}
2.4.3 シリアルポートの読み取りと書き込み
シリアルポートの読み取りと書き込みを行う前に、シリアルポートを開く必要があります:
CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier(PortName); try { SerialPort sPort = (SerialPort) portId.open("串口所有者名称", 超时等待时间); } catch (PortInUseException e) {//如果端口被占用就抛出这个异常 throw new SerialConnectionException(e.getMessage()); } //用于对串口写数据 OutputStream os = new BufferedOutputStream(sPort.getOutputStream()); os.write(int data); //用于从串口读数据 InputStream is = new BufferedInputStream(sPort.getInputStream()); int receivedData = is.read();
読み出しは int 型で、必要に応じて他の型に変換できます。
ここで注意すべき点は、Java 言語には符号なし型がない、つまりすべての型が符号付きであるため、byte から int に変換するときに特別な注意を払う必要があるということです。バイトの最上位ビットが 1 の場合、int 型に変換するときに 1 がプレースホルダーとして使用されるためです。このように、元のバイト型番号 10000000 は int 型になり、1111111110000000 になります。これは非常に深刻な問題であり、回避する必要があります。
3 シリアル ポート通信の一般的なモードと問題点
ようやく私が最も嫌いな基礎知識の話が終わりました。今回は、シリアル ポート アプリケーションの研究に焦点を当ててみましょう。シリアル ポートへのデータの書き込みは非常に簡単なので、ここではシリアル ポートからのデータの読み取りだけに焦点を当てます。
通常、シリアル通信アプリケーションには 2 つのモードがあります。1 つは、SerialPortEventListener インターフェイスを実装して、さまざまなシリアル ポート イベントを監視し、それに応じて処理することです。もう 1 つは、特にデータの受信を担当する独立した受信スレッドを確立することです。これら 2 つの方法は場合によっては重大な問題を抱えているため (問題については、今はオープンのままにしておきます)、私の実装では、この問題を解決するために 3 番目の方法を使用します。
Java のシリアル通信の簡単な入門に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

この記事では、分散アプリケーションを構築するためのJavaのリモートメソッドの呼び出し(RMI)について説明します。 インターフェイスの定義、実装、レジストリのセットアップ、およびクライアント側の呼び出しを詳述し、ネットワークの問題やセキュリティなどの課題に対処します。

この記事では、ネットワーク通信のためのJavaのソケットAPI、クライアントサーバーのセットアップ、データ処理、リソース管理、エラー処理、セキュリティなどの重要な考慮事項をカバーしています。 また、パフォーマンスの最適化手法も調査します

この記事では、カスタムJavaネットワーキングプロトコルの作成を詳述しています。 プロトコルの定義(データ構造、フレーミング、エラー処理、バージョン化)、実装(ソケットを使用)、データシリアル化、およびベストプラクティス(効率、セキュリティ、メンテナ


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
