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

Matlab&Si金宝appmulinkユーザーコミュニティー向け日本语ブログ

ちょっと高度なカスタムブロック,“MATLAB系统ブロック”を使いこなせ!

皆さん皆さんエンジニアの远藤とと申し申しエンジニアエンジニアのにち申し申し
このブログでは,「金宝appとSimulink的MATLABをつなぐ」をコンセプトとして,主に技术的な内容について书いています。

先日ついにMATLAB R2021bがリリースされましたね!金宝app仿真软件MATLABとをつなぐような新機能もあるようで,今回のブログ記事でもそれについて書こうかなとも考えたのですが,さすがにもう少し自分で使ってから紹介したいなという部分があり,新機能紹介はまた次の機会にしようかなと思います。

ということで,今回は「MATLAB系统ブロック「││││││││││││││││││├金宝app以前のブログ记事でも绍介した「MATLAB函数ブロック“が有名で,MATLAB系统ブロックは少しマイナーな部類に入るかと思います。しかし,実装したい処理によってはMATLAB系统ブロックの方が適している場面も少なくありません。

特に,以下のような方はMATLAB系统ブロックを使いこなすことでより効率的にモデルを作れるようになるかもしれませんので,必見です!

  • MATLAB函数ブロックで永続変数をよく使う
  • MATLAB函数ブロック内でコード生成対応外の関数を使う機会が多い
  • MATLAB功能ブロックブロックのコード内のパラメータを调整すること多い

目次:

  1. Matlab系统ブロックとは?
  2. MATLAB系统ブロックのメリット
    1. ブロックダイアログからパラメータを設定できる
    2. 内部状態を持つことができる
    3. シミュレーション开开时に1度だけ実行ししたい定理を
    4. コード生成に対応していない関数もそのまま使用可能
  3. おわりに

Matlab系统ブロックとは?

まずはmatlab systemブロックについて简単に明したいと思います.matlab系统ブロックは,系统对象を用作て动作をカスタできるブロックです。系统对象はあまり驯染みのないもいるかもしれませんが,简化に言うとシミュレーションやストリーミング原理用来にれたや変や关键词オブジェクトです(详しく知りたい方向は先先ドキュメントを参照ください)。

実際にMATLAB系统ブロックを使ってみましょう。まずはモデル上にMATLAB系统ブロックを置いてみます。

最初は系统对象がが何も纽づいていないので赤いエラーが表示さていいいいいいますをいいいをくくとととととととととととととととのののといとととのののいとののの新闻作物成面のにには「」」は「「标准标金宝app准详细「Simulink拡张」の3つのテンプレート作物作物することができが,この记事では一流简介な「「」ます。

标准テンプレートのコードが自动で开启ました.matlab函数ブロックの关键词比べる少し复雑で抵抗感感じるもいるかもしれませんが,1つ1つの役割覚えてしまえばそこ难しくはありません那

まず最も重要なのが,テンプレートコードの下部にあるstepImpl関数です。この関数は,各タイムステップでMATLAB系统ブロックの出力を計算する際に実行される関数です。MATLAB函数ブロックで作る関数と基本的には同じ役割ですね。この関数の中に出力の計算処理を書いていきます。

功能y = stepImpl (obj, u)
%的实现算法。计算y作为输入u和的函数
%离散状态。
y = 2 * u;%入力を2倍してて力する
结束

その他,MATLAB功能ブロックとは违い,以下のようなものもテンプレートに用意されています。

  • 特性
    ここではブロックダイアログから変更できる変数を定義することができます(後述)。
  • 属性(DiscreteState)
    ここでは离散状态离散ののを定义できます少し少し级者ですのでこのでは说明は说はは说ますがが割でしますが,详しく知り方向こちらのドキュメントをご確認ください。
  • 属性(Access = private)
    ここここは系统对象の关关内値を変更可能ななを定义するますます(后述)。
  • setupImpl関数
    シミュレーション开始时に1度だけ実行相关数目。変数の読み込みなどなど
  • resetImpl関数
    DiscreteState属性のプロパティを初期化,リセットするための関数です。DiscreteStateを使っていない場合は特に何も書く必要はありません。

これらをうまく使うと,MATLAB函数ブロックで実装するのが面倒臭い処理,難しい処理を簡単に実装することができます。早速MATLAB系统ブロックのメリットを具体的に見ていきましょう。

MATLAB系统ブロックのメリット

1.ブロックブロックダイアログからパラメータパラメータを设定

MATLAB SYSTEMブロックブロック,コードコードで使使パラメータの値ブロックダイアログからすることができます。

やり方はとても简単。

特性
k = 10;%パラメータパラメータののを定义
结束

このように,属性で変数を定义すると,MATLAB系统ブロックをダブルクリックしたときに开くダイアログにこの変数が表示され,値が変更できるようになります。

获得ブロックなどと同様,エディットボックスで変数名を指定すれば,MATLABのワークスペース上の変数の値を使うこともできます。

ただし,この変数をコード内で使用する場合,コードの書き方に注意が必要です。特性に定義した変数は、変数名だけではアクセスできません。”obj.変数名” という表記が必要です。

功能y = stepImpl (obj, u)
%的实现算法。计算y作为输入u和的函数
%离散状态。

y = obj。k * u;%obj.kという表记で,定义したパラメータkにに
结束

また、属性に定義した変数の値はコード中で変更できない点にも注意です。

2.内部状態を持つことができる

ブロックブロックの定理をmatlabのコードでで装していると,「「変値値次タイムステップのに使うため残して」」」状况にしばしば遭遇します.matlab函数ブロックでは「永続译码を使うことで変数の値がリセットされるのを防ぐことができますが,シミュレーション后に清除する必要がある,条件分岐などの追加コードが必要になりコードが见づらくなる,といった点で少し使いづらいです。これに対し,matlab systemsブロックブロックは,属性(Access = Private)を使うことで,简介に値を保存,使用するするます。

例えば例えば今の入入とをする处处ををみましょましょましょましょましょましょましょましょましょましょましょましょましょましょましょましょ変変をましょましょ変変変ましょましょましょましょましょましょましょましょましょましょましょましょましょましょましょましょましょましょましょましょましょましょましょましょましょましょましょましょましょ处处处ましょましょましょましょましょましょましょましょましょましょ处处ましょましょましょましょましょましょましょましょ处ましょう处处ましょましょううとととととととととととのとととと

特性(访问=私人)
UOLD = 0;
结束

ここで定義した変数の値は,シミュレーションが終わるまでリセットされません。そのため,過去の値を保存しておくことができます。この変数を使えば出力の計算も簡単に作れますね。

功能y = stepImpl (obj, u)
%的实现算法。计算y作为输入u和的函数
%离散状态。
y = u + obj.uold;%現在の入力と1つ前の入力を加算
obj。uOld = u;%次のタイムステップのために入力を保存
结束

前述の属性同様,こちらも”obj。“をつけなくてはいけない点に注意です。

3.シミュレーション开开时に1度だけ実行ししししたい単単

00

これに対し,MATLAB系统ブロックは步进资源关键词を使うことで実実ことができことができことができことができことができことができますますますことができことができファイルからパラメータを読み込みたいなりはからからパラメータようになりなりなりははからからのなりは

特性(访问=私人)
一种;
b;%パラメータ保存用の変数を用意
结束

功能setupimpl(obj)
%执行一次性计算,例如计算常量
data =负载(“myData.mat”);
obj.a = data.a;
obj。b = data.b;%初回初回のみデータファイルファイルからをを
结束

功能y = stepImpl (obj, u)
%的实现算法。计算y作为输入u和的函数
%离散状态。

y = obj.a * u + obj.b;%初回に読み込んだとbを使って出力を計算
结束

前述した属性(Access = Private)とと合书,初回时のみデータからからを読み込み読み込みてて出を计算の例です。。

4.コード生成に対応していない関数もそのまま使用可能

MATLAB函数ブロックはコード生成対応していない関数を使いたい場合は编码器。外在関数でコード生成対象外にしなければいけませんでした。これに対し,MATLAB系统ブロックはコード生成を行ってシミュレーションを実行する”コード生成“モードと,コード生成を行わずシミュレーションを行う”インタープリター型実行“モードを切り替えることができます。

そのため,インタープリター型実行を選択すれば,コード生成に対応していない関数を自由に使うことができます。コード生成に対応していない関数を使いたいだけなら解释MATLAB函数ブロックもありますが,こちらは状況に応じてコード生成もインタープリター実行も行えるのが大きなメリットですね。

ただし,インタープリターインタープリター実行モードに设定した场た设定した合书,Matlab System内内の定理はすべてすべてため,matlab,matlabとsim金宝appulinkの间でやり取りが発生物し,シミュレーションが遅くなる可性があることには注意しましょう。

おわりに

今回はMATLAB系统ブロックの簡単な使い方とメリットについての内容でした。金宝app仿真软件を使っていると,ついつい”ブロックのカスタマイズ= MATLAB函数ブロック”となってしまいがちですが,MATLAB系统ブロックだけに限らず,カスタムブロックにはそれぞれ適した場面があります(こちらも参照)ので,自分が装配ししたいはどのブロックがなのをを一度见直しみるととととかもしれませんかもしれませんみるみるできるかもしれませんかもしれませんよみるみるできるかもしれませんかもしれませんよみるとできるかもしれませんかもしれませんよみるみるできるかもしれませんかもしれません!

|

注释

要留下评论,请点击这里登录到您的MathWorks帐户或创建一个新帐户。