シリアル通信プロトコル RS232

1. シリアル通信プロトコルの概要

シリアル通信(Serial Communications)の概念は非常にシンプルで、シリアルポートで1ビットずつバイトを送受信する通信方式です。シリアル通信はバイトを送信するパラレル通信よりも遅くなりますが、シリアル ポートは 2 本のワイヤだけを使用してデータを送信できます。

シリアル通信は非同期であるため、ポートは一方のワイヤでデータを送信しながら、もう一方のワイヤでデータを受信できます。簡単に説明すると、2 人が話し、1 人が話し、1 人が聞くということです。

シリアル通信の最も重要なパラメータは、ポート (com)、ボー レート、データ ビット、ストップ ビット、およびパリティ チェックです。シリアル通信が必要な 2 つのポートの場合、これらのパラメータは一致し、一緒に従う必要があります。これはシリアル通信の前提条件でもあります。

1. ボーレート

ボーレートとは、キャリアに対するデータ信号の変調速度を指し、単位時間当たりにキャリアの変調状態が変化する回数で表されます。

たとえば、ボー レートは 9600bps で、これは 1 秒あたり 9600 ビットの送信を表し、1 秒を 9600 等分することに相当します。

したがって、1 ビットあたりの時間は 1/9600 秒 = 104.1666...us となります。約0.1ms。9600 等分であるため、つまり、1 ビットごとに次のビットが続くため、追加の間隔はありません。2 つのデバイスがシリアル通信を実現したい場合、トランシーバーによって設定されたボーレートが同じでなければならず、そうでないと通信を実現できません。

送信と受信の同じボーレートで通信を実現できます。

送信ボー レートと受信ボー レートが一致していないため、RX エンドが正常に受信できません。 

2. シリアル通信のデータ構造

スタート ビット: スタート ビットは、文字送信の開始を示す 1 ビット時間持続する論理 0 レベルである必要があり、受信側はスタート ビットを使用して受信クロックを送信側のデータと同期できます。

データ ビット: データ ビットはスタート ビットに続き、通信において実際に有効な情報です。データ ビットの数は、通信当事者の両方によって合意されます。データを送信するときは、文字の下位ビットが最初に送信され、次に文字の上位ビットが送信されます。

パリティ チェック ビット: パリティ チェック ビットは 1 ビットのみを占有し、奇数チェックまたは偶数チェックに使用され、パリティ チェック ビットは必要ありません。奇数パリティの場合は、送信データの論理 High ビットが合計で奇数個であることを確認する必要があり、偶数パリティの場合は、送信データの論理 High ビットが合計で偶数個であることを確認する必要があります。

ストップ ビット: ストップ ビットは 1、1.5、または 2 ビットで、ソフトウェアで設定できます。これは論理 1 レベルである必要があり、文字の送信の終了を示します。

アイドル ビット: アイドル ビットとは、文字のストップ ビットの終わりから次の文字のスタート ビットまでを意味し、ラインがアイドル状態にあり、ハイ レベルで満たされる必要があることを示します。

2. RS232シリアル通信プロトコル

当初はアナログ信号出力の単純な処理量でしたが、その後、計測器のインターフェースにRS232インターフェースが登場し、ポイントツーポイント通信は実現できますが、ネットワーク機能は実現できませんでした。 RS485の。

シリアル通信のデータ送信は0と1の両方であることが分かります。シングルバスやI2C、UARTではラインのハイレベルとローレベルで論理1か論理0を判断しますが、この信号線のGNDは他の機器と接続されていないため、共通接地モードによる通信が形成されますが、この共通接地モード通信は干渉を受けやすく、耐干渉性能は比較的弱いです。したがって、差動通信、マルチマシン通信のサポート、および強力な耐干渉性を備えた RS485 が広く使用されています。

RS485通信の最大の特徴は、伝送速度が10Mb/s以上、伝送距離が約3000メートルに達することです。485の最大速度と最大伝送距離は非常に大きいですが、距離が長くなると伝送速度が遅くなり、両方を兼ね備えることはできないことに誰もが注意する必要があります。

RS232、RS485 の通信プロトコルは実際には標準であり、この標準をそのまま通信に使用してもまったく問題ありません。通信プロトコルのカスタマイズも可能で、ご要望に応じてカスタム通信プロトコルを作成し、RS232などの規格に準拠したプロトコルで通信が可能です。

シリアル通信の物理層には、上記のような多くの規格があります。ここでは主に RS232 規格を受け取ります。RS232 規格では、主に信号の目的、通信インターフェイス、信号のレベル規格が規定されています。

上記の通信モードでは、2 つの通信デバイスの「DB9 インターフェース」がシリアルポート信号線を介して接続され、シリアルポート信号線のデータ信号の送信には「RS232 規格」が使用されます。RS232レベル規格の信号はコントローラが直接認識できないため、「レベル変換チップ」を介してコントローラが認識できる「TTLキャリブレーション」レベルの信号に変換して通信を実現します。 

チップは PC に接続されます。通常、PC は RS232 インターフェイス (9 ピン) を使用します。チップを PC の RS232 インターフェイスと直接通信したい場合は、チップの入力ポートと出力ポートを RS232 タイプに変換してから相互接続する必要があります。この 2 つのレベル規格は異なります。

  • MCU コメント標準 (TTL レベル): +5V は 1、0V は 0 を意味します。
  • RS232 レベル標準: +15/+13V は 0、-15/-13 は 1 を意味します。

したがって、シングルチップマイコンと PC 間のシリアルポート通信は、シングルチップマイコンのシリアルポートとホストコンピュータから与えられる RS232 ポート間で、TTL レベルと RS232 レベルの変換を行う必要があります。レベル変換回路です。

以下の図は、DB9 標準シリアル通信インターフェイスを示しています。

DB9 ピンの説明: 

上表はコンピュータ側の DB9 オスヘッドの標準的な接続方法であり、2 つの通信デバイス間の送受信信号 (RXD と TXD) はクロスコネクトする必要があるため、モデム側の DB9 メス ヘッドは通常、オス ヘッドと同じですが、2 つのデバイスを接続する場合は、「ストレート」シリアル ケーブルを使用して接続します。 

シリアル ポート ラインの RTS、CTS、DSR、DTR、および DCD 信号は、信号が有効であることを示すためにロジック 1 を使用し、信号が無効であることを示すためにロジック 0 を使用します。たとえば、コンピュータ側が論理 1 を表すように DTR 信号ラインを制御する場合、マシンがデータを受信する準備ができていることをリモート モデムに通知することになり、0 はまだ準備ができていないことを意味します。 

USB to シリアルポートを使用すると、シリアルポート通信も実現できます。USB to シリアルポートの回路図は次のとおりです。

3. リモートシリアルポートの使用

生産ラインのシリアル デバイス (スマート モジュール、計測器、PLC など) をオフィスのコンピュータに接続する場合、長距離のシリアル ケーブルを直接引くことは絶対に不可能です。中間が長すぎる場合は、Ethernet(工場のローカルエリアネットワーク)を利用することで解決できます(PLC接続を例にしています)。

実装:

  • PLC側にシリアルポートサーバーを追加して、シリアルポートからネットワークポートへの機能を実現します。シリアル サーバーにはネットワーク ポートとシリアル ポートがあります。
  • リモート コンピュータ ホストとシリアル ポート サーバーは、それぞれネットワーク ケーブルを介してローカル エリア ネットワークに接続され、IP アドレスを取得してネットワーク接続を確立します。
  • コンピュータ上で仮想シリアル ポート ソフトウェアを実行する目的は、リモート シリアル ポート サーバーのシリアル ポートをローカル シリアル ポートに仮想化し、リモート シリアル ポートをローカル シリアル ポートとして使用することです。その方法は、次の図に示すように、最初にネットワーク経由でシリアル ポート サーバーを検索し、それが見つかったら、アイドル状態のシリアル ポート番号をローカル シリアル ポートとして割り当てることです。

  • このとき、コンピュータ上の PLC プログラミング ソフトウェアは、指定したシリアル ポート番号を使用してリモート PLC に接続できるため、ローカル接続と同じくらい便利です。他のシリアルデバイスを接続する場合も同様です。 

知らせ:

  • シリアル ポート サーバーの IP アドレスは固定 IP として設定するのが最適です。そうすることで、動的な IP 変更による通信障害を軽減できます。
  • シリアル ポート サーバーがネットワーク セグメント全体に適用される場合、ゲートウェイ アドレスを設定する必要があります。

4. C#はホストコンピュータのシリアル通信を開発します

上位コンピュータは、サードパーティから提供されるカスタム通信プロトコルを入手し、その内容に応じてプログラムするだけでよく、具体的な機能実現はハードウェアエンジニアが実現します。

ほとんどのシリアル ポート通信には対応するライブラリ関数があり、シリアル ポートを使用および設定する場合は、次のようにライブラリ関数を直接呼び出して設定することができます。

まず、次のようにインターフェイスを実装します。

シリアル ポート パラメータを構成します - シリアル ポートを開きます。

データを送る:

データを受信します:

データを非同期で受信します。

書き込み後に直接読む必要がある場合。

次の方法を参照してください。 

レンダリング: 

カスタムプロトコル(送受信ともに16進数)で通信する場合は、まず通信プロトコルをカスタマイズします。

通信に RS232 を使用し、次のように設定します。

  • ボーレート: 9600;
  • データビット: 8;
  • ストップビット: 1;
  • パリティ: なし。

通信プロトコルの内容:

  • 関数 1 のアドレス 0b を実行するようにレジスタ 1 を設定します。
  • レジスタ 2 を 1 に設定して、関数 2 のアドレス 1b を実行します。
  • CRC検証:データ+アドレスなどをANDや演算で生成した値(通常は独自に定義したものを検証します)。
  • 開始ビット: 01;
  • 終了ビット: 05;
  • アドレスビット: 0a (異なるレジスタに従って決定);
  • 結果ビット: 0e (成功 0e、失敗 00);

送信例:機能1を実行します。

01 0b 01 00 00 00 00 00 00 00 06 0e 05

解析:

01 は開始ビット、0b はレジスタ 1 に対応するアドレス、データ長は 8、データがない場合は 00 を設定、06 は crc チェックの生成値、0e は結果ビット、05 は終了少し。

成功を返します:

01 0b 01 00 00 00 00 00 00 00 06 0e 05

失敗を返します:

01 0b 01 00 00 00 00 00 00 00 07 00 05

最も単純なカスタム プロトコルの 1 つである通信プロセスは次のとおりです。

  1. ホストコンピュータがデータを送信する
  2. 下のコンピューターがデータを受信します
  3. 下位のコンピューターは CRC 検証を実行しますが、失敗した場合は応答しません。
  4. 下位コンピュータの CRC 検証が成功し、関数が実行されます。そして結果をフィードバックします。
  5. 上位コンピュータはデータを受信しCRCチェックを行い、成功すればデータは正しいものとみなされます。それ以外の場合、データは間違っているとみなされ、実行は失敗します。
  6. 完成通信

アナログ レジスタは、ホスト コンピュータから送信された命令を処理します。

コマンドは正しく返されます (プロトコルに応じて)。

命令エラーリターン (プロトコルに対応): 

コードのダウンロード:スタディドーム: 1221211232023032032030320 

おすすめ

転載: blog.csdn.net/qq_35029061/article/details/130717375