チュートリアル
astah* System SafetyでSysMLを描いてみよう


本チュートリアルに取り組むことで、実際に手を動かし、図を描きながら、astah* System Safetyを用いてSysMLの各図を描画する基本操作を身に付けられます。 今回は、Object Management Group (OMGR)によって策定されたSysML1.5仕様書に掲載されたサンプルの一部を課題としています。

  • 製品種類とバージョン:astah* System Safety 7.0
  • 対象とした図:ブロック定義図、内部ブロック図、パラメトリック図、要求図、ユースケース図、アクティビティ図、シーケンス図、ステートマシン図
  • 公開日:2021年12月9日


1. astah* System Safety:MBSEと安全分析設計論証のためのツール

astah* System Safety は、MBSE(モデルベースドシステムズエンジニアリング)と安全分析設計論証のためのツールで、システムモデリング言語SysMLや事故分析モデルのSTAMP/STPA、安全コンセプト図(SCDL)、ゴール構造表記法(GSN)などを描画・作成できます。 目的の異なるいくつかの図や表を1つのツールで描画・作成でき、それらが連携することで、安全性の高いシステム開発を進める現場を強力にサポートします。

主な特徴は次の通りです。

  • SysML、STAMP/STPA、SCDL、GSNを1つのツールで描画・作成できる
  • 上流工程をモデルベースで一元化し、整合性を保つことで、ズレや抜けを大きく減らす
  • ツール使用が初めての方にも分かりやすい操作方法で、スムーズに導入できる
詳しい機能については、astah* System Safetyの製品情報をご参照ください。


2. astah* System Safetyのインストール

  1. システム要件を確認し、ダウンロードページから、astah* System Safetyをダウンロードします。
  2. ダウンロードしたインストーラをダブルクリックします。
  3. スタートメニュー、またはデスクトップに追加されたastah* System Safetyのアイコンをダブルクリックして起動します。
  4. ライセンス設定がまだの方は、表示されるダイアログに従って、製品ライセンスキー、または評価ライセンスキー(拡張子は .lic)を設定します。
    参考:astah* System Safetyのインストールと起動、ライセンス設定

3. 画面構成と基本操作

メインメニュー[ファイル]-[プロジェクトを開く]から、インストーラに同梱されているサンプルのプロジェクトファイルを開いてみてください。
astah System Safetyの画面構成

  1. マネジメントビュー

    astah* System Safety のベースとなるビューです。メニューバーとツールバーを持ちます。

  2. プロジェクトビュー

    プロジェクトビューはプロジェクト全体を扱うビューです。上部のタブで、「構造ツリー」、「マップ」、「図」、「検索」、「STPA手順」を切り替えます。

    • 構造ツリー
      パッケージやブロックなどの入れ子構造をツリー形式で表示します。ポップアップメニューでパッケージや図、ブロックなどの要素を追加、削除できます。
    • マップ
      アクティブな図の全体を表示します。大きな図を編集する際、容易に全体を見渡すことができ、マウス操作で表示範囲を簡単に変更できます。

    • プロジェクトに含まれる全ての図・表の一覧を表示します。
    • 検索
      プロジェクト内から、モデル要素やリンクの切れたハイパーリンクを抽出したり、モデル要素の名前に含まれる文字列を置換したりします。
    • STPA手順
      STPA手順ビューは、STPA分析手順をツリー形式で表示します。STEPの順番で図、表を作成し、STPAの分析を行います。図、表はノードをダブルクリックして作成します。

  3. プロパティビュー

    選択されたアイテムの属性を編集するビューです。

  4. ダイアグラムエディタ

    図を表示、編集するビューです。図のアイテム作成用のツールボタン群(ツールパレット)を持ちます。


基本操作(1):新規プロジェクトを作成する

astah* System Safetyでは、作成した図や表のデータを"プロジェクト"という拡張子.axmzのファイルに保存します。起動後は何もプロジェクトを開いていない状態のため、まず新規のプロジェクトを作成します。
「プロジェクトを新規に作成する」ボタンを押下する、

または[ファイル]-[プロジェクトの新規作成]を選択すると、プロジェクトが作成され、

空の構造ツリーが表示されます。


基本操作(2):パッケージや図の作成

新規のパッケージは、構造ツリー上のポップアップメニュー[モデルの追加]-[パッケージの追加]から作成できます。新しい図は、構造ツリー上のポップアップメニューから、または[図]メニューから選択して作成します。


基本操作(3):アイテムの作成と編集

各図で使用できる要素は、それぞれのツールパレットにボタンが用意されています。ショートカットキーで編集できる要素もあります。

▶ メニューに戻る


4. 課題を知る(SysML仕様書掲載のサンプル概要)

サンプルはSysMLを用いてハイブリッドSUV車の要件設計・分析を示すものです。このチュートリアルでは、astah* System Safetyを使って、ツール操作とSysMLに慣れることを目的としているため、SysML1.5仕様書に掲載されたサンプルの一部を抜粋しています。それではSysML図を描き始めましょう。


5. ブロック定義図を描いてみる

課題

次のようなブロック定義図を描きましょう。このブロック定義図はインストーラに同梱されているサンプルのプロジェクトファイル Sample.axmz 中のブロック定義図"Values And Units"から抜粋しています。

ブロック定義図のサンプル

描き方

メインメニュー[図]-[SysML]-[ブロック定義図]を選択すると、ダイアグラムエディタに空のブロック定義図が表示されます。

または、[ファイル]-[プロジェクトの新規作成]を選択し、空の構造ツリーを表示してから、プロジェクトルートを右クリックして表示されるポップアップメニュー[図の追加]-[ブロック定義図の追加]からも、ダイアグラムエディタを表示できます。



ダイアグラムエディタには、ブロック定義図を編集するためのツールパレットがあり、ツールボタンが並んでいます。

マウスカーソルをボタン上に置くと各ボタンのツールチップが表示されます。これらのアイコンとツールチップは、SysMLの要素名と表記を覚えるのに役立ちます。
構造ツリーでブロック定義図のポップアップメニューから[名前の変更]を選択し、"Modeling Domain"と入力しましょう。


  1. "Automotive Value Types"パッケージを作成しましょう。

    パッケージは、ツールパレットの左から2番目にある「パッケージ」ボタンを押して、図上をクリックして作成します。続けてパッケージの名前に"Automotive Value Types"と入力してEnterを押します。

  2. バリュータイプと"Automotive Units"パッケージを作成します

    ツールバー上で「バリュータイプ」ボタンを押して、作成した"Automotive Value Types"パッケージをクリックします。 すると、バリュータイプが "Automotive Value Types"パッケージ内に作成されます。バリュータイプの名前に"Accel"と入力してEnterを押します。

    "Accel"バリュータイプの作成後、他の5つ("Real", "Horsepwr", "Vel", "TM", "Dist")のバリュータイプを作成してください。

    図上の各アイテムは、ドラッグで移動できます。また、パッケージやバリュータイプの名前を再編集したい場合は、名前を2回クリックすることで編集できます。

  3. バリュータイプ間の汎化を作成しましょう

    ツールバー上で「バリュータイプ」ボタンを押して、作成した"Automotive Value Types"パッケージをクリックします。 汎化のツールボタンを押し、汎化を作成したい要素を順にクリックします。

    "Accel"バリュータイプをクリックしてから、"Real"バリュータイプをクリックしてください。汎化を作成できました。 同様に、他の4つのバリュータイプ("Horsepwr", "Vel", "Dist", "TM")についても、"Real"との間に汎化を作成してください。
    続いて、各バリュータイプに操作区画、プロパティ区画、バリュータイプ区画の表示を設定しましょう。 区画を表示するには、各バリュータイプを右クリックして表示されるポップアップメニューで、[区画の表示/非表示]-[操作区画の表示]などを選択します。

    TIPS(1) 汎化の共有表記

    汎化を共有表記で描いてみましょう。

    1. ツールパレットの右から3番目のボタン「線の端点を図要素の中心に設定する」をオンにする
    2. 汎化のツールボタンを押し、"Accel"バリュータイプをクリックしてから、"Real"バリュータイプをクリックする
    3. 汎化のツールボタンを押し、"Horsepwr"バリュータイプをクリックしてから、先に作成した汎化をクリックする
    4. "Vel", "Dist", "TM"バリュータイプについても同様の手順で汎化を作成する

    TIPS(2) 区画の表示/非表示の一括設定

    図上にある複数のアイテムの区画を一度に表示/非表示したい場合、アイテムの複数選択を使うと便利です。

    1. Shiftキーを押下しながらアイテムを次々にクリックし、図上の全てのバリュータイプを選択する(TIPS(9)
    2. バリュータイプのポップアップメニューから[操作区画の表示]-[オン]などを選択する

    図の初期設定で一括設定することもできます。

    1. 図の余白をクリックする
    2. プロパティビューの初期設定タブを選択する。
    3. 「バリュータイプの表示項目」で[操作区画の表示]チェックボックスなどをチェックし、「全図要素に反映」ボタンを押す

  4. ユニットを作成しましょう

    ツールパレットで「パッケージ」ボタンを押して、新しくパッケージを作成し、名前に"Automotive Units"と入力してEnterを押します。 続いて、ツールパレットで「バリュータイプ」ボタンの右にある下向き矢印を押下し、「ユニット」ボタンを選択して、"Automotive Units"パッケージをクリックすると、ユニットを作成できます。名前は "g"と入力してください。

    他の4つのユニット("mph", "hp", "sec", "ft")も作成してみてください。

  5. 量種別を作成しましょう

    構造ツリーで"Automotive Value Types"パッケージを右クリックして表示されるポップアップメニュー[モデルの追加]-[量種別の追加]を選択すると、構造ツリーに量種別が追加されます。 量種別の名前 "Time"を入力してEnterを押します。他の7つの量種別("Acceleration", "Distance", "Mass", "Power", "Pressure", "Velocity", "Volume")も同様にして作成してみてください。


ここまで、SUV車の設計に必要なバリュータイプ、ユニット、量種別を定義しました。ここからは、次のようなブロック定義図で、SUV車におけるPowerSubSystemの燃料供給システムを定義していきましょう。 なお、このブロック定義図はインストーラに同梱されているサンプルのプロジェクトファイルの"PowerSubsystem Fuel Flow Definition"と同じです。

  1. "PowerSubsystem Fuel Flow Definition"ブロック定義図を格納するHSUVブロックを作成しましょう

    構造ツリーでプロジェクトルートを右クリックして表示されるポップアップメニュー[モデルの追加]-[ブロックの追加]を選択すると、ブロックが"SysMLモデル"下に作成されます。続けてブロックの名前として"HSUV"を入力してEnterを押します。

  2. ブロック定義図をプロジェクトに追加します

    構造ツリー上で"HSUV"ブロックのポップアップメニューから、[図の追加]-[ブロック定義図の追加]を選択します。図名を"PowerSubsystem Fuel Flow Definition"とします。 追加された図がダイアグラムエディタで表示されます。

  3. ブロックを作成してから細かいところを描きましょう

    ツールパレットで「ブロック」ボタンを押して、"PowerSubsystem Fuel Flow Definition"ブロック定義図内をクリックすると、ブロックを作成できます。 "FuelFlow", "FuelTankAssembly", "InternalCombustionEngine", "PowerSubsystem"の4つのブロックを作成しましょう。

    TIPS(3) アイテムの連続作成

    同じ種類のアイテムを複数作成したい場合、連続作成が便利です。

    • ツールパレットの右から4番目にあるピンのボタン「モード固定」ボタンを押して、連続作成する
    • Shiftキーを押しながら、要素を連続作成する
    • 図の余白をダブルクリックして特定のアイテムを連続作成する。図ごとに作成されるアイテムが決まっている
      • ブロック定義図:ブロック
      • ユースケース図:ユースケース
      • 要求図:要求
      • アクティビティ図:アクション
      • シーケンス図:ライフライン
      • ステートマシン図:状態

    "FuelFlow"ブロックには"flowSpecification"ステレオタイプを追加しましょう。"FuelFlow"ブロックを選択しプロパティビューのステレオタイプタブで「追加」ボタンを押してください。 ステレオタイプ選択が表示されるので"flowSpecification"と入力してください。追加されたステレオタイプを表示するには"FuelFlow"ブロックを右クリックして表示されるポップアップメニューで、[その他の表示/非表示]-[ステレオタイプの表示]および[ステレオタイプの個別表示/非表示]を選択し、表示したいステレオタイプのみ選択します。

    次の手順の前にパッケージとバリュータイプを作成しておきましょう。まず、構造ツリーのプロジェクトルートのポップアップメニューで[モデルの追加]-[パッケージの追加]を選択し、作成されたパッケージの名前を"HSUVStructure"に変更します。次に、"HSUVStructure"パッケージのポップアップメニューで[モデルの追加]-[バリュータイプの追加]を選択し、作成されたバリュータイプの名前を"Fuel"に変更します。最後に"Fuel"バリュータイプを"PowerSubsystem Fuel Flow Definition"ブロック定義図にドラッグ&ドロップします。

    ブロック間に関連を作成しましょう。
    ツールパレットの「関連」ボタンの右にある下向き矢印を押下し、「コンポジション(一方向のみ誘導可能)」を選択します。"PowerSubsystem"ブロックをクリックしてから "FuelTankAssembly"ブロックをクリックすると、コンポジション(誘導可能)を作成できました。 同様に "PowerSubsystem"ブロックと "InternalCombustionEngine"ブロック間にもコンポジション(一方向のみ誘導可能)を作成してください。
    関連のポップアップメニューの表示位置で動作が変わります。関連の"PowerSubsystem"ブロック側でポップアップメニューを表示するとその端点に関する編集が可能です。ただし、[集約]メニューは反対側の端点に関する編集になります。

    今度は、関連端名をプロパティビューから設定してみましょう。関連端タブは、線の2つの端点に対応してそれぞれあるので、注意が必要です。

    ここでは、"FuelTankAssembly"と"PowerSubSystem"ブロック間の関連線を選択して、プロパティビューの[関連端A]タブの"名前"に関連端名”ft”を設定しましょう。また、"InternalCombustionEngine"側の関連端名も"ice"と設定します。

    続いて、ブロックにフロープロパティを追加する前に、フロープロパティ区画の表示を設定しましょう。"FuelTankAssembly"ブロックを右クリックして表示されるポップアップメニューで、[区画の表示/非表示]-[フロープロパティ区画の表示]を選択します。

    それでは、"FuelTankAssembly"ブロックに2つのフロープロパティを追加しましょう。次の4つの方法があります。

    • 図上のポップアップメニューから追加
    • 図上のブロックのフロープロパティ区画のドロー・サジェストから追加
    • ブロックのプロパティビューにおけるフロープロパティタブから追加
    • 構造ツリーのブロックのポップアップメニューから追加

    TIPS(4) ドロー・サジェスト機能

    ダイアグラムエディタ上で編集をサポートします。ツールパレットやポップアップメニューを経由せず、アイコンのホバー表示からモデルを作成、編集できます。図上でモデルを選択すると、そのモデルから作成・追加できるアイコンが表示されます。

    今回は、一つ目の方法で追加してみましょう。
    図上で"FuelTankAssembly"ブロックのポップアップメニューを表示し、[要素の追加]-[フロープロパティの追加]を選択します。フロープロパティの名前として、"fuelSupply"と入力します。 デフォルトの方向は"inout"ですが、ここでは"fuelSupply"フロープロパティのプロパティビューから方向をinに変更します。さらに"fuelSupply"フロープロパティのプロパティビューから型を"Fuel"バリュータイプに変更します。

    フロープロパティの削除はプロパティビューまたは構造ツリーから行います。"fuelSupply"と同様の手順で、"fuelReturn"フロープロパティを追加し、方向、型("Fuel")を設定しましょう。 次に、"FuelFlow"ブロックにも同様の手順で"fuelSupply", "fuelReturn"フロープロパティを追加しましょう。

  4. ブロックにポートを追加します

    ツールパレットで「ポート」ボタンを押して、"FuelTankAssembly"ブロックをクリックすると、ブロック上にポートを配置できます。

    ポートを選択して、左下のプロパティビュー[ベース]タブで名前を"FuelTankFitting"に変更し、型のプルダウンリストから"FuelFlow"ブロックを選択します。 "FuelFlow"ブロックは双方向のフロープロパティを保有しているため、 SysML1.5の仕様によって "FuelTank Fitting"上に双方向の矢印が表示されます。 また、"FuelTankFitting"ポートのプロパティビューの[ベース]タブで「共役」チェックボックスをチェックしておきましょう。

  5. "Fuel"バリュータイプに2つのバリュープロパティを追加しましょう

    次の4つの方法があります。

    • バリュータイプのポップアップメニューから追加
    • 図上のバリュータイプのプロパティ区画のドロー・サジェストから追加
    • バリュータイプのプロパティビュー、「属性」タブで追加
    • 構造ツリーのバリュータイプのポップアップメニュー[モデルの追加]から追加

    では、バリュータイプのプロパティビューで「属性」タブから追加してみましょう。 まず、属性の型を作成します。構造ツリーの"Automotive Value Types"パッケージを右クリックして表示されるポップアップメニューで、[モデルの追加]-[バリュータイプの追加]を選択し、作成されたバリュータイプの名前を"Temp"に変更します。同様に"Press"バリュータイプも作成します。
    図上で"Fuel"バリュータイプを選択し、左下に表示されるプロパティビューで、「属性」タブを選択します。「追加」ボタンをクリックし、名前として"temperature"と入力します。 また、型を"Temp"に変更します。同様に、もう1つプロパティを追加し、こちらの名前は"pressure"と入力、型は"Press"を選択します。
    続いて、"Fuel"バリュータイプにプロパティ区画の表示を設定しましょう。 "Fuel"バリュータイプを右クリックして表示されるポップアップメニューで、[区画の表示/非表示]-[プロパティ区画の表示]を選択します。
    バリュープロパティは、プロパティビューまたは構造ツリーから削除できます。 "InternalCombustionEngine"ブロック上に、ポートを追加し、名前を"ICEFuelFitting"に、型を"FuelFlow"に設定します。

▶ メニューに戻る


TIPS(5) 関連を作成途中でキャンセルする

例えば、予定外のアイテムをクリックしてしまったなど、関連を作成する途中でやり直したくなった場合は、ESCキー、またはマウスを右クリックすると始めの状態に戻ります。汎化や実現、依存など2つのアイテム間に関連線を作成するものは、同様です。
作成したブロックやユニットは構造ツリー上にも追加されます。各アイテムを選択すると、ツールの左下に表示されるプロパティビューには、アイテムのプロパティが表示されます。各要素のプロパティはダイアグラムエディタ上、構造ツリー上、プロパティビューなどから編集できます。場面に応じて使いやすい編集方法を選択してください。

TIPS(6) アイテムを削除するときの注意点

図上に追加したブロックを削除する際、ポップアップメニューには[図から削除]、[モデルから削除]の2つのメニューがあります。それぞれ内容が異なりますので、目的に合った削除を選んでください。 [図から削除]があるのは、対象となるアイテムのモデルを共有したまま、他の図にも配置できるためです。

  • 図から削除:図上からのみ削除します。構造ツリーのモデル自体は削除されません。
  • モデルから削除:そのアイテムが全ての図から削除され、別の場面で使うことはできなくなります。

TIPS(7) ズームとスクロール

マウスやショートカットキーでダイアグラムエディタの表示を簡単に拡大・縮小できます。大きな図を描画する際は、表示領域を変えながら編集できると便利です。 ダイアグラムエディタに表示している図上で右ドラッグすると、自由に動かすことができます。斜め方向の移動も可能です。 図の拡大・縮小は、ツールバーのボタンやメインメニュー[表示]、ショートカットキーで行います。[マップ]タブからも操作できますので活用してください。

TIPS(8) 編集の取り消しとやり直し(UndoとRedo)

astah* System Safetyには「編集を取り消す」(Undo)/「編集をやり直す」(Redo)機能があり、100回分の編集を取り消すことができます。 ツールバーの「編集を取り消す」ボタンを繰り返し押した後、「編集をやり直す」ボタンを繰り返し押してください。元の状態に戻ってくるでしょう。 これらのボタンは押しっぱなしにすると連続した操作になります。この機能で操作の間違いを心配せずに編集できそうですね。

Undo/Redo button

TIPS(9) 複数選択

図上でアイテムを複数選択するには、次の方法があります。

  • 図上でドラッグして矩形領域を選択する
  • 図上でポップアップメニューを表示し、[全選択]を選択する
  • Shiftキーを押しながら要素を選択していくことで複数選択する

TIPS(10) パッケージ名の本体表示

パッケージのポップアップメニュー[名前を本体に表示]で、パッケージ名の表示位置を選択できます。

パッケージ名の本体表示

▶ メニューに戻る


6. 内部ブロック図を描いてみよう

課題

次の内部ブロック図を描きましょう。 この内部ブロック図はSysML1.5仕様書の"Figure D.19 - Internal Structure of the Power Subsystem (Internal Block Diagram)" からの抜粋に "ft:FuelTankAssembly", "ice:InternalCombustionEngine"パートを追加しています。
内部ブロック図のサンプル

描き方

  1. 内部ブロック図をプロジェクトに追加します

    ブロック定義図上で"PowerSubsystem"ブロックのポップアップメニューから[内部ブロック図の追加]を選択します。内部ブロック図が追加され、ダイアグラムエディタに表示されます。 コンポジション関連で接続されている"FuelTankAssembly"ブロックなどは、パートプロパティとして配置されます。"ft"などの関連端名は、パートプロパティ名となります。 全てのパートプロパティを作成してみましょう。ツールパレットの「パートプロパティ/参照プロパティ」ボタンを押して、作成した内部ブロック図上をクリックすると、[プロパティを追加]ダイアログが表示されます。 パートプロパティを新規作成するので、了解を押してください。パートプロパティを配置できます。
    続けて":"の前の部分にパートプロパティ名として"epc"を入力し、":"の後の部分にパートプロパティの型として"ElectricalPowerController"を入力します。

    "ElectricalPowerController"ブロックがプロジェクトに存在しないため、オプションの選択ダイアログ「型になるElectricalPower Controllerを新規作成しますか」が表示されますので、「はい」ボタンを押します。 構造ツリーに"ElectricalPowerController"ブロックが作成されたことが確認できます。残りの"emg:ElectricMotorGenerator", "ecu:PowerControlUnit"パートも作成しましょう。
    図要素名が1行表示では長い場合、パートのサイズを変更して折り返してみましょう。アイテムの外枠を選択して、四隅に表示されるノブをドラッグするとサイズ変更できます。

  2. ドラッグ&ドロップで参照プロパティを追加してみましょう

    構造ツリーでプロジェクトルートを右クリックして表示されるポップアップメニュー[モデルの追加]-[ブロックの追加]を選択して、"BrakePedal"ブロックを新規作成します。 "BrakePedal"ブロックを内部ブロック図上にドラッグ&ドロップすると[モデルの種類]ダイアログが表示されますが、ここで参照プロパティを選択します。 図上で参照プロパティ名を2回クリックして、参照プロパティ名を "bkp" に設定します。構造ツリーで複数のブロックを選択し、一度に図にドラッグ&ドロップすることも可能です。

  3. "epc:ElectricalPowerController"パートに"I_IEPC"ポートを追加します

    ブロック定義図上のポートの追加方法と同様、ツールパレットの「ポート」ボタンを押して、作成した "epc:ElectricalPowerController"パートの下辺をクリックするとポートをパート上に配置できます。 ポートのプロパティビュー[ベース]タブからポート名を"I_IEPC"に変更します。残り3つのポートを "epc:ElectricalPowerController", "emg:ElectricMotorGenerator", "ecu:PowerControlUnit"パート上に追加してみてください。 また、"epc:ElectricalPowerController", "emg:ElectricMotorGenerator"パートのポートの型はポートのプロパティビューの[ベース]タブから"FuelFlow"ブロックにしてください。 サンプルの図ではポートの名前と型名が表示されていませんが、ポートのポップアップメニュー[名前の表示]と [型名の表示]を用いて非表示にできます。

  4. アイテムフローを追加していきましょう

    アイテムフローのツールボタンを押し、アイテムフロー作成モードにします。

    アイテムフローを作成する場合は 2箇所クリックします。先にクリックされたポートは、アイテムフローの源となります。 "ElectricalPowerController"ブロックのポートをクリック後、"ElectricMotorGenerator"ブロックのポートをクリックしてください。 "ElectricalPowerController"ブロックのポートから、"ElectricMotorGenerator"ブロックのポートへのアイテムフローが引けました。
    同様に、逆方向のアイテムフローを作成してください。 なお、サンプルの図のようにアイテムフローを途中で曲げて描く場合は、開始するポート、途中の点、終了するポートの3箇所をクリックします。
    作成したアイテムフローにConveyを追加してみましょう。
    まず、Conveyとなるブロック"ElectricCurrent"を構造ツリー上で作成します。 構造ツリーでプロジェクトルートを右クリックして表示されるポップアップメニュー[モデルの追加]-[ブロックの追加]を選択すると、ブロックが"SysMLモデル"下に作成されます。続けてブロックの名前として"ElectricCurrent"を入力してEnterを押します。
    次に、アイテムフローのプロパティビューからConveyを追加します。Conveyをクリックし、Conveyとなるブロックを選択します。

  5. インターフェースを追加しましょう

    では、"epc:ElectricalPowerController"パートの"I_IEPC"ポートに提供インターフェースと要求インターフェースを追加しましょう。4つの方法があります。

    • 図上のポートのポップアップメニュー[要求インターフェースの追加]と[提供インターフェースの追加]から追加
    • ポートのプロパティビューにおける[要求インターフェイス]タブと[提供インターフェイス]タブから追加
    • 「要求インターフェース」ツールボタンと「提供インターフェース」ツールボタンから追加
    • 「使用依存」ツールボタンと「実現」ツールボタンから追加

    ポートのポップアップメニューを用いてみましょう。
    図上で"epc:ElectricalPowerController"パートの"I_IEPC"ポートのポップアップメニューを表示し、[要求インターフェースの追加]を選択します。その後、インターフェース名として"I_IEPCData"と入力します。 提供インターフェースも同様で、図上で"epc:ElectricalPowerController"パートの"I_IEPC"ポートのポップアップメニューを表示し、[提供インターフェースの追加]を選択します。その後、インターフェース名として"I_IEPCCmd"と入力します。

    同様に、"ecu:PowerControlUnit"パートのポートにも要求インターフェースを追加します。「要求インターフェース」ツールボタンを押して、"I_IEPCCmd"の近くをクリックし、"ecu:PowerControlUnit"パートのポートをクリックします。ポートの型は[新規に作成する]を選択し、[インターフェースの指定]は[既存のモデルを使用する]を選択し、"I_IEPCCmd"インターフェースを指定してください。 提供インターフェースも同様で、「提供インターフェース」ツールボタンを押して、"I_IEPCData"の近くをクリックし、"ecu:PowerControlUnit"パートのポートをクリックします。ポートの型は[新規に作成する]を選択し、[インターフェースの指定]は[既存のモデルを使用する]を選択し、"I_IEPCData"インターフェースを指定してください。

  6. コネクタを作成しましょう

    「コネクタ」ツールボタンを用いて、まず"FuelTankFitting:FuelFlow"ポートをクリックし、次に"ICEFuelFitting:FuelFlow"ポートをクリックするとコネクタが作成されます。
    同様に、"epc:ElectricalPowerController"パートのポートと"ecu:PowerControlUnit"パートのポートの間、"ecu:PowerControlUnit"パートと "bkp:BrakePedal"パートの間にもコネクタを作成してください。
    コネクタの名前を設定するには、次の方法があります。

    • コネクタを選択し、プロパティ―ビューのベースタブで設定する
    • コネクタのポップアップメニュー[名前の設定]で設定する

TIPS(11) パートプロパティのネスト表現

パートプロパティをネストするには、まず親となるパートプロパティを作成した後、次のどちらかの方法で子パートプロパティを追加します。

  • ツールパレットの「パートプロパティ/参照プロパティ」ボタンを選択し、図上の親パートプロパティ内をクリックする
  • ツールパレットの「パートプロパティ/参照プロパティ」ボタンを選択し、図上をクリックして子となるパートプロパティを作成した後、子パートプロパティを親パートプロパティ内にドラッグ&ドロップする

▶ メニューに戻る


7. パラメトリック図を描いてみよう

課題

次のパラメトリック図を描いてみましょう。このパラメトリック図はSysML1.5仕様書の"Figure D.24 - Defining Fuel Flow Constraints (Parametric Diagram)"から抜粋しています。

描き方

  1. "PowerSubsystem"ブロックにパラメトリック図を追加します

    "PowerSubsystem Fuel Flow Definition"ブロック定義図上で"PowerSubsystem"ブロックのポップアップメニューから、[パラメトリック図の追加]を選択します。パラメトリック図が追加され、ダイアグラムエディタで表示されます。
    今まで描いてきた内部ブロック図と似ているように見えますね。 パラメトリック図は、制限された内部ブロック図です。そのため、パラメトリック図は、内部ブロック図と同じ方法で作成します。さらに、制約プロパティを内部ブロック図のパートと、制約パラメータをポートとみなして作成できます。ただし、制約プロパティの型は、制約ブロックに制限されています。 内部ブロック図の作成を思い出してください。"fuelflow:FuelFlow"制約プロパティと全制約パラメータを描いてみましょう。

  2. 制約プロパティに制約を追加していきましょう

    制約プロパティは、型となる制約ブロックの制約を表示します。まず、構造ツリーのプロジェクトルートのポップアップメニューから"parametricDomain"パッケージを作成し、次に"parametricDomain"パッケージのポップアップメニューから "FuelFlow"制約ブロックを作成してください。 "parametricDomain"パッケージにある"FuelFlow"制約ブロックを構造ツリー上から選択します。そのプロパティビューにおける制約タブから制約を追加し、制約の編集区域に"flowrate=press/(4*injectorDemand)"を入力します。

    最後に、"FuelFlow"制約ブロックを構造ツリーからパラメトリック図上にドラッグ&ドロップし、名前を"fuelFlow"に変更してください。

  3. "ice.fi.fuelDemand"バリュープロパティを作成しましょう

    まず、"PowerSubsystem Fuel Flow Definition"ブロック定義図を下の図のように修正します。

    次に、パラメトリック図に戻り、「バリュープロパティ」のツールボタンを押し、バリュープロパティ作成モードにします。

    図上をクリックすると[プロパティを追加]ダイアログが表示されます。
    "ice:InternalCombustionEngine"パートの配下を展開し、パート階層上の"fi:FuelDemand"パートの "fuelDemand:Real" を選択し、了解を押します。 "ice.fi.fuelDemand"バリュープロパティが作成できました。他のバリュープロパティも作成してみてください。

  4. 制約パラメータを追加しましょう

    「制約パラメータ」のツールボタンを押して、作成した”fuelflow : FuelFlow”制約プロパティをクリックすると制約パラメータを制約プロパティ上に配置できます。 制約パラメータ名を"injectorDemand"に変更します。制約パラメータ"flowrate"も同様の手順で追加してください。

  5. バイディングコネクタで、バリュープロパティと制約パラメータをつないでいきましょう

    バインディングコネクタのツールボタンを押し、バイディングコネクタ作成モードにします。 バインディングコネクタを作成する場合は、2箇所クリックします。 "ice.fi.fuelDemand"バリュープロパティをクリックして、"injectorDemand:Real"制約パラメータをクリックします。 "ice.fi.fuelDemand"バリュープロパティと、"injectorDemand:Real"制約パラメータをバイディングコネクタでつなぎました。 "ice.fi.fuelFlowRate"バリュープロパティと、"flowrate:Real"制約パラメータをバイディングコネクタでつないでください。

▶ メニューに戻る


8. ユースケース図を描いてみよう

課題

次のようなユースケース図を描きましょう。このユースケース図はSysML1.5仕様書の"Figure D.6 - Establishing Operational Use Cases for “Drive the Vehicle" (Use Case Diagram)"と同じです。

描き方

  1. ユースケース図をプロジェクトに追加します

    構造ツリー上で"parametricDomain"パッケージのポップアップメニューから、[ユースケース図の追加]を選択します。 ユースケース図が追加され、その図がダイアグラムエディタで表示されます。

  2. アクターとユースケースを作成しましょう

    「アクター」のボタンを押して、図上をクリックするとアクターを配置できます。

    続けてアクターの名前である"Driver"と入力してEnterを押します。6つのユースケースも同様に「ユースケース」ボタンを押して作成しましょう。

  3. アクターとユースケース間の線を引きましょう

    線にはいくつかの種類がありますが、ここでは関連です。「関連」のツールボタンを押し、関連線でつなぎたい要素を順にクリックします。

    "Driver"アクターをクリック後、"Park"ユースケースをクリックしてください。関連が引けました。同様に、他の関連を作成してください。ユースケース間の線は拡張と包含です。関連と同じように作成できますので、全ての拡張と包含を作成してみてください。

  4. ▶ メニューに戻る


    9. 要求図を描いてみよう

    課題

    "HSUV"に関する要求とテストケースを要求図で整理しましょう。この要求図はインストーラに同梱されているサンプルのプロジェクトファイルの"Acceleration Requirement Requirement and Verification"と同じです。

    描き方

    1. 要求図を"HSUVRequirements"パッケージに追加します

      構造ツリーのプロジェクトルートのポップアップメニューから"HSUVRequirements"パッケージを作成します。 構造ツリー上で"HSUVRequirements"パッケージのポップアップメニューから、[図の追加]-[要求図の追加]を選択します。要求図が追加され、ダイアグラムエディタで表示されます。

    2. 矢印線以外の要求とテストケースを作成していきましょう

      要求とテストケースの作成方法は、ブロックの作成方法と同様で、それぞれツールボタンを押してから作成したい位置をクリックするだけです。

      要求図のツールバーからユースケースやブロックを作成することはできませんが、既存のユースケースやブロックを要求図にドラッグ&ドロップで描画できます。 "Accelerate"ユースケースと "PowerSubsystem"ブロックを、構造ツリーから要求図上にドラッグ&ドロップします。

    3. 要求間の関連を表す導出で"Acceleration"要求と"Power"要求をつなぎましょう

      導出のツールボタンを押し、導出作成モードにします。導出を作成する場合は、2箇所クリックします。

      "Power"要求をクリック後、"Acceleration"要求をクリックしてください。 導出が引けました。
      同様に、他の満足、検証、洗練を作成してください。

      サンプルの図では要求のIDとテキストが表示されていませんが、要求のポップアップメニュー[詳細区画の表示]を用いて非表示にできます。

    ▶ メニューに戻る


    10. アクティビティ図を描いてみよう

    課題

    次のアクティビティ図を描いてみましょう。このアクティビティ図はSysML1.5仕様書の"Figure D.38 - Detailed Behavior Model for "Provide Power" (Activity Diagram)"から抜粋しています。

    描き方

    1. "PowerSubsystem"ブロックについて処理の流れを描いてみましょう

      アクティビティ図を"PowerSubsystem"ブロックに追加します。 構造ツリー上で"PowerSubsystem"ブロックのポップアップメニューから、[図の追加]-[アクティビティ図の追加]を選択します。 アクティビティ図が追加され、ダイアグラムエディタで表示されます。

      構造ツリー、またはアクティビティ図のプロパティビューからアクティビティ図の名前を"PowerSubsystem Activities"に変更しておきましょう。

    2. アクティビティ図を描いていきましょう

      アクティビティ図は、フローチャート図に近い図で動作の流れを表現しますので分かりやすいですね。 まず全ての縦パーティションを作成していきましょう。「縦パーティション」のボタンを押して、図上をクリックすると縦パーティションを配置できます。

      パーティションの名前を "pcu:PowerControlUnit"に変更してください。
      次に、右側の"Ice:InternalCombustionEngine"パーティションを作成しましょう。 作成方法は "pcu:PowerControlUnit" パーティションと同様で、"pcu:PowerControlUnit"パーティションの右側をクリックすると作成できます。 続けて、"epc:ElectricalPowerController"パーティションも作成してください。
      ここから、矢印線以外のアクション、オブジェクトノード、アクティビティパラメータノードを作成していきましょう。 作成方法はブロックやユースケースと同様で、 それぞれのツールボタンを押して配置したい位置をクリックするだけです。

      パラメータノードに設定するブロック(ベースブロック)は、図上で編集するかプロパティビューで編集します。
      "accelPosition", "eThrottle"ブロックには "continuous"ステレオタイプを追加してください。構造ツリーでブロックを選択し、プロパティビューのステレオタイプタブから追加できます。

    3. 入力ピンを作成しましょう

      「入力ピン」ツールボタンを選択して、作成したいアクション状態をクリックします。

    4. 動作の流れを表す矢印で各アイテムをつないでいきましょう

      この矢印はオブジェクトフローです。 接続する2箇所をクリックしますが、今度はクリックする順序が違うと向きが逆になりますから注意しましょう。
      アクティビティ図のツールパレット

    ▶ メニューに戻る


    11. シーケンス図を描いてみよう

    課題

    次のシーケンス図を描いてみましょう。このシーケンス図はSysML1.5仕様書の"Figure D.10 - White Box Interaction for "StartVehicle" (Sequence Diagram)"に相互作用の利用を追加しています。

    描き方

    1. "HSUV"ブロックの発進・停車操作を中心とした処理の流れを描いてみましょう

      アクティビティ図と同様に、シーケンス図も、構造ツリーにおいてユースケースの下やブロックの下に追加できます。 "HSUV"ブロックのポップアップメニューから、[図の追加]-[シーケンス図の追加]を選択してください。

      アクティビティ図でも似たような処理の流れを描けますが、シーケンス図ではオブジェクト間のメッセージのやり取りを時系列で表現しています。 "ElectricalPowerController"ブロックを構造ツリーからドラッグ&ドロップするとオブジェクトが作成されます。ここでは特にオブジェクトを区別しないためオブジェクト名は省略しています。 既に設定されているオブジェクト名を消す場合、BackSpaceキーで名前を空にしてEnterを押します。構造ツリーで複数のブロックを選択し、一度に図にドラッグすることも可能です。

    2. メッセージを作成していきます

      サンプル図を見ると、フレームから"PowerControlUnit"オブジェクトへのメッセージは非同期メッセージになっています。ツールパレットの左から4番目のボタンで、非同期メッセージ作成モードにしましょう。 次に、フレーム上をクリックし、さらに"PowerControlUnit"のライフライン上をクリックすれば、メッセージの矢印が引かれます。"メッセージ0"という名前を2回クリックして"StartVehicle()"に変更しましょう。

    3. 同期メッセージを作成しましょう

      これは "PowerControlUnit"オブジェクトから"ElectricalPowerController"オブジェクトへメッセージを送付しています。 ツールパレットの左から3番目のボタンで同期メッセージ作成モードにしましょう。先ほどは、フレーム上の点をクリックしてメッセージを作成しましたが、今度は活性区間上をクリックするように注意してください。 ツールパレットの左から7番目のボタンで、同期メッセージの"ready"Replyメッセージを作成しましょう。 "ElectricalPowerController"の活性区間上をクリックします。

    4. 相互作用の利用を作成しましょう

      「相互作用の利用」のツールボタンを選択します。

      相互作用の利用となる長方形の左上の位置をマウスの左ボタンで選択し、左ボタンを放さずに "Power ControlUnit" ライフラインと "ElectricalPowerController" ライフラインを選択します。 選択されたライフラインはハイライトされたはずです。マウスの左ボタンをリリースすると、相互作用の利用が作成されます。名前は"Park/ShutdownVehicle"に変更しましょう。

      相互作用の利用が参照するシーケンス図を作成するには、次の3つの方法があります。

      • 図上の相互作用の利用のポートポップアップメニューにおける[シーケンス図を作成する]から追加
      • 図上の相互作用の利用をダブルクリックすることで追加
      • 相互作用の利用のプロパティビューにおける参照先の「新規作成」ボタンから追加

    ▶ メニューに戻る


    12. ステートマシン図を描いてみよう

    課題

    SUV運転操作に関する状態を描いたステートマシン図を描きましょう。このステートマシン図はインストーラに同梱されているサンプルのプロジェクトファイルの"HSUVOperationalStates"と同じです。

    描き方

    1. ステートマシン図を作成しましょう

      ステートマシン図も、構造ツリーにおいてユースケースの下や、ブロックの下に追加することができます。"HSUV"ブロックのポップアップメニューから[図の追加]-[ステートマシン図の追加]を選択してください。

    2. 矢印線以外の状態を作成していきましょう

      開始疑似状態、状態、終了状態について、それぞれツールボタンを押下した後、作成したい位置をクリックして配置します。

      サンプル図の"Off"状態などはアクションの区画が非表示になっていますが、"Off"状態などのポップアップメニュー[アクションの表示]で非表示にできます。

    3. 状態の遷移を表す矢印で各状態をつないでいきましょう

      矢印で示された遷移のツールボタンを押下します。接続する2箇所をクリックしますが、クリックする順序が違うと向きが逆になりますから注意します。

      "start"などの名前は、遷移のトリガーにあたります。遷移の矢印をクリックして選択し、プロパティビューでトリガーの欄に遷移のトリガー名を入力しましょう。

    TIPS(12) 曲線モード

    サンプルのステートマシン図のように遷移を曲線で描くことができます。

    1. ツールパレットの右から2番目のボタンの右にある下向き矢印を押下し、[曲線モード]を選択する
    2. 開始する状態、途中の点、終了する状態の3箇所をクリックする
    遷移の開始点と終了点を状態の辺の好きな場所につなぎたい場合は、ツールパレットの右から3番目のボタン「線の端点を図要素の中心に設定する」をオフにして描きます。

    ▶ メニューに戻る


    13. astah* System Safetyで描画できる図

    astah* System Safetyは、SysMLの他にもいくつか描画できる図があります。目的に応じて図や表を使い分けて、モデルベースシステムズエンジニアリングの実践にお役立てください。


    14. 最後に

    ここまでみなさんと一緒に astah* System Safetyを使っていくつかの図を描いてきました。自分で手を動かして実際に図を描いてみることで、基本的なSysMLダイアグラムを作成できるようになったのではないでしょうか。このチュートリアルで、みなさんの理解が少しでも深まったなら幸いです。


    ▶ メニューに戻る