標準ブロックのブロックパラメータの値を Constant ブロックなど外部ブロックで設定することは可能でしょうか?
12 ビュー (過去 30 日間)
古いコメントを表示
MathWorks Support Team
2013 年 10 月 25 日
回答済み: MathWorks Support Team
2013 年 10 月 25 日
標準ブロックの Function Block Parameters (ブロックのパラメータ設定ウィンドウ)の値、例えば Switch ブロックの閾値、を Constant ブロックなど外部ブロックで設定したいと考えています。可能かどうか教えてください。
採用された回答
MathWorks Support Team
2013 年 10 月 25 日
標準ブロックのブロックパラメータで設定するものがチューナブルパラメーターであれば、MATLAB 関数と併用して、外部ブロックなどにより設定できます。
R2011a 以降では、MATLAB Function ブロックを使います。MATLAB Function のパラメータで値を更新するための関数を指定し、指定した関数の内部で関数 set_param を用いて更新処理を記述します。
R2011a より前のバージョンの場合、Embedded MATLAB Function ブロックを使用します。
関数 set_param を使うことで Switch など標準ブロックの Function Block Parameter の値を外部から設定します。set_param の使い方に関して、 sample_a.mdl を参照してください。MATLAB コマンドプロンプト上、
>> ws_val = 1; % 任意の値
>> open_system('example_a')
の実行でモデルが開きますので、モデルウィンドウでシミュレーションを開始し、下記コマンドを実行します。
>> ws_val = 3; % 上記の設定と異なる値
>> set_param('example_a', 'SimulationCommand', 'update')
これでモデルの値が更新されることが確認できます。
同じように example_aa.mdl の場合、Switch ブロックの閾値として ws_val を設定すれば、例えばシミュレーション最中に
>> ws_val = -1; % 上記の設定と異なる値
>> set_param('example_aa', 'SimulationCommand', 'update')
を実行することで値を更新することができます。
また、set_param によりシミュレーションの値の更新を自動的に行うことも可能です。
そのため、example_b.mdl 同様に MATLAB Function ブロックを利用します。今度は
>> ws_val = 1; % 任意の値
>> open_system('example_b')
でモデルを開き、シミュレーション実行中の状態で
>> ws_val = 3; % 上記の設定と異なる値
とすれば変更された値はモデル上で反映されること確認できます。
なお、MATLAB Function はシミュレーション開始前に実行ファイルが生成されますので、事前に mex -setup によりコンパイラーを設定する必要があります。
上記以外でも、Switch ブロックを用いたサンプル例 example_c.mdl, example_d.mdl をお試しください。
0 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で モデル、ブロックおよび端子のコールバック についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!