nun möchte ich, dass die Variable, in der die Messpunkte der zweiten Spalte geschrieben werden, den Namen hat, der bei TraceName steht.
Also in diesem Fall CH2 und ohne die vielen Leerzeichen und Anführungszeichen.
Denn in einer anderen csv Datei könnte dort auch CH5 stehen.
Mein bisher verwendeter Code:
Code:
%% Anleitung
% Die csv Dateien müssen und DÜRFEN! in keiner Weise bearbeitet werden. % Beim Ausführen des Skriptes öffnet sich ein Windows Dialogfenster mit dem % die csv Datei ausgewählt werden kann. % Weitere Anleitungen stehen in den jeweiligen Sektionen.
% GUI, um Datei auszuwählen [FileName,PathName] = uigetfile('*.csv','Bitte die gewünschte CSV Datei auswählen');
% Zusammensetzen von Pfad und Filename
fileAndPath=[PathName FileName];
% Auslesen des Headers
fid=fopen(fileAndPath);
header=textscan(fid, '%s %s %s %s %s %s %s %s',16,'delimiter',',');
fclose(fid);
% Alle Zeilen/Spalten der Messwerte einlesen mit Spaltentrennung ,(Komma) % Kann geändert werden zu '\t' falls TAB als Trennzeichen verwendet wird % oder ' ' für Leerzeichen % Für Systeme der Leistungselektronik bleibt Komma
data=dlmread(fileAndPath, ',',17,0);
% Festlegen der Schrittweite zur Daten Reduzierung, % um evntl. "Rauschen" zu minimieren
Datenreduzierungsschritt = 5;
% Berechnen der Zeitachse aus dem Header % Der Wert wird als String aus einer Matrix in einer Matrix gelesen % welche den Header bilden
t_schritt = str2double(header{1,2}{6,1})./Datenreduzierungsschritt;
% Festlegen der Zeiteinheit % 10^3 = ms 10^6 = us 10^9 = ns
Zeiteinheit = 10^3;
t_end = Zeiteinheit.*str2double(header{1,2}{6,1}).*str2double(header{1,2}{9,1});
t = linspace(0 , t_end , t_schritt);
%% Erstellen der Messpunktevektoren if(size(newdata) > [1,1])
ch1 = newdata(:,2);
else
ch1 = 0; %
end if(size(newdata) > [1,2])
ch2 = newdata(:,3);
else
ch2 = 0;
end if(size(newdata) > [1,3])
ch3 = newdata(:,4);
else
ch3 = 0;
end
es giebt möglichkeiten das zu machen. das dynamische erstellen von variablen namen ist aber sehr undschön und birgt mehr probleme als vorteile. ich würde dir das nicht empfehen. der name ist eine information und sollte in der variablen gespeichert werden und nicht im namen. wenn du unbedingt namen erstellen willst dann nimm ein struct. da kann man die fieldnames später wenigstens wieder auslesen. ich würde aber empfehlen das anders zu speichern. wenn das eine tabellen überschrift ist kann man das auch gleich als table speichern. oder halt als struct
vielen Dank für Deine schnelle Antwort.
Ich habe deinen vorschlag ausprobiert. Er entspricht jedoch nicht ganz meiner Vorstellung.
Ich beschreibe mal etwas genauer worauf ich eigentlich hinaus will.
Das Oszilloskop gibt mir ja eine csv Datei und eine Bilddatei.
In dem einen Bild (Strangstrom_Leiterspannung.PNG) ist zu erkennen, dass nur CH2 und CH3 dargestellt werden.
Wenn ich in MatLab die Verläufe "plotte", soll dafür dann auch CH2 und CH3 geschrieben werden.
Wenn ich aber eine andere csv Datei auswähle dann sieht die bspw. folgendermaßen aus:
was in der csv Datei ja der 3 und 4 Spalte entspricht.
Einfach ausgedrückt: Ich möchte mir die csv Datei eigentlich nicht anschauen oder darüber nachdenken welcher Channel in welcher Spalte steht, sondern im plotbefehl nur die CH schreiben die ich auch im Bild sehe. Die Variable soll also den Namen haben der im Header bereits steht.
Falls das zu kompliziert oder unelegant ist, ist das nicht weiter schlimm. Wäre halt nur schön, wenn ich ein fertiges Skript habe, um immer andere csv Dateien einzulesen, vielleicht noch die Daten bearbeiten und dann zu "plotten".
sollen denn wirklich die Variablen unbedingt so heißen (deren Namen du im Plot ohnehin nicht siehst), oder wäre es nicht sinnvoller, die Spaltennamen als Legende für den Plot zu verwenden?
sorry für die späte antwort. Ich hatte viel zu tun.
Es war mehr eine allgemeine frage, ob sich variabeln mit dem namen aus einem vorhanden string erstellen lassen. Ich dachte mir schon, dass es sehr schwierig wird das zu realisieren. Es macht ja eigentlich auch wenig sinn, außer in diesem Ausnahmefall, in dem der variabelnname genau der wäre, der auch im Oszillogrammbild zu sehen ist und nur für die variabeln im plotbefehl genutzt werden soll. In der Legende sollen dann eigentlich Diodenstromm, oder Strangstrom stehen.
Es war mehr eine allgemeine frage, ob sich variabeln mit dem namen aus einem vorhanden string erstellen lassen.
Lassen: ja. Gute Idee ist es aber keine.
Zitat:
diesem Ausnahmefall, in dem der variabelnname genau der wäre, der auch im Oszillogrammbild zu sehen ist und nur für die variabeln im plotbefehl genutzt werden soll.
Und wo soll der Variablenname dann im Plot sichtbar sein? Der Variablenname ist ja nunmal generell nicht im Plot sichtbar.
Grüße,
Harald
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.