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

MATLABプログラミング Simulink基礎編シリーズです。

今回は、信号線の追加と削除です。

信号線の追加

信号線を追加するとは、「出力ポート」から「入力ポート」へ結線を行うことです。ここで、出力ポート、入力ポートとはブロックの出入り口のことです。

ですから、信号線を追加する際には「出力ポート」と「入力ポート」の指定を行います。

ここで注意しないといけないのは、引数の渡し方です。get_paramやadd_block とは、ブロックの指定の仕方がちょっと違います。

get_paramだと、ブロックを指定するのに ‘model/subsystem/SrcBlock’ などと指定していたのですが、add_lineでは ‘model/subsystem’ と、’SrcBlock/1′ という風に2つの引数に分かれています。

別に、こう書けてもいい気がするのですが、残念ながら対応していません。

<<ダメな例>>

>> add_line( ‘model/subsystem/SrcBlock/1’, ‘model/subsystem/DstBlock/1’, ‘autorouting’, ‘on’ )

信号線の削除

信号線を追加するとは、「出力ポート」から「入力ポート」へ結線を取り除くことです。ですから、追加の場合と同じように「出力ポート」と「入力ポート」の指定を行います。

演習:信号線を追加し、次に削除する

事前準備

モデル ex1_9.mdl を用意し、サブシステムを1つ追加し、名前を「Subsystem」とします。

さらにその中に、サブシステムを3つ配置してください。名前は、「Subsystem」「Subsystem1」「Subsystem2」とします。(何も考えずに配置すると、こういう名前になると思います)

手順1

手順1:MATLABコマンドウィンドウにて、SubsystemからSubsystem1へ信号線を1本追加します

>> add_line( ‘ex1_9/Subsystem’, ‘Subsystem/1’, ‘Subsystem1/1’, ‘autorouting’, ‘on’ )

結果1:SubsystemからSubsystem1に結線が行われました

手順2

手順2:MATLABコマンドウィンドウにて、こんどはSubsystemからSubsystem2へ信号線を追加します

>>add_line( ‘ex1_9/Subsystem’, ‘Subsystem/1’, ‘Subsystem2/1’, ‘autorouting’, ‘on’ )

結果2:SubsystemからSubsystem2に結線が行われました

手順3

手順3:MATLABコマンドウィンドウにて、SubsystemからSubsystem1の結線を削除します

>>delete_line( ‘ex1_9/Subsystem’, ‘Subsystem/1’, ‘Subsystem1/1’ )

結果3:結線が削除されました

手順4

手順4:MATLABコマンドウィンドウにて、SubsystemからSubsystem2への結線を削除します

>>delete_line( ‘ex1_9/Subsystem’, ‘Subsystem/1’, ‘Subsystem2/1’ )

結果4:結線がさらに削除されました

オマケ

これまで、おまじないで付けてきた autorouting ですが、これをつけないとどうなるのでしょうか?

先ほどの例で、autorouting指定なしでSubsystemからSubsystem2に結線すると

>>add_line( ‘ex1_9/Subsystem’, ‘Subsystem/1’, ‘Subsystem2/1’ )

こうなります。

さすがに、これはヒドい!というわけで、autoroutingの指定をおすすめしています。

オマケ2

autoroutingでは満足できない!というあなたには、さらなるオプションも用意されています。

Simulinkの画面にはX-Y座標があって、「こういう X-Y 座標を通るような信号線を追加しろ」という指定もできます。

たとえば、座標 (200 , 200 ) → ( 200 , 300 ) → ( 300, 300 ) →(400,300)という経路を通る信号線を追加するには、

>>add_line( ‘ex1_9/Subsystem’, [ 200 200; 300 200; 300 300; 400 300 ] )

とすることで、こうなります。

信号線が浮いちゃっていますね。これは、信号線の始点・終点を、うまーく出力ポートの位置、入力ポートの位置にあわせれば、つながります。面倒ですね。

あと、この方法は色々な危険があって、あまりお勧めできません。

まとめ

これまで、ブロックパラメータの読み書き、ブロックや信号線の追加と削除を行ってきました。Simulinkプログラミング基礎編としては、必要最低限の領域をカバーできていると思います。

あと1回の記事で、ツール化にあたっての小技をご紹介して、このシリーズを〆る予定です。