対話型の応答プロット更新を伴う GUI の作成
この例では、GUI を作成して、対話型の入力に応じて変化する Control System Toolbox™ 応答プロットを表示する方法を示します。
この例の GUI は、固定された固有振動数をもつ 2 次動的システムのステップ応答を表示します。GUI にはシステムの減衰比を設定するスライダーが用意されています。スライダーの設定を応答プロットに反映させるには、スライダーのコールバックを定義しなければなりません。このコールバックは updateSystem
コマンドを使用して、スライダー設定の変更に応じてプロットを新しいシステム データで更新します。
2 次動的システムの初期値を設定し、システム モデルを作成します。
zeta = .5; % Damping Ratio wn = 2; % Natural Frequency sys = tf(wn^2,[1,2*zeta*wn,wn^2]);
GUI の Figure を作成し、ステップ応答を表示するための座標軸を構成します。
f = figure; ax = axes('Parent',f,'position',[0.13 0.39 0.77 0.54]); h = stepplot(ax,sys); setoptions(h,'XLim',[0,10],'YLim',[0,2]);
スライダーとスライダー ラベルのテキストを Figure に追加します。
b = uicontrol('Parent',f,'Style','slider','Position',[81,54,419,23],... 'value',zeta, 'min',0, 'max',1); bgcolor = f.Color; bl1 = uicontrol('Parent',f,'Style','text','Position',[50,54,23,23],... 'String','0','BackgroundColor',bgcolor); bl2 = uicontrol('Parent',f,'Style','text','Position',[500,54,23,23],... 'String','1','BackgroundColor',bgcolor); bl3 = uicontrol('Parent',f,'Style','text','Position',[240,25,100,23],... 'String','Damping Ratio','BackgroundColor',bgcolor);
減衰比スライダーが動かされるとステップ応答プロットを更新するように、コールバックを設定します。
b.Callback = @(es,ed) updateSystem(h,tf(wn^2,[1,2*(es.Value)*wn,wn^2]));
このコードは、無名関数にスライダー (b
として識別) のコールバックを設定します。この無名関数の入力引数 es
と ed
は、スライダーが使用される際に自動的にコールバックに渡されます。es
はスライダーを表す uicontrol
のハンドル、ed
はスライダーが自動でコールバックに渡すイベント データ構造です。これらの変数をワークスペースで定義したり、その値を設定したりする必要はありません (UI コールバックについての詳細は、グラフィックス オブジェクトのコールバックの作成を参照してください)。
コールバックは関数 updateSystem
の呼び出しであり、プロットされた応答データは、新しい伝達関数から導出された応答に置き換えられます。コールバックはスライダー データ es.Value
を使用して、減衰比がスライダーの現在の値である 2 次システムを定義します。
これでコールバックが設定されたので、スライダーを動かします。表示されるステップ応答が予想どおりに変わります。