Verfasst am: 05.04.2013, 12:48
Titel: Plot aus einer Schleife an GUI übergeben
Hallo Liebe Forum Gemeinde,
Ich hab mal nen kleines Problem. Das ist wohl nur von Ästetischer Natur aber trotzdem. Ich habe mir eine GUI gebastelt. In der mehrere Sachen eingestellt werden können. Soweit so gut läuft ohne Prob. Jetzt ist folgenes Problem. Ich rufe mit GUI eine FKT auf. Diese FKT hat mehrere Schleifen. In einer Schleife werden immer wieder Geplottet. Alles kein prob. Nun jetzt mein kleines Problem. Ich will die Plots immer wieder schließen nachdem ich sie gespeichert habe. Das Funktioniert leider nicht. den er öffnet das Bild und schließt es erst im 2ten Durchlauf so das aktuelle bild immr im Vordergrund hängt... Achso das Bild wird mit einer seperaten Fkt geplottet.. da will und kann ich leider nicht drinn rumfuschen.
Wie bekomm ich es hin das er das Bild wirklich schließt?? und gibt es eine Möglichkeit das Bild immer wieder an meine GUI zu senden??
Nun mein Code...
Code:
function Bildname=Auswertung(Ordner,Auswertung,Mittelwert) actxserver('Excel.Application');
%global len0 x0 peakInds peakMags
%%%%Mit dieser Funktion lassen sich Stromverläufe Auswerten dazu müssen diese
%%%%in Form einer TXT-Datei vorliegen. Diese Datei sollte in einer
%%%%bestimmten Form vorliegen. Diese Ist der BSP. Datei zu entnehmen. Ist
%%%%diese Anders muss das Sript/Funktion umgeschrieben werden...
%format('long'); %Richtige Gleitkomma einstellung
for Linkanzahl=1:size(Ordner,1)
dateien=Ordner{Linkanzahl,1};
cd(dateien); %Dateien Auslesen
[stat,Text]=fileattrib('*.txt'); %Die Attribute der Dateien Auslesen die meisten sind Sinnlos und leer
names={Text.Name}; %Die Namen der Dateien in eine "Tabelle" speichern wichtig für die Auswertung
x=1; %Laufparameter für nachfolgende Schleife
while(1)
File=names{x}; %Dateien einzeln nehmen
comma2point(File) %extra Funktion aus dem I-net gefischt und verändert Ersetzt die Kommas durch Punkte MATLAB braucht Punkte
Einlesen=dlmread(File,'\t',8,0); %Da die Dateien Einen Text Kopf und auch die Spalten Text enthalten und MATLAB nicht viel damit anfagen kann werden sie Rausgefilter (Nicht eingelesen)
Einlesen(:,4)=Einlesen(:,4).*1000;
Einlesen(:,6)=Einlesen(:,2).*Einlesen(:,3); %Hier wird P primär erstellt
Einlesen(:,7)=Einlesen(:,4).*Einlesen(:,5); %Hier wird P sekundär erstllt
%Eprimär Berechnen
S1=zeros(1,(size(Einlesen,1))-1); %Da das Integral bei 0 beginnt wird der erste Wert des Integrals 0 gesetzt
for y = 2:(size(Einlesen,1))-1
S1(y)=(Einlesen(y,1)-Einlesen(y-1,1))*((Einlesen(y-1,6)+Einlesen(y,6))/2); %Eprimär Berechnung der Teil Integrale (Nummerisch) Es fehlt leider die Symbolic Toolbox mit der Währe es ein Schritt keine Schleife
end
xlswrite('Auswertung.xls',Excelkopf,'Mittelwert','A1');
xlswrite('Auswertung.xls',bildnummer,'Mittelwert','A3');
xlswrite('Auswertung.xls',ExcelKoerper1,'Mittelwert','B3');
xlswrite('Auswertung.xls',ExcelKoerper2,'Mittelwert',Letzte{1});
end end
ich finde es schade, dass du einen riesenlangen Code postest, der mit dem eigentlichen Problem nichts zu tun hat, und dass dann auch noch ein entscheidender Teil, nämlich wo geplottet wird, fehlt.
So kann man dir nur sagen, dass der close-Aufruf aller Wahrscheinlichkeit in der Form nicht sinnvoll ist. Sinnvoller:
close(gcf)
oder noch besser: beim Öffnen der Figure das Handle zurückgeben lassen und dann schließen:
Hallo Harald,
Sorry war eben nen bissel in eile, Ok ich Poste mal alles was sinnvoll ist für das Prob...
Code:
function Bildname=Auswertung(Ordner,Auswertung,Mittelwert) ...
x=1;
while(1) ...
peakfinder(Einlesen(:,5)); %% Ist aus Dem I-net Hier wird geplottet
Bildname1=sprintf('%s%s',Hilfe3,'_1.jpg');
saveas(gcf,Bildname1,'jpg');
closeFigure1;
...
x=x+1;
if(x>length(names)) ,break,end end ...
Ich gebe mir ja nur das letzte bild aus so zu sagen In dem ich die bilder Speichere und dann in meiner GUI aufrufe aber eben nur das letzte...
Würde aber gerne da der Rechner nen weilchen rechnet immer das aktuelle Bild in meiner GUI haben...
Ich fände es sinnvoller, die peakfinder-Funktion mit zwei Rückgabeargumenten aufzurufen, die Daten zurückzugeben, und dann direkt in der GUI zu plotten.
Code:
[peakInds,peakMags] = peaksfinder(Einlesen(:,5)) plot(handles.Peaks, 1:size(Einlesen,1),Einlesen(:,5),'.-',peakInds,peakMags,'ro','linewidth',2);
end
Hallo Harald danke für die Tips.. Ich glaub das bekomm ich hin.
Danke für deine Hilfe...
Werd mal weiter Basteln..
LG Florre
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.