You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MATLAB定时器回调函数中使用TasksExecuted只读属性?

解决MATLAB定时器回调中读取TasksExecuted属性的问题

你的错误原因很明确:创建timer对象时,你试图把TasksExecuted作为参数传入TimerFcn,但此时这个变量根本没定义——TasksExecuted是timer对象的只读属性,不能提前作为参数传递,必须通过回调函数里的timer实例来访问。

修正步骤与代码

  1. 创建timer时,移除参数列表里的TasksExecuted,只传递必要的自定义参数
  2. 在回调函数中,通过回调的第一个参数obj(即当前timer实例)来读取obj.TasksExecuted属性
  3. 同步调整回调函数的参数列表,匹配传入的参数

修正后的完整代码:

period = 5;
a = timer('ExecutionMode','fixedRate','Period',period,...
    'TimerFcn',{@time_append, period, HR, fictiveFolderName},...
    'TasksToExecute',3 );
start(a);

function time_append(obj, event, period, HR, fictiveFolderName)
    HR_freq = 1;
    % 通过timer对象读取TasksExecuted属性
    current_tasks = obj.TasksExecuted;
    disp(current_tasks); % MATLAB中显示变量用disp更合适,print用于打印图形到文件
    i_init = current_tasks * period * HR_freq + 1;
    i_end = (current_tasks + 1) * period * HR_freq;
    % 用fullfile拼接路径更安全,自动适配系统路径分隔符
    writematrix(HR(i_init:i_end), fullfile(fictiveFolderName, 'HR.csv'), 'WriteMode','append');
end

关键说明

  • TasksExecuted是timer对象的内置属性,只有timer实例本身能提供这个值,所以必须通过回调里的obj(timer实例)访问
  • 替换print为disp,避免混淆MATLAB中不同功能的打印函数
  • 路径拼接使用fullfile,能避免手动拼接斜杠带来的跨系统兼容问题

内容的提问来源于stack exchange,提问作者alice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 06:01:05