Как я могу написать файл Excel, используя таймер на MATLAB? - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь записать данные в 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) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...