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

Timer

 

gydoh
Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.11.2015, 11:23     Titel:
  Antworten mit Zitat      
Hallo,

ich habe genau das selbe Problem. Ich bekomme jede Sekunde neue Messdaten die über z.B. 150ms gemessen werden. Mein GUI soll sich nun jede Sekunde diese neuen Messdaten holen und die Plots etc im GUI aktualisieren. In die Opening Functioni würde ich nun also einen Timer einbauen, der jede Sekunde auf die neuen Messdaten zugreift. leider bin ich etwas ratlos bei der Programmierung des Timers, da ich generell eher wenig Ahnung von Matlab habe. Mein Timer sieht momentan folgendermaßen aus:

Code:

% timer in OpeningFunction

function MyTimer

t=timer('ExecutionMode','fixedSpacing','Period',1.0,'TimerFcn',{@DatenLesen,h});
start(t)
end

function DatenLesen(hObject,evnt,h)
 


Was muss ich in die function DatenLesen schreiben? Und ist der Timer richtig programmiert?

Vielen Dank schonmal!
gydoh
Private Nachricht senden Benutzer-Profile anzeigen
Gesplittet: 23.11.2015, 12:51 Uhr von Jan S
Von Beitrag GUI automatisch aktualisieren aus dem Forum GUIs


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.11.2015, 13:01     Titel:
  Antworten mit Zitat      
Hallo gydoh,

Bitte hänge keine neuen Fragen an bestehende Threads an. Andernfalls wird der "beantwortet"-Status sinnfrei und es ist nicht mehr klar, zu welcher Frage eine Antwort gehört.

Code:
function MyTimer
t = timer('ExecutionMode','fixedSpacing','Period',1.0,'TimerFcn',{@DatenLesen,h});
start(t)
end

function DatenLesen(hObject,evnt,h)

Was ist "h"?

Zitat:
neuen Messdaten holen und die Plots etc im GUI aktualisieren

Das lässt sich noch nicht direkt in Code beantworten. Es ist weder klar, was "Messdaten holen" bedeutet, noch "GUI aktualisieren". Erkläre daoch beides mal explizit.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
gydoh
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.11.2015, 14:09     Titel:
  Antworten mit Zitat      
Also ich möchte Messungen von Strom und Spannung machen. Jede Sekunde sollen neue Messdaten abgespeichert werden, die ich auch jede Sekunde in mein GUI neu uploaden möchte um die Verläuft von Strom und Spannung usw immer wieder zu aktualisieren. Diese Daten werden immer als struct abgespeichert. Leider sind die Sensoren für die Messungen noch nicht funktionsfähig, ich hab daher noch keine Messdaten um mein GUI zu testen. Aber würde es prizipiell so funktionieren? Ich bin mir überhaupt nicht sicher, welche Übergabeparameter ich in die functions schreiben muss, ob der timer so überhaupt laufen würde und ob meine function auch die neuen Werte in den Plots verwendet?!


Code:


function GUI_verlaeufe_test_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 GUI_verlaeufe_test (see VARARGIN)

% Choose default command line output for GUI_verlaeufe_test
handles.output = hObject;

function MyTimer
t = timer('ExecutionMode','fixedSpacing','Period',1.0,'TimerFcn',{@DatenLesen,daten});
start(t)
end



% Einlesen der Daten

function DatenLesen(hObject,daten)

daten = load('export_1_5MVA_Teil2_18_02_16.mat'); % Hier sollen immer die neu abgespeicherten Daten geladen werden

U1 = Recorder1.Channels.Segments.Data.Samples;
I1 = Recorder5.Channels.Segments.Data.Samples;
dXstep = Recorder1.Channels.Segments.Data.dXstep; %Werte aus struct daten

N = length(U1);
t = N*dXstep;


handles.U1 = U1;
handles.I1 = I1;
handles.N = N; % Wird benötigt um Daten andere GUI's zu übergeben



% Graphische Darstellung der Spannung (Plot 1)
plot(U1,'b','Parent',handles.axesU1);

% Graphische Darstellung der Stromes (Plot 2)
plot (I1,'b','Parent',handles.axesI1);

drawnow;
end

% Update handles structure
guidata(hObject, handles);
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.11.2015, 13:43     Titel:
  Antworten mit Zitat      
Hallo gydoh,

Die physikalische Bedeutung der Zahlen ist für Matlab und eine Diskussion im Forum grundsätzlich unwichtig, eine Erklärung also lediglich verwirrend.

Das Einlesen von MAT-Files von der Festplatte wird zu spürbaren Verzögerungen führen. Ist das wirklich die einzige Art Daten zu importieren?

Code:
function MyTimer
t = timer('ExecutionMode','fixedSpacing','Period',1.0,'TimerFcn',{@DatenLesen,daten});
start(t)
end

Das ist nun eine "nested function". Ohne Aufruf von außen wird sie gar nicht ausgeführt. Ich vermute, dass das "function MyTimer ... end" einfach weggelassen werden sollte.
Das nächste Problem ist der input "daten". Der ist nicht definiert, während der Callback erstellt wird. Das wird eine Fehlermeldung geben. Was soll "daten" denn sein?

Zitat:
function DatenLesen(hObject,daten)

Der 2. Input eines callbacks ist immer der EventData Struct. Also wäre "daten" erste der dritte. Dennoh ist noch nicht erklärt, was "daten" beinhaltet, zumal diese Variable auch gleich überschrieben wird:
Zitat:
daten = load('export_1_5MVA_Teil2_18_02_16.mat');

Es ist immer sicherer nicht aus dem aktuellen Order zu lesen. Wenn der User per cd in einen anderen Ordner wechselt, wird der load Befehl scheitern. Füge also besser den absoluten Pfad zum Filenamen an.

Statt das Diagramm immer wieder neu zu zeichnen mit plot , könntest Du auch nur die XData und YData eines bestehenden Plots ändern. das läuft deutlich effizienter. Näheres dazu findest Du mit einer Suche nach diesen Ausdrücken im Forum oder im Netz.

Du kannst die Messwerte ja zunächst duir irgendwelche rand Zahlen ersetzen und dann mal probieren was passiert, wenn Du das GUI startest. Die Fehlermedlungen sollten beim Debuggen helfen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
gydoh
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.12.2015, 13:12     Titel:
  Antworten mit Zitat      
Hey,

also mein Timer läuft nun soweit ganz gut. Jedoch möchte ich mit der ersten GUI ein zweites öffnen, nur leider übergibt das erste GUI meine Daten, seit dem ich den Timer eingebaut habe, nicht mehr an das zweite. Hier noch einmal mein momentaner code in der opening function des ersten GUIs mit anderen Daten als im letzten post (nur als Beispiel):

Code:
function GUI_verlaeufe_test_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 GUI_verlaeufe_test (see VARARGIN)

% Choose default command line output for GUI_verlaeufe_test
handles.output = hObject;

i = 1;

t = timer('ExecutionMode','fixedSpacing','Period',1.0,'TimerFcn',@DatenLesen);
start(t)




% Einlesen der Daten

function DatenLesen(hObject,eventdata)

FileData = ['Mappe',num2str(i),' - Kopie.csv'];
M = importdata(FileData);
M1 = M.data;
U1 = M1(:,1);
I1 = M1(:,4);
dXstep = 5.0e-06;

N = length(U1);
t = N*dXstep;

handles.U1 = U1;
handles.I1 = I1;
handles.N = N;

plot(U1,'b','Parent',handles.axesU1);

plot (I1,'b','Parent',handles.axesI1);

i = i+1;

% Choose default command line output for GUI_Main
handles.output = hObject;


% Update handles structure
guidata(hObject, handles);
% UIWAIT makes GUI_Main wait for user response (see UIRESUME)
% uiwait(handles.figure1);
end
end


Hier der code in der zweiten GUI ind er opening function:

Code:
% Übergabe der Daten

handles_GUI_Main = findall (0,'Type','Figure','Name','GUI_Main');
handles_structure = guidata (handles_GUI_Main);
U1 = handles_structure.U1;
I1 = handles_structure.I1;
 


Kann mir jemand sagen was ich falsch mache? Ich bekomme folgende Fehlermeldung:

Reference to non-existent field 'U1'.

Viele Grüße
gydoh
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 05.12.2015, 14:27     Titel:
  Antworten mit Zitat      
Hallo gydoh,


Code:
function DatenLesen(hObject,eventdata)
...
U1 = M1(:,1);
handles.U1 = U1;
...
guidata(hObject, handles);

Nun wurde U1 als GUIDATA in hObject gespeichert. hObject ist aber der Handle des Timers, während später in den GUIDATA in der Figure gesucht wird.

Der Aufruf des Timers benötigt also noch den Handle der Figure, um dort die Daten speichern zu können:
Code:
t = timer('ExecutionMode','fixedSpacing','Period',1.0,'TimerFcn', {@DatenLesen, hObject});

...
function DatenLesen(hObject,eventdata, FigureHandle)
handles = guidata(FigureHandle);

handles.U1 = U1;
handles.I1 = I1;
handles.N = N;

handles.output = hObject;
...
guidata(FigureHandle, handles);

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
gydoh
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2015, 10:47     Titel:
  Antworten mit Zitat      
Hallo Jan,
danke für die Antwort. Leider funktioniert es immer noch nicht. Mein Code sieht nun folgendermaßen aus:

Code:
function GUI_verlaeufe_test_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 GUI_verlaeufe_test (see VARARGIN)



i = 1;

t = timer('ExecutionMode','fixedSpacing','Period',1.0,'TimerFcn',{@DatenLesen,hObject});
start(t)




% Einlesen der Daten

function DatenLesen(hObject,eventdata,FigureHandle)

FileData = ['Mappe',num2str(i),' - Kopie.csv'];
M = importdata(FileData);
M1 = M.data;
U1 = M1(:,1);
I1 = M1(:,4);
dXstep = 5.0e-06;

N = length(U1);
t = N*dXstep;

handles = guidata(FigureHandle)
handles.U1 = U1;
handles.I1 = I1;
handles.N = N;

plot(U1,'b','Parent',handles.axesU1);

plot (I1,'b','Parent',handles.axesI1);

i = i+1;


handles.output = hObject;

guidata(FigureHandle, handles);

end
end


Nun bekomme ich die Fehlermeldung: Reference to non-existent field 'output'.

Und zusätzlich auch noch die alte Fehlermeldung, dass U1 nicht exsistiert, sobald ich auf den Button klicke um mein zweites GUI zu öffnen.
Muss ich im Code von der zweiten GUI auch noch etwas ändern oder was mache ich falsch?

Code:
% Übergabe der Daten im zweiten GUI

handles_GUI_verlaufe_test = findall (0,'Type','Figure','Name','GUI_verlaufe_test');
handles_structure = guidata (handles_GUI_verlaufe_test);
U1 = handles_structure.U1;
I1 = handles_structure.I1;


Vielen dank schonmal!!
gydoh
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.12.2015, 14:14     Titel:
  Antworten mit Zitat      
Hallo gydoh,

Bitte poste immer die vollständige Fehlermeldung. Es ist nicht effizient, wenn die Leser nach einer Codezeile suchen, die vielleicht passen könnte.

Die einzige Zeile, in der "output" vorkommt ist:
Code:
handles.output = hObject;

Die kann aber die Fehlermeldung nicht erzeugen. Aber wozu schreibst Du den Timer-Handle in das Feld "output"?

Wozu soll das "i = i+1;" dienen? Die Funktion verwendet dieses "i" gar nicht, oder?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
gydoh
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2015, 15:28     Titel:
  Antworten mit Zitat      
Hier noch einmal mein kompletter code der ersten GUI:

Code:
function varargout = GUI_verlaeufe_test(varargin)
% GUI_VERLAEUFE_TEST MATLAB code for GUI_verlaeufe_test.fig
%      GUI_VERLAEUFE_TEST, by itself, creates a new GUI_VERLAEUFE_TEST or raises the existing
%      singleton*.
%
%      H = GUI_VERLAEUFE_TEST returns the handle to a new GUI_VERLAEUFE_TEST or the handle to
%      the existing singleton*.
%
%      GUI_VERLAEUFE_TEST('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in GUI_VERLAEUFE_TEST.M with the given input arguments.
%
%      GUI_VERLAEUFE_TEST('Property','Value',...) creates a new GUI_VERLAEUFE_TEST or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before GUI_verlaeufe_test_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to GUI_verlaeufe_test_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 GUI_verlaeufe_test

% Last Modified by GUIDE v2.5 23-Nov-2015 09:52:58

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @GUI_verlaeufe_test_OpeningFcn, ...
                   'gui_OutputFcn',  @GUI_verlaeufe_test_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
 function GUI_verlaeufe_test_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 GUI_verlaeufe_test (see VARARGIN)



i = 1;

t = timer('ExecutionMode','fixedSpacing','Period',1.0,'TimerFcn',{@DatenLesen,hObject});
start(t)




% Einlesen der Daten

function DatenLesen(hObject,eventdata,FigureHandle)

FileData = ['Mappe',num2str(i),' - Kopie.csv'];
M = importdata(FileData);
M1 = M.data;
U1 = M1(:,1);
I1 = M1(:,4);
dXstep = 5.0e-06;

N = length(U1);
t = N*dXstep;

handles = guidata(FigureHandle)
handles.U1 = U1;
handles.I1 = I1;
handles.N = N;

plot(U1,'b','Parent',handles.axesU1);

plot (I1,'b','Parent',handles.axesI1);

i = i+1;


handles.output = hObject;

guidata(FigureHandle, handles);

end
end

% --- Outputs from this function are returned to the command line.
function varargout = GUI_verlaufe_test_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;
end

% --- Executes on button press in buttonU.
function buttonU_Callback(hObject, eventdata, handles)
% hObject    handle to buttonU (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
GUI_verl_U;
end


Und hier die komplette Fehlermeldung:

Reference to non-existent field 'output'.

Error in GUI_Main>GUI_verlaufe_test_OutputFcn (line 135)
varargout{1} = handles.output;

Error in gui_mainfcn (line 264)
feval(gui_State.gui_OutputFcn, gui_hFigure, [], gui_Handles);

Error in GUI_verlaufe_test (line 42)
gui_mainfcn(gui_State, varargin{:});

Zitat:
Aber wozu schreibst Du den Timer-Handle in das Feld "output"?


Meinst du damit ich müsste schreiben

Code:
handles.output = FigureHandle
?

i = i+1 dient dazu, immer die nächste Datei (Datein haben fortlaufende Nummerierung) aufzurufen. Das klappt auch solange ich keine Daten an andere GUI's übergeben will..
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.12.2015, 09:51     Titel:
  Antworten mit Zitat      
Hallo gydoh,

Zitat:
Reference to non-existent field 'output'.
Error in GUI_Main>GUI_verlaufe_test_OutputFcn (line 135)
varargout{1} = handles.output;

Hier stammt das "handles" aus den Inputs. Da ich grundsätzlich kein GUIDE verwende, weiß ich nicht, ob dies der aktuelle handles-Struct ist, oder eine Kopie, die erzeugt wurde, als der Callback erstellt wurde. Zur Not kannst Du so eine aktuelle Kopie erhalten:
Code:
handles = guidata(hObject)


Zitat:
Aber wozu schreibst Du den Timer-Handle in das Feld "output"?

Meinst du damit ich müsste schreiben
Code:
handles.output = FigureHandle
?[/quote]
Das kann ich nicht beantworten, denn ich weiß ja nicht, wozu das Feld "output" dienen soll.

Zitat:
i = i+1 dient dazu, immer die nächste Datei (Datein haben fortlaufende Nummerierung) aufzurufen. Das klappt auch solange ich keine Daten an andere GUI's übergeben will..

Den Wert von "i" zu verändern funktioniert hier, da der Time-Callback eine "nested Funktion" ist. Damit wird dann auf die Variable "i" der Funktion zu gegriffen, die die nested function enthält. Außerhalb dieser Funktion ist "i" aber unbekannt bzw. wird als die imaginäre Einheit interpretiert.
Das "i=1" in GUI_verlaeufe_test_OpeningFcn ist z.B. wirkungslos, da es außerhalb der Funktion gar nicht bekannt ist.

Bisher geht es mit den handles-Structs drunter und drüber. Ich erkenne nicht, wann auf den handles Struct des GUI und wann auf den des Timers zugegriffen werden soll. Wie wäre es, wenn Du den beiden einfach uinterschiedliche Namen gibst? Das sollte auch Dir weiterhelfen.

Statt einer lokalen Variable "i" wäre es wohl klarer, wenn Du z.B. ebenfalls im Handles Struct (des GUI oder des Timers) einen File-Zähler mit eindeutigem Namen verwendest.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
gydoh
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2015, 12:20     Titel:
  Antworten mit Zitat      
Ich habe es nun soweit geschafft, dass das erste GUI die Daten an das zweite übergibt. Hier der Code des ersten GUI:

Code:
function varargout = GUI_verlaeufe_test(varargin)
% GUI_VERLAEUFE_TEST MATLAB code for GUI_verlaeufe_test.fig
%      GUI_VERLAEUFE_TEST, by itself, creates a new GUI_VERLAEUFE_TEST or raises the existing
%      singleton*.
%
%      H = GUI_VERLAEUFE_TEST returns the handle to a new GUI_VERLAEUFE_TEST or the handle to
%      the existing singleton*.
%
%      GUI_VERLAEUFE_TEST('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in GUI_VERLAEUFE_TEST.M with the given input arguments.
%
%      GUI_VERLAEUFE_TEST('Property','Value',...) creates a new GUI_VERLAEUFE_TEST or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before GUI_verlaeufe_test_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to GUI_verlaeufe_test_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 GUI_verlaeufe_test

% Last Modified by GUIDE v2.5 23-Nov-2015 09:52:58

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @GUI_verlaeufe_test_OpeningFcn, ...
                   'gui_OutputFcn',  @GUI_verlaeufe_test_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
 function GUI_verlaeufe_test_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 GUI_verlaeufe_test (see VARARGIN)



i = 1;

t = timer('ExecutionMode','fixedSpacing','Period',1.0,'TimerFcn',{@DatenLesen,hObject});
start(t)




% Einlesen der Daten

function DatenLesen(hObject,eventdata,FigureHandle)

FileData = ['Mappe',num2str(i),' - Kopie.csv'];
M = importdata(FileData);
M1 = M.data;
U1 = M1(:,1);
I1 = M1(:,4);
dXstep = 5.0e-06;

N = length(U1);
t = N*dXstep;

plot(U1,'b','Parent',handles.axesU1);

plot (I1,'b','Parent',handles.axesI1);


handles = guidata(FigureHandle)
handles.U1 = U1;
handles.I1 = I1;
handles.N = N;


i = i+1;


handles.output = hObject;

guidata(FigureHandle, handles);

end

% Choose default command line output for GUI_verlaufe_test
handles.output = hObject;


% Update handles structure
guidata(hObject, handles);

% UIWAIT makes testGUI_timer wait for user response (see UIRESUME)
% uiwait(handles.figure1);

end

% --- Outputs from this function are returned to the command line.
function varargout = GUI_verlaufe_test_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;
end

% --- Executes on button press in buttonU.
function buttonU_Callback(hObject, eventdata, handles)
% hObject    handle to buttonU (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
GUI_verl_U;
end


Nun habe ich aber noch eine weitere Frage. In meiner ersten GUI aktualisieren sich die Werte in den Plots jede Sekunde, da läuft der Timer nun wie er soll, nur in meiner zweiten GUI werden nur die Werte ausgegeben, die übergeben werden, wenn ich auf den Button drücke. Hier fehlt die fortlaufende aktualisierung. Hat jemand eine Idee wie ich diese Werte auch dazu kriegen kann, jede Sekunde die neu geladenen Werte des ersten GUI zu übernehmen und auszugeben? Muss ich hier auch einen Timer einbauen?

Hier noch einmal mein Code für die Übergabe der Werte im zweiten GUI:

Code:
function GUI_verl_U_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 GUI_verl_U (see VARARGIN)

% Übergabe der Daten im zweiten GUI

handles_GUI_verlaufe_test = findall (0,'Type','Figure','Name','GUI_verlaufe_test');
handles_structure = guidata (handles_GUI_verlaufe_test);
U1 = handles_structure.U1;
I1 = handles_structure.I1;

X1 = fft(U1);
X2 = fft(I1);

plot (X1);
plot (X2); % Nur als Beispiel, diese Plots sollen ebenfall jede Sekunde aktualisiert werden


% Choose default command line output for GUI_verl_U
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);
 


Zitat:

Statt einer lokalen Variable "i" wäre es wohl klarer, wenn Du z.B. ebenfalls im Handles Struct (des GUI oder des Timers) einen File-Zähler mit eindeutigem Namen verwendest.


Was genau meinst du damit? Könntest du vielleicht ein Beispiel geben? Tut mir leid, ich habe nur sehr wenig Erfahrung mit Matlab.. Aber vielen Dank für die Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.12.2015, 14:45     Titel:
  Antworten mit Zitat      
Hallo gydoh,

Zitat:
Statt einer lokalen Variable "i" wäre es wohl klarer, wenn Du z.B. ebenfalls im Handles Struct (des GUI oder des Timers) einen File-Zähler mit eindeutigem Namen verwendest.

Explizit:

[code]function GUI_verlaeufe_test_OpeningFcn(hObject, eventdata, handles, varargin)

...
% Statt: i = 1;
handles.FileCounter = 1;
guidata(hObject, handles);
...

function DatenLesen(hObject,eventdata,FigureHandle)

...
handles = guidata(FigureHandle)
handles.U1 = U1;
handles.I1 = I1;
handles.N = N;

% Statt: i = i+1;
handles.FileCounter = handles.FileCounter + 1;
...
guidata(FigureHandle, handles);

end[code]
Gruß, Jan
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.