ステートマシン図でのソルバーの利用例

<< 目次を表示 >>

ページ位置:  シミュレーション > 数学的なシミュレーション > ソルバー >

ステートマシン図でのソルバーの利用例

このトピックでは、ステートマシン図のシミュレーションでソルバーを適用する箇所と方法について簡単な例を示します。これには、状態に関する操作や遷移でのスクリプトの使用が含まれます。このトピックの内容は、Octaveをソルバーに利用した例を示していますが、特に断りのない限り、同じスクリプトをMATLABソルバーでMATLABに使用することができます。

 

 

ソルバーの初期化

ステートマシン図のソルバーを初期化するスクリプトは、開始状態からの遷移の効果か、最初の状態のEntryアクションのいずれかに置くことができます。通常は、初期化を終了する最初の遷移の効果に配置します。

 

 

 

値の割り当てとコマンドの実行

値を割り当てるには、octave.set()またはmatlab.set()関数を使用します。

 

ステートマシン図では、メソッドは遷移の効果や状態のアクション(Entry/Do/Exit)に配置することができます。

 

遷移の効果を編集するには、プロパティサブウィンドウの制約タブを使用します。

 

 

振る舞いの内容を定義するには、アクションの振る舞いのスクリプトを開きます。

  1. ダイアグラムかモデルブラウザのいずれかで、状態要素を右クリックして新しいEntryアクションを作成します。
  2. 作成したアクションを右クリックし、「振る舞いの編集」を実行します。

 

これにより、振る舞いの内容を編集するためのエディタがタブとして表示されます。

 

 

.exec()関数を使ってMATLABやOctaveのコマンドを実行する場合、コマンドは遷移の効果やアクションの振る舞いスクリプトの中に置くことができます。

 

 

条件付き分岐

ステートマシン図で条件分岐を使用する場合、条件は遷移のガードに置くことができ、MATLABまたはOctaveの関数を呼び出すスクリプトを含むことができます。例えば、以下のようになります。

 

 

以下の点に気ををつけてください。

 

 

結果の取得

外部関数の呼び出しから結果を返す場合、ソルバーのget()関数を使用してスクリプト内で結果を返すことができます。スクリプトの結果をユーザーに伝えるには、次の3つの方法があります。

 

 

Trace と Win32画面設計要素では、ソルバーの .get() コマンドを使用して、JavaScript でローカルコピーを返す必要があります。.get()コマンドの使用例として、前の画像のガード条件を参照してください。

 

 

トレースの使用

Trace()コマンドは、シミュレーションを最初に書いてデバッグする際に、スクリプトの結果をさまざまな段階で確認できるので便利です。結果はシミュレーションサブウィンドウに出力されます。

 

 

 

プロットの実行

OctaveとMATLABのどちらでも、プロットを生成する機能を持っています。プロットを生成するには,ソルバーの.exec()関数を使って,プロット生成関数を呼び出します。

 

 

 

プロットの保持

シミュレーションでプロットを実行する際、シミュレーションが一時停止していなければ、プロットはほんの一瞬しか表示されません。そこで、プロットを表示している間、シミュレーションの実行を一時停止するための2つの方法があります。

 

  1. OctaveやMATLABのuiwaitを使う。例えば、これは、Exitアクションや遷移の効果の中で設定することができます。ここでは,Octaveを使った例を示します。  

Octave.exec('script','uiwait');

 

  1. プロットが生成された状態からの移行時に、シミュレーションを一時停止するための意味のないトリガを設定する。この例では、終了状態への遷移に設定しています。

 

 

2番目の方法で遷移を進めるには、以下の方法があります。

 

 

 

 

Win32画面設計要素の利用

Win32画面設計要素を利用する際の大まかな手順は以下の通りです。

 

 

Win32画面設計要素を利用するための簡単な手順は以下の通りです。

 

 

ユーザーが入力した値を得て処理を進めるためには、ユーザーがOKボタンをクリックする必要があるため、OKボタンから処理を進めるためのトリガを発行する必要があります。トリガを受け取るためには、シグナル要素を用意すると同時に、そのシグナル要素のブロードキャストによってトリガされる遷移を設定する必要があります。

 

前述の「トリガを使ってプロットを保持する」の項で示した、トリガとシグナル要素「End」の作成と設定の手順を参照してください。今回の場合では、同じ遷移を、'Plot'という新しいトリガに設定しています。OKボタンのOnClickタグ値を使って、BroadcastSignal('Plot')を実行し、シグナルを送信しています。

 

 

State1要素を抜ける遷移はBroadcastSignalでトリガされるように設定されています。

 

 

遷移ではTriggerを作成し、トリガの種類をシグナルに設定し、シグナル要素を作成する必要があります。

 

プロットを実行するスクリプトはState2要素のEntryアクションで定義しています。シミュレーション中、State2への移行は、Win32ダイアログ内のOKボタンがクリックされ、Plotトリガが送信された後に発生します。このためには、以下のように操作します。

 

var endTime = dialog.ScreenA.finish.Text;

これは、プロットのためにOctaveに送信される最後のパラメータの値になります。

octave.exec('script', 't = 0:0.1:'+ endTime+';');

 

この結果、振る舞いとしてスクリプトが定義されたEntryアクションを持つ、2つの状態要素が作成されました。

 

 

 

シミュレーションの実行

シミュレーションを実行します。

 

 

表示されるダイアログで値を入力してOKボタンをクリックすると、次のように表示されます。

 

 

 

参照: