2016-05-30 6 views
0

Matlab 2007b(GUIDE)でGUIを開発していますので、ファンクションジェネレータ=>周波数、タイムベース、トリガ、多くのもの)、この中で私はオシロスコープの画面にカーブ表示をして、それらをGUIのGUI上に表示します。オシロスコープはトリガに従って信号をリフレッシュしますが、私は自分のGUIで同じことをすることができないことを知っています(オシロスコープからの信号を取得する時間はトリガ期間とかなり長いです)。GUIグラフをリフレッシュし、リフレッシュ時のGUIの変更を考慮してください(テキスト、編集、ポップアップuicontrol)

私は次のことを望んでいます:私は私の軸を私の曲線をリフレッシュする関数を呼び出すので、オシロスコープからの信号を取得し、axを更新する無限のwhileループを起動します。毎回リフレッシュが可能です。しかし、私が望むのは、ユーザーがいつも私のGUIと対話できることです。ジェネレータでの信号の周波数を変更したり、オシロスコープのタイムベースを変更したりすることです。残念ながら(ただし論理的に)、whileループを起動すると、私のGUIでは何もできません。

できますか?私のGUIとやりとりし、コールバック関数を呼び出すと、ユーザーが対話するオブジェクトに関連付けられます。実行される「バックグラウンド」関数がありますか?詳細については、オシロスコパからのデータをイーサネットリンク経由で取得するグラフを更新します。

多分、オブジェクトのBusyActionとInterruptible値についてですか?それとも、タイマーでのみ可能なのでしょうか?私は前にそのようなことをすることはありませんので、私はインターネット上の情報を探しましたが、それはちょっと複雑なようです。

ちょっとしたアドバイスは、私を解くのに違いがあります。私はあなたの助けを事前に感謝します。

私は十分な情報を与えていない場合は、私に教えてください。

PS:ここでは、毎回リフレッシュしたい2つのカーブがある私のGUIと斧のイメージがあります。

First tab of my GUI

答えて

0

これを実現する唯一の確実な方法は、定期的にあなたのプロットをオシロスコープをポーリングし、更新するためにタイマーを使用することです。その後、タイマーが実行されていないときは、誰でもあなたのGUIのコントロールと対話できます。

t = timer('TimerFcn', @checkOscilloscope, 'ExecutionMode', 'FixedRate', 'Period', 0.1); 
start(t); 

function checkOscilloscope(tmr, evnt) 
    % Do your check of the oscilloscope here 

    % Update plots 

    % Force a redraw 
    drawnow 
end 
+0

まずはお返事ありがとうございます。 問題は、タイマの周期を1ms(最小)に設定し、最後の1秒間を何度か更新する機能を必要とするため、MATLABが関数の実行中にアクションを管理しないようにしました。 GUI上のアクションは考慮されていません。私はタイマの2つの実行の間に "自由な"時間があるときに働く(私の機能のexecutin時間よりもタイマーの周期が長い場合)あなたの解決策を試していますが、その場合は半分の時間ではありません。 –

+0

私は私のケースとタイマーにこだわっていると思いますか?それとも、私はタイマや私のGUIオブジェクト(BusyAction、Interruptible、ExecutionModeなど)のいくつかのプロパティを正しく管理していないからですか?詳細については、次のようにタイマーを初期化します。 タイマー( 'TimerFcn'、{@toto、handles}、 'BusyMode'、 'Queue'、 'ExecutionMode'、 'FixedSpacing'、 'Period'、0.001); –

+0

私はもう一度テストをしました。私のタイマー時間を0.001msに設定し、私の関数にpause(3)を追加すると、関数は3秒ごとに正しく呼び出されますが、GUIの各アクションもキューリストに正しく入れられますが、関連するコールバックは、私はタイマー(ctrl + C)を終了するので、私はMATLABをキューリストに入れて、毎ミリ秒ごとにそれらを落とすのではなく、いいえと思いますか?そのため、GUIオブジェクトのコールバックがキューリストの遠いところにある理由です。 –

関連する問題