如何在MATLAB定时器回调函数中使用TasksExecuted只读属性?
解决MATLAB定时器回调中读取TasksExecuted属性的问题
你的错误原因很明确:创建timer对象时,你试图把TasksExecuted作为参数传入TimerFcn,但此时这个变量根本没定义——TasksExecuted是timer对象的只读属性,不能提前作为参数传递,必须通过回调函数里的timer实例来访问。
修正步骤与代码
- 创建timer时,移除参数列表里的
TasksExecuted,只传递必要的自定义参数 - 在回调函数中,通过回调的第一个参数
obj(即当前timer实例)来读取obj.TasksExecuted属性 - 同步调整回调函数的参数列表,匹配传入的参数
修正后的完整代码:
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
相关产品推荐
相关产品推荐

