Main Content

使用计时器在 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 设计工具中启动此示例。

另请参阅

函数

属性

相关主题