ホームページ Java &#&チュートリアル Java のシリアル通信の簡単な紹介

Java のシリアル通信の簡単な紹介

Dec 19, 2016 pm 05:02 PM

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 サイトに注目してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte 2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte Mar 07, 2025 pm 06:09 PM

この記事では、2025年の上位4つのJavaScriptフレームワーク(React、Angular、Vue、Svelte)を分析し、パフォーマンス、スケーラビリティ、将来の見通しを比較します。 強力なコミュニティと生態系のためにすべてが支配的なままですが、彼らの相対的なポップ

Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正 Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正 Mar 07, 2025 pm 05:52 PM

この記事では、リモートコードの実行を可能にする重大な欠陥であるSnakeyamlのCVE-2022-1471の脆弱性について説明します。 Snakeyaml 1.33以降のSpring Bootアプリケーションをアップグレードする方法は、このリスクを軽減する方法を詳述し、その依存関係のアップデートを強調しています

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか? カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか? Mar 17, 2025 pm 05:44 PM

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

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか? Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか? Mar 17, 2025 pm 05:35 PM

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

Iceberg:データレイクテーブルの未来 Iceberg:データレイクテーブルの未来 Mar 07, 2025 pm 06:31 PM

大規模な分析データセットのオープンテーブル形式であるIcebergは、データの湖のパフォーマンスとスケーラビリティを向上させます。 内部メタデータ管理を通じて、寄木細工/ORCの制限に対処し、効率的なスキーマの進化、タイムトラベル、同時wを可能にします

node.js 20:キーパフォーマンスが向上し、新機能 node.js 20:キーパフォーマンスが向上し、新機能 Mar 07, 2025 pm 06:12 PM

node.js 20は、V8エンジンの改善、特により速いガベージコレクションとI/Oを介してパフォーマンスを大幅に向上させます。 新機能には、より良いWebセンブリのサポートと洗練されたデバッグツール、開発者の生産性とアプリケーション速度の向上が含まれます。

キュウリのステップ間でデータを共有する方法 キュウリのステップ間でデータを共有する方法 Mar 07, 2025 pm 05:55 PM

この記事では、キュウリの手順間でデータを共有する方法、シナリオコンテキスト、グローバル変数、引数の合格、およびデータ構造を比較する方法を調べます。 簡潔なコンテキストの使用、記述など、保守性のためのベストプラクティスを強調しています

Javaで機能的なプログラミング技術を実装するにはどうすればよいですか? Javaで機能的なプログラミング技術を実装するにはどうすればよいですか? Mar 11, 2025 pm 05:51 PM

この記事では、Lambda式、Streams API、メソッド参照、およびオプションを使用して、機能プログラミングをJavaに統合することを調べます。 それは、簡潔さと不変性を通じてコードの読みやすさと保守性の改善などの利点を強調しています

See all articles