MATLABプログラミング Simulink基礎編(番外編)

MATLABプログラミング Simulink基礎編シリーズです。今回は番外編です。

つい先日、R2012bがリリースされましたが、そこで「Simulinkブロックのコメントアウト」なる機能が追加されました。

そこで今回は、簡単にコメントアウト機能を眺めてから、MATLABプログラミングとコメントアウト機能との関係をご説明します。

コメントアウト機能とは

たとえば、新しい試作車に対応するため制御ロジックをちょいとイジるとしましょう。かといって、既存のロジックをいきなり変えてしまうのも何だか怖い。

そういうときは、いったん既存のブロックをコピーします。

そして、コピーしたものをコメントアウトします。

最後に、それっぽい説明を書いておけば完了です。

コメントアウト化されたブロックには、次の特徴があります

  • シミュレーションやコード生成には一切影響しない
  • 閲覧や変更は可能
  • find_systemで検索しても引っかからない (参考:find_system

ですから、実質的には注釈とおなじような扱いになります。まさに、コメントアウトです。

スクリプトからコメントアウトしてみる

ブロックには、新たに Commented というプロパティが増えています。これを on , off する事によって、ブロックのコメントアウト化や解除が行えます。

たとえば次のようなブロックがあったとします。

ここで、次のようなコマンドを実行します。

>> set_param( ‘ex1_9/ctrl_old’, ‘Commented’, ‘on’ )

すると、次のようになります。

解除するには、こうします。

>> set_param( ‘ex1_9/ctrl_old’, ‘Commented’, ‘off’ )

すると、次のようになります。

このように、Commented プロパティは

on に設定 → コメントアウト化
off に設定 → コメントアウト解除

となっています。

コメントアウトされたブロックの検索

さて、このコメントアウト機能はとても便利です。モデルのロジックを思い切って変更していいか自信が無い場合、とりあえず旧ロジックをコメントアウト化して取っておきたいですよね。(何かあったら、すぐに元にもどせる)

ところが、そういう運用をするとモデルのあちこちにコメントアウトされたブロックが溜まっていきます。これを、そのままお客様や他部署にお渡しすると、ちょっとハズかしいですよね。そこで例えば、ツールでコメントアウト化ブロックを検出し、削除できたら便利です。

ブロックを見つけるには、find_system コマンドを使用します。早速、モデルの中にあるコメントアウト化ブロックを検索しましょう。

あれ?結果が空っぽだ。検索に引っかからないぞ・・・

実は、コメントアウトされたブロックは、find_system からは見えなくなります。これがウレシイ場合(たとえば、モデルチェックツールとか)もありますが、今回のケースではうれしくありません。

そういう場合は、find_system に追加オプション IncludeCommented を on に指定してやります。すると、こうなります。

よかった!無事にコメントアウト化ブロックを検索する事ができました。あとは、たとえば次のようにするだけで、コメント化ブロックをすべて削除できます。

>> hModel = get_param( ‘ex1_9’, ‘Handle’ );
>> hCommented = find_system( hModel, ‘IncludeCommented’, ‘on’, ‘Commented’, ‘on’ );
>> for i = 1:length( hCommented ), delete_block( hCommented( i ) );, end

おまけ

コメントアウト機能、とっても良くできているのですが、1つだけ危ない点があります。それは、モデル診断のデータ接続性の部分です。

これは、「うっかりつなぎ忘れた部分は無いか?」というチェックです。つなぎわすれは高確率でバグなので、しっかり診断してほしいところです。

さて、次のようなモデルを実行しようとすると・・・なんとエラーが出ません!

実質的に、次のモデルと同じになるのですが、これだとエラーが出ます。

診断のココロから言うと、この挙動はちょっとマズいように感じます。(もちろん、状況次第だとは思いますが。)

こういう時こそMATLABプログラミングの出番!対処方法は何通りかありますが、いずれにせよチョイと工夫すれば済むはずです。