Simulinkブロックの値を取得する Matlab スクリプト
11 ビュー (過去 30 日間)
古いコメントを表示
Simulink model に変更を加えず、任意のブロックの値を取得したいです。(Simuoutは追加しない)
そのためのMatlabスクリプトの書き方を教えてください。
3 件のコメント
stozaki
2019 年 12 月 31 日
ご質問の意図として、2通り考えられるのですが、どちらでしょうか?
- 任意のブロックのブロックパラメータ(ブロックの設定値)をMATLABプログラムで取得したい
- 任意のブロックの出力信号の値を、MATLABプログラムで取得したい。
(Simuoutは追加しない)と記載があったので、もしかして、シミュレーションを実行したときの任意のブロックの出力信号の値を取得されたいのかな?と思いました。
いかがでしょうか?
採用された回答
stozaki
2020 年 1 月 6 日
A.K様
コメントの返信を頂き、ありがとうございます。
少々長文となりますが、ご容赦ください。
まず、
- ブロックパラメータ
- そのブロックで計算した値(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 件)
Hiroumi Mita
2019 年 4 月 8 日
get_paramという関数を調べてください。
doc get_param
で出てくる get_param関数の説明の下の方に
モデル パラメーター
ブロック固有のパラメーター
がありますので、それを調べてもらえれば
任意のブロックの任意のパラメータを取ることができると思います。
0 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!