Main Content

スコープ内の Simulink 関数を使用したアプリケーション ソフトウェアからのサービス アクセスのモデル化

この例は、サービスと、個別のコンポーネントからのこれらのサービスへのアクセスをモデル化する方法を示しています。

この例では、シンプルでランダムな動きの検出サービスが定義され、クライアントの動きの検出アプリケーション ソフトウェアからアクセスされています。サービスでは、readwrite の 2 つの関数が定義されています。クライアントは、動きが検出されると関数 read および関数 write を呼び出して記録します。このクライアントとサーバーの交互作用は、スコープ内の Simulink® 関数と Stateflow® チャートを使用してモデル化されます。

ModelServicesAndAccessFromApplicationSoftwareExample_01.png

Simulink 関数と関数の呼び出し元の実装

モデルを開きます。

open_system('ServiceAccessSoftwareExample');

動きの検出サービス モデル MotionDetectionServices.slx は、関数を定義するサーバー モデルです。モデルには 0 ~ 1 の乱数の入力が 1 つあり、乱数はRandom Number ブロックによって生成されます。この乱数は、読み取り Simulink Function ブロックに実装されている関数 read の出力引数 y です。関数 write は書き込み Simulink Function ブロックに実装されており、入力引数 u をコピーします。動きが検出されると、関数 read および関数 write が記録します。

ModelServicesAndAccessFromApplicationSoftwareExample_02.png

Stateflow チャートを使用して、入力引数を介して Simulink Function ブロックにデータを送信できます。この例では、関数 read および関数 write がクライアント モデル MotionDetectionSoftware.slxMotionDetectionByAccessingServices チャートから呼び出されます。チャートでは、呼び出される関数を特定するために、関数呼び出しではスコープ名としてモデル ファイル名を使用し、その後に関数名が続きます。たとえば、ソフトウェアは次の表記法を使用して関数 write を呼び出します。MotionDetectionServices.write(true)

サービス モデルで、関数 write に入力引数 u があることを確認できます。入力引数はサービス モデルから継承されます。これにより、ソフトウェア モデルはサービス モデルから独立してコンパイルできます。

stateflow-chart.png

サービスのシミュレーションと関数シーケンスの表示

モデルを実行します。

sim('ServiceAccessSoftwareExample');

モデルのシミュレーション全体を通じて関数呼び出しのシーケンスを表示するには、モデルの Sequence Viewer ブロックをダブルクリックして シーケンス ビューアー を開きます。Simulink ツールストリップからこのツールを開くこともできます。そうするには、[シミュレーション] タブの [結果の確認] セクションで、[シーケンス ビューアー] をクリックします。

シーケンス ビューアー ウィンドウでは、モデル内の各ブロックが、シミュレーション時間が下向きに進む縦のライフラインとして表現されます。この情報により、呼び出しの流れを時間に基づいて把握したり、これらの関数の呼び出しの間に送信される引数を解析することができます。

この例では、Software コンポーネントが関数 read と関数 write をいつ呼び出しているかがわかります。関数呼び出しは、"function_name(argument_list)" 形式のラベルが付いた実線の矢印として表示されます。Software コンポーネントからの関数呼び出しに Services コンポーネントが応答していることがわかります。関数呼び出しへの応答は、"[argument_list]=function_name" 形式のラベルが付いた破線の矢印として表示されます。

sequence-viewer.png

参考

| | (Stateflow) |

関連するトピック