2016-04-18 78 views
0

假設vec_A,vec_B,vec_c是一些具有隨機數據的矩陣。我想將數據寫入到文本文件中每5分鐘,我的代碼如下:每五分鐘將數據寫入文本文件Matlab

function samplegui_OpeningFcn(hObject, ~, handles, varargin) 

handles.timer = timer(... 
     'ExecutionMode', 'fixedRate', ... % Run timer repeatedly 
     'Period', 300, ...    % Initial period. 
     'TimerFcn', {@open,hObject}); % Specify callback 

handles.output = hObject; 
handles.vec_A=[]; 
handles.vec_B=[]; 
handles.vec_C=[]; 
guidata(hObject, handles); 

function open_Callback(hObject, eventdata, handles) % push button to receive serial data. 

cnt=0; 

while 1 

     % Getting data from Serial Port 
     get_lines=fgets(handles.se) % getting data from serial port 
      if~isempty(get_lines) 
      cnt=cnt+1; 
     if strfind(get_lines,'T') %Parsing data 
     handles.vec_A=[handles.vec_A;[timet newword]]; 
     plot(handles.vec_A(:,1),handles.vec_A(:,2:end),'r'); % plotting 

     % Same follows for parsing and plot vec_B and Vec_C 
     drawnow(); % to update the Plots 
     end 
    end 
Pause(.05); 

     start(handles.timer); % saving the data 
     dlmwrite('My_sample1.txt',handles.vec_A); 
     dlmwrite('My_sample2.txt',handles.vec_B); 
     dlmwrite('My_sample3.txt',handles.vec_C); 
     stop(handles.timer); 
end 
guidata(hObject, handles); 

在運行我的代碼,會出現以下錯誤:

錯誤而定時器「定時器6評估TimerFcn '

輸入參數太多。

如何在這種情況下執行計時器以每五分鐘成功寫入數據或建議任何其他方式來執行此操作。

+0

問題是什麼?或者你的代碼有什麼問題? – Lati

+1

@Lati請看看編輯過的帖子。 – MaK

回答

2

您已將TimerFcn定義爲{@open, hObject},但您沒有名爲open的函數。相反,它試圖用三個輸入參數(定時器對象,一個事件對象和hObject)調用內置的open,並且由於open只接受一個輸入參數,所以會產生錯誤。這就是說,根本不清楚你提供的代碼將如何完成任何你想要的東西。像這樣的東西可能會更好。

function samplegui_OpeningFcn(hObject, ~, handles, varargin) 

    handles.timer = timer(... 
      'ExecutionMode', 'fixedRate', ... % Run timer repeatedly 
      'Period', 300, ...    % Initial period. 
      'TimerFcn', @(s,e)write_data()); % Specify callback 

    handles.output = hObject; 
    handles.vec_A=[]; 
    handles.vec_B=[]; 
    handles.vec_C=[]; 
    guidata(hObject, handles); 

    start(handles.timer); 

    %// Now update your data in a loop 

    cnt = 0; 

    while true 
     %// Getting data from Serial Port 
     get_lines = fgets(handles.se) 
     if ~isempty(LINES) 
      cnt = cnt + 1; 
      if strfind(LINES, 'T') 
       handles.vec_A = [handles.vec_A; [timet newword]]; 
       plot(handles.vec_A(:,1), handles.vec_A(:,2:end),'r'); 
       drawnow 
      end 
     end 
    end 

    function write_data() 
     %// Write it to file 
     dlmwrite('My_sample1.txt',handles.vec_A); 
     dlmwrite('My_sample2.txt',handles.vec_B); 
     dlmwrite('My_sample3.txt',handles.vec_C); 
    end 
end 
+0

這不符合我的目的。我的帖子中的開放功能是按鈕,可以實時從串口接收數據以進行收集,繪圖。並保存數據。 – MaK

+0

@MaK當然,它不是*完全*你需要什麼,因爲1)你沒有顯示相關的代碼,2)這是使用示例數據來演示* how *的示例。你將不得不適應你的用例。對於初學者來說,如果你有一個「開放」功能,**向我們展示**,因爲那是問題所在。 – Suever

+0

我簡要介紹了代碼,請讓我知道,如果您仍然需要任何信息。 – MaK