TChart, Grafen zeichnen || Messwerte abspeichern



  • Hi,

    nun tüftle ich schon längere Zeit daran ein Diagramm aus Messwerten zu zeichnen.
    Die Messwerte werden über einen längeren Zeitraum aufgezeichnet, je nachdem wie's der Anwender haben will.
    X-Achse: Zeitraum der variieren kann (Minuten, Stunden, Tage, Monate)
    Y-Achse: Messwerte (Lux, Celsius, Zustand EIN od. AUS)

    weiters wollt ich noch fragen wie ich die Messwerte am besten in eine Datei speichere damit ich dann beim auslesen nicht allzu große Probleme habe. Bis jetzt schreibe ich sie folgendermaßen rauß:
    DATUM | Uhrzeit | Wert+Einheit für jeden Wert eine neue Zeile
    das sieht dann so aus:
    15.05.2005 | 13:55:17 | 57 Lux
    15.05.2005 | 14:55:17 | 60 Lux
    15.05.2005 | 15:55:17 | 80 Lux usw.

    ich habe aber leider noch keine Ahnung wie ich dann am besten an den Lux Wert rankomm bzw. wie ich abfrage wie groß der Zeitraum ist.

    DANKE im Voraus


  • Mod

    Hallo

    ich wuerde diese Messwerte in einer DB abspeichern
    (ist leichter an die Werte ranzukommen - besonders wenn es viele Werte sind)

    MfG
    Klaus



  • Hallo,

    Ich halte eine Datenbank für das Abspeichern von Meßwertreihen etwas übertrieben. Normale ASCII-Dateien tun es mit Sicherheit auch. Ich mach das jedenfalls so. An meinem Institut haben wir Meßreihen die über Jahre gehen.
    Wie du sie speicherst ist eigentlich egal aber am Einfachsten ist es sicher einfach
    Zeit Wert
    In einem Dateiheader kannst du dann z.Bsp. die Einheiten angeben. Die Einheiten sollten sich dann in dieser Datei aber nicht mehr ändern. In deinem Beispiel ist die Angabe der Einheit bei jeden Wert sicher nicht nötig.

    Ciao



  • Danke mal soweit, aber mein wirkliches Problem, nämlich wie ich ein Diagramm hinbekomm hat sich dadurch auch nicht gelöst.

    thx



  • Wenn du TChart verwenden willst.
    Erzeuge eine Form
    Packe eine TChart-Komponente drauf
    öffne den Eigenschaftseditor von TChart und füge eine Serie hinzu (LineSeries)
    Nun brauchst du nur noch deine Daten einzulesen und mit TLineSeries::AddXY() deine Daten hinzufüge.
    Das wars.



  • Danke, bitte korrigier mich aber in meinem Fall würde das etwa so aussehen, wenn ich dich richtig verstanden hab:

    [cpp]
    frmGrafikAnz -> TChart1 -> Series1 -> AddXY(X_Array[],Y_Array[]);
    [/cpp]
    

    oder nicht?



  • Die Funktion fügt einzelne Werte in eine Serie ein. Für dein Array würde das z.Bsp. so aussehen

    for( int i=0; i<count; ++i )
      frmGrafikAnz -> TChart1 -> Series1 -> AddXY(X_Array[i],Y_Array[i],"",clTeeColor);
    


  • Hi, danke für die Antwort!

    Habs jetzt mittlerweile folgendermaßen gelöst:

    [cpp]
    int i=1;
    int datei = FileOpen("Daten\\History.txt", fmOpenRead);
    int BytesToRead = sizeof (struct Parameter);
    int length = FileSeek(datei,0,2);
    int position = FileSeek (datei,0,0);
    
    //Grafikanzeigen löschen damit diese nicht "überzeichnet" werden
    frmGrafik -> Series1 -> Clear();
    frmGrafik -> Series2 -> Clear();
    frmGrafik -> Series3 -> Clear();
    frmGrafik -> Series4 -> Clear();
    
            while(position < length)
            {FileRead (datei, &stPrmtr_read, sizeof(struct Parameter));
             frmGrafik -> Series1 -> Add(stPrmtr_read.lux, "",clRed);
             frmGrafik -> Series2 -> Add(stPrmtr_read.vorlauf, "",clRed);
             frmGrafik -> Series3 -> Add(stPrmtr_read.speicher, "",clRed);
             frmGrafik -> Series4 -> Add(stPrmtr_read.ruecklauf, "",clRed);
             BytesToRead = sizeof (struct Parameter) *  i;
             i++;
             position = FileSeek(datei, BytesToRead, 0);
            }
    
    FileClose(datei);
    
    [/cpp]
    

    Ich hohl mir dabei die gespeicherten Werte aus der History.txt (wo ich sie über eine Struktur reingespeichert hab). Und die Werte werden so lange rausgeschrieben bis ich das Ende der Datei erreicht hab.

    Wie gefällt euch diese Lösung??? 😃
    Gibts noch bessere???

    mfg Tom



  • Hallo
    ich weiss nicht, wie man über der TChart-Komponente Daten aus einer Datenbank anzeigen lassen kann. Über der TDBChart wäre es ja kein Problem.
    Ich müsste höchstwahrscheinlich eine LINE-Series erzeugen dann die Funktion ADDXY, die angeboten wird, benutzen. Ich muss die Time-Werte aus der Datenbank auf die x-Achse transferieren und die Messwerte auf die y-Achse übergeben. Jedoch kann ich meine Zielsetzung nicht programmtechnisch umsetzen. 😕
    Ich wäre für jede lehrreiche Antwort dankbar



  • Hallo,

    Was für ein Problem hast du denn genau? Ich glaube auch, dass es besser wäre, wenn du für deine Frage einen neuen Thread aufmachen würdest.
    Ansonsten beschäftigt sich dieser Thread in etwa mit deinem Thema (siehe Seite 4).
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-110865

    Ciao



  • Danke für den Tip
    ich hab meine Problemstellung kopiert und dort abgesendet.
    Ich will Daten auf Tchart grafisch darstellen und weiss nicht wie ich auf die datenbank zugreifen kann um die daten grafisch dartsellen zu können. Allgemein über datenzugriff weiss ich bescheid nur nicht wie das mittels TCHart-Komponente funktioniert...da bin ich überfragt.
    Ich will über der Line-series die Zeit auf der x-Achse darstellen und auf der y-Achse die Messwerte. Alle Daten (Zeit und Messwerte) sind in der Access- datenbank gespeichert. Die grafische Darstellung über der TCHart soll bessere Evaluationsmöglichkeiten der Daten bieten. Wie kann ich dies realisieren? Hat jemand vielleicht ein Rat 😕



  • Du solltest dein Problem nicht in diesen Thread kopieren, sondern dir Seite 4 dieses Threads einmal durchlesen. Da ist im Prinzip beschrieben wie man Daten aus einer Datenbank holt und in ein Chart einfügt.



  • Stimmt seite 4 sehe ich auch erst jetzt
    hier sind wirklich gute codes; versuch nun mein problem zu beseitigen
    danke


Anmelden zum Antworten