GUIDE アプリでのプロットの自動更新
メモ
GUIDE 環境は将来のリリースで削除される予定です。既存の GUIDE アプリは、GUIDE が削除された後も引き続き MATLAB® で動作しますが、GUIDE での編集はできません。
既存の GUIDE アプリを引き続き編集するには、将来の MATLAB リリースとの互換性維持に役立つ方法について、GUIDE の移行策を参照してください。新しいアプリを対話的に作成する場合は、代わりにApp Designer を使用したアプリ開発を参照してください。
この例では、プリビルドの GUIDE アプリを確認および実行する方法を説明します。このアプリは、表面プロットを表示し、ランダム ノイズを表面に追加して、プロットを一定の間隔で更新します。アプリには 2 つのボタンが含まれています。1 つはプロットへのランダム ノイズの追加を開始するボタンで、もう 1 つはノイズの追加を停止するボタンです。プロットの下のスライダーで、更新間隔を 0.01 ~ 2 秒の間に設定できます。
例を開いて実行
アプリを開いて実行します。スライダーを移動して更新間隔を 0.01 ~ 2.0 秒に設定します。次に、[Start Randomizing] ボタンをクリックして、プロットした関数へのランダム ノイズの追加を開始します。[Stop Randomizing] ボタンをクリックして、ノイズの追加を停止し、プロットを更新します。
コードの確認
GUIDE で、[エディター] ボタン をクリックしてコードを表示します。
エディター ウィンドウの上部付近で、 [移動] ボタンを使用して、以下で説明する関数に移動します。
ex_guide_timergui_OpeningFcn
アプリが開き、実行が開始されると、関数 ex_guide_timergui_OpeningFcn
が実行されます。このコマンドは、timer
オブジェクトを作成し、それを handles
構造体に格納します。
handles.timer = timer(... 'ExecutionMode', 'fixedRate', ... % Run timer repeatedly. 'Period', 1, ... % Initial period is 1 sec. 'TimerFcn', {@update_display,hObject}); % Specify callback function.
update_display
です。これはローカル関数として定義されます。update_display
指定された timer
周期が経過すると、関数 update_display
が実行されます。この関数は、Surface
オブジェクトの ZData
プロパティの値を取得し、ランダム ノイズを追加します。次に、プロットを更新します。
handles = guidata(hfigure); Z = get(handles.surf,'ZData'); Z = Z + 0.1*randn(size(Z)); set(handles.surf,'ZData',Z);
periodsldr_Callback
スライダーを移動すると、関数 periodsldr_Callback
が実行されます。スライダー値を取得し、切り捨てることで、タイマー周期が計算されます。次に、スライダーの下にあるラベルが更新され、timer
オブジェクトの周期が更新されます。
% Read the slider value period = get(handles.periodsldr,'Value'); % Truncate the value returned by the slider. period = period - mod(period,.01); % Set slider readout to show its value. set(handles.slidervalue,'String',num2str(period)) % If timer is on, stop it, reset the period, and start it again. if strcmp(get(handles.timer, 'Running'), 'on') stop(handles.timer); set(handles.timer,'Period',period) start(handles.timer) else % If timer is stopped, reset its period. set(handles.timer,'Period',period) end
startbtn_Callback
関数 startbtn_Callback
は、タイマーがまだ実行されていない場合、timer
オブジェクトの start
メソッドを呼び出します。
if strcmp(get(handles.timer, 'Running'), 'off') start(handles.timer); end
stopbtn_Callback
タイマーが現在実行中の場合、関数 stopbtn_Callback
は timer
オブジェクトの stop
メソッドを呼び出します。
if strcmp(get(handles.timer, 'Running'), 'on') stop(handles.timer); end
figure1_CloseRequestFcn
コールバック figure1_CloseRequestFcn
は、アプリを閉じると実行されます。この関数は timer
オブジェクトが実行中の場合は停止して、timer
オブジェクトを削除した後に、Figure ウィンドウを削除します。
if strcmp(get(handles.timer, 'Running'), 'on') stop(handles.timer); end % Destroy timer delete(handles.timer) % Destroy figure delete(hObject);