はじめに
JMAABモデリングガイドラインver6.1のルールにこんなのがあります。
「db_0140 : ブロックパラメーターの表示」
ブロック注釈には、プロジェクトで定めたブロックパラメーターを表示します。
Simulinkにおいて、ブロックパラメーターを表示することは、モデル可読性にとって非常に重要な要素だと思っていますが、表示すべきブロックパラメーターは、このブロックの場合は、このパラメーターを表示!など一意に言えないと思います。
(明確にブロックパラメーターの表示を定めているプロジェクトってあるんだろうか……?)
例えば、図のようなOutportブロックでは、条件付きサブシステムの中と外とでは機能が違うため、条件付きサブシステムの中では表示させたいし、外では表示させたくありません。
そこで、ブロックパラメーターの既定値と異なれば表示させて、同じならば表示させないといったことや、設定したパラメータ値の変数名ではなく、その変数の値を表示したい。MATLABが日本語設定であればパラメーターは日本語、英語であれば英語表記などといったことなど、いろいろ対応してみたので、その実装に役立つパラメーターなどをいろいろ発見したので、紹介したいと思います。
ブロックパラメーター表示に役立つパラメーター
プロンプト
Outportでいえば、[ディセーブル時の出力:]や[初期出力:]といった文字列です。これは、ブロックパラメーターの「IntrinsicDialogParameters」から拾えます。
値の名前
[ディセーブル時の出力:]の「保持」や「リセット」といった文字列です。
このデータは、下記フォルダの.xmlファイルから引っ張ってこれます。
% get(0,'lang')は、現在のMATLABの言語設定値
fullfile(matlabroot, 'resources', 'Simulink', get(0,'lang'), 'dialog.xml')
「パラメーター値 + _CB」という形でリスト化されてます。
値の評価
例えば下図の値、モデルワークスペースとベースワークスペースのパラメーターを使用して演算しています。
これは、「slResolve」という関数を使うと演算してくれます。
指定したブロックパス(モデル名などでも可)が使用可能なパラメーター(モデルワークスペース、ベースワークスペース、データディクショナリ、マスクワークスペース)を使用して評価してくれます。便利。
output = slResolve('評価する文字列', ブロックパスやブロックハンドル)
表示されるパラメーターの判定
ブロックパラメーターは、条件によって、表示されたり、されなかったりするものがあります。下記図のOutportブロックは、条件付きサブシステムの内側と外側で、表示されているパラメーターが違います。
表示されていないパラメーターは、機能しないものと考えていいはずなので、今表示されているかされてないのか判定したいはずです。これは、ブロックオブジェクトのisValidPropertyを使用して判定できます。
% Outportブロックの[ディセーブル時の出力]設定が表示されているか判定
blkobj = get_param('testModel/Outport','Object');
isvalidprop = blkobj.isValidProperty('OutputWhenDisable'); % logical値がリターン
おわりに
ここらへんの知見は、公式ドキュメントにも載っていなかったりするので、まとめてみました。これらを使用したスクリプトをマスクの初期化に入れ込んで、パラメーター表示させると、結構いい感じに機能してくれるんではないでしょうか?誰かにささってくれるといいなぁ。