標準ブロックのブロックパラメータの値を Constant ブロックなど外部ブロックで設定することは可能でしょうか?
12 views (last 30 days)
Show older comments
MathWorks Support Team
on 25 Oct 2013
Answered: MathWorks Support Team
on 25 Oct 2013
標準ブロックの Function Block Parameters (ブロックのパラメータ設定ウィンドウ)の値、例えば Switch ブロックの閾値、を Constant ブロックなど外部ブロックで設定したいと考えています。可能かどうか教えてください。
Accepted Answer
MathWorks Support Team
on 25 Oct 2013
標準ブロックのブロックパラメータで設定するものがチューナブルパラメーターであれば、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 Comments
More Answers (0)
Categories
Find more on モデル、ブロックおよび端子のコールバック in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!