4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MATLABを1関数だけ実行するブロック

 SimulinkからMATLAB関数を呼び出すのに、MATLAB Functionがありますが、たった1関数呼び出すためだけにMATLAB Functionブロックを使うには大げさで、可読性が悪くなっていやだなぁということがよくあります。
 そういうわけで、MATLABを1関数だけ実行するブロックを作りました。見栄えにもこだわりました。
useMtlbCmd.png

大まかな作り方とかライブラリブロック作成時の注意点とか

概要

 このMATLAB Commandは、MATLABFunctionをマスク化して作成したものです。設定したMATLAB Commandの中身をMATLAB Functionのスクリプトに転写と、そのラッパー関数のcall〇〇〇を作成しています。
innerMtlbCmd.png

また、下記に記載しているプログラムの実装は、MATLAB関数の設定のマスクパラメーターのコールバック内で処理させています。このコールバックは、モデルのロード時、ブロックパラメーターを開く時、対象のパラメーターを変更させたときに、実行されます。(他にも実行される条件があったらすみません。)

mtree

 単純にラッパー関数を作成といっても、ユーザーが入力した関数定義から出力や入力や定数を読み取らなくてはなりません。(この場合、出力はBとI、入力はA、定数は"descend")
 このような構文解析に便利なのがmtreeという関数です。mtreeはMATLABコードの公式(試験的関数)のパーサー(構文解析プログラム)です。
mtree.png
mtreeで解析できる出力引数と入力引数、関数名などから、wrapper関数が作れます。さらに、その対象の文字列の位置も取得できるので、対象の文字に対してアイコンの色付け設定まで容易?に、作成できます。
icon.png

MATLAB Functionオブジェクト(Stateflowオブジェクト取得)

構文を解析して作成したMATLAB Scriptの文字列を自身のMATLAB Functionブロックのスクリプトにコピーするには、こちらのように、自身のブロックオブジェクトからStateflowオブジェクト(MATLAB Functionのクラス名はStateflow.EMChart)を取得し、こちらのScriptプロパティの書き換えで可能です。
EMChart.png

関数の概要のヘルプ取得

どのような関数が呼ばれているのか、その概要を簡単にブロック設定ダイアログ内に記載したいと思いました。
blockDescription.png

こんな感じのコードを書くと、help関数で取得できるテキストの各要素が細分化されている形で取得することができます。先ほどのブロック設定の例では、こちらのPurposeとDescriptionの値の内容を結合して表示しています。
(こちらの関数は、help関数の生コードを参考に使用しています。)
MATLAB_help.png

 MATLAB関数のヘルプなど、ブロック設定を変更しなくとも値が変わる可能性があります。このようなパラメーターは保存しないマスクパラメーターに一時保存させるのが良いです。保存させると他のライブラリーモデルなどにブロックをコピーなどした場合、不具合のもとになります。
configDescription.png

入出力ポート数が変わるライブラリブロック

今回のMATLAB Functionのように、設定によりブロックの入出力が変わるブロックは、ライブラリリンクを'none'にしないと、モデルを開きなおしたときなど信号線が切れたりするので、リンクはOFFにしないといけません(この仕様困る)。CopyFcnのコールバックを使用して、コピー時にnoneにする必要があります。
configCopyFcn.png

おまけ

 作成したMATLAB Commandブロックのダウンロードリンク張っておきました。
※ このファイルの利用により生じたいかなる損害についても、作者は一切の責任を負いません。
https://drive.google.com/file/d/1Hj-reBNTyDEUjpPKwOeTPUMtibyQWQKm/view?usp=drive_link
入力キーワードとしてp1,p2,...p10を入力すると、パラメーターとして入力ができるとかもしています。
useMtlbCmdPrm.png

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?