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

Verschiedene Daten aus externer Datei einlesen

 

steph0815
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 23.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.03.2008, 16:42     Titel: Verschiedene Daten aus externer Datei einlesen
  Antworten mit Zitat      
Hallo,

Erst mal Hallo! Bin neu hier und hoffe ihr könnt mir helfen. Ich befasse mich auch noch nicht sehr lange mit Matlab.
Mein Probelm:
ich bekomme Meßdaten von einen µC. Diese sind mit einem Zeitstempel versehen. Das ganze sieht so aus:

    MON 18:00:01 1 0 80 17 7f 34 14 d8
    MON 18:01:01 1 0 80 17 7f 34 14 d8
    MON 18:02:01 1 0 80 17 7f 34 14 e8

Die Schreibweise der Daten nach dem Zeitstempel sind als Hex-Werte dargestellt. Die erste Ziffer, hier "1", stellt die Addresse dar und die letzte das CRC Byte.
Ich habe jetzt versucht die Datei zu öffnen und auszulesen. Das ganze habe ich so versucht:
Code:
>> F=fopen('data.txt','r');
>> A=fscanf(F,'%c%c%c%c%c%c%c%c%c%c%c%c%x%x%x%x%x%x%x%x',[20,inf]);
>> fclose all;

Die erste Zeile ist dann auch richtig. Ab der zweiten dann allerdings erhalte ich das Ergebnis um einen verschoben. In der dritten Zeile erhalte ich nur noch "0" bei den letzten Werten.

Hoffe ihr könnt mir helfen.

Steph0815
Private Nachricht senden Benutzer-Profile anzeigen


outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 23.03.2008, 23:46     Titel:
  Antworten mit Zitat      
wie wärs mit folgendem Code?
Code:
data = textread('data.txt','%s');
data = reshape(data,length(data)/3,3)'

data =

    'MON'    '18:00:01'    '1'    '0'    '80'    '17'    '7f'    '34'    '14'    'd8'
    'MON'    '18:01:01'    '1'    '0'    '80'    '17'    '7f'    '34'    '14'    'd8'
    'MON'    '18:02:01'    '1'    '0'    '80'    '17'    '7f'    '34'    '14'    'e8'

Um HEX zu convertieren kannst Du auch HEX2DEC-Funktion benutzen.


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 24.03.2008, 11:23     Titel:
  Antworten mit Zitat      
Hi,

scheinbar machen die Timestamps Probleme.
Wenn Du auf die verzichten kannst geht es auch so:
Code:
F=fopen('data.txt','r');
A=fscanf(F,'%*s %*s %x %x %x %x %x %x %x %x',[8,inf])'
fclose all;

_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
steph0815
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 23.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2008, 14:40     Titel:
  Antworten mit Zitat      
@nschlange
hast recht so geht das aber zur Auswertung brauch ich den Timepstamp.

@outsider
Das sieht sehr interressant aus. Mein Problem jetzt nur wie ich aus den 3 Datensätzen jeweils einen selektiere und die von allen "sammel". Also mein damit das das erste Byte nach dem Timestamp die Adresse enthält, das zweite und dritte Tempeatur, ... die muss ich jetzt ja in einen eigenen array zusammenstellen.
Hoffe ihr versteh mich.

Danke aber !! Hat schon sehr geholfen!
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 24.03.2008, 16:43     Titel:
  Antworten mit Zitat      
Hi,

dann versuch es so:
Code:
F=fopen('data.txt','r');
A=fscanf(F,'%s %s %x %x %x %x %x %x %x %x',[19,inf]')
fclose all;


Dann kannst Du auf die Texte so zugreifen:
Code:

tag_2=char(A(2,1:3))
zeit_2=char(A(2,4:11))
 


Wenn Du Strings und Zahlen in einer Struktur haben willst musst Du
eine
Code:
verwenden.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
steph0815
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 23.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2008, 19:53     Titel:
  Antworten mit Zitat      
so erst mal vielen Dank an euch beide. So habe ich es erst mal realisisert.

Code:

clear;
close;

data=textread('13-14.maerz.txt','%s');                          % read data
data_length = (length(data)/10);                                % calculate array size
data = reshape(data, length(data)/data_length, data_length);    % reshape array

temp = zeros(8,data_length);            % create temp array
sensor_addr = zeros(1,40);              % create sensor address array
data_sorted = zeros(120,data_length);   % create data array
index_data = ones(1,40);                % create index array
date_sensor = zeros(40,data_length);    % create date array
sensor_index = 1;                       % number of sensors

for i=1:data_length                     % convert char to dec
    temp(1,i) = hex2dec(data(3,i));
    temp(2,i) = hex2dec(data(4,i));
    temp(3,i) = hex2dec(data(5,i));
    temp(4,i) = hex2dec(data(6,i));
    temp(5,i) = hex2dec(data(7,i));
    temp(6,i) = hex2dec(data(8,i));
    temp(7,i) = hex2dec(data(9,i));
    temp(8,i) = hex2dec(data(10,i));
end

date_all(1,:) = datenum(data(2,:),'HH:MM:SS');          % timestamp

B(1,:) = temp(1,:);                     % sensor address
B(2,:)= 256 * temp(2,:) + temp(3,:);    % temperature  
B(3,:)= 256 * temp(4,:) + temp(5,:);    % battery voltage    
B(4,:)= 256 * temp(6,:) + temp(7,:);    % supply voltage

for i=1:data_length
    j = 1;
    while B(1,i) ~= sensor_addr(j)
        j = j + 1;
        if j == 41
            j = sensor_index;
            sensor_addr(sensor_index) = B(1,i);
            sensor_index = sensor_index + 1;
            break
        end
    end            
   
    date_sensor(j, index_data(j))      = date_all(1,i);
    data_sorted((j*3-2), index_data(j))= B(2,i);
    data_sorted((j*3-1), index_data(j))= B(3,i);
    data_sorted((j*3),   index_data(j))= B(4,i);
    index_data(j) = index_data(j) + 1;
   
end  

i = 1;

while i < sensor_index
    figure(i);
    subplot(3,1,1);
    x(1,:) = date_sensor(i,:);
    y(1,:) = data_sorted(i*3-2,:)/8;
    plot(x,y);
    Zoom on;
    datetick('x','HH:MM:SS');
   
    y(1,:) = data_sorted(i*3-1,:)/4096;
    subplot(3,1,2);
    plot(x,y);
    Zoom on;
    datetick('x','HH:MM:SS');
   
    y(1,:) = data_sorted(i*3,:)/4096;
    subplot(3,1,3);
    plot(x,y);
    Zoom on;
    datetick('x','HH:MM:SS');
     
    i = i + 1;
end
       

Das ganze hat nur noch ein Problem. Derzeit habe ich nur einen Sensor und damit läuft das auch ganz passabel. Nur wenn ich mehrere Sensoren habe kriege ich das mit dem Timestamp nicht mehr hin.
Konkret gesagt ist "datenum()" und "datetick()" mein Problem. Ich bekomme es nicht hin die jeweiligen Zeitstempel zum jeweiligen Datensatz zu trennen.
Jetzt meine Frage, wie kann man ein Stringarray erzeugen? Wenn ich z.B. für normale Werte ein Array erzeugen will benutze ich x=zeros(1,10). Nur wie erzwinge ich so etwas für ein Stringarray?

Greetz
Stephan
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.