MATLAB Answers

Simulinkブロ​ックの値を取得する ​Matlab スクリプト

25 views (last 30 days)
A.K
A.K on 3 Apr 2019
Commented: A.K on 7 Jan 2020 at 0:21
Simulink model に変更を加えず、任意のブロックの値を取得したいです。(Simuoutは追加しない)
そのためのMatlabスクリプトの書き方を教えてください。

  3 Comments

madhan ravi
madhan ravi on 3 Apr 2019
Display blockに送られてくる値(プロテクトのかかった処理の結果)を取得したいのですが、get_paramdだとうまくいきません。
get_param('simulinkmodel/Fcn','Display')
Display block does not have a parameter named 'Display'というエラーになってしまいます。
最後の引数はブロック名ではない?
stozaki
stozaki on 31 Dec 2019 at 20:25
ご質問の意図として、2通り考えられるのですが、どちらでしょうか?
  1. 任意のブロックのブロックパラメータ(ブロックの設定値)をMATLABプログラムで取得したい
  2. 任意のブロックの出力信号の値を、MATLABプログラムで取得したい。
(Simuoutは追加しない)と記載があったので、もしかして、シミュレーションを実行したときの任意のブロックの出力信号の値を取得されたいのかな?と思いました。
いかがでしょうか?
A.K
A.K on 2 Jan 2020 at 1:05
stozaki様
コメントありがとうございます。やりたかったのは
1.任意のブロックのブロックパラメータ(ブロックの設定値)をMATLABプログラムで取得したい
です。
(すでに終わってしまいましたが、模範解答がなくまだ疑問のままなので続けさせていただきますと)
Simuoutが使えれば簡単なのですが、課題でSimulinkモデルは編集せずに、という条件がありました。なので、ブロック名称>パラメタ...というようにMatlabスクリプト内に記載すれば、そのブロックで計算した値(simulink内ではほかのブロックに計算結果が渡される)をMatlab上でも出力・保存できるのではないかと考えているのですが、方法が分からずにいます。
宜しくお願い致します。

Sign in to comment.

Accepted Answer

stozaki
stozaki on 6 Jan 2020 at 16:47
A.K様
コメントの返信を頂き、ありがとうございます。
少々長文となりますが、ご容赦ください。
まず、
  1. ブロックパラメータ
  2. そのブロックで計算した値(simulink内ではほかのブロックに計算結果が渡される)
について説明させて頂きます。その後、simoutを使わずに、シミュレーション結果を取得する例を挙げたいと思います。
1. ブロックパラメータとは
Simulinkブロックに設定したパラメータの値です。
例えば、simout(To WorksSpaceブロック)の場合、ブロックパラメータダイアログを開いて頂くと、次のようなブロックパラメータがあります。
・ 変数名
・ データ点の制限
・ 間引き
・ 保存形式
・ fiオブジェクトとして固定小数点データのログを記録する (チェックボックス)
・ サンプル時間
get_param関数は、上記パラメータの ”設定値” を取得します。
変数名(既定値はsimout)に対して、get_param(gcbh,'VariableName') を実行すると、文字列で 'simout'というプロパティの設定値が取得できます。
ここで、ポイントはget_paramで取得出来るのは、設定したパラメータの"設定値"ということです。
シミュレーション結果はブロックパラメータに直接格納はされていません。
2. そのブロックで計算した値
A.K様が仰られているのは、シミュレーション結果と認識致しました。
Simulinkでは、シミュレーション結果を、*設定した形式でMATLABベースワークスペースへ保存しています。
例として、添付モデルにて、Sine Waveブロックの出力信号を取得することをプログラムで実行してみました。
3つのファイルを同じフォルダに保存し、testScript.mを実行してみてください。
①. 収集するsinkブロックの変数名や設定値をset_param関数で設定します。
②. 添付モデルをシミュレーションして、Sine Waveブロックの出力信号を各種sinkブロック経由でベースワークスペースへ格納します。
③. ベースワークスペースへアクセスして、出力結果をリストしたり、グラフ化してみます。
testScript.m にはどの様な処理を実施しているのかを、コメントしておりますので、参考にしてください。
3. simout(To Workspaceブロック)を使わない方法
ここまでは、sinkブロックを使って、シミュレーション結果をMATLABワークスペースへ格納する方法をご紹介しましたが、当初やりたかったことが、「simoutを使わない」ということなので、信号ログを使用する方法を紹介致します。
こちらは、sinkブロックを設置せず、信号線にロギング設定してシミュレーション結果を取得する方法です。
testScript2.mを実行して頂ければ、ブロックを追加することなく、シミュレーション結果を取得できます。
信号ログの使用方法については、次のドキュメントを参考にして頂けると例題のプログラム例もあるので、より理解が深まるかと思います。
尚、モデルはR2019aを使って作成しています。
*設定した形式 : コンフィギュレーションセットや各種sinkブロック等で設定します。

  1 Comment

A.K
A.K on 7 Jan 2020 at 0:21
stozaki様
詳細にご説明いただきありがとうございます。理解しました。
とても分かりやすく、また、例までご提示いただき勉強になります。
重ねてお礼申し上げます。

Sign in to comment.

More Answers (1)

Hiroumi Mita
Hiroumi Mita on 8 Apr 2019
get_paramという関数を調べてください。
doc get_param
で出てくる get_param関数の説明の下の方に
モデル パラメーター
ブロック固有のパラメーター
がありますので、それを調べてもらえれば
任意のブロックの任意のパラメータを取ることができると思います。

  0 Comments

Sign in to comment.

Sign in to answer this question.