Main Content

CSMA/CD プロトコルを使用するイーサネット通信ネットワークのモデル化

この例は、Simulink® のメッセージと SimEvents® を使用して CSMA/CD プロトコルをもつイーサネット通信ネットワークをモデル化する方法を示します。この例には、イーサネット通信ネットワークを介して通信するコンピューターが 3 台あります。各コンピューターにはデータを生成するソフトウェア コンポーネントと通信用のイーサネット インターフェイスがあります。各コンピューターは一意の MAC アドレスをもつ別のコンピューターにデータを送信しようとします。イーサネット インターフェイスは CSMA/CD 通信プロトコルを使用してコンピューターとネットワークとの対話を制御します。このプロトコルは、複数のコンピューターでデータを同時に送信すると発生する競合への対応に使用されます。Ethernet コンポーネントはネットワークおよびコンピューター間の接続を表します。

ソフトウェア コンポーネント

モデルで、各ソフトウェア コンポーネントはデータ (ペイロード) を生成し、そのデータ、サイズ、送信先をメッセージに結合します。次に、メッセージが通信用のイーサネット インターフェイスに送信されます。

各ソフトウェア コンポーネント サブシステムでは次のようになります。

  • MATLAB Function ブロックにより、サイズが 461500 バイト間のデータが生成される [ 1 ]。

  • Constant ブロックにより、データへの送信先アドレスが割り当てられる。

  • Bus Creator ブロックにより、Data 信号、PayloadSize 信号、DestAddress 信号が dataPacket と呼ばれる非バーチャル バス オブジェクトに変換される。

  • Send ブロックにより、dataPacket がメッセージに変換される。

  • Outport ブロックにより、メッセージが通信用のイーサネット インターフェイスに送信される。

各コンピューターは異なるレートでデータを生成します。データ生成レートは MATLAB Function ブロックのサンプル時間から変更できます。

メッセージ送受信インターフェイスの作成の基礎については、ソフトウェア コンポーネント間におけるメッセージ送受信インターフェイスの確立を参照してください。

イーサネット インターフェイス

Ethernet Interface 1 をダブルクリックします。[Station ID] および [Transmission buffer capacity] を指定できることを確認します。

イーサネット インターフェイス サブシステムには主要部分が 3 つあります。

  1. Assemble Ethernet Frame — 受信メッセージをイーサネット (MAC) フレームに変換します。

  2. Transmission Buffer — 送信用のイーサネット フレームを格納します。

  3. Medium Access Control — パケット送信用の CSMA/CD プロトコルを実装します [ 2 ]。

Assemble Ethernet Frame

Assemble Ethernet Frame ブロックはイーサネット固有の属性をメッセージに付加することにより、メッセージをイーサネット フレームに変換します [ 1 ]。

パケット アセンブリ処理は次のとおりです。

  • Copy Message というラベルが付いた SimEvents® Entity Replicator ブロックが受信メッセージをコピーします。元のメッセージは Assemble MAC Frame というラベルが付いた SimEvents® Entity Generator ブロックに転送されます。Entity Generator ブロックの [Generation method] のパラメーターは Event-based に設定されるため、元のメッセージがブロックに到着するとすぐにエンティティを作成します。メッセージのコピーは関数 initPacket() で Simulink Function ブロックに転送されます。"メッセージ" および "エンティティ" という用語は Simulink® と SimEvents® で同義的に使用されます。

  • Simulink Function ブロックはデータ、サイズ、送信先アドレスをフレーム アセンブリ用に Assemble MAC Frame ブロックに転送します。

  • Assemble MAC Frame ブロックはイーサネットに固有の属性と、Simulink Function ブロックから転送される値の両方を搬送するイーサネット フレームを生成します。

Assemble MAC Frame ブロックは各フレーム生成イベントによって呼び出されるアクションとして、関数 initPacket() を呼び出します。

生成されるイーサネット フレームの属性は次のとおりです。

  • entity.TxAddressStationID です。

  • entity.RxAddressentity.Data、および entity.PayloadSize には Simulink Function ブロックから値が割り当てられます。

  • entity.TxDelay は伝送遅延です。これはペイロードのサイズとビットレートで定義されます。Bitrate パラメーターはモデル プロパティの初期化関数で指定されます。

  • entity.CRC はエラー検出用の巡回冗長検査です。

Transmission Buffer

Transmission Buffer は先入れ先出し (FIFO) ポリシーを使用して送信前にエンティティを格納します。このバッファーは Queue ブロックでモデル化されます。

キューの容量は [Transmission buffer capacity] パラメーターによって決定されます。

Medium Access Control

Medium Access Control ブロックは 6 つの SimEvents® ブロックを使用してモデル化されます。

  • Admit 1 Frame というラベルが付いた Entity Gate ブロックは 2 つの入力端子をもつ有効なゲートとして設定されます。1 つの入力端子は Transmission Buffer ブロックからのフレームを許可します。もう 1 つの入力端子は制御端子と呼ばれ、CSMA/CD ブロックからのメッセージを受け入れます。このブロックは CSMA/CD ブロックから正の値をもつメッセージを受信すると 1 つのフレームが進むのを許可します。

  • Merge というラベルが付いた Entity Input Switch ブロックは 2 つのパスをマージします。1 つの入力端子は Admit 1 Frame ブロックで許可された新しいフレームを受け入れ、もう 1 つの入力端子は CSMA/CD ブロックから送信される再送信用のフレームを受け入れます。

  • Wait for Channel というラベルが付いた Entity Server ブロックはチャネルを通じた再送信前にフレームのバック オフ時間をモデル化します。

  • Send to Channel というラベルが付いた別の Entity Gate ブロックは、チャネルがアイドル状態になるとゲートを開いてフレームを受け入れます。チャネルのステータスは CSMA/CD チャートで伝達されます。

  • Copy Transmitted Frame というラベルが付いた Entity Replicator ブロックはフレームのコピーを生成します。1 つのフレームはイーサネット ネットワークに転送され、もう 1 つは CSMA/CD チャートに転送されます。

  • CSMA/CD というラベルが付いた Discrete-Event Chart ブロックは CSMA/CD プロトコルをモデル化するステート マシンを表します。

CSMA/CD プロトコル

CSMA/CD プロトコル [ 2 ] は 2 つの入力をもつ Discrete-Event Chart ブロックでモデル化されます。

  • TxIn — 送信されたフレームのコピー。

  • RxIn — イーサネット ネットワークから受信したフレーム。

チャートには 5 つの出力があります。

  • IsIdle1 のときに Send to Channel ゲートを開いてフレームを受け入れ、値が 0 のときにゲートを閉じる。

  • TxRe — 送信中に競合が検出されると Merge ブロックに転送される再送信されたフレーム。

  • TxNext — 値が 1 のときに Admit 1 Frame ゲートを開いて新しいフレームを受け入れる。

  • DataOut — 受信したデータ。

  • Size — 受信したデータのサイズ。

メッセージの送受信

最初、ブロックは Standby 状態であり、チャネルはアイドル状態です。

ブロックが送信している場合、遅延の後にブロックはメッセージの送信を試行し、Isle.data0 に設定され、そのチャネルが使用中であることを宣言します。

送信に成功すると、ブロックは TxNext.data1 に設定してチャネルへの新しいメッセージを許可し、Standby 状態にリセットします。

競合がある場合、ブロックはランダムなバック オフ時間に対して遅延させた後、メッセージを再送信します。n は再送信のカウンターです。ブロックはメッセージを最大 16 回再送信します。すべての再送信の試行に失敗すると、ブロックはメッセージを終了し、新しいメッセージのエントリを許可します。その後、StandBy にリセットします。

同様に、ブロックはその他のコンピューターからメッセージを受信します。エラーがなければ、メッセージは正常に受信され、ブロックは受信したデータとそのサイズを出力します。

イーサネット ハブ

イーサネット コンポーネントは通信ネットワークおよびコンピューターからネットワークへの有線接続を表します。

Ethernet ブロックをダブルクリックして、そのパラメーターを確認します。

  • Connected stations — これらの値は、要素としてステーション ID をもつベクトルである Stations に割り当てられます。

  • Length of cables (m) — これらの値は CableLength に割り当てられ、ハブに接続された各コンピューターのケーブルの長さを表します (メートル単位)。

  • Packet error rate (PER) — これらの値は PER に割り当てられ、各コンピューターのメッセージ送信におけるエラー率を表します。

  • Processing time (s) — これらの値は ProcessingTime に割り当てられ、チャネルの伝送遅延を表します。

3 つの SimEvents® ブロックはイーサネット ネットワークのモデル化に使用されます。3 台のコンピューターの接続は Entity Input Switch ブロックを使用してマージされます。Entity Server ブロックはケーブルの長さに基づくチャネル伝送遅延のモデル化に使用されます。Entity Replicator ブロックは送信されたメッセージをコピーして 3 台のコンピューターに転送します。

モデルのシミュレーションと結果の確認

モデルをシミュレートし、平均チャネル使用率を表示する Scope ブロックを開きます。チャネル使用率は約 0.12 に収束します。

最上位モデルとして Software Component 1 を開き、Generate Data 1 ブロックの [サンプル時間]0.01 に設定してデータ生成率を変更します。シミュレーションを再度実行し、チャネル使用率が 0.2 に増加したことを確認します。

新しいコンピューターとネットワークの接続

複数のコンピューターをネットワークに接続できます。

新しいコンピューターをネットワークに接続するには、次を行います。

  • 既存のコンピューターをコピーし、Ethernet Interface ブロックをダブルクリックして新しい ID を割り当てます。この例では、新しいコンピューターの ID は 4 です。

  • Ethernet ブロックをダブルクリックし、新しいコンピューターのステーション ID、ケーブルの長さ、パケット エラー レートを追加します。

参考文献

  1. Ethernet frame - Wikipedia (https://en.wikipedia.org/wiki/Ethernet_frame)

  2. Carrier-sense multiple access with collision detection - Wikipedia (https://en.wikipedia.org/wiki/Carrier-sense_multiple_access_with_collision_detection)

参考

| | | (SimEvents) | (SimEvents) | (SimEvents) | (SimEvents) | (SimEvents)

関連するトピック