#IBM Rhapsodyとは
IBM Rhapsodyは、OMG Systems Modeling Language™ (OMG SysML) を使用して、迅速な要件分析とモデルベースの設計を可能にします。モデルは、実行およびシミュレーションによって検証することができ、システムエンジニアチームが複雑な機能を短時間で設計するのに役立ちます。
#概要
本記事では、シーケンス図の挙動に従いButtonブロックとTimerブロックがどのように振る舞うかをステートチャートで表現します。
#手順
Buttonのステートチャートの作成、Timerのステートチャートの作成を順番に説明します。
##Buttonのステートチャート
シーケンス図上のButtonを選択し、右クリックメニューを開き、[新規ステートチャート]を実行します。
表示されたステートチャート図をクリックし、ミニメニューを表示し、左から2つ目の[状態]を選択します。
ステートチャート図をクリックすると状態が新規に生成されます。ButtonUpと名称変更します。
同様の手順でButtonDownの状態を追加します。
###送信アクションの追加
ステートチャート図をクリックし、表示されたミニメニューの中央にある[送信アクション]を選択します。
生成された送信アクションを右クリックし、[フィーチャー]を選択します。
ターゲット欄にて[itsTimer in BlockModeling::Button]を選択します。イベント欄にて[evStartStop in BlockModeling]を選択します。この設定により、Timerインスタンスに対してevStartStopイベントを送信します。[OK]をクリックし、フィーチャー設定画面を閉じます。
送信アクションを選択し、右クリックメニューを開き、[テキストに合わせて拡大]を実行します。
ステートチャート図をクリックし、ミニメニューを表示し、一番左の[デフォルト遷移]を選択します。
ステートチャート図の任意の場所をクリックした後、ButtonUpに対して線を引きます。これは、ButtonUpの状態から開始することを意味します。
ButtonUpをクリックし、ミニメニューを表示し、[遷移]を選択します。
ButtonDownに対して線を引きます。
同様にButtonDownからevStartStop to itsTimerに線を引きます。
evStartStop to itsTimerからButtonUpに線を引きます。
###トリガーの追加
次にトリガーを追加します。ButtonUpとButtonDownの間にある線を選択し、右クリックメニューを開き、[トリガーの選択]->[evPress()]を実行します。
トリガーとして設定したevPressが表示されます。
同様にButtonDownとevStartStop to itsTimerの間の線を選択し、右クリックメニューを開き、evRelease()イベントをトリガーとして設定します。
evRelease()イベントが割り当てられました。
これまでの作業により、ButtonブロックがButtonUpとButtonDownの二つの状態を持つことを表現しました。デフォルトではButtonUpの状態からはじまり、evPressイベントを受信するとButtonDownに遷移することを示しました。
ButtonDownの状態においてevReleaseイベントを受信すると、ButtonがButtonUp状態に遷移するとともに、Timerに対してevStartStopイベントを送信することを定義しました。
もう一度シーケンス図を振り返りましょう。シーケンス図で表現したButtonブロックのふるまいをステートチャートで表現することに成功しました。
##Timerのステートチャート
次にブロック図を描くで作成したSystem Architectureを開き、Timerブロックを選択します。右クリックメニューを開き、[新規追加]->[ステートチャート]を実行します。
ステートチャート図の背景(灰色)をクリックし、ミニメニューを表示します。左から二つ目の[状態]を選択します。
ステートチャート図の背景(灰色)をクリックし、NotTimingとTimingの二つの状態を追加します。
NotTimingを選択し、[遷移]を選択します。
NotTimingからTimingに対して線を引きます。
NotTimingとTimingの間の線を選択し、右クリックメニューを表示して、[トリガーの選択]->[evStartStop()]を実行します。
同様に、TimingからNotTimingに対して遷移を引き、evStartStop()を割り当てます。
ダイアグラムの背景をクリックし、ミニメニューを開きます。[デフォルト遷移]を選択します。
ダイアグラム背景の任意の場所からNotTimingに対して線を引きます。
###時間イベント処理の追加
ダイアグラムの背景をクリックし、ミニメニューを表示します。[時間イベント受理]を選択します。
Timingの右下近くをクリックし、時間イベント受理を生成します。
時間イベント受理をダブルクリックしてプロパティ画面を開き、期間の欄に1000と入力します。[OK]をクリックします。
先の手順と同様に、Timingから時間イベント受理に対して遷移を引きます。つづいて時間イベント受理からTimingに対して遷移を引きます。
時間イベント受理からTimingに引いた遷移を選択し、右クリックメニューを表示、フィーチャーを実行します。
一般タブのアクション欄をクリックし、01行目にカーソルをあて、Ctrl+Spaceを実行します。
下矢印キーを押下し、incrementTime()を選択し、Enterを押下します。
incrementTime()の後ろにセミコロンを追加し、[OK]をクリックします。
メインメニューから[ファイル]->[保存]を実行します。
以上でTimingブロックのステートチャートの作成を完了しました。最初にNotTimingの状態から開始し、evStartStopイベントを受信すると 1000ミリ秒待ち、incrementTime操作を呼び出します。再びevStartStopイベントを受信するまでこの処理を繰り返します。evStartStopイベントを受信すると、NotTimingの状態に遷移します。incrementTime操作が呼ばれるたびに seconds++; が実行されることを思い出してください(ブロック図を描く)。
#次の記事
シミュレーション実行する