スコープ内の Simulink 関数を使用したアプリケーション ソフトウェアからのサービス アクセスのモデル化
この例は、サービスと、個別のコンポーネントからのこれらのサービスへのアクセスをモデル化する方法を示しています。
この例では、シンプルでランダムな動きの検出サービスが定義され、クライアントの動きの検出アプリケーション ソフトウェアからアクセスされています。サービスでは、read
と write
の 2 つの関数が定義されています。クライアントは、動きが検出されると関数 read
および関数 write
を呼び出して記録します。このクライアントとサーバーの交互作用は、スコープ内の Simulink® 関数と Stateflow® チャートを使用してモデル化されます。
Simulink 関数と関数の呼び出し元の実装
モデルを開きます。
open_system('ServiceAccessSoftwareExample');
動きの検出サービス モデル MotionDetectionServices.slx
は、関数を定義するサーバー モデルです。モデルには 0 ~ 1 の乱数の入力が 1 つあり、乱数はRandom Number ブロックによって生成されます。この乱数は、読み取り Simulink Function ブロックに実装されている関数 read
の出力引数 y
です。関数 write
は書き込み Simulink Function ブロックに実装されており、入力引数 u
をコピーします。動きが検出されると、関数 read
および関数 write
が記録します。
Stateflow チャートを使用して、入力引数を介して Simulink Function ブロックにデータを送信できます。この例では、関数 read
および関数 write
がクライアント モデル MotionDetectionSoftware.slx
の MotionDetectionByAccessingServices
チャートから呼び出されます。チャートでは、呼び出される関数を特定するために、関数呼び出しではスコープ名としてモデル ファイル名を使用し、その後に関数名が続きます。たとえば、ソフトウェアは次の表記法を使用して関数 write
を呼び出します。MotionDetectionServices.write(true)
サービス モデルで、関数 write
に入力引数 u
があることを確認できます。入力引数はサービス モデルから継承されます。これにより、ソフトウェア モデルはサービス モデルから独立してコンパイルできます。
サービスのシミュレーションと関数シーケンスの表示
モデルを実行します。
sim('ServiceAccessSoftwareExample');
モデルのシミュレーション全体を通じて関数呼び出しのシーケンスを表示するには、モデルの Sequence Viewer ブロックをダブルクリックして シーケンス ビューアー を開きます。Simulink ツールストリップからこのツールを開くこともできます。そうするには、[シミュレーション] タブの [結果の確認] セクションで、[シーケンス ビューアー] をクリックします。
シーケンス ビューアー ウィンドウでは、モデル内の各ブロックが、シミュレーション時間が下向きに進む縦のライフラインとして表現されます。この情報により、呼び出しの流れを時間に基づいて把握したり、これらの関数の呼び出しの間に送信される引数を解析することができます。
この例では、Software コンポーネントが関数 read と関数 write をいつ呼び出しているかがわかります。関数呼び出しは、"function_name(argument_list)" 形式のラベルが付いた実線の矢印として表示されます。Software コンポーネントからの関数呼び出しに Services コンポーネントが応答していることがわかります。関数呼び出しへの応答は、"[argument_list]=function_name" 形式のラベルが付いた破線の矢印として表示されます。
参考
Simulink Function | Random Number | Chart (Stateflow) | シーケンス ビューアー