Model Center—変数ビュー
モデルエディタの下部には,アクティブクラスウィンドウのクラスのパラメータ,変数,内容を見たり編集したりするための1つまたは複数のタブがある.Modelicaにおいてはパラメータと定数は変動が制限された変数である.以下では,これらの区別が必要な場合を除いて,変数という言葉はこれら3つすべてを表すのに使用する.コンポーネントが選択されていないときは,クラス変数が表示される.特定のコンポーネントの変数を表示するためには,アイコンビュー,ダイアグラムビュー,またはコンポーネントブラウザでそのコンポーネントを選択する.
表示されるタブは,表示されるクラスによって変わる.クラスの変数のグループ化は,各変数について,コンポーネントのプロパティダイアログの変数ビューに表示セクションで設定できる.このダイアログを開くためには,スクリーン下部のビューの変数の名前をクリックまたは右クリックして「プロパティ」を選ぶ.このダイアログについての詳細はコンポーネントのプロパティの編集についてのセクションに記載されている.
置換可能クラスを持つモデルについては,特に指定がない限り置換可能クラスは一般タブに表示される.置換可能クラスはモデルへのパラメーターとみなされるため,以下のセクションで変数について述べられていることのほとんどは置換可能クラスにも当てはまる.
「表示」メニューから変数ビュー,パラメータビュー,定数ビューを開くと,変数,パラメータ,定数を別々のタブに表示することができる.これらのタブはデフォルトでは隠されている.これらのビューでは,すべての変数,パラメータ,定数が無条件にリストされ,可視性やビュー/グループ設定は無視される.タブの表示・非表示はタブの任意の場所で右クリックして現れるポップアップメニューからも設定できる.
変数ビューで変数名の上にマウスを置くと,変数のタイプ,その名前,および宣言の接頭辞を含むツールチップが表示される.配列変数の場合には次数とそのサイズも含まれる.
変数のデフォルトの可視性
変数が変数ビューに表示されるかどうかは以下の条件で決まる(特化したパラメータ,変数,定数の各ビューは除く):
- 初期値を持つ変数は初期化グループの一般ビューに表示される.初期値を持たない変数は変数の追加またはコンポーネントのプロパティのダイアログボックスで,その変数についての変数ビューに表示オプションが有効化されている場合にのみ表示される.
変数をOuter,Final,Protectedで宣言する方法の詳細はコンポーネントのプロパティの編集についてのセクションを参照されたい.
変数のソート
ビューの変数は,名前または宣言順でソートできる.デフォルトでは宣言順にソートされている.
名前でソートするためには,ビューの空き領域を右クリックし,ポップアップメニューから「ソート」 ▶ 「名前で」を選択する.
変数名の変更
変数の名前をクリックしてポップアップメニューからRenameを選択すると,変数名を変更できる.
変数ビューで変数名をクリック可能にするには現在のクラスウィンドウビューが Modelicaテキストビューであってはいけないことに注意する.また,名前の変更の操作を可能にするには,現在開いているクラスが変数が宣言されているクラスでなければならず,その同じクラスが読取り専用であってはならない.
コンポーネントの操作についての詳細は,Componentコンポーネントブラウザの章のコンポーネント名の変更セクションを参照されたい.
テキストビュー内の変数への移動
Modelicaコードで変数の完全な宣言を確認すると便利な場合がある.これは,変数ビューで変数の名前をクリックし,ポップアップメニューでGo to Variable in Modelica Text Viewを選択することで実行できる.これにより変数が宣言されているクラスの Modelicaテキストビューに直接移動し,その宣言を主とするコード行が選択される.
変数ビューで変数名をクリックできるようにするには,現在のクラスウィンドウ ビューがModelicaテキストビューであってはいけないことに注意すること.
変数の編集
変数を編集する前に,クラスウィンドウのアクティブビューがアイコンビューかダイアグラムビューであることを確認する.クラスをModelicaテキストビューで編集している間は,変数ビューでの編集はできない.読取り専用のクラスでも変数は編集できるが,変更を保存することはできない.そのため,読み取り専用ライブラリのパラメータを永続的に変更してしまうことを心配することなく,用意された例題モデルでさまざまな状況を検証することができる.
変数にはいくつかの編集可能な属性がある.デフォルトの値は別の場所に指定されているが,新しい値で上書きすることができる.デフォルト値のソースに移動するには,編集アイコンの隣にある矢印をクリックし,Open Class Specifying Default Valueを選択する.これにより,デフォルト値の指定されたクラスが開く.
変数ビューで直接編集可能な変数のすべての属性について以下に詳細を述べる.この他の属性と変数のプロパティは「コンポーネントのプロパティ」ダイアログで編集できる.このダイアログを開くためには,変数の名前をクリックして「プロパティ」を選ぶ.このダイアログについての詳細はコンポーネントのプロパティの編集についてのセクションに記載されている.
編集ビューで利用できる属性は,変数のタイプによって異なる.例えば,タイプがStringの変数の属性はValueのみである.
- 値.シミュレーションの全期間に渡って変数に与える定数値を指定する.またはパラメータの値を設定する.クラスにこの値の代替値がChoicesアノテーションか列挙によって含まれている場合,これらの選択肢はドロップダウンメニューに現れ,簡単に選択することができる.
- 固定.False(変数のデフォルト設定)に設定されていると,シミュレーションツール(ソルバ)は連立方程式を解く際に必要に応じて指定されたのとは異なる別の初期値を自由に使用することができる.Trueに設定されていると,変数の初期値は初期値ボックスで指定された値に固定される.デフォルトの設定として状態変数にはFixed属性がTrueに設定されている.これは標準Modelicaには適合しないが,System Modelerは初期条件として方程式の過剰決定系が使用できるので,状態変数についてFixed属性がTrueに設定されている場合に,より直感的である.
複数のコンポーネントを同時に編集する
変数の属性を一度に複数のコンポーネントについて設定できると便利なことがある.これは,コンポーネントが同じタイプであれば可能である.変数を編集したいコンポーネントを選択する.すべてのコンポーネントに対して同じ属性である変数について,値がValueテキストボックスに表示される.値が異なる場合は,テキストボックスには「共通の値が見付かりません」と表示される.変数の新しい値をタイプするとき,または既存の値を編集するときは,選択されたコンポーネントすべてが影響を受ける.同じ基底クラスから継承するコンポーネントを選択することもでき,基底クラスの変数が同じように編集できる.
ダイアログを使って編集する
入力フィールドの横の編集アイコンをクリックすると,ダイアログを使って変数の値が編集できる.編集アイコンが塗りつぶされた四角形の紙のような形の場合,色を指定する変数のカラーセレクタ,ファイルを指定する変数のファイルセレクタ,または 配列変数を指定する配列エディタなど,その変数の値を編集するために特別に調整されたダイアログが存在する.
表示されている編集ダイアログのタイプは,変数のタイプによって決まる.変数がDialog.colorSelectorアノテーションなどの特定のタイプの編集ダイアログを要求する関連付けられた標準Modelicaアノテーションを持つ場合は,それによって決まる.
変数に特別に調整されたダイアログが存在しない場合,編集アイコンをクリックすると一般的なテキスト入力ダイアログが表示される. この場合はテキストが書かれた紙のようなアイコンが表示される.
一般のテキスト入力ダイアログはまた,アイコンの横にある矢印をクリックして,ドロップダウンメニューの編集テキストを選択しても,特別に調整されたダイアログを持つ変数が現れる.
変数をFinalにする
変数が編集されないようにするためには,その変数をFinalにする.値はその変数をFinalと設定したクラス内では編集することができるが,そのクラスのコンポーネント(インスタンス)を作成するクラスや,そのクラスを拡張するクラスからは編集できない.
変数をFinalにするには,その変数の編集アイコンの横にある矢印をクリックして現れたメニューで「final」をクリックする.「final」の左のチェックマークは,その変数がFinalであることを意味する.
finalが無効になっていてクリックできないことがある.これは変数が暗黙的にFinalである場合に起る.例えば,抵抗器コンポーネントを含むモデルがあるとして,その抵抗器コンポーネントをFinalにすると,抵抗器内部の変数も間接的にFinalになる.抵抗器コンポーネントの変数を見てみると,そのFinal特性は変更できない.これは事実上Final特性が変数ではなく抵抗器全体に関連付けられているからである.
変数ビューに存在しない抵抗器またはその他のコンポーネントのFinal特性を変更するためには,ダイアグラムビューまたはコンポーネントブラウザでそのコンポーネントを右クリックする.現れたメニューの「final」をクリックすると,Final特性が切り替えられる.変数の場合と同様に,コンポーネントが暗黙的にFinalである場合にメニューの「final」が無効になっていることがある.
変数のタイプパラメータの編集
Modelicaの定義済みの型(Real,Integer,Boolean,String)と列挙型には,型をさらにカスタマイズするための数々のパラメータが用意されている.そのような型の変数のパラメータを見たり編集したりするためには,変数ビューで変数名をクリックし,「タイプパラメータの表示」または「タイプパラメータの編集」を選ぶ.
タイプパラメータダイアログはコンポーネントのプロパティダイアログからもアクセスできる.
ダイアログボックスに表示されるパラメータは変数のタイプと変動性によって異なる.前の例では,タイプModelica.Electrical.Analog.Basic.Resistorの抵抗コンポーネントのパラメータRのタイプパラメータを見ることができる.パラメータRのタイプはResistance (Modelica.Units.SI.Resistance)で,これは定義済みの型Realから派生したものである.
パラメータの値が灰色で表示されていたら,その値が別のどこかで指定されているということである.この例では,拡張されたクラスResistanceまたはRealの内部であろう.これらの値はResistanceまたはRealの中でFinal接頭辞で宣言されてない限り,パラメータRについてオーバーライドできる.クラスのタイプパラメータの変更方法については,セクション「クラスのタイプパラメータの編集」を参照されたい.
どのパラメータ値も,横の「final」チェックボックスをチェックすることでFinalにすることができる.これによって他のすべてのコンテキストで値をオーバーライドできなくなる.
同様に,Each接頭辞は対応する「Each」チェックボックスをチェックすることでパラメータに適用できる.配列については,配列に対してEach接頭辞を使うと,配列全体ではなく,配列の各要素に割り当てるための値を指定することができる.配列ではないパラメータにはEach接頭辞は影響を及ぼさない.
タイプパラメータの詳細については,デジタル書籍「Modelica by Example」を参照されたい.これはSystem Modelerに含まれており,ドキュメントセンターのリソースからアクセスできる.
表示単位の変更
Modelicaモデルのすべての物理的変数は単位とともに宣言しなければならない.変数のunit属性はすべての方程式で使用されている単位であり,方程式はそれらの特定の単位についてのみ成り立つ.しかし,displayUnitを指定すると,グラフィカルユーザインターフェースに表示される単位を変更することは可能である.
例えばあるモデルにタイプModelica.Mechanics.Translational.Components.Massのコンポーネントがあり,その質量(パラメータm)をデフォルト単位の「kg」ではなく「lb」で表したいとする.これを行うためには,massコンポーネントをクリックし,変数ビューでパラメータmの「kg」ボタンをクリックする.開いたダイアログボックスでdisplayUnit属性が変更できる.
タイプ Modelica.Units.SI.Massの変数についてdisplayUnitをkgからlbに変更する
ドロップダウンリストから「lb」 をクリックして「OK」をクリックすると,グラフィカルインターフェースでは変数ビューのValueフィールドの値がキログラムからポンドに変換される.同時に,モデルのテキストビューではdisplayUnit="g"という短いModelicaコードが,コンポーネントmass1のパラメータmに加えられる.
コンポーネントmass1のパラメータmにdisplayUnit="g"が加えられる
既存で互換性のある単位だけがdisplayUnitのドロップダウンリストに表示される.別のdisplayUnitをタイプして指定することも可能である.指定された単位が既知のものではない場合は,それを定義するよう求められる.単位の管理方法についての更なる情報についてはライブラリ単位の編集のセクションを参照されたい.
認識されていないdisplayUnit式が指定されている場合のタイプパラメータダイアログのメッセージ
別の変数の名前や式等,非数値の値が値フィールドに入力されると,値フィールドの横の単位は基本単位に変わることに注意されたい.グラフィカルユーザインタフェースでは数値的なリテラルだけが自動的に変換される.
また,温度差等,単位が相対的でったり, (たとえばケルビンの「K」など)指定された単位がこれを意味しない場合,単位変換が正しく行われるためにこのことをSystem Modelerに伝える必要がある.これは特定の変数またはそのタイプのクラスプロパティの特定のタイプのすべての変数について,コンポーネントプロパティのプロパティダイアログの「詳細設定」タブの中で行える.
クラスプロパティダイアログの詳細設定タブで,タイプが相対単位を持つことを指定する.
単位についての詳細やSystem Modelerでの設定方法については, 測定単位の概念と設定を参照のこと.
配列の編集
配列変数はその名前の後のカッコによって認識される.配列の次元数とそのサイズは,名前の上にマウスポインタを置いたときに表示されるツールチップで見ることができる.
配列変数は,値入力フィールドの横にある編集アイコンをクリックすると専用の配列エディタが開く. 配列エディタは,テーブルビューと式ビューという2つの同期されたビューで構成され,どちらのビューも配列の編集に使用できる.式ビューは,任意の配列式を編集するために使用できるが,主に非リテラル式で構築された配列を編集するために使用される.テーブルビューは式ビューの評価版であり,配列の個々の要素を編集する場合に推奨される.
一方のビューで配列を編集すると,もう一方のビューが無効になり,配列エディタダイアログの左下にエラーメッセージが表示される場合がある.これは配列が無効であることを示しており,その原因としてはたとえば式ビューの不正な式やテーブルビューのセルに無効な値が含まれていることが考えられる.エラーを修正すると他のビューが再び有効になる.
配列全体に値を割り当てるのではなく,配列の各要素に値を割り当てることもできる.指定した値がどのように解釈されるかはそれぞれの接頭辞によって決まる. (有効な場合,値は配列の各要素に割り当てられる). 変数の各接頭辞を有効にするには,変数の編集フィールドの横にある編集アイコンをクリックし,ポップアップメニューのeach 項目の前にチェックマークが付いていることを確認する.
配列の次元を編集するには,変数名をクリックまたは右クリックし,ポップアップメニューから 「プロパティ」を選択して「コンポーネントプロパティ」を開く.
レコードの編集
コンポーネントのレコードタイプはほとんどの場合,ダイアグラムビューまたはコンポーネントブラウザでコンポーネントを選択して,変数ビューでレコードの内容を編集することによって編集される.ただし,変数ビュー内でコンポーネントのレコードタイプを独自のパラメータとして表示すると便利な時もある.
レコードが初期化されていない場合またはサブ変更によって初期化されている場合,値入力フィールドの右側にある編集アイコンをクリックすると専用のレコードエディタが開き,レコードの内容を表示および編集できる.
レコードコンストラクタの呼び出しまたは互換性のあるレコードとして評価されるその他の式によって初期化されたレコードの場合,編集には一般的なテキスト入力ダイアログが使用される.
置換可能なクラスの再宣言と構成
クラス宣言設定機能を利用すると,モデルで使用されているクラス全体を切り替えることができる.これにより,モデルの一部を素早く容易に設定し直すことができるようになる.他のクラスと置き換えられるクラスは,置換可能プロパティを持つクラスである.この特性はクラスプロパティダイアログから設定できる.モデル内の置換可能クラスはパラメータとして表示される.
パラメータとして示された置換可能クラスと,ドロップダウンメニューに示された選択肢
置換可能クラスを宣言するためには,ドロップダウンメニューから一つの項目を選ぶ.各項目は互換性のあるクラスを表す.クラスに互換性を持たせるためには,置換可能なクラス宣言の制約タイプを拡張する必要がある.
上の例では,自動車モデルの4つのタイヤのModelicaタイプは置換可能なクラスであり,マウスを数回クリックするだけで自動車のすべてのタイヤを置換できます。 置換可能なタイヤクラスのModelicaコードは次のようになる:
特定のTireモデルはすべて,Basetireモデルを拡張し,物理的な対応物に従ってパラメータを初期化する必要がある.明示的な constrainedby 句により,クラスの再宣言後に制約クラスが変更されないことが保証される.
多くの場合,選択したクラスは値フィールドの右側にある編集アイコンをクリックすることでさらにカスタマイズできる.これにより「Parameterization of Class Redeclaration」ダイアログが開き,クラスに構成できるすべてのパラメータが表示される.
パラメータへの変更は,ダイアログを閉じるときにクラス名の後に変更のリストとして表示される.
すべての変更を加えた完全なクラスの再宣言は,編集アイコンの横にある矢印をクリックし,ドロップダウンメニューから「テキストの編集」を選択することでテキストとして編集できる.
ドロップダウン メニューから「テキストの編集」を選択して,クラスの再宣言をテキストとして編集する.
置換可能なクラス,クラスの再宣言,およびモデルの再利用性全般の詳細については「再利用可能および構成可能なモデル」に関するチュートリアルを参照のこと.
変数のリフト
階層的なモデルを構築する際,モデルの動作に大きく関わるパラメータ,変数,定数,変数の初期値がモデルのコンポーネントの奥深くに置かれることがある.モデルの構造を簡単にするために,変数とその値をモデルの最上位にリフトアップすることができる.この操作は最上位のモデル以外の部分を変更することはない.
変数をリフトすると,リフトされた変数と結び付けられた,同じ名前と変動性を持つ新しいパラメータがモデルの最上位に作られ,最上位の変数の値が変更されると,リフトされた変数の値も変更される.変数の初期値をパラメータとしてリフトすると,階層のより低いところにある変数の初期値を最上位のパラメータとして指定することができる.
リフト操作を行うためには,変数ビューでリフトする変数を含むコンポーネントを選んで,その名前をクリックまたは右クリックする.現れるポップアップメニューは変数の変動性によって異なる.希望するメニュー項目を選択する.
DCMotorコンポーネント内のパラメータJの最上位モデルへのリフト
変数の追加
モデルに変数を加えるためには,変数ビューの右下の「+」ボタンをクリックするか,「挿入」メニューを使うか,または変数ビューの空き領域を右クリックして現れたポップアップメニューから変数,パラメータ,定数を選んで加えるかする.
現れたダイアログボックスは,任意の変動性の変数を加える共通のダイアログボックスである.
レジスタモデルにSI単位タイプElectricCurrentの連続変数を加える
変数を加えるためには,「追加」ボタンをクリックする.変数はコンポーネントブラウザに現れる.変数ビューが表示されているときは,そこにも変数が表示される.ダイアログボックスはさらに変数を追加するために開いたままとなる.閉じるときは「閉じる」ボタンを押す.
- その他.カスタムタイプ.タイプの完全パスが分からない場合は,クラスブラウザを使って検索し,クラスブラウザからタイプをドラッグしてテキストボックスにドロップすることができる.クラスブラウザを使ってタイプやその他のクラスを検索する方法については,クラスの検索についてのセクションを参照されたい.
- Protected.変数の利用は,それが宣言されているクラスと,そのクラスを継承するクラスに制限される.このチェックボックスを外すと,コンポーネントはすべてのクラスから利用できるようになる.コネクタで使用できるのは共通セクションのみであるため,このプロパティはコネクタ内で宣言されたコンポーネントについては利用できない.
- Replaceable.変数は再宣言によって変更可能.再宣言の変更を使ってコンポーネントのタイプを変更する方法についての詳細はコンポーネントのタイプの変更についてのセクションを参照されたい.
変数の削除
クラスの変数を削除するためには,その名前をクリックし,ポップアップメニューから「削除」を選択する.
複数の変数を削除する場合は,複数のコンポーネントが一度に選択できるComponent Browserを使うと素早く行える.コンポーネントの削除方法についての詳細はコンポーネントの削除についてのセクションを参照されたい.