Я пытаюсь записать данные в Excel только один раз в конце, используя таймер на MATLAB. (MATLAB версия R2017a)
Я хочу сделать две вещи:
1) Когда я выполняю программу, которую я написал, ссылаясь на приведенный ниже пример кода, я получаю сообщение об ошибке и не знаю, как ее исправить.
Сообщение об ошибке
>> timer_sample
x_value =
1 2 3
y_value =
4 5 6
x_value =
1 2 3 7 8 9
y_value =
4 5 6 10 11 12
Error while evaluating TimerFcn for timer 'timer-1'
Error: Invalid expression. Check for missing multiplication operator, missing or unbalanced delimiters, or other syntax error. To construct matrices, use brackets instead of parentheses.
2) В настоящее время значения x_value и y_value отображаются без использования функции disp (), но я хочу, чтобы это не отображалось.
В качестве другого подхода я выполнил timer_sample.m, и TimerCallback.m находится в одной папке с timer_sample.m, используя метод объектно-ориентированного программирования в MATLAB.
Однако я получил следующее сообщение об ошибке.
Как я могу это исправить и в чем проблема?
Error Message
>> timer_sample
Attempt to execute SCRIPT varargin as a function:
/Applications/MATLAB_R2019a.app/toolbox/matlab/lang/varargin.m
Error in TimerCallback (line 11)
if varargin > 1
Error in timer_sample (line 1)
mycallback = TimerCallback('data.xlsx');
отметка таймера m
mycallback = TimerCallback('data.xlsx');
mytimer = Timer('TimerFcn', @mycallback.callback, 'StartDelay', 30);
mycallback.x_value = [mycallback.x_value, [1 2 3]]
mycallback.y_value = [mycallback.y_value, [4 5 6]]
mycallback.x_value = [mycallback.x_value, [7 8 9]]
mycallback.y_value = [mycallback.y_value, [10 11 12]]
%and so on... until the Timer completes
TimerCallback.m
classdef TimerCallback < handle
properties %public properties
state;
x_value;
y_value;
filename;
end
methods
%constructor
function this = TimerCallback(filename)
if varargin > 1
this.filename = filename;
end
this.state = true;
end
%callback function
function callback(this, ~, ~)
%consider using writetable instead of xlswrite. At least, use only one xlswrite.
xlswrite(this.filename, this.x_value, 'sender');
xlswrite(this.filename, this.y_value, 'receiver');
this.state = false;
end
end
end
Программа, которую я выполнил
global x_value
global y_value
time = timer('TimerFcn', 'stat=false; disp(''Timer!'') filename = ''data.xlsx''; x_range = ''sender''; y_range = ''receiver''; xlswrite(filename, x_value, x_range) xlswrite(filename, y_value, y_range) exit();', 'StartDelay', 30);
start(time)
%flag to write code after 30 seconds
global stat
stat = true;
x_value = [x_value [1 2 3]]
y_value = [y_value [4 5 6]]
x_value = [x_value [7 8 9]]
y_value = [y_value [10 11 12]]
Что я пытался
Без времени я уверен, что выходные данные Excel доступны как ниже.
global x_value
global y_value
global stat
stat = true;
x_value = [x_value [1 2 3]]
y_value = [y_value [4 5 6]]
x_value = [x_value [7 8 9]]
y_value = [y_value [10 11 12]]
filename = 'data.xlsx';
x_range = 'sender';
y_range = 'receiver';
xlswrite(filename, x_value, x_range)
xlswrite(filename, y_value, y_range)