Problem bei dynamischer Visuallisierung mit Matlab

Von: , Frage gestellt am Di, 5. Sep 2006

Hallo Leute ich brauche mal eure Hilfe in Matlab.
Ich bin absoluter Neuling auf dem Gebiet und habe folgendes Problem.
Ich habe Matlab an einen Mikrocontroller angeschlossen der mir über die serielle
Schnittstelle seine Daten liefert(Temperatur, Luftfeuchtigkeit, Licht und Reichweite).
Ich will die Daten in Matlab einlesen und halt grafisch darstellen. Ich habe das auch so weit hin bekommen,
dass Matlab die Daten statisch
mittels der Plot-Funktion grafisch darstellt.
Ich schreibe dafür die ankommenden Daten die ja laufend aktualisiert werden in ein Array
mit von mir festgelegter Grösse und lasse dann das Array plotten.
Mein Problem ist jetzt, wie ich das hin bekomme, dass ich die Daten
dynamisch darstellen kann,sprich die Werte sollen sich in der Grafik selbst fortlaufend aktualisieren.

Hätte einer da evtl einen Tipp für mich ?

clear all;
s = serial('COM1','BAUD',19200,'DataBits',8,'StopBits',1,'FlowControl','hardware');
fopen(s);
fid=fopen('test.dat','w')
i=1;
counter=1;
for counter=1:50
        if i==21
        i=i-20;
         end;
tlog=false; %Logical initialisieren
    while ~tlog
tline=fscanf(s);   %naechste Zeile aus ASCII-File holen
index_s=regexpi(tline,'Hauptboard'); %String in tline suchen
             if ~isempty(index_s)    %Treffer?
                    tlog=true;
                     for j=1:4
                       index_s=regexpi(tline,':-(');
                        if isempty(index_s)
                                 index_sem=regexpi(tline,',');   %Trennzeichen suchen, wird hier
                                  %nicht ausgewertet
                                  temp=strrep(tline,',',' '); %Trennzeichen durch Blank ersetzen
                                  string=strread(temp,'%s',6);    %String-Array erzeugen, Anzahl
                                  %der Variablen angeben
                                  temperatur(i,j)=sscanf(char(string(3)),'%d'); %Array-Elemente ausgeben
        
                                  luftfeuchtigkeit(i,j)=sscanf(char(string(4)),'%d'); %Array-Elemente ausgeben
                                  licht(i,j)=sscanf(char(string(5)),'%d'); %Array-Elemente ausgeben
                                  reichweite(i,j)=sscanf(char(string(6)),'%d'); %Array-Elemente ausgeben
                                  board(j)=true; 
                        else
                            board(j)=false;
                        end;%zweites if
                       tline=fscanf(s);
                     end %for-Schleife
                  end; %erstes if

    end % while Schleife
i=i+1;


end %erstes For

fclose(s);
fclose(fid);

%--------------------------PLOT-Funktion----------------------------------


for i=1:20
x(i)=i;
end
 a1=temperatur;
 a2=luftfeuchtigkeit;
 a3=reichweite;
 a4=licht;
        for j=1:4
        if board(j)==true
        ya1=a1(:,j);
        ya2=a2(:,j);
        ya3=a3(:,j);
        ya4=a4(:,j);
            
       figure;
       plot(x,ya1,x,ya2,x,ya3,x,ya4);
       
       grid on;
        end;%if
        end

2 Antworten zu dieser Frage

  1. Antwort von nach 7 Stunden 0 hilfreich
    Re: Problem bei dynamischer Visuallisierung mit Ma

    Ich schreibe dafür die ankommenden Daten die ja laufend
    aktualisiert werden in ein Array
    mit von mir festgelegter Grösse und lasse dann das Array
    plotten.
    Mein Problem ist jetzt, wie ich das hin bekomme, dass ich die
    Daten
    dynamisch darstellen kann,sprich die Werte sollen sich in der
    Grafik selbst fortlaufend aktualisieren.

    Hallo,

    am einfachsten, du beschreibst das Array "auf Umschlag", soll heissen, wenn es voll ist fängst du vorne wieder an. Dann enthält es automatisch immer die letzten n Datensätze.

    Wenn du deine fortlaufend beschriebene Logdatei behalten willst, was ja einiges für sich hat, dann nimmst du einfach in bestimmten Zeitabständen die letzten n Zeilen aus der Datei, der Effekt ist derselbe.

    Gruss Reinhard

  2. Antwort von nach einem Tag 0 hilfreich
    Re: Problem bei dynamischer Visuallisierung mit Ma

    Hallo Reinhard,
    danke für deine Antwort. Ich habe nur ein paar Sachen nicht genau verstanden, wie du die meinst weil wie erwähnt ich bin absolut neu auf dem Gebiet. Also ich habe das mit der Log Datei nur mal zum testen gemacht, ich nehme jetzt die gesamten Daten direkt aus dem Workspace und lasse sie da rein schreiben. Nur ich bekomme das einfach nicht hin, dass der die Daten kontinuierlich in der Grafik aktuallisiert. Das Array wird ja immer neu beschrieben, dafür habe ich ja die Abfrage gemacht, wenn i>20 wird. Nur könntest du mir vielleicht noch mal helfen weil ich weiss nicht wo ich die Endlosschleife anbringen muss (was ich doch muss oder? ) damit der die Daten richtig plottet und auch die Daten aktullisiert.

    Vielen lieben Dank für deine Hilfe! [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!