CSMA/CD プロトコルを使用するイーサネット通信ネットワークのモデル化
この例は、Simulink® のメッセージと SimEvents® を使用して CSMA/CD プロトコルをもつイーサネット通信ネットワークをモデル化する方法を示します。この例には、イーサネット通信ネットワークを介して通信するコンピューターが 3 台あります。各コンピューターにはデータを生成するソフトウェア コンポーネントと通信用のイーサネット インターフェイスがあります。各コンピューターは一意の MAC アドレスをもつ別のコンピューターにデータを送信しようとします。イーサネット インターフェイスは CSMA/CD 通信プロトコルを使用してコンピューターとネットワークとの対話を制御します。このプロトコルは、複数のコンピューターでデータを同時に送信すると発生する競合への対応に使用されます。Ethernet コンポーネントはネットワークおよびコンピューター間の接続を表します。
ソフトウェア コンポーネント
モデルで、各ソフトウェア コンポーネントはデータ (ペイロード) を生成し、そのデータ、サイズ、送信先をメッセージに結合します。次に、メッセージが通信用のイーサネット インターフェイスに送信されます。
各ソフトウェア コンポーネント サブシステムでは次のようになります。
MATLAB Function ブロックにより、サイズが
46
と1500
バイト間のデータが生成される [ 1 ]。
Constant ブロックにより、データへの送信先アドレスが割り当てられる。
Bus Creator ブロックにより、
Data
信号、PayloadSize
信号、DestAddress
信号がdataPacket
と呼ばれる非バーチャル バス オブジェクトに変換される。
Send ブロックにより、
dataPacket
がメッセージに変換される。
Outport ブロックにより、メッセージが通信用のイーサネット インターフェイスに送信される。
各コンピューターは異なるレートでデータを生成します。データ生成レートは MATLAB Function ブロックのサンプル時間から変更できます。
メッセージ送受信インターフェイスの作成の基礎については、ソフトウェア コンポーネント間におけるメッセージ送受信インターフェイスの確立を参照してください。
イーサネット インターフェイス
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 | Receive | Queue | Entity Input Switch (SimEvents) | Entity Replicator (SimEvents) | Discrete-Event Chart (SimEvents) | Entity Generator (SimEvents) | Entity Gate (SimEvents)