Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Fachkräfte:
Entwicklungsingenieur (m/w) für modellbasierte Softwareentwicklung
Modellbasierte Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Softwareentwickler (m/w) für automatische Codegenerierung
Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink im Bereich Fahrwerkregelsysteme
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Elektromobilität: Entwicklungsingenieur Applikation Hybridfahrzeuge (m/w)
Erstellung von Modellen in Zusammenarbeit mit den Software-Entwicklern
MBtech Group GmbH & Co. KGaA - Sindelfingen

Embedded Software- Entwickler (m/w) - Hardwarenahe Software für innovative Steuerungssysteme
Design, Implementierung und Test von Embedded Software
DR. JOHANNES HEIDENHAIN GmbH - Traunreut (Raum Rosenheim)

Testingenieur (w/m) Qualitätssicherung ModelDesk
Erstellung von automatisierten und interaktiven Tests
dSPACE GmbH - Paderborn

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Mehrere speicherung von Variablen möglich in if schleife ?

 

iDexter
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 14.06.16
Wohnort: NRW
Version: R2016a
     Beitrag Verfasst am: 29.05.2017, 13:57     Titel: Mehrere speicherung von Variablen möglich in if schleife ?
  Antworten mit Zitat      
Guten Tag zusammen,

ich habe folgendes Problem. Ich habe eine if schleife in der eine Spannung mit 850 perioden durchlaufen werden soll, die perioden soll aber so verlaufen das immer nach 50 Perioden eine speicherung der Daten erfolgt und dann weitere 50 Perioden gezählt werden, diese sollen dann wieder gespeichert werden und so weiter. Mit den Perioden wurden der mean sowie Max und Min werte berechnet.

MEin Problem ist aber das MAtlab immer nur eine einzige Datei abspeichert oO Warum ist das so oder wo liegt mein Fehler, er soll nach jeder 50 periode den Satz nehmen und abspeichern, damit man sich zu allen 50 Perioden jeweils die werte angucken kann .

meine umsetzung sieht ungefähr so aus:

Code:
filename = 'periode1';
filename2 = 'periode2';
filename3 = 'periode3';



% calculation of Min/Max/Sum/Sum2 from voltage.
%-----------------------------------------------
L_sek = ceil((Perioden + 1- Einschwing)/N);
M1_sum =zeros(L_sek,samples);
M1_sum2 =zeros(L_sek,samples);
M1_min =inf.*ones(L_sek,samples);
M1_max =-inf.*ones(L_sek,samples);
M1_mean = M1_sum./N;
M1_mean2 = M1_sum2./N;
M1_var = M1_mean2 - M1_mean.^2;
M1_var_2 = mean(M1_mean2) - mean(M1_mean).^2;
M1_std_2 = sqrt(M1_var_2);
M1_std = sqrt(M1_var);

% calculation of Min/Max/Sum/Sum2 from current.
%--------------------------------------------
M2_sum =zeros(L_sek,samples);
M2_sum2 =zeros(L_sek,samples);
M2_min =inf.*ones(L_sek,samples);
M2_max =-inf.*ones(L_sek,samples);
M2_mean = M2_sum./N;
M2_mean2 = M2_sum2./N;
M2_var = M2_mean2 - M2_mean.^2;
M2_var_2 = mean(M2_mean2) - mean(M2_mean).^2;
M2_std_2 = sqrt(M2_var_2);
M2_std = sqrt(M2_var);

% calculation of time for one periode [ms].
%---------------------------------------------
t=(0:samples-1)./samples ./50 .*1e3;
%------------------------------------
l=1;

while(EOF ~= true)
   
    [EOF,In,i]=ReadMeasurementsFunction(FileName);
    M= In(:,1:2^15/samples:end);
    M(1,:) =200.*M(1,:);
       
         if( i >= Einschwing);
               k = i- Einschwing;
             if (k - l*N == 0);
                 if (i == 51);
                 save (filename);
                 else
                  if (i == 101);
                  save (filename2);
                  else
                  if (i == 151);
                  save (filename3);
                  else
                  if (i == 201);
 


natürlich sind nach der if anweisungen auch jeweils immer die "end" Zustände vorhanden. diese habe ich jetzt mal hier raus gelasssen. MEine frage stellt sich halt nur, warum matlab nicht nach jeder Anweisung ne speicherung macht? In diesem Fall hat er kurioserweise nur "filename2" abgespeichert , filename1 oder filename3 komischweise nicht oO. wo liegt mein Fehler ?
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.849
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 29.05.2017, 16:52     Titel:
  Antworten mit Zitat      
Hallo
entweder liefert die Funktion ReadMeasurementsFunction falsches Ergebnis für i


oder eine der Bedingungen stimmt nicht, ich tippe auf
(k - l*N == 0);

setze fprintf oder disp um werte zu kontrollieren

PS: ich würde statt if i==51 ... else if i == 101 ...
wegen Übersichtlichkeit switch verwenden


Code:



         if( i >= Einschwing);
               k = i- Einschwing;
             if (k - l*N == 0);
                 switch(i)
                   case 51
                       save (filename);
                   case 101
                       save (filename2);
                  case 151
                       save (filename3);
                  case 201
                  otherwise:
                  end
 


 


Zuletzt bearbeitet von denny am 01.06.2017, 12:33, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
iDexter
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 14.06.16
Wohnort: NRW
Version: R2016a
     Beitrag Verfasst am: 29.05.2017, 18:12     Titel: switch case
  Antworten mit Zitat      
Guten Abend,

erst mal vielen vielen Dank für die Antwort und der mühe. Leider klappt es immer noch nicht 100 %. Ich bin aber auch nicht wirklich so Fit was die Syntax und Programmierung angeht. ist den meine umsetzung so erst mal richtig. Im moment speichert er garnichts Embarassed Crying or Very sad

Code:
samples = 2^7;      %Anzahl meiner Abtastungen
Perioden = 850;     % Anzahl Perioden
N = 50;             % 50 Perioden
Einschwing = 51;    % Abschluss Einschwingvorgang
filename = 'periode';
Test2 = 'periode2';
Test3 = 'periode3';
Test4 = 'periode4';
Test5 = 'periode5';


% calculation of Min/Max/Sum/Sum2 from voltage.
%-----------------------------------------------
L_sek = ceil((Perioden + 1- Einschwing)/N);
M1_sum =zeros(L_sek,samples);
M1_sum2 =zeros(L_sek,samples);
M1_min =inf.*ones(L_sek,samples);
M1_max =-inf.*ones(L_sek,samples);
M1_mean = M1_sum./N;
M1_mean2 = M1_sum2./N;
M1_var = M1_mean2 - M1_mean.^2;
M1_var_2 = mean(M1_mean2) - mean(M1_mean).^2;
M1_std_2 = sqrt(M1_var_2);
M1_std = sqrt(M1_var);

% calculation of Min/Max/Sum/Sum2 from current.
%--------------------------------------------
M2_sum =zeros(L_sek,samples);
M2_sum2 =zeros(L_sek,samples);
M2_min =inf.*ones(L_sek,samples);
M2_max =-inf.*ones(L_sek,samples);
M2_mean = M2_sum./N;
M2_mean2 = M2_sum2./N;
M2_var = M2_mean2 - M2_mean.^2;
M2_var_2 = mean(M2_mean2) - mean(M2_mean).^2;
M2_std_2 = sqrt(M2_var_2);
M2_std = sqrt(M2_var);

% calculation of time for one periode [ms].
%---------------------------------------------
t=(0:samples-1)./samples ./50 .*1e3;
%------------------------------------
l=1;

while(EOF ~= true)
   
    [EOF,In,i]=ReadMeasurementsFunction(FileName);
    M= In(:,1:2^15/samples:end);
    M(1,:) =200.*M(1,:);
       
         if( i >= Einschwing);
             k = i- Einschwing;
         if (k - l*N == 0);
             if (i == 51);
                 save (filename);
                 switch(i)
                 case 51;
                 save (Test2);
                 case 101;                
                 save (Test3);
                 case  151;
                 save (Test4);
                 case 201;
                 save (Test5);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.849
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 01.06.2017, 13:06     Titel:
  Antworten mit Zitat      
Hallo, sorry,
dass ich erst heute antworte, bin selten hier
kannst du vielleicht erklären, was k - l*N == 0 macht ?
ich glaube, das Ganze könnte man durch Modulo einstampfen und man braucht auch kein switch mehr


Code:


samples    = 2^7;   % Anzahl meiner Abtastungen
Perioden   = 850;   % Anzahl Perioden
N          = 50;    % 50 Perioden
Einschwing = 51;    % Abschluss Einschwingvorgang
filename   = 'periode';
 

% calculation of Min/Max/Sum/Sum2 from voltage.
%-----------------------------------------------
L_sek = ceil((Perioden + 1- Einschwing)/N);
M1_sum =zeros(L_sek,samples);
M1_sum2 =zeros(L_sek,samples);
M1_min =inf.*ones(L_sek,samples);
M1_max =-inf.*ones(L_sek,samples);
M1_mean = M1_sum./N;
M1_mean2 = M1_sum2./N;
M1_var = M1_mean2 - M1_mean.^2;
M1_var_2 = mean(M1_mean2) - mean(M1_mean).^2;
M1_std_2 = sqrt(M1_var_2);
M1_std = sqrt(M1_var);

% calculation of Min/Max/Sum/Sum2 from current.
%--------------------------------------------
M2_sum =zeros(L_sek,samples);
M2_sum2 =zeros(L_sek,samples);
M2_min =inf.*ones(L_sek,samples);
M2_max =-inf.*ones(L_sek,samples);
M2_mean = M2_sum./N;
M2_mean2 = M2_sum2./N;
M2_var = M2_mean2 - M2_mean.^2;
M2_var_2 = mean(M2_mean2) - mean(M2_mean).^2;
M2_std_2 = sqrt(M2_var_2);
M2_std = sqrt(M2_var);


% calculation of time for one periode [ms].
% ---------------------------------------------
t = (0:samples-1)./samples ./50 .*1e3;
% ------------------------------------
l = 1;
   
   
while (~EOF)
   
   [EOF, In, i] = ReadMeasurementsFunction(FileName);
   
    M      = In(:,1:2^15/samples:end);
    M(1,:) = 200.*M(1,:);
     
    % hier Modulo verwenden und prüfen ob 50 Periode erreicht wurde:
    if i >= Einschwing && mod(i,N) == 1
       
       % dann filename kann man sich auch generieren lassen
       file_nmbr     = fix(i/N);
       filename2save = sprintf('%s%2d', filename, file_nmbr);
       fprintf('save file %s: \n', filename2save)
       save(filename2save)
    end
   
end



 
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2017 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.