標準ブロックのブロックパラメータの値を Constant ブロックなど外部ブロ​ックで設定することは​可能でしょうか?

12 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2013 年 10 月 25 日
回答済み: MathWorks Support Team 2013 年 10 月 25 日
標準ブロックの Function Block Parameters (ブロックのパラメータ設定ウィンドウ)の値、例えば Switch ブロックの閾値、を Constant ブロックなど外部ブロックで設定したいと考えています。可能かどうか教えてください。

採用された回答

MathWorks Support Team
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 件)

カテゴリ

Help Center および File Exchangeモデル、ブロックおよび端子のコールバック についてさらに検索

タグ

タグが未入力です。

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!