Simulink メッセージの概要
メッセージベースの通信はさまざまなアプリケーションで必要とされます。たとえば、システムの複雑化に対応するために、集中型アーキテクチャを分散型アーキテクチャに置き換える、制御システム アーキテクチャなどです。分散型アーキテクチャでは、システムの複数のコンポーネントは共有ネットワークを介して通信します。
分散型アーキテクチャには次の 3 つの要素があります。
コンポーネント — 定義済みの I/O インターフェイスで一連の機能またはアルゴリズムを実行する設計の分割を表します。一般に、コンポーネントはイベントおよびデータを非同期で生成します。
インターフェイス — システムのコンポーネントが通信する共有の境界を提供します。非同期通信を提供する場合、メッセージは、イベントを関連するデータと組み合わせる便利なモデリング アーティファクトです。
ミドルウェア — 共有ネットワーク全体の非同期通信をサポートするためにコンポーネントに必要なサービスを提供します。
以下の図は、分散型アーキテクチャとその要素の構造を示しています。
このようなアーキテクチャをモデル化する場合、通常、明確に識別可能、再利用可能、および展開可能なコンポーネントをモデル化します。コンポーネント間で非同期イベントベースの通信を実現するには、メッセージ送受信インターフェイスを使用します。ミドルウェアをモデル化し、メッセージ送受信コンポーネントの数に基づいて、1 対多、多対 1、多対多など、コンポーネントの接続性を表すネットワーク トポロジの接続構造を容易にします。例については、複数の送信側および受信側をもつ共有通信チャネルのビルドを参照してください。
Simulink®、SimEvents®、および Stateflow® を使用して分散型アーキテクチャをモデル化する方法については、以下の図を参照してください。この図には、参照モデルとして作成された 2 つのメッセージ送信コンポーネントと 3 つのメッセージ受信コンポーネントが含まれています。Simulink SendブロックとReceiveブロックを使用する送受信インターフェイスでコンポーネントをモデル化できます。送受信インターフェイスに状態が関係する場合、または判定ロジックが必要な場合は、Stateflow チャートを使用します。Message Triggered Subsystemを使用して、イベント駆動型の受信インターフェイス、つまりメッセージによってトリガーされる受信インターフェイスもモデル化できます。
コンポーネントとインターフェイスをモデル化した後、以下を行います。
SimEvents を使用してミドルウェアをモデル化し、分散型アーキテクチャの動作をシミュレートします。SimEvents ライブラリのブロックを使用して、メッセージのマージ、遅延、配布、およびブロードキャストなど、カスタム ルーティングと通信パターンをモデル化して、通信ネットワークに対するミドルウェアの効果を調べることができます。
インターフェイスを含め、コンポーネントのコードを生成し、ミドルウェアまたはオペレーティング システムの通信 API に接続します。
メッセージ送受信インターフェイスのモデル化とコードの生成
まず、メッセージ ブロックがどのように動作するのかを理解します。メッセージを使用するモデルを作成するには、Send ブロックを使用してデータを変換し、メッセージおよび Receive ブロックを送信してメッセージを受信し、データに変換します。Send ブロックと Receive ブロックの動作方法を示す簡単な例については、メッセージの送受信のアニメーション化および理解を参照してください。
Send ブロックと Receive ブロックを使用してコンポーネントのメッセージ送受信インターフェイスをモデル化します。送受信インターフェイスの基本的な作成方法を示す例については、ソフトウェア コンポーネント間におけるメッセージ送受信インターフェイスの確立を参照してください。同じモデルのコードを生成する方法の詳細については、Generate C++ Messages to Communicate Data Between Simulink Components (Embedded Coder)を参照してください。
カスタム動作の送受信インターフェイスをさらに変更できます。たとえば、受信インターフェイスの実行をデータの入手時に同期できます。詳細については、Simulink 関数によるメッセージ受信インターフェイスの接続を参照してください。
モデル化した後、送受信インターフェイスのコードを生成し、それらをミドルウェアまたはオペレーティング システムの通信 API に接続します。最上位モデルのコードを生成し、外部メッセージ プロトコル サービス (DDS、ROS、SOMEIP、POSIX メッセージなど) を使用する分散システムでアプリケーションの通信を許可する例については、Generate C++ Messages to Communicate Data Between Simulink and an Operating System or Middleware (Embedded Coder)を参照してください。
イベント駆動型の受信インターフェイスのモデル化
Message Triggered Subsystemブロックを使用して、サブシステムがメッセージによってトリガーされてイベントに応答するように構成します。
Message Triggered Subsystem ブロックをスケジュールされたモードで使用する場合、サブシステムの実行順序は、スケジュール エディターを使用して非同期動作をモデル化するための非周期的分割としてスケジュールできます。サブシステムは、周期的に実行する代わりに、スケジュールに基づいてデータをプルして処理します。例については、Asynchronous Message Handling in Adaptive Cruise Controlを参照してください。
分散型アーキテクチャにおけるミドルウェアの効果のシミュレーション
Queue ブロックを使用してメッセージを格納し、並べ替えてキューに入れます。Queue ブロックを使用すると、メッセージ遷移に対するメッセージのストレージ容量、上書きポリシー、および並べ替えポリシーを指定できます。Queue ブロックの動作方法を示す簡単な例については、Queue ブロックを使用したメッセージの管理を参照してください。
SimEvents を使用して通信ネットワークに対するミドルウェアの効果をモデル化およびシミュレーションすることもできます。SimEvents ライブラリにより提供されるブロックを使用し、メッセージ ルーティング、ピアツーピア通信、ワイヤレス通信、パケット損失、およびチャネル遅延をモデル化します。SimEvents の詳細については、Discrete-Event Simulation in Simulink Models (SimEvents)を参照してください。
SimEvents でモデル化できる基本的な通信パターンについては、SimEvents によるメッセージ通信パターンのモデル化を参照してください。これらのパターンの組み合わせを使用して、より複雑な通信動作を作成できます。複数のメッセージ送受信コンポーネントと、遅延を伴う理想的な共有チャネルをもつシステムの例については、複数の送信側および受信側をもつ共有通信チャネルのビルドを参照してください。チャネル エラーとパケット損失を伴う共有ワイヤレス チャネルをもつモデルについては、パケット損失およびチャネル エラーを伴うワイヤレス メッセージ通信のモデル化を参照してください。
CSMA/CD プロトコルを使用するイーサネット通信ネットワークなど、より複雑なネットワークの動作をモデル化する方法の例については、CSMA/CD プロトコルを使用するイーサネット通信ネットワークのモデル化を参照してください。
メモ
SimEvents ブロックはコード生成をサポートしません。
参考
Sine Wave | Send | Receive | Queue | Sequence Viewer
関連するトピック
- ソフトウェア コンポーネント間におけるメッセージ送受信インターフェイスの確立
- Simulink 関数によるメッセージ受信インターフェイスの接続
- Generate C Messages to Communicate Data Between Simulink Components (Embedded Coder)
- Generate C++ Messages to Communicate Data Between Simulink Components (Embedded Coder)
- Generate C++ Messages to Communicate Data Between Simulink and an Operating System or Middleware (Embedded Coder)
- Model Message-Based Communication Integrated with POSIX Message Queues (Embedded Coder)
- Discrete-Event Simulation in Simulink Models (SimEvents)