Exportieren von Messungen: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
Zeile 91: Zeile 91:
</source>
</source>


*[[https://wiki.hshl.de/wiki/index.php/Messungen_mit_dSPACE_ControlDesk#3._Recorder_konfigurieren speichern von Messungen in dSPACE ControlDesk]]
*[https://wiki.hshl.de/wiki/index.php/Messungen_mit_dSPACE_ControlDesk#3._Recorder_konfigurieren speichern von Messungen in dSPACE ControlDesk]


----
----
→ zurück zum Hauptartikel: [[Praktikum_SDE|Praktikum SDE]]
→ zurück zum Hauptartikel: [[Praktikum_SDE|Praktikum SDE]]

Aktuelle Version vom 11. Mai 2023, 14:26 Uhr

<- zurück

Im Folgenden wird beschrieben, wie man Exportierte Messungen in MatLab laden kann. Dieses How To basiert auf der Anleitung aus Durchführen von Messungen. Getestet mit MatLab 2013b (Notation kann sich ändern, bei anderen Versionen!).

Laden der Messung in MatLab

Nach dem Start von MatLab sollte man zu der *.idf-Datei der Messung, welche man anzeigen möchte, navigieren. In dem entsprechenden Ordner gibt man folgenden Befehl in der Befehlszeile ein (Anstelle von "v" sollte man seinen Dateinamen schreiben. Wenn die Datei nicht im gleichen Ordner wie der aktuelle Pfad liegt, so empfiehlt sich ein relatives Linking oder einfach den ganzen Link zu der Datei anstelle von "MESSNAME" eintragen):

data = load('MESSNAME.mat');

Auswählen von Daten aus der Messung

Um einzelne Daten aus der Messung zu laden empfiehlt es sich folgende Notation zu benutzen:

TIME = data.MESSNAME.X.Data';
DATA1= data.MESSNAME.Y(1).Data';

An dieser Stelle ist darauf zu achten, dass die Daten innerhalb der Messung immer unter der Notation "VarName"."Messungsname" zu finden ist. Die Zeit in einer Messung wird als "X"-Achse dargestellt. Da die Zeit für den Import in einem Modell wichtig ist, sollte diese immer extrahiert werden. Alle weiteren Daten lassen sich unter "Y" finden. An dieser Stelle kann man entweder über die Position an die Daten kommen oder wenn man dies nicht kennt, aber den Namen des Signals empfiehlt sich folgende Notation:

TIME = data.MESSNAME.X.Data';
for k=1:size(data.CD_Messung_V.Y,2)
    if strcmp(data.CD_Messung_V.Y(k).Name , 'GESUCHTES_SIGNAL1')
        SIGNAL1= [TIME data.CD_Messung_V.Y(k).Data'];
    elseif strcmp(data.CD_Messung_V.Y(k).Name , 'GESUCHTES_SIGNAL2')
        SIGNAL2= [TIME data.CD_Messung_V.Y(k).Data'];

%% An dieser Stelle können noch weitere Signale abgefragt werden
    end
end

Dieser SourceCode durchsucht die gesamte Messung nach dem gesuchten Signal und speichert dieses in eine Variable zusammen mit der Zeit. Die Form des gespeicherten Signales entspricht hierbei der Form Mx2 und ist jeweils eine Verbindung zwischen dem Datenwert und der dazugehörigen Zeit. Dadurch kann Simulink diese Daten "in Echt" darstellen.

Einbinden der Messung in Simulink

Die Daten aus der Messung können nach dem Extrahieren durch das hier dargestellte Script direkt in Simulink geladen werden. Dies passiert über die Funktion "Source"->"From Workspace". Dort kann dann einfach der entsprechende Name der Variablen anstelle von "simout" eingetragen werden und schon lädt Simulink die entsprechenden Daten. Jedoch funktioniert dies in dieser Einfachheit nur mit dem unten abgebildeten Script.

Beispiel eines Scriptes zum Extrahieren von Daten

Das Beispiel soll verdeutlichen, wie man die Daten aus der Messung extrahiert. An dieser Stelle sei bemerkt, dass man die Signalnamen und Dateinamen für den eigenen Fall anpassen muss. Gleichfalls muss der Output an die Anzahl der Signale abgepasst werden.

function [TIME, SIGNAL1, SIGNAL2, SIGNAL3, SIGNAL4, SIGNAL5] = extract()
data = load('MESSNAME.mat');
TIME = data.MESSNAME.X.Data';
for k=1:size(data.MESSNAME.Y,2)
    if strcmp(data.MESSNAME.Y(k).Name , 'SIGNAL1')
        SIGNAL1= [TIME data.MESSNAME.Y(k).Data'];
    elseif strcmp(data.MESSNAME.Y(k).Name , 'SIGNAL2')
        SIGNAL2= [TIME data.MESSNAME.Y(k).Data'];
    elseif strcmp(data.MESSNAME.Y(k).Name , 'SIGNAL3')
        SIGNAL3= [TIME data.MESSNAME.Y(k).Data'];
    elseif strcmp(data.MESSNAME.Y(k).Name , 'SIGNAL4')
        SIGNAL4= [TIME data.MESSNAME.Y(k).Data'];
    elseif strcmp(data.MESSNAME.Y(k).Name , 'SIGNAL5')
        SIGNAL5= [TIME data.MESSNAME.Y(k).Data'];
    end
end
if ~exist('TIME','var')
    TIME = 0;
    fprintf('\nFehler im Export: TIME konnte nicht gefunden werden!');
    err = 1;
end
if ~exist('SIGNAL1','var')
    SIGNAL1= 0;
    fprintf('\nFehler im Export: SIGNAL1 konnte nicht gefunden werden!');
    err = 1;
end
if ~exist('SIGNAL2','var')
    SIGNAL2= 0;
    fprintf('\nFehler im Export: SIGNAL2 konnte nicht gefunden werden!');
    err = 1;
end
if ~exist('SIGNAL3','var')
    SIGNAL3= 0;
    fprintf('\nFehler im Export: SIGNAL3 konnte nicht gefunden werden!');
    err = 1;
end
if ~exist('SIGNAL4','var')
    SIGNAL4= 0;
    fprintf('\nFehler im Export: SIGNAL4 konnte nicht gefunden werden!');
    err = 1;
end
if ~exist('SIGNAL5','var')
    SIGNAL5= 0;
    fprintf('\nFehler im Export: SIGNAL5 konnte nicht gefunden werden!');
    err = 1;
end
if ~exist('err','var')
    fprintf('Fehlerfrei geladen!\n');
else
    fprintf('\n');    
end

end

→ zurück zum Hauptartikel: Praktikum SDE