在Matlab中使用定时器对象调度程序的执行
计时器是一种自动机制,用于在预定的时间或间隔内激活一个设备或一个进程。Matlab提供了可以用来执行不同命令的Timer对象。
在这篇文章中,我们将讨论如何创建一个定时器对象,启动它,并指定应该执行的进程,直到时间结束。
我们还将学习如何停止和删除内存中的Timer对象。
计时器有助于记录程序的运行情况。因此,在故障排除过程中,它是至关重要的。
计时器也可以用于任务的实时执行,以及建立提醒功能。
前提条件
在本教程中,你需要具备以下条件
- 安装了[Matlab]。
- 对[Matlab]有一些基本的了解。
目的
在本教程中,我们将讨论Matlab中的定时器对象及其功能。
创建定时器对象
这是一个制作定时器对象的过程,它将被用于执行命令。
计时器对象可以支持各种属性。使用timer 函数来创建一个定时器。
t = timer %creating timer object
使用定时器对象显示消息
为了显示消息,我们首先创建定时器工具,然后在定时器属性中添加应该显示的文本。
这里,我们将创建一个定时器对象,在5 秒后显示消息 "大家好!"。
t = timer('Timerfcn','stat=false;disp(''Hello everyone!'')','StartDelay',5);
start(t) %starts the timer
stat=true;
while(stat==true)
end
上面的代码也可以用于在显示最后的预期信息之前创建一个时间延迟。
例如,我们将创建一个定时器对象,在显示最后的信息 "STOP!"之前,以1秒的间隔显示3次警告信息。
t = timer('Timerfcn','stat=false;disp(''STOP!'')','StartDelay',3) %
start(t) %starts the timer
stat=timer;
while(stat==true)%timer object condition
disp('WARNING') %delay massege
pause(1) %delay interval period
end
寻找定时器对象的属性
计时器对象的属性给出了关于状态和控制方面的信息。
为了检索定时器属性,我们使用get 函数,如下图所示。
t = timer; %creating timer
set(t,'ExecutionMode','fixedRate','BusyMode','drop','period',1); %Assigns values of timer object properties
t.TimerFcn = 'disp(''loading...'')' %TimerFcn callback function
start(t) % starts the timer
stop(t) % stops the timer
get(t) % finding timer properties
delete(t) % deleting the timer object
建议在使用后删除定时器对象以节省内存。
我们使用delete(t) 方法来删除定时器对象。当这些对象没有被删除时,它们会在执行其他函数时引起错误。
set(t) 方法显示了所有可以被赋值的定时器对象属性。
t = timer; %creating a timer
set(t) %for viewing list of settable timer properties
计时器属性
定时器对象属性分为四大类,即。
- 回调函数属性。
- 计时属性。
- 标记属性。
- 只读属性。
回调函数属性
回调属性由Fcn 函数识别。它们可以被指定为vectors,string scalar,function handle, 或cell arrays 。
以下是回调函数属性。
-
TimerFcn- 这个回调函数必须在启动定时器之前定义。它执行的事件取决于它的定义方式;无论是作为向量、字符串标量、函数句柄,还是单元格数组。 -
StartFcn- 这个函数用于启动回调函数。 -
StopFcn- 该函数用于停止定时器回调函数。它也被称为定时器停止方法。 -
ErrorFcn- 这是时间错误回调函数。如果程序的代码有错误,该函数会被执行,然后 ,调用 。errorfcnStopFcn
计时属性
计时属性大多是由一个数字标量定义的。它们包括以下功能。
-
Period- 这是在程序执行之间指定的延迟时间。延迟时间的单位通常是秒。 -
StartDelay- 这是定时器开始和执行第一个程序之间的延迟期。 -
TaskToExecute- 这个函数指定了程序的执行次数,通常以数字为单位设置。 -
BusyMode- 这个函数用来指定在完成前一个定时器方法之前,定时器应该执行的动作。当定时器对象运行时, 成为只读,意味着它不能被编辑。BusyMode
下面的例子显示了同一程序中的回调函数和定时属性代码。
t = timer;
set(t,'ExecutionMode','fixedRate','BusyMode','drop','period',1);
t.startfcn = 'disp('' the start function'')'; %startfcn
t.TasksToExecute = 5; %TasksToExecutefcn
t.Timerfcn = 'disp(''Hello everyone'')'; %Timerfcn
t.stopfcn = 'disp(''the stop function'')'; %stopfcn
start(t) %starting timer object
标注属性
这些属性通过为定时器提供定义的字符来标记它。它们包括
-
Name- 它为定时器提供了一个名称,可以是一个字符向量,也可以是一个字符串标量。例如, 。t = timer('Name','MyfirstTimer') -
Tag- 它被写成一个字符向量或一个字符串标量。例如, 。t1 = timer('Tag','TimerTafunction') -
Object visibility- 该函数用于指定定时器对象的可见性,可以是 或 。onoff -
Timerfind函数不提供可见性被关闭的定时器对象的信息,但这种对象仍然有效。例如, 。t = timer('ObjectVisibility','off') -
UserData- 这个函数为用户数据提供了一个字段,支持任何有效的Matlab数据。
只读属性
这些属性不能被编辑。这些值取决于计时和回调函数属性值。它们包括
-
AveragePeriod- 这是命令执行之间的平均时间。它以秒为单位指定为一个数字标量。 -
InstantPeriod- 这是最后两个命令执行之间的时间,它们是以秒为单位的数字标量。 -
Running- 这是一个活动回调函数的指标,它可以被指定为 或 。onoff -
TaskExecuted- 这是定时器对象被执行的次数。是以数字的形式给出。 -
Type- 表示对象的类型,用一个字符向量表示。
从上一个程序中,我们可以使用get(t) 和set(t) 函数查看定时器属性。
寻找内存中所有可见的定时器对象
所有存在于内存中的可见定时器对象都可以用timerfind 或timerfindall 函数找到。
这可以通过创建三个不同的定时器对象,即a,b, 和c ,然后用timerfindall 函数找到它们来证明。
a = timer;
b = timer;
b = timer;
out = timerfind
指定定时器对象的启动时间
计时器的指定启动时间可以用startat 函数来设置。
该函数使人们可以预先确定一个特定的日期、小时、分钟和秒。
startat 函数的语法是(t, specified firing time) 。
启动时间被指定为Matlab的串行时间或格式化的日期文本字符串,其语法为startat(t,y,m,d,h,m,s) 。
例如,我们写一个程序,在5秒后显示 "现在已经5秒了 "的信息。
使用的代码如下。
t = timer('TimerFcn','disp(''it has been 5 seconds now)');
ftime = 5/(60^2*24); %5 seconds in serial time
startat(t,now+ftime);
删除内存中所有现有的定时器对象
为了删除内存中现有的所有定时器对象,我们首先使用timerfindall 方法找到所有存在的定时器。
然后我们使用delete(timerfindall)函数删除这些定时器。
delete(name) 函数也可以用来删除单个定时器对象。
结论
计时器对象有助于自动监控程序,并在特定的设定时间执行它们。它们还可以确保程序不会运行太长时间。
我们可以在创建提醒程序、显示信息和初始化不同进程时使用定时器。