パケット損失およびチャネル エラーを伴うワイヤレス メッセージ通信のモデル化
この例では、Simulink® のメッセージ、Stateflow®、および SimEvents® を使用してパケット損失およびチャネル エラーを伴うワイヤレス メッセージ通信をモデル化する方法を説明します。
このモデルには、メッセージを送信する 2 つのコンポーネントとメッセージを受信する 2 つのコンポーネントがあります。メッセージは伝送遅延を伴う共有ワイヤレス チャネルを使用して伝送されます。Stateflow® チャートはワイヤレス コンポーネントのメッセージ送信ロジックをモデル化し、SimEvents® ブロックはワイヤレス メッセージ送信、チャネル エラー、およびパケット損失をモデル化します。
メッセージの概要については、Simulink メッセージの概要 (Simulink)を参照してください。
メッセージを送受信するコンポーネントの作成
このモデルには、メッセージを出力する WirelessSend と WirelessStateflowSend という 2 つのソフトウェア コンポーネントがあります。
WirelessSend コンポーネントでは、Sine Wave ブロックが信号ソースです。Sine Wave ブロックは振幅が 1
の正弦波を生成します。このブロックの [サンプル時間] は 0.1
に設定されています。Send ブロックは信号を、信号値のデータを搬送するメッセージに変換します。WirelessSendComponent は Send Buffer 1 に接続されます。
WirelessStateflowSend コンポーネントでは、別の Sine Wave ブロックが正弦波信号を生成し、Noise ブロックは信号へのノイズの挿入に使用されます。Noise ブロックは、平均が 0
で分散が 1
のガウス分布から値が生成される信号を出力します。Stateflow® チャートは信号をフィルター処理し、メッセージを送信するかどうかを決定する単純なロジックを表します。StateflowSend コンポーネントはメッセージを Send Buffer 2 に送信します。
モデルには、メッセージを受信する WirelessReceive と WirelessListener という 2 つのソフトウェア コンポーネントがあります。
WirelessReceive コンポーネントでは、Receive ブロックがメッセージを受信し、そのメッセージ データを信号値に変換します。コンポーネントは Receive Buffer 1 に接続されます。
WirelessListener コンポーネントには、関数 onOneMessage(data)
を実行する Simulink Function ブロックがあります。メッセージが Receive Buffer 3 に到着すると、Simulink Function ブロックはメッセージ データからの値である引数 data
を入力信号として取ります。このブロックで、data
の値が 2
で乗算されます。ブロックは新しいデータ値を出力します。
これらのコンポーネントの作成の詳細については、複数の送信側および受信側をもつ共有通信チャネルのビルド (Simulink)を参照してください。
マルチキャストを使用したワイヤレス メッセージ通信のモデル化
WirelessSend コンポーネントと WirelessStateflowSend コンポーネントは Send Buffer 1 と Send Buffer 2 にメッセージを送信します。これらは、ワイヤレスでメッセージを送信できる SimEvents® Entity Multicast ブロックです。Transmission Buffer ブロックは、Send Buffer 1 と Send Buffer 2 が送信するメッセージを受信できる SimEvents® マルチキャスト受信キューです。
Send Buffer 1、Send Buffer 2、および Wireless Channel ブロック内の Transmission Buffer ブロック間でこのワイヤレス通信を実現するには、次のようにします。
Send Buffer 1 ブロックと Send Buffer 2 ブロックで、[Multicast tag] パラメーターを
A
に設定します。Transmission Buffer ブロックで、[Multicast tag] パラメーターを
A
に設定します。
[Multicast tag] パラメーターは、メッセージがどの Entity Multicast ブロックから受信されるのかを定義します。
チャネル エラーのモデル化
SimEvents® Entity Gate ブロックはチャネル エラーのモデル化に使用されます。このブロックには入力端子が 2 つあります。入力端子の 1 つは Transmission Buffer からの受信メッセージ用です。2 番目の入力端子はゲートを開くタイミングを決定する制御端子です。
Gate ブロックの [Operating mode] パラメーターを Enable gate
に設定します。このモードでは以下が行われます。
制御端子から
0
より大きい値を搬送するエンティティを受信すると、ブロックはゲートを開いて、メッセージが進むことを許可します。これは操作可能チャネルを表します。
エンティティが
0
以下の値のデータを搬送すると、ブロックはゲートを閉じてメッセージの受け渡しをブロックします。これはチャネル エラーを表します。
Gate ブロックを制御するために、SimEvents® Entity Generator ブロック (この例では Control Gate というラベルが付いています) を使用して、さまざまなデータ値を搬送するエンティティを生成できます。
Control Gate ブロックでは、[Event actions] の [Generate action] フィールドで、下のコードを使用して Gate ブロックを開閉するエンティティを生成します。最初は、エンティティ データは 1
であり、ゲートは開いていて、チャネルは操作可能状態です。新しいエンティティが生成されると、その値は 0
に変化し、これによってゲートが閉じられます。エンティティが生成されるたびに、ゲートのステータスは開いた状態から閉じた状態、または閉じた状態から開いた状態に変化します。
Control Gate ブロックの [Intergeneration time action] フィールドで下のコードを使用し、チャネルの操作可能状態とエラー状態を表します。このコードはチャネルを操作可能として初期化します。dt
はエンティティの生成間時間で、チャネルのステータスの変更に使用されます。これは、生成された各エンティティが Gate ブロックのステータスを変更するためです。
このコードでは、0
と 10
の間の値を取る一様分布から修復時間が生成されます。エラーの時間間隔は 0
と 50
間の値を取る別の一様分布から生成されます。
パケット損失のモデル化
パケット損失をモデル化するには、SimEvents® Entity Output Switch ブロックを使用します。
このブロックには入力端子が 2 つあります。入力端子の 1 つはメッセージを受け入れます。もう 1 つの入力端子は出力端子の選択を決定するエンティティを受け入れます。エンティティが 1
に設定されている場合、このブロックは出力端子 1
を選択してメッセージを Wirelessly Share Messages ブロックに転送します。エンティティが 2
に設定されている場合、このブロックはパケット損失を表す Entity Terminator ブロックに接続されている出力端子 2
を選択します。
Output Switch ブロックでは次のようになります。
[出力端子の数] は
2
に設定されます。
選択されている出力を特定するために、[Switching criterion] は
From control port
に設定され、[Initial port selection] は1
に設定されます。
パケット損失の確率 0.1
をモデル化するには、Probabilistic Packet Loss ブロックで [Event actions] タブを選択します。[Generate action] フィールドには次のコードが含まれます。
persistent rngInit; if isempty(rngInit) seed = 12345; rng(seed); rngInit = true; end
% Pattern: Uniform distribution % m: Minimum, M: Maximum m = 0; M = 1; x = m + (M - m) * rand;
% x is generated from uniform distribution and % takes values between |0| and |1|. if x > 0.1 % Entity carries data |1| and this forces Output switch to select % output |1| to forward entities to receive components. entity = 1; else % Entity carries data |2| and this forces Output switch to select % output |2| and this represents a packet loss. entity = 1; end
つまり、制御端子に入るエンティティが 1
に設定される確率は 0.9
で、これによりこのブロックは Wirelessly Share Messages ブロックにメッセージを出力します。
モデルのシミュレーションと結果の確認
モデルのシミュレーションを実行します。
Transmission Buffer ブロック上部で接続されている Scope ブロックを開きます。このブロックには共有チャネルから送信されたメッセージの合計数が表示されます。
このチャネルからは 4255
件のメッセージが送信されています。
プロットにはチャネル エラーも表示されます。たとえば、最初の 100
秒を拡大します。チャネル エラーはメッセージ送信がブロックされた 40
と 49
の間に発生していることを確認します。
データ インスペクターを開き、Gate を制御するエンティティを可視化します。生成されたエンティティごとにエンティティ データが 1
から 0
に変わります。
損失したメッセージの数を確認するには、Packet Loss ブロックに接続された Scope ブロックを開きます。
409
件のメッセージが送信中に失われています。これは、メッセージの 9.6
パーセントです。
参考
Sine Wave (Simulink) | Send (Simulink) | Receive (Simulink) | Queue (Simulink) | Entity Terminator (SimEvents) | Entity Output Switch (SimEvents) | Entity Gate (SimEvents) | Entity Multicast (SimEvents)
関連するトピック
- Simulink メッセージの概要 (Simulink)
- Discrete-Event Simulation in Simulink Models (SimEvents)
- 複数の送信側および受信側をもつ共有通信チャネルのビルド (Simulink)
- CSMA/CD プロトコルを使用するイーサネット通信ネットワークのモデル化 (Simulink)