シリアル接続 (RS-232 および RS-422) でデータを送受信する必要があります。
このような接続を設定して通信するにはどうすればよいですか? どのような構成設定 (ボーレートなど) をどのように設定すればよいですか?
特に、Java、C/C++、または主要な Unix シェルの 1 つでこれを行うことを検討していますが、Windows/ハイパーターミナルを使用したシリアル プログラミングにも関心があります。
タイムマシンを作って1987年に戻る?ほほ。
わかりました、これ以上皮肉なコメントはありません。
構成設定 (ボーレートなど) がどうあるべきかを知るにはどうすればよいですか...
データシートを読みますか? はいはい。真剣に、最後のもの。通信しようとしているデバイスのボー レートがわからない場合は、2 つの選択肢があります。推測を開始するか、場合によっては O スコープを破壊します。適切な出発点が必要な場合は、9600-8-N-1 をお勧めします。私の疑いでは、力ずくで比較的早くそこにたどり着くことができます。ある標準的なボーレートで文字化けした文字を見ただけで、実際のボーレートが何であるかを知ることができる昔ながらの忍者を持つという 3 番目のオプションがあります。確かに印象的なパーティーのトリック。
この情報にアクセスできることを願っています。UNIX/Linux では、minicom を入手して、シリアル ポートを直接操作できます。これにより、構成を把握するのがかなり速くなります。
主要な Unix シェルの 1 つ
Unix では、シリアル ポートは /dev/ サブディレクトリにファイル マップされます。たとえば、ttyS0。minicom を使用して正しいボー レートなどを設定すると、そのファイルに cat を指定して送信することもできます。
質問の要点については、POSIX ヘッダーを介してプログラムでアクセスできます。termios.h は大きなものです。
参照: http://www.easysw.com/~mike/serial/serial.html#3_1
(もう利用できません)
しかし、Windows/ハイパーターミナルを使用したシリアル プログラミングにも興味があります。
ハイパーターミナルと minicom は基本的に同じプログラムです。Windows でシリアル ポートにアクセスする方法については、他の人に任せます。Win95 の時代以来、私は Windows でそれを行っていません。
Java でコーディングする場合は、 SerialIOs SerialPortを強くお勧めします。使い方は非常に簡単で、作業の日数を節約できます。本当に、SerialIO ほど優れたオープン ソース ライブラリを見つけたことはありません。
私のアドバイス: Sun のシリアル IO フレームワークは使用しないでください。これは 1998 年のもので、バグだらけです。rxtxを使用できますが、serialio の方が優れています。
Windows 上の C/C++ の場合、(少なくとも) 2 つの選択肢があります。
.NET オプションの方がはるかに簡単です。
クロスプラットフォームである必要がある場合は、Boost Asioを検討することをお勧めします。
しばらく前に、モデム ファームから TCP/IP ネットワーク アドレスへの接続をルーティングするための適切なサイズのアプリケーションを作成しました。
最初に、邪魔にならない (無料の) シリアル IO ライブラリを探しました。Sun、IBM、および RxTx を試しました。アプリケーションの開発と初期テストでは問題ありませんでしたが、本番環境ではそれぞれが不安定であることが判明しました。
最後に、SerialIO の SerialPort を支払いました。変換は文字通りインポートを変更する作業であり、ライブラリは完全に堅実でした-私はそれを十分に推奨することはできません. 私のアプリケーションはここ数年、24 時間 365 日現場で稼働しており、複数の顧客が遭遇した問題は 1 つもありません。
SerialPort を使用して開発を開始する場合は、より優れた API があるので、それを使用します。
クロス プラットフォームのサポートが必要な場合は、SerialPort を使用した Java が最良の選択でした。
最後に、彼らのライセンスは、顧客のために機器にソフトウェアをプレインストールしていない限り、非常に合理的です。
職場では、シリアルデータが正しくフォーマットされていることを確認するためにteratermとrealtermを使用しています。また、スイッチ付きのハードウェアスプリッターがあるため、別のポートに戻るケーブルを介してアプリケーションへのトラフィックを監視できます。
Windowsでは、CreateFileを介してシリアルポートにアクセスできます。それはあなたにハンドルを与え、そこからあなたはアクセスを設定することができます。
反対に、WindowsとLinuxの両方で実行されるC#を使用して実行する場合は、いくつかの制限があります(編集:古い可能性があります。テストする方法がありません)。SerialPortオブジェクトを作成し、そのボーレート、ポート、およびその他の奇妙な設定を設定し、そのオブジェクトでopenを呼び出して、byte[]を書き出すだけです。すべてのセットアップの後、SerialPortオブジェクトは、ネットワーク化されたストリームと非常によく似た動作をするため、簡単に理解できるはずです。
また、ibrandyが述べているように、シリアルデバイスとの通信を開始する前に、ボーレートなどのこれらすべての設定を知っておく必要があります。
通信しようとしているデバイスによっては、ボー レート、データ ビット数、パリティ チェックの種類、ストップ ビット数以外にも考慮すべきパラメータが存在する場合があります。私の記憶が正しければ、モデムは RS-232C インターフェイスの 9 回線を使用します。キャッシュ レジスタなどの一部のデバイスは、RTS/CTS ラインまたは DTR/STR ラインでハードウェア ハンドシェイクを使用する場合があります。
一般に、インターフェースがどのように機能するかを知っておくとよいでしょう。ボーレートが合わないと通信できませんが、他のパラメータの設定を間違えるとうまくいく場合があります。たとえば、2 つのストップ ビットが設定された 1 つのストップ ビットを期待するデバイスにデータを簡単に送信できます。このような場合にデータを受信しようとすると問題が発生します。また、パリティビットをストップビットなどの 1 つとして適切に設定して使用することもできます。
私はpurejavacommを使用しています: これはpure java+JNAで記述されたjavax.commの実装です
rxtxとは異なり、dllをインストールする必要はありません。これは純粋なJava+JNAで書かれており、WindowsとLinux間の移植性の問題を解決してくれました。SolarisやFreeBSDなど、JNAがサポートする他のOSに簡単に移植できるはずですが、私は試していません。
純粋なJavaライブラリのパフォーマンスはrxtxなどのネイティブ実装よりも遅れると予想されるかもしれませんが、最新のCPUでは、ボトルネックはCPUサイクルではなく、シリアルポートのビットレートである可能性が非常に高くなります。また、Java / Nativeの混合ライブラリや純粋にコンパイルされたネイティブコードよりも、デバッグがはるかに簡単です。