如何停止定时器函数在指定的时间吗?

9的观点(30天)
你好. .
我用一个计时器函数来捕获图像文件自动连续在一个固定利率,在指定的时间。我使用 startat 函数来做这个工作,但是,我的问题是,我无法停止在指定的时间我想要的。相反,我使用 暂停 。然而,一旦我停顿了一下程序,整个程序暂停,它从不执行下一个功能。
谁能帮我吗?
这里有一些我的部分代码:
dstart = {“07:30时”“07:32”“07:34”“12”“13:30”“维基”“18:00”“7:30”};
dfinish = {‘07:31‘07:33 ' ' 07:35 ' ' 13:25 07:31的‘16:25’‘09:01’‘20:55};
%这里captureimage函数来捕获图像使用imaq工具箱。
t1 =计时器(“TimerFcn”,“captureimage”,“ExecutionMode”,“FixedRate”);
tp1 =计时器(“TimerFcn”,“暂停”);%我无法停止计时器fcn这就是为什么我使用暂停
%捕获开始在07:30AM持续7秒
startat (t1, dstart (1,1));
%,正是07:31AM时程序暂停
startat (tp1 dfinish (1,1));
我怎样才能停止计时器函数不使用暂停,因为暂停计时器功能,而整个项目停顿。
我将非常感谢你的帮助。
谢谢你!

接受的答案

布雷特Shoelson
布雷特Shoelson 2011年2月4日
肯特,为什么不建造的回调比较当前时间与所需的停止时间(帮助)?然后,如果当前时间> = desiredStopTime,然后发出停止命令。欢呼,布雷特

更多的答案(2)

1月
1月 2011年2月4日
%创建倍DATENUM向量:
TimerData。开始=地板(现在)+ datenum (
{“07:30时”“07:32”“07:34”“12”“13:30”“维基”“18:00”“7:30”});
TimerData。完成=地板(现在)+ datenum (
{‘07:31‘07:33 ' ' 07:35 ' ' 13:25 07:31的‘16:25’‘09:01’‘20:55});
TimerData。指数= 1;
T =计时器(“TimerFcn”@myTimerFcn,
“ExecutionMode”,“FixedRate”,“时间”,7.0,
“用户数据”,TimerData);
startat (T, TimerData.start (1));
% - - - - - -计时器功能:
函数myTimerFcn (TimerH EventData)
TimerData =得到(TimerH,“用户数据”);
%停止时间到了吗?
如果现在> = TimerData.finish (TimerData.index)
停止(TimerH);
TimerData。在dex = TimerData.index + 1;
上次%达到?
如果TimerData。在dex > length(TimderData.start)
删除(TimerH);%的清理
其他的%重启计时器在下次开始时间:
集(TimerH,“用户数据”,TimerData);% EDITED2
startat (TimerH TimerData.start (TimerData.index));
结束
返回;%编辑
结束
%执行行动——插入代码:
capturimage
% - - - - - -结束:定时器功能
好运!
4评论
1月
1月 2011年2月4日
@Kent: StartFcn和StopFcn执行,当定时器启动或停止,但他们不触发启动或停止。
是的,你需要开始由STARTAT计时器。我在代码中插入它。
我在代码中插入一个返回去改善它。请再试一次。

登录置评。


肯特Cabarle
肯特Cabarle 2011年2月5日
%,实际上,这是我的主要代码。
函数kxlsforum
%分配
(num dset) = xlsread (“class.xls”);% 9 x7 skedule
一天= datestr(现在,“dddd”);%确切日期
t0 =计时器(“TimerFcn”,“kaptur1camtemplate”,“ExecutionMode”,“SingleShot”);
dk = {“1”“2”“3”“4”的5 ' 6 ' ' 7 ' ' 8 '};
%分配和检查日期和时间
n = 7%检查Mon -坐
k = dset (1, n);% disp Mon-Sat等,与实际的一天
c = strcmp (k,一天);
如果c = = 1
fdate = datestr(现在,“mmddyyyy”);
mkdir (fdate);
disp (“今天”);disp(天);
disp (“捕获图像模板. .”);
开始(t0);% 1捕获图像作为模板
disp (“捕获映像模板”)
p = 1:8
德(1,p) = isempty (dset {p + 1, n});% 0 -占领
开关德(p)% 1 -空
情况下0
mkdir (fdate dk {1, p});
结束
结束
disp (de);
打破%打破FOR循环
结束
结束
f =找到(~德);%找到第一课堂时间和最后一节课的时间
迷你= min (f);
马克西= max (f);
TimerData。开始=地板(现在)+ datenum ({“07:30时”“07:34”“07:37”“12”“13:30”“维基”' 18:00 ' ' 7:30 '});
TimerData。完成=地板(现在)+ datenum ({‘07:31‘07:35 ' ' 07:38 '‘13:25‘07:31 ' ' 16:25 ' ' 09:01 ' ' 20:55 '});
TimerData。指数= 1;
T =计时器(“TimerFcn”@myTimerFcn,“ExecutionMode”,“FixedRate”,“时期”,7.0,“用户数据”,TimerData);
开始(T)%我使用这是执行计时器
这是计时器函数(单独的文件)
% - - - - - -定时器函数:函数myTimerFcn (TimerH, EventData) TimerData = (TimerH,“用户数据”);%停止时间到了吗?
TimerData。开始=地板(现在)+ datenum({07:30时的“07:34”“07:37”“12”“13:30”“维基”“18:00”的7:30});TimerData。完成=地板(现在)+ datenum ({“07:31”“07:35”“07:38”“13:25”“07:31”“16:25”“09:01”“20:55”});TimerData。指数= 1;
如果现在> = TimerData.finish (TimerData.index)
停止(TimerH);
TimerData。在dex = TimerData.index + 1;
上次%达到?
如果TimerData。在dex > length(TimderData.start)
删除(TimerH);%的清理
其他的%重启计时器在下次开始时间:
startat (TimerH TimerData.start (TimerData.index));
结束
返回;
结束
%执行行动——插入代码:
kaptur1
结束
% - - - - - -结束:定时器功能
在主函数中,我使用(T)开始执行计时器,代替startat . .(我使用一个单独的函数kaptur1camtemplate捕捉单个图像是图像处理的基础。(不包括)
在计时器功能,我做你建议我做什么. .(这里我kaptur1函数用于图像捕捉. .)然而,捕捉才开始捕获7.30点,和仍然没有停止在其指定的时间,对于这个实例7.31点. .
图不出来. .你怎么认为?
谢谢你的帮助。很多. .
12个评论
肯特Cabarle
肯特Cabarle 2011年2月7日
@Walt。它工作。它开始捕捉凌晨7.30点,停在7.31。然后又开始捕捉上午7.32,等等. .太好了。谢谢你!
@Jan:谢谢。谢谢你的善良和智慧。感谢你们两个。很感激。^ ^

登录置评。

类别

找到更多的在编程工具帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!