Main Content

Simulink 関数を使用した共有プリンターでのインク状態の監視

この例では、複数のクライアントから 1 つのサーバーにリクエストを送信し、サーバーから状態を受信する方法を示します。Simulink® 関数を使用すると、さまざまなサブシステムで他のサブシステムの関数を呼び出し、Simulink および Stateflow® でやり取りできます。この例では、Simulink 関数を使用して共有プリンターのインク状態の監視をモデル化します。

この例では、クライアントは 3 台のコンピューターであり、サーバーはコンピューターによって共有されているネットワーク プリンターです。コンピューター コンポーネントを関数の呼び出し元としてモデル化します。コンピューターがそれぞれ、ランダムなサイズの印刷ジョブを一定の間隔で生成します。プリンターは、Simulink キャンバス上にある 2 つの Simulink Function と、Stateflow 内の 1 つのエクスポートされたグラフィカル関数を通してコンピューターとやり取りします。この例をシミュレートして、Stateflow チャートのコードを生成できます。

モデルを開きます。

open_system("slexPrinterExample")

monitoring-ink-status-on-shared-printer-using-simulink-functions-model.png

このモデルの変数は次のとおりです。

  • job は印刷ジョブのページ数を表します。

  • work はキューに入っている、印刷する合計ページ数を表します。

  • ink_status はプリンターにインクがあるかどうかを示すブール値です。

  • ink はプリンター内のインクの量を表します。値が 1 未満の場合、警告が表示されます。値が 0 の場合、ink_statusfalse です。

このモデルの関数は次のとおりです。

  • 関数 addPrintJob は、ink_status が 1 より大きい場合、キューに入れる印刷ジョブをランダムに生成します。印刷ジョブをキューに追加するために、関数 addPrintJobqueuePrintJob を呼び出します。

  • 関数 queuePrintJob は、変数 work を更新することで印刷ジョブをキューに追加します。

  • printerInk はジョブの印刷を表すために ink を更新します。

プリンターは、Idle Busy の 2 つの状態を遷移します。work が 0 以下の場合、プリンターはアイドル状態です。これは、キューに入っている印刷ジョブがないことを意味します。work が 0 より大きい場合、プリンターはビジー状態です。これは、印刷ジョブがキューに入っていることを意味します。プリンターがビジー状態の場合、キュー内のページ数を減らすために work が更新され、ink_status を更新するために printerInk が呼び出されます。

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

コンピューターは、Function Callerブロックを使用してプリンターの addPrintJob インターフェイスを呼び出すクライアント コンポーネントです。この関数呼び出しでモデル化するクライアント/サーバー型の対話では、プリンターのインクが切れている場合、負の戻り値が返される場合があります。

add-print-job-function-caller.png

関数 addPrintJob は Simulink Function ブロック内に実装されます。Simulink Function の内部には、Stateflow のエクスポートされたグラフィカル関数である queuePrintJob を呼び出す Function Caller ブロックがあります。

add-print-job-function.png

関数 queuePrintJob は、Stateflow チャート内に実装されます。Stateflow チャートでは、queuePrintJob はローカルのチャート変数 work を使用してチャート内の他のコンテンツとやり取りします。

queue-print-job-stateflow-chart.png

チャートの実装は、Simulink 関数である printerInk への呼び出しを行います。関数 printerInk は、グラフィカル入出力を使用して関数 addPrintJob とやり取りする Simulink Function ブロックに実装されます。

printer-ink-function.png

関数シーケンスの表示

Simulink 関数を可視化およびデバッグすることもできます。関数とそれぞれの呼び出し元の関係を可視化するには、Simulink エディターの [デバッグ] タブにある [情報のオーバーレイ] で、[コネクタ] をクリックします。Simulink キャンバス上の [コネクタ] ペインで [関数コネクタ] を選択します。

モデルを実行します。

sim("slexPrinterExample");

Sequence Viewerブロックは、コンピューターがいつ関数呼び出しを生成するかを示します。この情報を使用すると、呼び出しの流れを時間に基づいて把握したり、これらの関数の呼び出しの間に送信される引数を解析したりすることができます。

slexPrinterExample-Sequence-Viewer.png

参考

| |

関連するトピック