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

Plot aus einer Schleife an GUI übergeben

 

Florre
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 28.02.13
Wohnort: ---
Version: R2009a, R2016b
     Beitrag Verfasst am: 05.04.2013, 12:48     Titel: Plot aus einer Schleife an GUI übergeben
  Antworten mit Zitat      
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
       
    Sa=zeros(1,size(Einlesen,1));                                                                 %mein Eigentliches Integral
     
        for g=2:length(S1)
       Sa(g)=Sa(g-1)+S1(g);
        end
    Sa(g+1)=Sa(g);
    % Esekundär berechnen Komentare siehe Eprimär  
   
    S2=zeros(1,(size(Einlesen,1))-1);

        for y = 2:(size(Einlesen,1))-1
        S2(y)=(Einlesen(y,1)-Einlesen(y-1,1))*((Einlesen(y-1,7)+Einlesen(y,7))/2);
        end
   
    Sb=zeros(1,size(Einlesen,1));
   
        for g=2:length(S2)
       Sb(g)=Sb(g-1)+S2(g);
        end
    Sb(g+1)=Sb(g);
        % Ende von Esekundär
   
         M=Sb./Sa;                                                          %Berechnung meines Wirkungsgrads
    Einlesen(:,8)=Sa';
    Einlesen(:,9)=Sb';
    Einlesen(:,10)=M';                                                       %Zeile 57-59 Speichern in meine Ausgabe Tabelle
    [pathstr, Dateiname] = fileparts(File);
    Hilfe3=[pathstr,filesep,Dateiname];
    Dokument=sprintf('%s%s',Hilfe3,'_neu.txt');
    %Speichern der Datei beginnt hier
    fid=fopen(Dokument,'wt');
    fprintf(fid,'%s\t','Time','Primaerspannung','Primaerstrom','Sekundaerspannung', ...
        'Sekundaerstrom','Primaerleistung','Sekundaerleistung','Primaerenergie','Sekundaerenergie','Wirkungsgrad');
     fprintf(fid,'\n');
     fprintf(fid,'%s\t','s','V','A','V','A','W','W','Ws','Ws','%');
     fprintf(fid,'\n');
    fclose(fid);
    dlmwrite(Dokument,Einlesen,'delimiter', '\t','-append');                
    point2comma(Dokument);
    %Alternative Auswertung zu peakfinder...
    %Spiketime=SpikeFinder(Einlesen(:,1),Einlesen(:,5),140000,2e-3,1);
    %Bildname=sprintf('%s%s',names{x},'.bmp');
    %saveas(gcf,Bildname,'bmp');
    %close Figure 1;
    Punkte=peakfinder(Einlesen(:,5));
    peakfinder(Einlesen(:,5));
%%%%%%Hier ist mein kleines Prob%%%%%%%%%%%%%%%%%
    Bildname1=sprintf('%s%s',Hilfe3,'_1.jpg');
    saveas(gcf,Bildname1,'jpg');
    close Figure 1;
    Bildname=Bildname1;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
    if Auswertung==1  
        Endspalte=peakfinder(Einlesen(:,10));
   
        if isempty(Endspalte)
            Wirkung=Einlesen(:,10).*100;
            Hilfe1=(Wirkung<100);
            Hilfe2=(Wirkung.*Hilfe1);
            Wirkung=max(Hilfe2);
            Endspalte=find(Einlesen(:,10)==(Wirkung/100));
            Endzeit=Einlesen(Endspalte,1);
        else
            Endspalte=max(Endspalte);
            Wirkung=Einlesen(Endspalte,10)*100;
            Wirkung=max(Wirkung);
            Endzeit=Einlesen(Endspalte,1);
        end
        Durchschlagszeitp=Einlesen(Punkte,1);
        EndDurchschlag=length(Durchschlagszeitp);
        Durchschlagszahl=length(Punkte);
        Brennzeiteinzel=diff(Durchschlagszeitp);
        BrennzeitFunken=[Brennzeiteinzel;(Endzeit-Durchschlagszeitp(EndDurchschlag))];
        FunkenZeit=sum(BrennzeitFunken);
        Imax(1:length(Durchschlagszeitp))=Einlesen(Punkte,5);
        Excelkopf={'Durchschlagzahl','Brennzeit','max. Wirkungsgrad','Brenndauer','Durchschlagsdauer','Imax','t zu Imax';'-','sec.','%','-','sec.','A','sec.'};
        ExcelKoerper1=[Durchschlagszahl,FunkenZeit,Wirkung];
        ExcelKoerper2=[(1:length(BrennzeitFunken))',BrennzeitFunken,Imax',Durchschlagszeitp];
        Tabelle=sprintf('%s%d','Tabelle',x);
        xlswrite('Auswertung.xls',Excelkopf,Tabelle,'A1');
        xlswrite('Auswertung.xls',ExcelKoerper1,Tabelle,'A3');
        xlswrite('Auswertung.xls',ExcelKoerper2,Tabelle,'D3');
    else
        %Endspalte=peakfinder(Einlesen(:,10));
    end
    x=x+1;
    if (x>length(names)) ,break,end
    end
    xlswrite('Auswertung.xls',(x-1),'Tabelle1','P1');
end
if Mittelwert==1
    format('long')
    actxserver('Excel.Application');
    for Linkanzahl=1:size(Ordner,1)
   

        dateien=Ordner{Linkanzahl,1};
                                                 
        cd(dateien);
        %[pathstr, Dateiname] = fileparts('Auswertung.xls');
        Verlauf=xlsread('Auswertung.xls','Tabelle1','P1');
        bildnummer=cell(1,Verlauf+2);
        ExcelKoerper1=zeros(Verlauf,3);
        for x=1:Verlauf
       
            File=sprintf('%s%d','Tabelle',x);
            nummerbild=sprintf('%s%d','Verlauf_',x);
            bildnummer{x}=nummerbild;
            ExcelKoerper1(x,:)=xlsread('Auswertung.xls',File,'A3:C3');
        end
        bildnummer{Verlauf+1}='';
        bildnummer{Verlauf+2}='Mittelwert';
        bildnummer=bildnummer';
        LetzteZeile=sprintf('%s%d','B',(Verlauf+4));
        Letzte=cell(1,1);
        Letzte{1}=LetzteZeile;
        ExcelKoerper2(1)=mean(ExcelKoerper1(:,1));
        ExcelKoerper2(2)=mean(ExcelKoerper1(:,2));
        ExcelKoerper2(3)=mean(ExcelKoerper1(:,3));
        Excelkopf={'Bild','Durchschlagzahl','Brennzeit','max. Wirkungsgrad';'-','-','sec.','%'};
       
        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


hoffe Ihr könnt mir helfen...

LG Florre
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.04.2013, 13:07     Titel:
  Antworten mit Zitat      
Hallo,

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:
Code:


Siehe auch:
Code:


Zitat:
und gibt es eine Möglichkeit das Bild immer wieder an meine GUI zu senden??

Diese Frage verstehe ich nicht.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Florre
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 28.02.13
Wohnort: ---
Version: R2009a, R2016b
     Beitrag Verfasst am: 05.04.2013, 13:39     Titel:
  Antworten mit Zitat      
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');
    close Figure 1;
...
    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...

in meiner GUI wird das Bild über
Code:
       axes(handles.Peaks);
        Beispiel=imread(Bildname);
        image(Beispiel);axis image;
        axis off; axis image;

Eingelesen

So und nun wo das Bild entsteht...
Es sind 2 Funktionen ich hänge die einfach mal als Dateien mit ran..
Alternativ kann man sie sich auch hier runterladen...
http://www.mathworks.com/matlabcent.....nder/content/peakfinder.m

Peakfinder.rar
 Beschreibung:

Download
 Dateiname:  Peakfinder.rar
 Dateigröße:  3.3 KB
 Heruntergeladen:  249 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.04.2013, 14:07     Titel:
  Antworten mit Zitat      
Hallo,

zum close-Befehl habe ich ja schon etwas gesagt.

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


Du musst dazu lediglich noch die handles-Struktur an die Funktion Auswertung übergeben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Florre
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 28.02.13
Wohnort: ---
Version: R2009a, R2016b
     Beitrag Verfasst am: 05.04.2013, 14:33     Titel:
  Antworten mit Zitat      
Hallo Harald danke für die Tips.. Ich glaub das bekomm ich hin.

Danke für deine Hilfe...

Werd mal weiter Basteln..


LG Florre
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 - 2025 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.