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


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

  • 製品種類とバージョン:astah* System Safety 8.0以降、astah* SysML 8.0以降
  • 対象とした図:ブロック定義図、内部ブロック図、パラメトリック図、要求図、ユースケース図、アクティビティ図、シーケンス図、ステートマシン図
  • 更新日:2022年12月6日


1. 画面構成と基本操作

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

  1. マネジメントビュー

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

  2. プロジェクトビュー

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

    • 構造ツリー
      パッケージやブロックなどの入れ子構造をツリー形式で表示します。ポップアップメニューでパッケージや図、ブロックなどの要素を追加、削除できます。

    • プロジェクトに含まれる全ての図・表の一覧を表示します。
    • 検索
      プロジェクト内から、モデル要素やリンクの切れたハイパーリンクを抽出したり、モデル要素の名前に含まれる文字列を置換したりします。

  3. プロパティビュー

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

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

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

  5. マップビュー
  6. アクティブな図を表示するマップです。
    このマップを使う事により大きな図を編集する際に全体を見渡すことができます。


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

作成した図や表のデータを"プロジェクト"という拡張子.axmzのファイルに保存します。
起動後は何もプロジェクトを開いていない状態のため、以下の手順で新規のプロジェクトを作成します。

  1. 「プロジェクトを新規に作成する」ボタンを押下する、または[ファイル]-[プロジェクトの新規作成]を選択する
    プロジェクトの新規作成

  2. 空の構造ツリーが表示される
    新規作成後の構造ツリー

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

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


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

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

▶ メニューに戻る


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

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


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

課題

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

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

描き方

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

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



ダイアグラムエディタには、ブロック定義図を編集するためのツールパレットがあり、ツールボタンが並んでいます。
ブロック定義図のツールバー
マウスカーソルをボタン上に置くと各ボタンのツールチップが表示されます。これらのアイコンとツールチップは、SysMLの要素名と表記を覚えるのに役立ちます。
構造ツリーでブロック定義図のポップアップメニューから[名前の変更]を選択し、"Modeling Domain"と入力しましょう。


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

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

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

    ツールバー上で「バリュータイプ」ボタンを押して、作成した"Automotive Value Types"パッケージをクリックします。
    すると、バリュータイプが "Automotive Value Types"パッケージ内に作成されます。バリュータイプの名前に"Accel"と入力してEnterを押します。
    バリュータイプ名をAccelへ変更する
    "Accel"バリュータイプの作成後、他の5つ("Real", "Horsepwr", "Vel", "TM", "Dist")のバリュータイプを作成してください。
    他のバリュータイプを追加する
    図上の各アイテムは、ドラッグで移動できます。また、パッケージやバリュータイプの名前を再編集したい場合は、名前をダブルクリックすることで編集できます。

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

    汎化のツールボタンを押し、汎化を作成したい要素を順にクリックします。
    汎化を作成する
    "Accel"バリュータイプをクリックしてから、"Real"バリュータイプをクリックしてください。汎化を作成できました。
    同様に、他の4つのバリュータイプ("Horsepwr", "Vel", "Dist", "TM")についても、"Real"との間に汎化を作成してください。

    続いて、各バリュータイプに操作区画、プロパティ区画、バリュータイプ区画の表示を設定しましょう。
    区画を表示するには、各バリュータイプを右クリックして表示されるポップアップメニューで、[区画の表示/非表示]-[操作区画の表示]などを選択します。

    TIPS(1) 汎化の共有表記

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

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

    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"と同じです。
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"ステレオタイプを追加しましょう。

    1. FuelFlow"ブロックを選択しプロパティビューのステレオタイプタブで「追加」ボタンを押します。
    2. 名前を"flowSpecification"と入力し「了解」ボタンをクリックします。 ステレオタイプの追加

    3. 追加されたステレオタイプを表示するには"FuelFlow"ブロックを右クリックして表示されるポップアップメニューで、[その他の表示/非表示]-[ステレオタイプの表示]および[ステレオタイプの個別表示/非表示]を選択し、表示したいステレオタイプのみ選択します。

    次の手順の前にパッケージとバリュータイプを作成しておきましょう。

    1. 構造ツリーのプロジェクトルートのポップアップメニューで[モデルの追加]-[パッケージの追加]を選択します。
    2. 作成されたパッケージ名を"HSUVStructure"に変更します。
    3. 2.で作成したパッケージのポップアップメニューで[モデルの追加]-[バリュータイプの追加]を選択し、名前を"Fuel"に変更します。
    4. "Fuel"バリュータイプを"PowerSubsystem Fuel Flow Definition"ブロック定義図にドラッグ&ドロップします。

    ブロック間に関連を作成しましょう。

    1. ツールパレットの「関連」ボタンの右にある下向き矢印を押下し、「コンポジション(一方向のみ誘導可能)」を選択します。
    2. "PowerSubsystem"ブロックをクリックしてから "FuelTankAssembly"ブロックをクリックします。
    3. "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)

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

TIPS(9) 複数選択

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

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

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

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

▶ メニューに戻る


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

課題

次の内部ブロック図を描きましょう。 この内部ブロック図は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"ブロックを新規作成します。 作成したブロックを図上にドラッグ&ドロップすると[モデルの種類]ダイアログが表示され、ここで参照プロパティを選択します。
    モデルの種類ダイアログ
    図上で参照プロパティ名を2回クリックして、参照プロパティ名を "bkp" に設定します。構造ツリーで複数のブロックを選択し、一度に図にドラッグ&ドロップすることも可能です。

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

    ツールパレットの「ポート」ボタンを押して、作成した "epc:ElectricalPowerController"パートの下辺をクリックするとポートをパート上に配置できます。
    ポートのプロパティビュー[ベース]タブからポート名を"I_IEPC"に、型を"FuelFlow"ブロックにしてください。

    残り2つの"emg:ElectricMotorGenerator", "ecu:PowerControlUnit"のパート上にポートを追加し、"emg:ElectricMotorGenerator"パートのポートの型も同様に"FuelFlow"ブロックにしてください。 サンプルの図ではポートの名前と型名が表示されていませんが、ポートのポップアップメニュー[名前の表示]と [型名の表示]を用いて非表示にできます。

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

    アイテムフローのツールボタンを押し、アイテムフロー作成モードにします。
    アイテムフローボタン
    アイテムフローを作成する場合は 2箇所クリックします。先にクリックされたポートは、アイテムフローの源となります。 "ElectricalPowerController"ブロックのポートをクリック後、"ElectricMotorGenerator"ブロックのポートをクリックすると、アイテムフローが引けます。

    同様に、逆方向のアイテムフローを作成してください。 なお、サンプルの図のようにアイテムフローを途中で曲げて描く場合は、開始するポート、途中の点、終了するポートの3箇所をクリックします。

    作成したアイテムフローにConveyを追加してみましょう。
    まず、Conveyとなるブロック"ElectricCurrent"を構造ツリー上で作成します。 構造ツリーでプロジェクトルートを右クリックして表示されるポップアップメニュー[モデルの追加]-[ブロックの追加]を選択し、名前を"ElectricCurrent"と入力してEnterを押します。
    次に、アイテムフローのプロパティビューからConveyを追加します。Convey下にある空欄をクリックし、"ElectricCurrent"ブロックを選択します。
    Conveyの追加

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

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

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

    「使用依存」ツールボタンと「実現」ツールボタンを用いてみましょう。
    まず、インターフェースを作成します。[インターフェース]ツールボタンを押して、図上で"epc:ElectricalPowerController"パートの"I_IEPC"ポートの左下の余白部分をクリックしインターフェースを配置します。インターフェース名として"I_IEPCData"と入力します。次に、[使用依存]ツールボタンを押して、"I_IEPC"ポート、"I_IEPCData"インターフェースの順にクリックします。[ポートの型の指定]では[既存のモデルを使用する]を選択し、"PowerControlUnit"を選択します。 提供インターフェースも同様で、[インターフェース]ツールボタンを押して、"I_IEPC"ポートの右下の余白部分をクリックしインターフェースを配置します。インターフェース名として"I_IEPCCmd"と入力します。次に、[実現]ツールボタンを押して、"I_IEPC"ポート、"I_IEPCCmd"インターフェースの順にクリックします。(ポートの型は直前の要求インターフェース作成時に指定しているので改めて指定する必要はありません。)

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

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

    「コネクタ」ツールボタンを用いて、追加します。
    コネクタの追加

    1. ツールボタンよりコネクタを選択します。
    2. FuelTankFitting:FuelFlow"ポートをクリックします。
    3. "ICEFuelFitting:FuelFlow"ポートをクリックするとコネクタが作成されます。

    同様に、"epc:ElectricalPowerController"と"ecu:PowerControlUnit"パートのポート間、"ecu:PowerControlUnit"と "bkp:BrakePedal"パート間にもコネクタを作成してください。


    コネクタの名前を設定するには、次の方法があります。
    • コネクタを選択し、プロパティ―ビューのベースタブで設定する
    • コネクタのポップアップメニュー[名前の設定]で設定する


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

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

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

▶ メニューに戻る


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

課題

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

描き方

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

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

    今まで描いてきた内部ブロック図と似ているように見えますね。パラメトリック図は、制限された内部ブロック図です。
    そのため、パラメトリック図は、内部ブロック図と同じ方法で作成します。

    さらに、制約プロパティを内部ブロック図のパートと、制約パラメータをポートとみなして作成できます。
    ただし、制約プロパティの型は、制約ブロックに制限されています。 内部ブロック図の作成を思い出してください。

    "fuelflow:FuelFlow"制約プロパティと全制約パラメータを描いてみましょう。


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

    制約プロパティは、型となる制約ブロックの制約を表示します。

    1. 構造ツリーのプロジェクトルートのポップアップメニューから"parametricDomain"パッケージを作成します。
    2. "parametricDomain"パッケージのポップアップメニューから "FuelFlow"制約ブロックを作成します。
    3. プロパティビューにおける制約タブで[追加]を押し、制約の編集区域に"flowrate=press/(4*injectorDemand)"を入力します。 ブロックに制約を追加する

    4. "FuelFlow"制約ブロックを構造ツリーからパラメトリック図上にドラッグ&ドロップし、名前を"fuelFlow"に変更します。


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

    まず、"PowerSubsystem Fuel Flow Definition"ブロック定義図を下の図のように修正します。
    ブロックを変更する
    次に、パラメトリック図に戻り、「バリュープロパティ」のツールボタンを押し、バリュープロパティ作成モードにします。
    バリュープロパティボタン

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

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

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


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

    1. バインディングコネクタのツールボタンを押します。
    2. "ice.fi.fuelDemand"バリュープロパティを選択して、"injectorDemand:Real"制約パラメータをクリックします。
    3. "ice.fi.fuelFlowRate"バリュープロパティと、"flowrate:Real"制約パラメータもバイディングコネクタで繋ぎます。


▶ メニューに戻る


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

課題

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

描き方

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

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

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

    「アクター」のボタンを押して、図上をクリックするとアクターを配置できます。名前である"Driver"と入力してEnterを押します。
    アクターの作成
    次に「ユースケース」ボタンを押して6つ作成します。
    名前を"Drive the vehicle"、"Start the vehicle"、"Accelerate"、"Steer"、"Park"、"Brake"に変更します。
    ユースケースの作成

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

    線にはいくつかの種類がありますが、ここでは関連です。「関連」のツールボタンを押し、関連線でつなぎたい要素を順にクリックします。
    "Driver"アクターをクリック後、"Drive the vehicle"ユースケースをクリックしてください。関連が引けました。
    関連を追加する
    同様に、他の関連を作成してください。ユースケース間の線は拡張と包含です。関連と同じように作成できますので、全ての拡張と包含を作成してみてください。
    拡張と包含アイコン

  4. ▶ メニューに戻る


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

    課題

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

    描き方

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

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

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

      要求とテストケースの作成方法は、ブロックの作成方法と同様で、それぞれツールボタンを押してから作成したい位置をクリックするだけです。
      要求とテストケースボタン
      要求図のツールバーからユースケースやブロックを作成することはできませんが、既存のユースケースやブロックを要求図にドラッグ&ドロップで描画できます。
      "Accelerate"ユースケースと "PowerSubsystem"ブロックを、構造ツリーから要求図上にドラッグ&ドロップします。 構造ツリーからユースケースを作成する

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

      導出のツールボタンを押し、導出作成モードにします。導出を作成する場合は、2箇所クリックします。
      "Power"要求をクリック後、"Acceleration"要求をクリックしてください。 導出が引けました。
      導出線ボタン
      同様に、他の満足、検証、洗練を作成してください。
      満足線、検証線、洗練線ボタン
      サンプルの図では要求のIDとテキストが表示されていませんが、要求のポップアップメニュー[詳細区画の表示]を用いて非表示にできます。
      詳細区画の表示ボタン

    ▶ メニューに戻る


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

    課題

    次のアクティビティ図を描いてみましょう。このアクティビティ図は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"パーティションの右側をクリックすると作成できます。
      続けて、"epc:ElectricalPowerController"パーティションも作成してください。

      ここから、矢印線以外のアクション、オブジェクトノード、アクティビティパラメータノードを作成していきましょう。 作成方法はブロックやユースケースと同様で、 それぞれのツールボタンを押して配置したい位置をクリックするだけです。
      アクティビティ図のツールパレット
      パラメータノードに設定するブロック(ベースブロック)は、図上で編集するかプロパティビューで編集します。
      "accelPosition", "eThrottle"ブロックには "continuous"ステレオタイプを追加してください。構造ツリーでブロックを選択し、プロパティビューのステレオタイプタブから追加できます。

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

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

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

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

    ▶ メニューに戻る


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

    課題

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

    描き方

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

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

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

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

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

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

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

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

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

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

    ▶ メニューに戻る


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

    課題

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

    描き方

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

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

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

      開始疑似状態、状態、終了状態について、それぞれツールボタンを押下した後、作成したい位置をクリックして配置します。
      ステートマシン図のツールパレット
      サンプル図の"Off"状態などはアクションの区画が非表示になっていますが、"Off"状態などのポップアップメニュー[アクションの表示]で非表示にできます。

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

      矢印で示された遷移のツールボタンを押下します。接続する2箇所をクリックしますが、クリックする順序が違うと向きが逆になりますから注意します。
      遷移ボタン
      "start"などの名前は、遷移のトリガーにあたります。遷移の矢印をクリックして選択し、プロパティビューでトリガーの欄に遷移のトリガー名を入力しましょう。
      遷移名を追加する

    TIPS(12) 曲線モード

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

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

    ▶ メニューに戻る



    11. 最後に

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


    ▶ メニューに戻る