Main Content

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] ボタンをクリックして、ノイズの追加を停止し、プロットを更新します。

コードの確認

  1. GUIDE で、[エディター] ボタン をクリックしてコードを表示します。

  2. エディター ウィンドウの上部付近で、 [移動] ボタンを使用して、以下で説明する関数に移動します。

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.
timer のコールバック関数は 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_Callbacktimer オブジェクトの 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);

関連するトピック