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

mf4 Dateien einlesen

 

Chicichi
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 15.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.05.2018, 11:33     Titel: mf4 Dateien einlesen
  Antworten mit Zitat      
Hallo Ihr Lieben,

ich würde gerne mf4 Dateien mittels

Code:
mdfObj = mdf('MDFFile.mf4');
data = read(mdfObj);


aus der Vehicle Network Toolbox, die ich installiert habe, einlesen.
Scheinbar wird meine Datei nicht gefunden.
Es erscheint die Fehlermeldung: MDF file not found.

Kann mir hier evtl. jemand sagen woran das liegen könnte?

Liebe Grüße
Chicichi
Private Nachricht senden Benutzer-Profile anzeigen


Chicichi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 15.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.05.2018, 16:53     Titel:
  Antworten mit Zitat      
Ich habe den Filename falsch eingegeben.
Jetzt habe ich das so versucht,

Code:
filename='C:\Users\gher\Documents\Inca\V349484_OPF/R22_0004348.mf4';
mdfObj = mdf(filename);
data = read(mdfObj);


Jetzt wird mir folgender Fehler angezeigt:

MDF file invalid format.

Woran könnte das denn liegen?

Viele Grüße
Chicichi
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 24.07.2018, 10:53     Titel:
  Antworten mit Zitat      
Hallo,

ich stehe leider vor dem gleichen Problem.
Hat du hierzu schon eine Lösung gefunden?

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Hashtag
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 09.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2018, 17:01     Titel:
  Antworten mit Zitat      
Lösung bitte Teilen, da ich in meinem nächsten Tool selbiges verwenden muss
Private Nachricht senden Benutzer-Profile anzeigen
 
equi
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 07.03.17
Wohnort: Tübingen
Version: Matlab 2018a
     Beitrag Verfasst am: 04.10.2018, 15:49     Titel:
  Antworten mit Zitat      
Hallo zusammen,

bei mir funktioniert der Code von Chicichi ohne Probleme.
Hab ihn kopiert und nur den Dateiname geändert (ebenfalls lese ich eine .mf4-datei ein).
Allerdings kann ich dir leider bei deinem Problem trotzdem nicht helfen.
Eventuell ist die MF4 Datei Schadhaft?
Welche Matlab Version verwendest du? Ich habe es mit 2018a versucht
_________________

Grüße Equi Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Krys
Forum-Anfänger

Forum-Anfänger



Beiträge: 33
Anmeldedatum: 05.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.02.2020, 15:11     Titel:
  Antworten mit Zitat      
Moin Matlabianer,

ich muss dringend eine mf4- oder mdf-Datei einlesen. Ich muss auserwählte Daten weiterverarbeiten und letzendlich in einer Excel-Tabelle abspeichern.

Hierfür kann man zB mit folgendem Code arbeiten:

Code:
mdfObj = mdf('MDFFile.mf4');
data = read(mdfObj);


Ich komme damit nicht ganz zurecht bzw. kann ich nicht auf die Daten zugreifen so wie ich es möchte. Ich finde, dass man recht eingeschränkt ist, wenn man nur mit dem mdf-Befehl arbeitet.

Des Weiteren existieren Befehle wie:

Code:
mdfDatastore | mdfInfo | mdfSort | mdfVisualize


So wie ich das verstanden habe, benötige ich hierfür die Vehicle Network Toolbox. Diese habe ich auch installiert. Wenn ich aber zB mdfDatastore verwende, wird mir folgendes im Command Window angezeigt:

Undefined function or variable 'mdfDatastore'.

Kann mir jemand sagen woran das liegt, dass der Befehl nicht definiert ist?
Oder hat jemand eine Idee wie ich die mdf-Datei "angenehmer" einlesen kann, sodass sie nicht als timetable im Workspace vorliegt.

Wenn ich den oben erwähnten Code verwende
Code:
mdfObj = mdf('MDFFile.mf4');
data = read(mdfObj);

dann wird mir folgendes angezeigt --> Not enough input arguments.

Damit das funktioniert, muss ich nämlich mit folgendem Befehl arbeiten

Code:
data = read(m, 1, m.ChannelNames{1}, 1, 10 )


Dann liegen die Daten in einer timetable und das passt mir nicht. Damit weiterzuarbeiten bereitet mir Schwierigkeiten.

Mit den anderen Befehlen wie mdfDatastore könnte ich vielleicht etwas besser mit der mdf-Datei arbeiten.

Viele Grüße
Krys
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.02.2020, 20:44     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Kann mir jemand sagen woran das liegt, dass der Befehl nicht definiert ist?

Welches Release hast du denn? mdfDatastore gibt es seit R2017b.
Ansonsten klingt das nach einer Frage für den Customer Support von MathWorks.

Zitat:
Dann liegen die Daten in einer timetable und das passt mir nicht. Damit weiterzuarbeiten bereitet mir Schwierigkeiten.

Timetables sind die ideale Art, Zeitreihen in MATLAB darzustellen. Wenn du konkrete Fragen zum Umgang mit ihnen hast, gerne Bescheid geben.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Krys
Forum-Anfänger

Forum-Anfänger



Beiträge: 33
Anmeldedatum: 05.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.02.2020, 13:40     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für die schnelle Rückmeldung.

Die erste Frage hast du mir beantwortet. Ich arbeite mit R2016b. Also hat sich das erledigt.

Das einlesen der MDF funktioniert, wenn ich das so mache wie beschrieben.

Code:
m = mdf('Data2F.MDF');


Anschließend sieht m aus wie aus dem folgenden Matlab Beispiel

Code:
m =

  MDF with properties:

   File Details
                 Name: 'CANape.MF4'
                 Path: '\\central-mi\home\jpyle\documents\MATLAB\examples\vnt-ex94427230\CANape.MF4'
               Author: 'Otmar Schneider'
           Department: 'PMC @ Vector Informatik GmbH'
              Project: 'Demo'
              Subject: 'XCPSim'
              Comment: 'Example file created with Vector CANape'
              Version: '4.10'
             DataSize: 176545
     InitialTimestamp: 2016-04-21 14:27:17.000010629

   Creator Details
    ProgramIdentifier: 'MCD14.02'
              Creator: [1×1 struct]

   File Contents
           Attachment: [0×0 struct]
         ChannelNames: {2×1 cell}
         ChannelGroup: [1×2 struct]



Um an die Daten zu kommen, muss ich jetzt mit ChannelNames weiterarbeiten. Bei meiner aktuellen MDF ist ChannelNames ein {24x1} cell.

In der Regel würde ich jetzt folgenden Code verwenden:

Code:
data = read(m, 1, m.ChannelNames{1});


Hiermit würde ich ja nur die Daten aus dem ersten cell einlesen. Ich möchte allerdings alle cells mit einer Schleife einlesen und dann nach ganz bestimmten "Label" oder Daten suchen.

Irgendwie bin ich gerade zu doof das alles in eine Schleife zu packen.

Code:
m = mdf('Data2F.MDF');
lengthChannelNames = length(m.ChannelNames);

for k = 1:lengthChannelNames     %in meinem Fall = 24
    data = read(m, k, m.ChannelNames{k});
end


Ich bin mir auch gar nicht sicher, ob alles unter "data" abgespeichert werden kann oder ob ich für jeden cell einen neuen Namen wählen muss/kann.
also data_1, data_2, data_3 usw.

Ich bin mir sicher, dass es für die Profis unter euch ganz easy ist eine einfach funktionierende Schleife zu basteln.

Viele Grüße
Krys
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.02.2020, 15:00     Titel:
  Antworten mit Zitat      
Hallo,

momentan wird data überschrieben. Ohne die Funktionalität jetzt genauer zu kennen, würde ich es so versuchen:
Code:
data = cell(1, lengthChannelNames);
for k = 1:lengthChannelNames     %in meinem Fall = 24
    data{k} = read(m, k, m.ChannelNames{k});
end


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Krys
Forum-Anfänger

Forum-Anfänger



Beiträge: 33
Anmeldedatum: 05.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.02.2020, 15:24     Titel:
  Antworten mit Zitat      
Das funktioniert Smile
Vielen Dank.

Ein kleines Problem habe ich allerdings noch. Wenn ich den Code so durchlaufen lasse, bricht er bei der 13. cell ab und spuckt diesen Fehler aus

Numerical value returned as physical value unsensible.

Ich kann mir darunter nicht vorstellen.
Der Fehler wird auch ausgegeben wenn ich die 13. cell einzeln einlesen möchte.

Code:
data_13 = read(m, 13, m.ChannelNames{13});


Ich verstehe den Fehler nicht ganz, weil in dem Cell wie in allen anderen Cells nur die Namen der Daten bzw. Label enthalten sind.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.02.2020, 15:30     Titel:
  Antworten mit Zitat      
Hallo,

da bin auch ich ratlos.
Hast du denn eine andere Möglichkeit, die Datei anzusehen und zu schauen, ob an der Datei bzw. diesem Kanal möglicherweise etwas nicht stimmt?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Feuervogel
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 30.04.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.02.2022, 20:49     Titel: Kanal Namen als string
  Antworten mit Zitat      
Ein Nachtrag zu diesem Thema.
ich versuche aus m.ChannelNames die Variablennamen als String zu extrahieren.

for n=1:k
Matrix(k)=string(m.ChannelNames{n})
for b = 1:2 (Die Variablen haben 1.Zeile Namen und 2. Zeile die Einheit)
Tab(b,n) = Matrix (b,n)
end
end

Einzeln lassen sich die Variablen zum String konvertieren aber nicht in einer Schleife.
Gibt es eine Methode wie man das macht oder einfach eine Variablennamen im Cell sucht? Das würde ja auch gehen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.02.2022, 21:54     Titel:
  Antworten mit Zitat      
Hallo,

wenn es keinen direkten Zusammenhang zur vorherigen Frage gibt, bitte ein neues Thema aufmachen.

Zitat:
Einzeln lassen sich die Variablen zum String konvertieren

Wie genau machst du das einzeln?

Zitat:
aber nicht in einer Schleife.

Was passiert in der Schleife? Ist Matrix irgendwie initialisiert?

Die Verwendung Matrix(k) deutet für mich auf ein 1D-Array hin, die Verwendung von Matrix (b,n) auf ein 2D-Array. Das passt m.E. nicht zusammen.

Generell kann man leichter helfen, wenn Probleme reproduzierbar sind. Wenn ich raten soll, dann wohl etwas wie im Beitrag von 21.02.2020, 12:40? Wissen ist mir aber generell lieber als raten. Zumal ich daran nicht sehe, was in dem 2x1 Cell Array "ChannelNames" nun drin ist.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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 - 2024 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.