WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Variablenübergabe

 

maci
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.07.09
Wohnort: Kiel
Version: ---
     Beitrag Verfasst am: 06.07.2009, 14:00     Titel: Variablenübergabe
  Antworten mit Zitat      
Hallo,

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:
function varargout = 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',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- 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.
function varargout = 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.
if ispc && 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')

close(handles.figure1);


% --- Executes on button press in anfangen.
function anfangen_Callback(hObject, eventdata, handles)

set(handles.anfangen,'UserData',1);

load settings

switch par
    case 1
        parity = 'none';
    case 2
        parity = 'even';
    case 3
        parity = 'odd';
    case 4
        parity = 'mark';
    case 5
        parity = 'space';
    otherwise
end

delete(instrfindall)

s = serial(anschl,'BaudRate',str2num(baudr), 'Parity', parity, 'DataBits', str2num(datab), 'StopBits', str2num(stopb), 'timeout', 2);
fopen(s);

i=1;


while (get(hObject,'UserData') ==1)      

   Daten = char(fread(s,15))'
   set(handles.daten,'String',Daten)
   save daten Daten -ascii
   drawnow
   vektor{i,1}= Daten
   save vektor
   i=i+1;
   
end


edit by steve: Bitte an die Code-Umgebung denken. Erreichbar über den Button oben in der Mitte. Danke!
Private Nachricht senden Benutzer-Profile anzeigen


sheleh
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 06.07.09
Wohnort: Kassel
Version: ---
     Beitrag Verfasst am: 06.07.2009, 15:42     Titel:
  Antworten mit Zitat      
Hallo,

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!!!!!



Gruss,

Alexander
Private Nachricht senden Benutzer-Profile anzeigen
 
maci
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.07.09
Wohnort: Kiel
Version: ---
     Beitrag Verfasst am: 06.07.2009, 18:07     Titel:
  Antworten mit Zitat      
Danke für die Antwort.
Kann es leider erst morgen vormittag ausprobieren:-(
aber das könnte der Fehler sein...abwraten:-)

Grüße, Maci
Private Nachricht senden Benutzer-Profile anzeigen
 
maci
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.07.09
Wohnort: Kiel
Version: ---
     Beitrag Verfasst am: 07.07.2009, 10:57     Titel:
  Antworten mit Zitat      
Nach ein wenig ausprobieren klappt es jetzt.
Smile
Leider nochpaar Fehlermeldungen.

Code:

function beenden_Callback(hObject, eventdata, handles)
set(handles.anfangen,'UserData',0);
disp('COM-Port geschlossen')
wert_von_vektor= handles.vektor
 [Datum] = datestr(now,30)
 xlswrite ( Datum , handles.vektor)


close(handles.figure1);


...


i=1;
vektor{5,1}=0;
handles.vektor = vektor;
guidata(hObject,handles);

while (get(hObject,'UserData') ==1)      

   Daten = char(fread(s,15))'
   set(handles.daten,'String',Daten)
   save daten Daten -ascii
   drawnow

   vektor{i,1}= Daten
   save handles.vektor
   i=i+1;
   handles.vektor = vektor;
    guidata(hObject,handles);
 

     
end

wert_von_vektor= handles.vektor


??? 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!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
sheleh
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 06.07.09
Wohnort: Kassel
Version: ---
     Beitrag Verfasst am: 07.07.2009, 12:47     Titel:
  Antworten mit Zitat      
Hallo mein Freund,

natürlich kannst du arrays(Matrizen) dynamisch erweitern.

Z.B:

vektor=[0]

for a=1:1:65536
vektor(a:a,1:1)=a
end


Bitte, verwende keine Variablen mit den Namen "i" für Schleifen usw.
Nur für Komplexe Zahlen. Das wird von Matlab empfohlen.

Gruss

Alexander
Private Nachricht senden Benutzer-Profile anzeigen
 
maci
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.07.09
Wohnort: Kiel
Version: ---
     Beitrag Verfasst am: 07.07.2009, 13:20     Titel:
  Antworten mit Zitat      
So hab nun einen leeren Array mit
vektor= {};
gemacht, das tuts ertsmal.

An die Fehlermeldungen kann ich mich erst nächste Woche machen, da ich nicht da bin.

Vielen Dank für deine Hilfe und vorallem schnellen antworten.
Smile Smile
Die i sache werde ich mir merken und verbessern.

Wünsch dir eine Schöne Woche

Grüße, Marta
Private Nachricht senden Benutzer-Profile anzeigen
 
maci
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.07.09
Wohnort: Kiel
Version: ---
     Beitrag Verfasst am: 31.07.2009, 10:59     Titel:
  Antworten mit Zitat      
Hallo,

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.