MATLAB Appdesigner开发独立桌面App全流程(二):以实时时间显示为例介绍Timer和StartupFcn的使用以及try catch抛出错误 您所在的位置:网站首页 实时时间显示时间 MATLAB Appdesigner开发独立桌面App全流程(二):以实时时间显示为例介绍Timer和StartupFcn的使用以及try catch抛出错误

MATLAB Appdesigner开发独立桌面App全流程(二):以实时时间显示为例介绍Timer和StartupFcn的使用以及try catch抛出错误

2024-06-09 16:22| 来源: 网络整理| 查看: 265

1.以实时显示时间为例简单介绍Timer的使用

根据目前所了解到的资料,MATLAB调用多线程较为麻烦,并且类似parfor等语法只适用于大规模运算,而不适合两个独立的、需要并行的任务。这时,我们就需要使用Timer变量来实现多线程的效果。在这一小节中,我们以最基本的功能——实时显示当前时间——为例,介绍Timer变量的使用。显而易见,我们需要显示时间的功能代码自主运行,隔一定时间获取当前时间并显示,且不干扰其他任务的运行。

1.首先,在properties中添加一个定时器变量:

properties (Access = public) ser; % Serial serialname; model; % To store the model data baud = 115200; % baud rate datetimer; % To show time SerialData; end

我们使用datetimer创建一个Timer变量,来实现实时显示时间的功能。

2.在常用控件中找到“标签”控件,将其拖拽进画布,并在控件树中将其命名为“ShowTimeLabel”: 在这里插入图片描述 注意,蓝色框框出的Label的属性“Text”即为该标签显示在画布上的内容。在Timer回调函数中,我们需要调用这一属性并给它赋值,实现显示时间的效果。

3.关于Timer变量的创建和回调函数的编写,我将放在下一节StartupFcn回调进行说明。

2.StartupFcn回调(以实时显示时间为例,结合第1节)

有些功能我们需要在App启动的时候就将其开启,例如实时显示时间的功能。这时,我们需要使用StartupFcn回调函数来实现。

1.添加StartupFcn回调:在控件树中找到最高层级(也就是我们的.mlapp工程),右键单击,找到“回调”,点击“添加StartupFcn回调”,如下图所示: 在这里插入图片描述 2.转到代码视图: 在这里插入图片描述 在这个白色代码块里,我们就可以添加我们的功能代码了。

3.创建定时器变量并开启定时器

首先,我们需要创建定时器变量,并配置它的一些基本属性。在StartupFcn回调函数中,添加如下代码:

% Code that executes after component creation function startupFcn(app) % 删除现存的定时器变量。这个函数也可以用来关闭定时器 delete(timerfind); % 配置并开启显示时间的定时器 app.datetimer = timer; % 开启定时器代码运行后,延时1s再调用回调函数 app.datetimer.StartDelay = 1; % 定时器每隔1s调用一次回调函数 app.datetimer.Period = 1; % 定时器的工作模式,读者可参考官方文档查阅不同模式的区别。此模式下,定时器会循环运行 app.datetimer.ExecutionMode = 'fixedRate'; app.datetimer.BusyMode = 'queue'; app.datetimer.TimerFcn = @(~,~) app.datetimer_handler; start(app.datetimer); end

4.然后在MATLAB Appdesigner开发独立桌面App全流程(一)中第7节我们所添加的methods块中,添加一个公共函数:

function datetimer_handler(app) CT = clock; % Current Time 当前时间 set(app.ShowTimeLabel,"Text",['当前时间:',... num2str(CT(1)),'年',num2str(CT(2),"%02d"),'月',num2str(CT(3),"%02d"),'日 ',... num2str(CT(4),"%02d"),': ',num2str(CT(5),"%02d"),': ',num2str(CT(6),"%02.f")]); end

这个函数就是定时器变量需要调用的回调函数了。在上面的代码块中,关于时间调用使用了clock函数,并将其转化成字符串显示在我们在第1节创建的标签控件当中。num2str函数的第二个输入参数规定了显示形式和位数。关于这两个函数的使用,读者可以参考官方文档。

5.运行App,效果如下:

在这里插入图片描述 可以看到,在我们放置标签的位置,显示出了当前的时间。

同理,以此类推,我们可以使用定时器实现更加复杂的功能,比如多个后台任务的调度等。读者可以根据自己的需要,添加相应的定时器变量和对应的回调函数,以实现自己的项目需求。

3.try catch 抛出错误

考虑这样一种情况:当我们的App打包好了并正常运行起来之后,在使用过程中,因为操作失误而出现报错;或者,干脆就是因为代码存在一些在测试环境中没有检查到的bug。这个时候,我们又该如何debug呢?毕竟这时不会再有MATLAB命令行来帮助我们了。这个时候,我们就需要引入try catch来将这个错误抛出来供我们判断。

1.将MATLAB Appdesigner开发独立桌面App全流程(一)中第8节“打开串口”按钮的回调函数修改为如下的结构:

% Button pushed function: OpenSerialButton function OpenSerialButtonPushed(app, event) try serName = app.serialname(app.SeriallistDropDown.Value); app.baud = app.BaudRateDropDown.Items{app.BaudRateDropDown.Value}; app.ser = serialport(serName,str2double(app.baud)); %% 清除缓冲区 flush(app.ser); %% 设置中断回调 configureTerminator(app.ser,"CR/LF"); configureCallback(app.ser,"terminator",@app.SerialReceive_Callback); catch ME report = getReport(ME); uialert(app.UIFigure,report,'Error Message','Interpreter','html'); end end

这样,我们就可以将错误信息以弹窗的形式显示在图窗上。运行App,效果如下所示:

在这里插入图片描述 未完待续…



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有