MATLABユーザーコミュニティー

MATLAB& Simulink ユーザーコミュニティー向け日本語ブログ

金宝appsimulinkモデル実行の可视方法まとめみみ!!

こんにちはトレーニングの远藤と申し。。
5/14と投稿とことで,,,,ヶ月ぶり投稿投稿です。时がが経つのはは早いものですねねねね

このブログでは、「Simulink と MATLAB をつなぐ」をコンセプトとして、「金宝appSimulink API」や「程序设计师とSimulink の連携方法」についててきまし。。

simu金宝applink simulinkの内ででででののコードを大きな大きなであるであるであるであるであるであるであるであるであるである一つのののの可视化,,特に「モデルモデル実行中のの可视可视

金宝appSimulinkにおける可视化

金宝appsimulink simulinkで行うで,可视化は重要な一つ一つですです。。モデルモデルがが作られれているいるかか,,ののの値値値はは意図か,,ししししでは欠かないプロセスに。。

sim金宝appulink simulinkにおける可视化にははにににつつのがが。。。

  • モデル実行後の可视化

    シミュレーション一,そのログデータを使って化を方法。。様々ななシミュレーションシミュレーションシミュレーションデータデータを详细详细にに検证するする场合,复数复数シミュレーションシミュレーション结果结果

  • モデル実行中の可视化

    を実行,结果结果逐次的に化化し方法方法ですです。。ハードウェアハードウェアハードウェアとと连携连携ててストリーミングストリーミング处理处理をを行う场合场合などなど,,,,リアルリアルリアルリアルがが正しく正しく正しく正しく正しく中の化がになります。

前者については、ログデータさえ取ってしまえば豊富な MATLAB の可視化関数を使うことができるため比較的簡単です。それに対し、後者はモデルの実行中、すなわち Simulink モデル内で可視化処理を行う必要があるため、使える可視化機能は限られてきます。

ただ、モデル実行中に可視化したいデータの中には、 Scope ブロックで時間応答を見るだけでは十分でないケースも多いです。特にハードウェア連携を行うなら、見栄えという意味でもデータの可視化の部分を充実させたいですよね。例えば下の動画は Dashboard を使っていい感じの UI を作ってます。

そこで,はモデル実行中の可視化方法についてどのものがのか,にていきたいと思います。

Simulink の標準機能を使った可視化

冒頭で「モデル実行中の可視化」は「Simulink のモデル内で MATLAB のコードを使う大きな動機の一つである」と書きましたが、もちろん MATLAB を使わなくても Simulink の標準機能だけでいろいろな可視化を行うことができます。以下に例を示します。

Scope ブロック

まずななななブロックブロックです。。信号の時間応答をプロットしてくれます。Scope ブロックはモデル実行後の結果の確認に使用される場合も多いですが、一定時間ごとに結果が逐次更新されるため実行中の可視化にも使えます。

范围scopeのの」->>>「「「値」から「検出検出検出」やややや「信号の统计统计」」をを选ぶ选ぶと,,信号ののピークやます。データフィルタをかける场合,,リアルタイムで信号の詳細情報が必要な場合に有効です

ちなみにスコープビューアー機能を使うと、わざわざ信号に Scope ブロックを繋がなくても同等の可視化を行うことができるので、モデル上の複数の信号を可視化する際はオススメです。

XY Graph ブロック

XY Graph ブロックは 1つ目の信号を横軸、2つ目の信号を縦軸としたグラフを描画するブロックです。Scope は 1 つの信号の詳細情報を確認するのが得意ですが、XY Graph は 2 つの信号の関係性を視覚的に確認したい場合に有効です

,,,,,,,ととととととの応答単体でで见见见てても,,,,x-x-x-x-x-x-x-x-yグラフグラフグラフ书いててて経路経路経路见见たほうが正常いったいったx xy图ブロックブロックが便利。。。。

范围的范围ブロック,,x xy graphににににはフィッティングフィッティング机能机能机能がががありありありももももももももももももももももももももももブロックブロックブロックブロックのののににに変更変更変更変更,ブロックメータ座标范囲の値変更しましょう。

Dashboard ライブラリ

仪表板ライブラリ内のブロックももDashboard ScopeブロックやGaugeブロックなどモデル実行中に更新される可視化機能があります。ちなみに冒頭で紹介した動画で使われていたのはこのライブラリのブロック群です。

仪表板ライブラリの化用群は,モデル上に直接シミュレーション結果を可視化することができる范围scopeウィンドウウィンドウの表示を切り替える,のななななななななななななななブロックブロックブロックブロック,,といったといった手间手间がががにくいにくいのが大きな大きな大きな利点モデル。。前回の記事と同様、Simulink にあまり慣れていない方とモデルをやり取りする際にも効果的ですね。

シミュレーションデータインスペクター

シミュレーションデータインスペクターは Simulink の可視化機能の一つで、「選択した信号のログ」を設定した信号の時間応答を可視化することができます。多くの場合はシミュレーション実行後に検証、比較を行うために使われますが、一度モデルを実行してプロットする信号を選択しておけば、シミュレーション実行中にその結果を確認することが可能です。

シミュレーションデータインスペクターを使う一番の利点は、実行中シミュレーション结果だけでなく,过去の结果もて可视化できる点です。例えば↑の GIF は前の実行結果を赤で表示しつつ、モデルのパラメータを変えて再度実行した結果を青でプロットしています。モデル実行中に過去の結果と比較したい場合は特に有効な可視化方法となります。

MATLABの関数を使った可視化

matlab sim金宝appulink simulinkの机能ももの化关数关数ますのでので,,モデルモデルモデル内での关数关数をを使う使うことででよりより高度高度ななななをを行うことができことができことができことができことができことができことができことができことができことができことができことができが,ここ

  • MATLAB功能ブロック
  • 解释的MATLAB功能ブロック
  • MATLABSystem ブロック

3つについてしよう思います。。

MATLAB功能ブロック(+coder.extrinsic关数()

MATLAB功能ブロックは、ブロックの処理を MATLAB コードで記述することができるブロックです。おそらくモデル上で MATLAB 関数を使用する機能としては一番有名かと思います。

しかし、MATLAB Function ブロックはシミュレーション実行時に MATLAB コードをコード生成しますので、コード生成に対応していない関数は使用できません。MATLAB の可視化関数は基本的にコード生成非対応ですので、そのままでは使用できない、ということになってしまいます。

そこで使用するのがcoder.extrinsicという関数です。この関数を使うと、指定した関数がコード生成されずに MATLAB 側で実行されるようになります。これによってコード生成非対応の可視化関数も MATLAB Function ブロック内で使用することができます(詳しくはこのドキュメント(を参照)。

MATLAB函数ブロック方ブロックブロックコードコードのののののののののをををををををををををを行入れるだけですです。。のの关数をを自分自分自分自分でででででででででででででででファイルファイルファイル。かと思い。

function功能(u)

coder.extrinsic(“ mydispfun”);
mydispfun(u);

end

myDispFun.m のコード生成は行われないため、内部では自由に MATLAB のコードを書くことができます。可視化に使うときには、永続変数を使ってデータ点を追加していく処理を書く場合が多いですね。例えば、次のコードは最初のステップで plot をし、それ以降のステップではデータを追加する処理になります。

functionmydispfun(u)

persistentp
ifisempty(p)
p = plot(u(1),u(2));
axis([0 10 0 10]);
else
p.xdata = [p.xdata u(1)];
p.ydata = [p.ydata u(2)];
end

end

ただし、永続変数を使うと次回以降のシミュレーションに値が持ち越されてしまいます。そのため、シミュレーションを実行するごとに clear コマンドで永続変数をクリアする必要がある点に注意が必要です。

後述する 2 つのブロックと比べると、制約が少なくコードも書きやすい,というメリットがあります。とりあえずこのブロックを使っておけば,可視化できない,ということは起きにくいかと思います。

解释的MATLAB功能ブロック

解释的MATLAB功能ブロックは、指定した MATLAB 関数を MATLAB 上で実行し、結果を Simulink に返すブロックです。

MATLAB功能ブロックと違ってそもそもコード生成が行われないため、coder.extrinsic关数での外部関数指定を行うことなくそのまま MATLAB 関数を使用することができます

可视化用をしてそれを指定するだけな,,非常に手軽に使えるのがメリットかますちょっとし可视化动きのを行う场合は便利です。

解释的matlab函数ブロックブロックは「入力入力はは型型の,ベクトル,行列のみ」,,,入力信号に対する大きな制約があります。他のデータ型や Bus 信号は対応してないので注意が必要です。

また、何かしらの出力が必要なのでだけ行いといういう场合适当なダミー値ててててててててててててててててブロックブロックブロックブロック,といったといったといった工夫工夫がが必要必要

MATLABSystem ブロック

こちらは MATLAB の System object をモデル上で呼び出すことができます。通常は信号処理や通信システム等の状態量保持が必要となるモデルで使用するブロックですが、個人的に可視化を行う際に便利だった経験があるので、上記 2 つのブロックと合わせて紹介したいと思います。

MATLABSystem ブロックはデフォルトでは MATLAB Function ブロック同様コード生成が行われるように設定されていますが、「シミュレーション実行方法」を「インタープリター型実行」に設定すると、Interpreted MATLAB Function ブロックと同様にMATLAB 上で処理が実行されるようになるため、コード生成非対応の関数も使用することができます。

MATLAB系统ブロックと上记上记つブロックのの违い,,,プロパティ(内部データ)を持つことができる点です。

例えば、(Interpreted) MATLAB Function ブロックでデータ点を追加していくような処理を書こうとした場合、前述の通り永続変数にプロットのハンドルを格納する必要があります。

これに対し、MATLAB System ブロックでは永続変数を使わなくても内部プロパティにプロットのハンドルを保存しておくことができます。プロパティの値はシミュレーションごとにリセットされるので、わざわざ clear 関数でリセットする必要はありません。

ただし系统对象をを必要が关系关系,程度ののの系统对象にに知识必要なるなるので,ない方は少しハードル高い。。。

その他の方法

上述したSimulinkの標準機能および MATLAB 関数を使う以外の方法についても簡単にご紹介します。

・イベントリスナーを使った可视化

ちょっとマイナーですがイベントリスナーを使っもモデル中の可视化化を行う行う。。。

イベントリスナーとは特定イベントが発生たとき登录しておいおいた关数をを自动自动的的にに実行実行するするする」金宝app」」机能机能机能机能机能add_exec_event_listenerという関数が用意されており、モデル上の特定のブロックが実行されたときに、特定の関数を自動的に呼び出すことが可能です。

残念ながら、イベントリスナーの機能の使い方をここで詳細に説明しようとするとそれだけで結構なボリュームになってしまうため、ここでは紹介のみとさせていただきます。詳細はこちらの例がとてもとますので,兴味はぜひご参考。。

・ツールの専用を使った可视化

ツールボックス中はモデル実行中の可视化に使えるブロックがありありますます。。。。。。例えば例えば例えば例えば例えば例えば例えば例えば例えば例えば例えば例えば例えば例えば例えば例えば例えば例えば例えば例えば例えば例えば例えば例えば例えば例えば频谱分析仪ブロックや Computer Vision Toolbox の视频查看器ブロックなどが挙げられます。

各ツールボックスにどんなブロックがあるかについては挙げ始めるとキリがないので、気になる方はドキュメントの左の「カテゴリ」からツールボックスを選び、上部メニューの「ブロック」からブロックリストをご確認いただければと思います。

おわりに

simu金宝applinkモデルモデル実行中の可视方法ご绍介しまし。。

范围scopeブロックはづらいという场合场合,専用のブロックブロックブロックコードコードの力をを借りることでよりわかりやすいやすい形に可视可视できできでき

|

注释

要发表评论,请单击这里登录您的数学帐户或创建一个新帐户。