LoginSignup
1
1

More than 1 year has passed since last update.

IBM Rhapsodyでシミュレーション実行可能なステートマシーン図(ステートチャート図)を描く

Last updated at Posted at 2021-01-04

IBM Rhapsodyとは

IBM Rhapsodyは、OMG Systems Modeling Language™ (OMG SysML) を使用して、迅速な要件分析とモデルベースの設計を可能にします。モデルは、実行およびシミュレーションによって検証することができ、システムエンジニアチームが複雑な機能を短時間で設計するのに役立ちます。

概要

本記事では、シーケンス図の挙動に従いButtonブロックとTimerブロックがどのように振る舞うかをステートチャートで表現します。

前回の記事

シーケンス図を描く
ブロック図を描く

手順

Buttonのステートチャートの作成、Timerのステートチャートの作成を順番に説明します。

Buttonのステートチャート

シーケンス図上のButtonを選択し、右クリックメニューを開き、[新規ステートチャート]を実行します。
image.png
表示されたステートチャート図をクリックし、ミニメニューを表示し、左から2つ目の[状態]を選択します。
image.png
ステートチャート図をクリックすると状態が新規に生成されます。ButtonUpと名称変更します。
image.png
同様の手順でButtonDownの状態を追加します。
image.png

送信アクションの追加

ステートチャート図をクリックし、表示されたミニメニューの中央にある[送信アクション]を選択します。
image.png
生成された送信アクションを右クリックし、[フィーチャー]を選択します。
image.png
ターゲット欄にて[itsTimer in BlockModeling::Button]を選択します。イベント欄にて[evStartStop in BlockModeling]を選択します。この設定により、Timerインスタンスに対してevStartStopイベントを送信します。[OK]をクリックし、フィーチャー設定画面を閉じます。
image.png
送信アクションを選択し、右クリックメニューを開き、[テキストに合わせて拡大]を実行します。
image.png
ステートチャート図をクリックし、ミニメニューを表示し、一番左の[デフォルト遷移]を選択します。
image.png
ステートチャート図の任意の場所をクリックした後、ButtonUpに対して線を引きます。これは、ButtonUpの状態から開始することを意味します。
image.png
ButtonUpをクリックし、ミニメニューを表示し、[遷移]を選択します。
image.png
ButtonDownに対して線を引きます。
image.png
同様にButtonDownからevStartStop to itsTimerに線を引きます。
image.png
evStartStop to itsTimerからButtonUpに線を引きます。
image.png

トリガーの追加

次にトリガーを追加します。ButtonUpとButtonDownの間にある線を選択し、右クリックメニューを開き、[トリガーの選択]->[evPress()]を実行します。
image.png
トリガーとして設定したevPressが表示されます。
image.png
同様にButtonDownとevStartStop to itsTimerの間の線を選択し、右クリックメニューを開き、evRelease()イベントをトリガーとして設定します。
image.png
evRelease()イベントが割り当てられました。
image.png
これまでの作業により、ButtonブロックがButtonUpとButtonDownの二つの状態を持つことを表現しました。デフォルトではButtonUpの状態からはじまり、evPressイベントを受信するとButtonDownに遷移することを示しました。
ButtonDownの状態においてevReleaseイベントを受信すると、ButtonがButtonUp状態に遷移するとともに、Timerに対してevStartStopイベントを送信することを定義しました。
もう一度シーケンス図を振り返りましょう。シーケンス図で表現したButtonブロックのふるまいをステートチャートで表現することに成功しました。
image.png

Timerのステートチャート

次にブロック図を描くで作成したSystem Architectureを開き、Timerブロックを選択します。右クリックメニューを開き、[新規追加]->[ステートチャート]を実行します。
image.png
ステートチャート図の背景(灰色)をクリックし、ミニメニューを表示します。左から二つ目の[状態]を選択します。
image.png
ステートチャート図の背景(灰色)をクリックし、NotTimingとTimingの二つの状態を追加します。
image.png
NotTimingを選択し、[遷移]を選択します。
image.png
NotTimingからTimingに対して線を引きます。
image.png
NotTimingとTimingの間の線を選択し、右クリックメニューを表示して、[トリガーの選択]->[evStartStop()]を実行します。
image.png
同様に、TimingからNotTimingに対して遷移を引き、evStartStop()を割り当てます。
image.png
ダイアグラムの背景をクリックし、ミニメニューを開きます。[デフォルト遷移]を選択します。
image.png
ダイアグラム背景の任意の場所からNotTimingに対して線を引きます。
image.png

時間イベント処理の追加

ダイアグラムの背景をクリックし、ミニメニューを表示します。[時間イベント受理]を選択します。
image.png
Timingの右下近くをクリックし、時間イベント受理を生成します。
image.png
時間イベント受理をダブルクリックしてプロパティ画面を開き、期間の欄に1000と入力します。[OK]をクリックします。
image.png
先の手順と同様に、Timingから時間イベント受理に対して遷移を引きます。つづいて時間イベント受理からTimingに対して遷移を引きます。
image.png
時間イベント受理からTimingに引いた遷移を選択し、右クリックメニューを表示、フィーチャーを実行します。
image.png
一般タブのアクション欄をクリックし、01行目にカーソルをあて、Ctrl+Spaceを実行します。
下矢印キーを押下し、incrementTime()を選択し、Enterを押下します。
image.png
incrementTime()の後ろにセミコロンを追加し、[OK]をクリックします。
image.png
メインメニューから[ファイル]->[保存]を実行します。
image.png
以上でTimingブロックのステートチャートの作成を完了しました。最初にNotTimingの状態から開始し、evStartStopイベントを受信すると 1000ミリ秒待ち、incrementTime操作を呼び出します。再びevStartStopイベントを受信するまでこの処理を繰り返します。evStartStopイベントを受信すると、NotTimingの状態に遷移します。incrementTime操作が呼ばれるたびに seconds++; が実行されることを思い出してください(ブロック図を描く)

次の記事

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1