ich habe folgendes Problem:
Ich möchte Daten aus einer RS232 Schnittstelle auslesen, in einem Vektor speichern und am Ende in eine Excel speichern.
Das Einlesen wird mit der functions anfangen gestartet unmd durchläuft immer wieder die Schleife, wobei jeder neuer Wert in den Vektor dazukommt.
Wird die Functions beenden benutzt, so soll der Vektor in eine Excel Tabelle geschrieben werden, deren Dateiname das Datum sein soll.
Soweit klappt auch alles, nur der Vektor wird beim Verlassen der while Schleife undefiniert. Habe ich ihn falsch definiert (Global vektor) oder wo liegt der Fehler. Probiere ich andere Lösungen aus, so wird auch ständig mit Invalid handle Object gemeckert.
Kann mir jemand sagen, wo der Fehler liegt?!
Code:
functionvarargout = rs232read(varargin) % RS232READ M-file for rs232read.fig % RS232READ, by itself, creates a new RS232READ or raises the existing % singleton*.
%
% H = RS232READ returns the handle to a new RS232READ or the handle to % the existing singleton*.
%
% RS232READ('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in RS232READ.M with the given input arguments.
%
% RS232READ('Property','Value',...) creates a new RS232READ or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before rs232read_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to rs232read_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help rs232read
% Last Modified by GUIDE v2.5 19-Jun-2009 15:39:14
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @rs232read_OpeningFcn, ...
'gui_OutputFcn', @rs232read_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
ifnargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
% --- Executes just before rs232read is made visible. function rs232read_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to rs232read (see VARARGIN)
% Choose default command line output for rs232read
handles.output = hObject;
% Update handles structure guidata(hObject, handles);
global vektor
% UIWAIT makes rs232read wait for user response (see UIRESUME) % uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line. functionvarargout = rs232read_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure varargout{1} = handles.output;
% --- Executes on selection change in daten. function daten_Callback(hObject, eventdata, handles) % hObject handle to daten (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns daten contents as cell array % contents{get(hObject,'Value')} returns selected item from daten
% --- Executes during object creation, after setting all properties. function daten_CreateFcn(hObject, eventdata, handles) % hObject handle to daten (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in beenden. function beenden_Callback(hObject, eventdata, handles) set(handles.anfangen,'UserData',0);
disp('COM-Port geschlossen') [Datum] = datestr(now,30) xlswrite( Datum , vektor) disp('COM-Port geschlossen')
sie benutzen GUIDE-Editor für die Erstellung von GUI.
In diesem Fall muss man höchstwahrscheinlich Variable 'vector' nicht global deklarieren. Das liegt daran, dass jede von GUIDE Editor erzeugte Funktion hat "eigene Welt". Diese Funktionen können nur Variablen sehen, die in HANDLES-Liste eingetragen sind.
Also definiere deine Variable ganz vorne oder vor der WHILE Schleife(z.B vector[dimension!!!!]=0; handles.vector=vector; guidata(hObject,handles);
So wird eine Variable "vector" in die HANDLES-Liste eingetragen und überall sichtbar.
Variable so auslesen:
wert_von_vector=handles.vector
WICHTIG: Nachdem Variable "vector" aktualisiert wird muss man IMMER
guidata(hObject,handles) schreiben, damit diese Variable in der HANDLES Liste aktualisiert wird!!!!!
??? Error using ==> guidata
H must be the handle to a figure or figure descendent.
Error in ==> rs232read>anfangen_Callback at 155
guidata(hObject,handles);
Error in ==> gui_mainfcn at 75
feval(varargin{:});
Error in ==> rs232read at 43
gui_mainfcn(gui_State, varargin{:});
??? Error using ==> rs232read('anfangen_Callback',gcbo,[],guidata(gcbo))
Error using ==> guidata
H must be the handle to a figure or figure descendent.
??? Error while evaluating uicontrol Callback
Ich dachte den Ausdruck guidata muss anwendeen, wenn ich etwas verändere?!
Kann ich das mit der Dimension auch geschickter lösen? Da ich ja in der Schleife das cell array immer erweitere, kenn ich ja davor die Dimension nicht. Der höchste Fall wäre 65536, wegen der Excel Tabelle( da die ja nicht Größer sein kann).
Auf jeden Fall danke für deine Hilfe!!!
Grüße Maci
edit by steve: Nochmals die Code-Umgebung ergänzt. Siehe PN!!!
leider konnte ich die letzten Wochen nicht an meinem Projekt arbeiten, aber nun bin ich wiedre da.
Leider weiß ich nicht, warum mir die Fehlöermeldung erscheint.
Wenn ich das guidata in der While Schleife rauslasse, wird der vektor in der Beenden Funktion leer.
Hat das was damit zu tun, dass es kein hObject ist?
Wäre für jeden Vorschlag dankbar:-)
Grüße, Marta
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.