2009-06-12 10 views
4

私は、MATLAB GUIとファイルにデータを書き込む別のアプリケーションを持っています。 MATLAB GUIでファイルを定期的にチェックし、変更されたときにGUIを更新したいと思います。バックグラウンドでMATLAB GUIを更新するには?

Javaでは、SwingUtils.Timer(sp?)オブジェクトを使用してこのようなことを行います。 MATLABにはタイマー機能がありますか?私はJavaクラスを作成し、それを仮定することができますが、デモのために素早く汚れたもの、好ましくは純粋なMATLABを望みます。

答えて

11

TIMER関数を使用して、MATLABでタイマーオブジェクトを作成できます。

timerObject = timer('TimerFcn',@myFcn,'ExecutionMode','fixedRate',... 
        'Period',10.0); 

タイマーを開始し、機能STARTSTOPを使用して停止されています。例えば、これはタイマーが開始された後、関数にmyFcn 10秒ごとを実行する必要があり、タイマーオブジェクトを作成しますまた、使用し終えたら、必ずDELETEで削除することを忘れないでください。 MATLAB documentationには、タイマーの使用に関する詳細情報があります。

GUIDE GUIで軸オブジェクトを更新したい場合は、この作業を行うために必要な「トリッキー」が追加されています。 GUIDEのaxesオブジェクトのHandleVisibilityプロパティを変更するか、明示的にハンドルを取得する必要があります。これを行うには、次のように(これはあなたのGUIDEで軸ウィンドウはGUIがaxes1と呼ばれる生成と仮定している)timerObject構造を変更します。

timerData.axes = handles.axes1; 
timerData.n = 1;     % some state needed for the plots. 
timerObject = timer('TimerFcn',@myFcn,... 
        'ExecutionMode','fixedRate',... 
        'Period',10.0,... 
        'UserData', timerData); 

、その後myFcnに、我々は、Axesオブジェクトを参照する必要があります。具体的には、

function [] = myFcn(timerObj, event) 
    timerData = get(timerObj, 'UserData'); 
    plot(timerData.axes, (1:n)/n, sin(20*2*pi*(1:n)/n)); 
    line((1:n)/n, cos(20*2*pi*(1:n)/n, 'Parent', timerData.axes); 
    timerData.n = timerData.n + 1; 
    set(timerObj, 'UserData', timerData); 
end 
関連する問題