MATLAB中定时器Timer的使用

it2025-12-17  6

使用方法

具体参考官方文档:

传送门1-timer 类传送门2-计时器回调函数传送门3-使用计时器安排命令的执行

四种定时模式:

sigleShot:只执行一次,故Period属性不起作用,其他模式都可以执行多次

fixedDelay:上一次TimerFcn执行完毕时刻到下一次TimerFcn被加入队列时刻之间的间隔

fixedRate:上一次开始执行到下一次被加入队列之间的间隔

fixedSpacing:前后两次被加入到执行语句队列时刻之间的间隔

法1:

timer_id = timer;: timer_id.StartDelay = 1.0; timer_id.Period = 1.0; timer_id.ExecutionMode = 'fixedSpacing'; timer_id.TimerFcn = @timer_handler; start(timer_id); function timer_handler(~,~) % user code end

注意:MATLAB是解释性语言,如果定时器运行中继续启动仿真,会导致同样功能的新定时器启动,且ID号不同属于不同线程!所以重新仿真前应该停止所有定时器并删除!

法2:

t = timer('StartDelay',1,'TimerFcn',@t_TimerFcn,'Period',2,'ExecutionMode','fixedRate'); start(t) function t_TimerFcn(hObject,eventdata) % user code end

应用实例

案例1:

% 代码来源:https://zhuanlan.zhihu.com/p/136570344 % 启动定时器 clear all; clc; % 删除现有的定时器,重新创建一个定时器 %stop(timerfind); %delete(timerfind); timer_id = timer; timer_id.StartDelay = 1.0; timer_id.Period = 1.0; % 周期性执行,fixedSpacing模式 timer_id.ExecutionMode = 'fixedSpacing'; timer_id.TimerFcn = @timer_handler; %启动定时器 start(timer_id); function timer_handler(~,~) persistent counter; if isempty(counter) counter = 0; end fprintf(1,'定时器回调=%d\n',counter); counter = counter+1; end

案例2:

% 代码来源:https://blog.csdn.net/superjunenaruto/article/details/54614569 %% 定时器 % 函数说明:(命令行输入) % t_test:创建一个定时器对象,从 0 开始计数(每 2 秒) % t_test('stop'):停止计数,删除定时器 function t_test(varargin) global num num1 num2 if nargin == 0 % 直接命令行输入 t_test 表示:创建一个定时器对象,开始定时 num = 0; num1 = 100; num2 = 1000; delete(timerfind) % 删除现有的定时器,重新创建一个定时器 t = timer('StartDelay',1,'TimerFcn',@t_TimerFcn,'Period',2,'ExecutionMode','fixedRate'); t1 = timer('StartDelay',1,'TimerFcn',@t_TimerFcn1,'Period',2,'ExecutionMode','fixedDelay'); t2 = timer('StartDelay',1,'TimerFcn',@t_TimerFcn2,'Period',2,'ExecutionMode','fixedSpacing'); start([t,t1,t2]) elseif ((nargin == 1) && strcmp(varargin{1},'stop')) stop(timerfind) delete(timerfind) else end end %% 回调函数 function t_TimerFcn(hObject,eventdata) global num disp(num2str(num)) num = num + 1; end function t_TimerFcn1(~,~) global num1 disp(num2str(num1)) num1 = num1 + 1; end function t_TimerFcn2(~,~) global num2 disp(num2str(num2)) num2 = num2 + 1; end
最新回复(0)