代码之家  ›  专栏  ›  技术社区  ›  Ahmad Namvar

在特定时间每小时运行一次MATLAB程序

  •  1
  • Ahmad Namvar  · 技术社区  · 7 年前

    我在MATLAB中编写了一个计时器,用于每小时运行一个特定函数:

    function timertest
    t = timer('ExecutionMode', 'fixedRate', 'Period', 3600);
    t.TimerFcn = {@my_callback_fcn};
    start(t);
    
    function my_callback_fcn(handles,~)
    handles;
    disp('test');
    

    我想将属性添加到 timer 按如下方式每小时运行此程序的函数(hh:mm:ss):

    • 01:01:00
    • 02:01:00
    • 03:01:00
    • 。。。
    • 。。。
    • 23:01:00
    • 00:01:00

    例如,如果我在17:45:00运行程序,程序必须等到18:01:00才能执行。我的意思是,在上述时间段内每小时运行一次。 我正在努力解决如何将此属性添加到 计时器 作用

    2 回复  |  直到 7 年前
        1
  •  2
  •   Tommaso Belluzzo    7 年前

    你要找的是 StartDelay 的属性 Timer 类别:

    大于或等于的数字 0 指定延迟的 计时器启动和第一次执行之间的秒数 中指定的函数 TimerFcn 。什么时候 正在运行='打开' ,则, 开始延迟 是 只读。

    默认值: 0

    你所要做的就是 Period 一个小时( 3600 每次执行 TimerFcn 并计算出正确的 开始延迟 值,该值必须等于当前时间的下一小时和1分钟。以下是一个示例:

    function timertest()
        [~,m,s] = hms(datetime('now'));
        sd = (60 * (60 - m)) + (60 - s);
    
        t = timer('ExecutionMode','fixedRate','Period',3600,'StartDelay',sd);
        t.TimerFcn = @my_callback_fcn;
    
        start(t);
    end
    
    function my_callback_fcn(obj,evt) %#ok<INUSD>
        disp('Tick!');
    end
    

    一旦正确定义了启动延迟,将触发每个勾号 HH:01

        2
  •  1
  •   optimus_prime    7 年前

    使用时钟:

    “c=时钟返回六元素日期向量,其中包含十进制形式的当前日期和时间:

    [年-月-日-时-分-秒]

    时钟功能根据系统时间计算当前日期和时间。“”

    因此,您可以很容易地找到“现在”与希望程序下次运行的时间(以秒为单位)之间的差异;然后使用计时器的StartDelay功能。

    c=clock
    delay= 60*(60-c[5])+60-c[6]
    t=timer
    t.startdelay = delay
    

    资料来源:

    https://www.mathworks.com/help/matlab/ref/clock.html

    https://www.mathworks.com/help/matlab/ref/timer-class.html?s_tid=gn_loc_drop