刷新GUI图形并考虑刷新期间的GUI修改(文本,编辑,弹出的uicontrol)

问题描述:

我今天来到这里是因为我正在开发Matlab 2007b(带有GUIDE)的GUI,其中我控制一些电子设备(示波器,函数发生器=>频率,时基,触发器,很多东西),并且在这一个中,我将示波器屏幕上的曲线显示在我的GUI上显示在斧头上。示波器根据触发器刷新信号,并且我知道我不能在我的GUI上执行相同的操作(与触发期间相比,从示波器获取信号的时间相当长)。我打开我的GUI,启动一个无限的while循环,在该循环中我调用了刷新我的坐标轴上的曲线的函数(以便从示波器获取信号并更新坐标轴)以及每次刷新都是可能的。但是,我还希望用户可以始终与我的GUI交互:更改发生器上信号的频率,更改示波器的时基等。不幸的是(但是在逻辑上),当启动我的while循环时,我用我的GUI无法做任何事情。刷新GUI图形并考虑刷新期间的GUI修改(文本,编辑,弹出的uicontrol)

是否可以做到这一点?与我的GUI交互并调用与用户交互的对象关联的回调函数,哪里有执行的“背景”函数?有关信息,我刷新我的图表,通过以太网链接从oscilloscopa获取数据。

也许是关于对象的BusyAction和Interruptible值?或者,也许它只有一个计时器可能?我从来没有做过这样的事情,所以我在网上查找信息,但它似乎有点复杂。

只是一点点的建议可能是解锁我的差异。我事先感谢您的帮助。

如果我没有提供足够的信息,请不要犹豫告诉我。

PS:这里有一个我的图形用户界面和上面的斧头,其中有2条曲线,我想刷新每次都是可能的。

First tab of my GUI

的唯一可靠的方法来完成,这是用一个定时器定期轮询示波器和更新您的地块。然后,当计时器不执行时,任何人都可以与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在执行我的函数期间无法正确处理动作,甚至无法使用draw all GUI上的操作没有考虑到。因为我试着在两次执行计时器之间有一段“空闲”时间的情况下工作(如果计时器的周期高于我函数的执行时间),但我在这种情况下并不是半时间。 –

+0

那么你认为我卡在我的情况和计时器?或者是因为我没有正确管理定时器的某些属性或我的GUI对象(BusyAction,Interruptible,ExecutionMode等)?有关信息,我初始化我的计时器是这样的: timer('TimerFcn',{@toto,handles},'BusyMode','Queue','ExecutionMode','FixedSpacing','Period',0.001); –

+0

我再次做了测试。如果我将计时器周期设置为0.001毫秒,并在我的函数中添加一个暂停(3),则该函数每3秒正确调用一次,但我的GUI上的每个操作也正确放入队列列表中,但仅当调用相关回调时才会调用我完成了定时器(ctrl + C),所以我想像MATLAB把队列中的每一毫秒更新一次,而不是放下它们,不是吗?这就是为什么GUI对象的回调远在队列表中。 –