動作中の状態遷移をモデル上で可視化

<< 目次を表示 >>

ページ位置:  ソースコードの生成と読み込み > 振る舞いモデルからのソースコード生成 > ステートマシン図からのソースコード生成 >

動作中の状態遷移をモデル上で可視化

状態マシン(ステートマシン)は、特定の要素(多くはクラス要素)について、どのような状態を持ち、どのような状態遷移が可能で、その遷移の発生条件や遷移時の処理を記述するものです。記述した内容からは、いくつかのプログラム言語のソースコードを生成してビルドし、実行して実際の状態遷移の様子をステートマシン図上に表現することもできます。

 

また、Enterprise Architectでは複数の状態マシンを組み合わせ、それらが(イベントの送受信を通して)どのように連携するのか、確認するためのモデルを素早く作成し、シミュレーションすることもできます。例えば、以下のような確認が可能です。

 

こうした動作の確認のためには、成果物要素の一種である「外部実行の状態マシン要素」を利用します。この要素は状態マシンのコンテナ(格納庫)となり、ソースコードの生成を可能にします。なお、外部実行の状態マシンの機能は、ハードウェア記述言語に対しては利用できません。ハードウェア記述言語に対しては、状態マシン要素を持つクラスを定義し、クラスに対してソースコードの生成を実行してください。

 

 

前提条件

 

このソースコード生成と実際の状態遷移の表示機能は、バージョン11.0より前のソースコード生成テンプレートおよびハードウェア記述言語に対しては利用できません。また、この機能はユニファイド版およびアルティメット版でのみ利用できます。

 

 

利用手順:

リボン

モデル > ダイアグラム > ツールボックス > シミュレーション

キーボード

Ctrl + Shift + 3 > シミュレーション

 

 

ステートマシン図の準備をする

#

操作方法

1

この機能を利用するためには、クラス要素に対してステートマシン図を作成する必要があります。

そのため、まず、クラス図を作成します。

2

ツールボックスからクラス要素をクラス図内にドロップします。クラスの名前を設定します。

3

クラス要素を右クリックし、 「子ダイアグラムの追加 | 状態マシン」 を選択します。

4

生成されたステートマシン図内に、状態の定義と遷移の定義を行います。

 

 

外部実行のステートマシン要素を作成する

#

操作方法

1

別途、新規にクラス図を作成します。このクラス図は、ソースコードを生成する操作を実行するためのクラス図です。

2

ツールボックスの「シミュレーション」グループにある「外部実行の状態マシン」要素をダイアグラム内にドロップします。この要素の中にクラス要素(のインスタンス)を配置しますので、要素の大きさを広げて、中に他の要素を配置できるようにします。

3

モデルブラウザから、状態マシンを持つクラスをクラス図内の外部実行のステートマシン上にドロップします。

要素の配置方法を選択するダイアログが表示されますので、プロパティを選択して配置して下さい。

このダイアログが表示されない場合、Ctrlキーを押しながらドロップして下さい。

4

OKボタンを押し、ダイアグラム内にプロパティ要素を配置します。

5

必要に応じて3と4の手順を繰り返し、対象の状態マシン要素を持つクラス要素をプロパティ要素として配置します。以下のような操作が可能です。

  • 同じクラス要素を繰り返して配置し、同じ状態マシンを複数実行させる
  • 異なるクラス要素を配置し、異なる状態マシンを連携して実行させる

6

外部実行の状態マシン要素をダブルクリックしてプロパティダイアログを開きます。「言語」の欄を、実際にソースコード生成する言語に設定します。

以上で設定は完了します。このダイアグラムに、再度外部実行の状態マシン要素を配置して、異なる設定・条件の定義を追加することもできます。

 

 

ソースコードを生成する

#

操作方法

1

外部実行の状態マシン要素を選択した状態で、リボンから 「シミュレーション > 外部実行 > 状態マシン > 生成」 を実行します。

状態マシンのコード生成 ダイアログが表示されます。

2

「出力ディレクトリ」の欄で、出力先となるディレクトリを指定します。指定した位置に、複数のソースコードが生成されます。

なお、ソースコードを実行すると、指定したディレクトリ内のファイルは全て削除されます。

3

「ビルド環境」の枠内では、言語ごとの設定を指定します。また、コンパイル・ビルドのためのファイルが含まれるディレクトリを指定します。言語ごとの設定内容とその設定例は次の通りです。

 

  • Java

JAVA_HOME    C:\Program Files (x86)\Java\jdk1.7.0_17

 

  • C/C++

VC_HOME       C:\Program Files (x86)\Microsoft Visual Studio 9.0

 

  • C#

CS_HOME       C:\Windows\Microsoft.NET\Framework\V3.5

4

生成ボタンを押すと、ソースコードの生成が実行されます。

出力サブウィンドウには外部実行のステートマシンタブが追加され、ソースコード生成の進捗状況が表示されます。

ソースコード生成中、対象のモデルに対して自動的に内容のチェックを行います。UMLの制約に反する場合など問題がある場合には、出力サブウィンドウにその内容が表示されます。

もしエラーが発生した場合、該当の項目をダブルクリックすることで、関係する要素の位置を確認することができます。

5

ソースコード生成がエラーなく完了した場合には、外部実行の状態マシン要素を右クリックし、「ソースコードの生成と読み込み | 外部実行の状態マシン連携 | ビルド」 を実行します。

出力サブウィンドウにビルドタブが追加され、ビルドの進捗状況やエラーなどが表示されます。

 

 

コード生成マクロ

ステートマシン図のコード生成では、以下の2つのマクロが利用できます。

マクロ名

説明

SEND_EVENT

指定した受信者にイベントを送信します。

例:  %SEND_EVENT("event1", "Part1")%

BROADCAST_EVENT

全体にイベントを送信します。

例:  %BROADCAST_EVENT("event2")%

 

 

シミュレーションを実行する

#

操作方法

1

シミュレーションを実行する前に、以下の2つの操作を実行します。

 

  • 「シミュレーション」リボン内の「共通」パネルにある 「ウィンドウ」 を実行し、シミュレーションサブウィンドウを表示します。
  • 「シミュレーション」リボン内の「共通」パネルにある 「トリガ」 を実行し、シミュレーショントリガサブウィンドウを表示します。

 

必要に応じて、これらのサブウィンドウを利用しやすい位置に移動します。

2

外部実行の状態マシン要素をクリックし、「シミュレーション」リボン内の「外部実行」パネルにある 「実行」 を実行します。

該当の要素に関係するステートマシン図が開き、シミュレーションの動作の様子が表示されます。複数の状態マシンを含む場合は、そのうちの1つのステートマシン図を開きます。シミュレーションサブウィンドウには、以下のようなログが表示されます。

 

[03516677]  Part1[Class1].Initial_367_TO_State4_142 Effect

[03516683]  Part1[Class1].StateMachine_State4 ENTRY

[03516684]  Part1[Class1].StateMachine_State4 DO

[03518375]  Blocked

3

シミュレーションサブウィンドウにあるツールバーのボタンを利用して、シミュレーションの動作を制御することができます。

シミュレーションが完了したら、ツールバーの「停止」ボタンを押し、シミュレーション処理を終了させて下さい。

4

シミュレーションサブウィンドウのログに Blocked と表示された場合には、シミュレーションの動作が停止したことを示します。これは、特定のトリガ(イベント)を待っている場合や、モデルの内容に問題がある場合に表示されます。トリガは、シミュレーションイベントサブウィンドウから発行することができます。

トリガを発行すると、シミュレーションの動作が継続します。

(参考:要求されているトリガ)

 

注意:

  • もしモデルの内容を変更した場合には、再度ソースコード生成からビルド・実行をやり直す必要があります。ただし、既に設定が完了し同じ設定で実行する場合には、ソースコードの生成と読み込み | 外部実行の状態マシン連携 | 生成・ビルドと実行 でまとめて実行できます。
  • JavaScriptにも対応しています。

 

 

参照: