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

ソフトウェア コンポーネント
モデルで、各ソフトウェア コンポーネントはデータ (ペイロード) を生成し、そのデータ、サイズ、送信先をメッセージに結合します。次に、メッセージが通信用のイーサネット インターフェイスに送信されます。
各ソフトウェア コンポーネント サブシステムでは次のようになります。
MATLAB Function ブロックにより、サイズが
46~1500バイトのデータが生成される [ 1 ]。
Constant ブロックにより、データへの送信先アドレスが割り当てられる。
Bus Creator ブロックにより、
Data信号、PayloadSize信号、DestAddress信号がdataPacketという非バーチャル バス オブジェクトに変換される。
Send ブロックにより、
dataPacketがメッセージに変換される。
Outport ブロックにより、メッセージが通信用のイーサネット インターフェイスに送信される。

各コンピューターは異なるレートでデータを生成します。データ生成レートは MATLAB Function ブロックのサンプル時間から変更できます。
メッセージ送受信インターフェイスの作成の基礎については、ソフトウェア コンポーネント間におけるメッセージ送受信インターフェイスの確立 (Simulink)を参照してください。
イーサネット インターフェイス
Ethernet Interface 1 をダブルクリックします。[Station ID] および [Transmission buffer capacity] を指定できることを確認します。

イーサネット インターフェイス サブシステムには次の 3 つの主要部分があります。
Assemble Ethernet Frame — 受信メッセージをイーサネット (MAC) フレームに変換します。
Transmission Buffer — 送信用のイーサネット フレームを格納します。
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.TxAddressはStationIDです。
entity.RxAddress、entity.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 つの出力があります。
IsIdle— 値が1のときに Send to Channel ゲートを開いてフレームを受け入れ、値が0のときにゲートを閉じます。
TxRe— 送信中に競合が検出されると Merge ブロックに転送される、再送信されたフレーム。
TxNext— 値が1のときに Admit 1 Frame ゲートを開いて新しいフレームを受け入れる。
DataOut— 受信したデータ。
Size— 受信したデータのサイズ。

メッセージの送受信
最初、ブロックは Standby 状態で、チャネルはアイドル状態です。
ブロックが送信している場合、遅延の後にブロックはメッセージの送信を試行し、Isle.data が 0 に設定され、そのチャネルが使用中であることを宣言します。
送信に成功すると、ブロックは TxNext.data を 1 に設定してチャネルへの新しいメッセージを許可し、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、ケーブルの長さ、パケット誤り率を追加します。

参考文献
Ethernet frame - Wikipedia (https://en.wikipedia.org/wiki/Ethernet_frame)
Carrier-sense multiple access with collision detection - Wikipedia (https://en.wikipedia.org/wiki/Carrier-sense_multiple_access_with_collision_detection)
参考
Send (Simulink) | Receive (Simulink) | Queue (Simulink) | Entity Input Switch (SimEvents) | Entity Replicator (SimEvents) | Discrete-Event Chart (SimEvents) | Entity Generator (SimEvents) | Entity Gate (SimEvents)
トピック
- Simulink メッセージの概要 (Simulink)
- Discrete-Event Simulation in Simulink Models (SimEvents)
- 複数の送信側および受信側をもつ共有通信チャネルのビルド (Simulink)