使用计时器在 App 中周期性地绘制数据
此 App 说明如何在 App 设计工具中配置计时器以固定时间间隔执行任务。在此示例中,App 使用计时器每五秒从网站查询一次风速数据,然后绘制返回的值。
查询和绘制数据
在该计时器的一个回调函数中,为您要周期性执行的任务编写代码。创建一个名为 WindSpeedTimerFcn
的私有函数,并在函数头中包含两个额外的输入参量。第一个参量通常命名为 src
,用于指定触发回调的对象;第二个参量通常命名为 event
,用于为回调函数提供事件数据。传递这两个额外的输入参量会将该函数指定为一个计时器回调。有关计时器回调语法的详细信息,请参阅计时器回调函数。
在此回调中,添加代码以从某个网站中提取和处理数据。然后使用坐标区作为 plot
函数中的第一个参量来绘制数据。有关在 App 中绘图的详细信息,请参阅在 App 设计工具中显示图形。
function WindSpeedTimerFcn(app,src,event) % Get current time tnow = datetime("now","TimeZone","America/New_York"); % Get wind speed data from MathWorks weather station weatherdata = webread("https://api.thingspeak.com/channels/12397/feeds/last.json"); y = str2double(weatherdata.field2); % Plot data plot(app.UIAxes,tnow,y,"ob"); % Adjust x and y limits based on plotted data % ... end
创建计时器
创建一个每五秒运行一次 WindSpeedTimerFcn
函数的计时器。首先,创建一个名为 WindSpeedTimer
的私有属性来存储该计时器,以便您可以在 App 代码的不同部分修改和删除该计时器。从 App 设计工具的工具条的编辑器选项卡中选择属性,并选择私有属性选项。然后在 startupFcn
回调中,创建计时器并将其存储在 WindSpeedTimer
中。
app.WindSpeedTimer = timer("ExecutionMode","fixedRate","Period",5, ... "BusyMode","queue","TimerFcn",@app.WindSpeedTimerFcn)
此函数调用将计时器配置为每五秒重复运行一次。它还会在计时器繁忙时对计时器回调进行排队,并将函数 WindSpeedTimerFcn
指定为计时器运行时周期性执行的回调函数。使用函数句柄 @app.WindSpeedTimerFcn
将此函数与 timer
对象的 TimerFcn
回调相关联。MATLAB® 在函数执行时会自动将两个输入参量传递给回调函数,因此函数句柄不会显式引用任何输入参量。
启动和停止计时器
创建回调函数以在对应的按钮按下时启动和停止计时器。通过引用 app.WindSpeedTimer
属性来访问这些回调函数中的 timer
对象:
当按下 Start 按钮时,在回调函数中启动计时器(如果尚未运行)。
if strcmp(app.WindSpeedTimer.Running,"off") start(app.WindSpeedTimer); end
当按下 Stop 按钮时,停止回调函数中的计时器。
stop(app.WindSpeedTimer);
有关回调的详细信息,请参阅 App 设计工具中的回调。
在 App 关闭时删除计时器
为了优化 App 性能,请通过创建关闭请求回调函数以在 App 关闭时删除计时器。首先,通过右键点击组件浏览器中的 UI 图窗并在上下文菜单中选择回调 > 添加 CloseRequestFcn 回调,为 App 添加一个 CloseRequestFcn
回调。然后在此 CloseRequestFcn
回调中,停止计时器。
stop(app.WindSpeedTimer);
最后,删除计时器和图窗。
delete(app.WindSpeedTimer); delete(app);
要查看和运行完全编码的 App,请在 App 设计工具中启动此示例。