Analogsignalausgabe auf TChart



  • ich habe ein US-Schnittstellenmodul und möchte eine analoge Eingangsspannung (+/- 10V) auf einen Chart ausgeben. Das Modul liefert ein 16 Bit unsigned int Wert. Über folgende Funktion lässt sich der Wert auslesen:

    int cbAIn(int BoardNum, int Channel, int Range, unsigned short *DataValue);
    

    Ich habe einen TTimer verwendet zum auslesen:

    void __fastcall TfrmHO::timTimer(TObject *Sender)
    {
       status = cbAIn(0, 0, 1, &dataValue);
       float x = 10.0 - (20*(dataValue / 65536.0)); //65536 sind die 16Bit
       Series1->Add(x,"",clRed); //Ausgabe auf Chart
    }
    

    der Parameter Range (hier 1) entspricht +/- 10 V. BoardNum = 0 ist ein Software-DemoBoard, das auf Channel 0 (Analogeingang) ein Sinus erzeugt.

    Die Berechnung müsste ja so richtig sein oder? Wie bekomm ich ein stehendes Signal auf dem Chart. Jetzt läuft ja die X-Achse mit dem Timer mit, was nicht so toll is.



  • Also ich mach das immer so, dass ich den Datenpunkt (0) ganz links lösche, und dann einen neuen Datenpunkt mit "Add()" hinzufüge. So läuft das Signal von rechts nach links durch. Wie beim Performance-Diagramm.



  • wie löscht man den ersten Datenpunkt? Ich habe leider mit der Chart-Komponente so gut wie keine Erfahrungen.



  • Also es geht ungefähr so:

    // Ersten Punkt in Diagrammen löschen:
    Series1->Delete(0);
    
    // Die X-Werte der Datenpunkte in allen Diagrammen dekrementieren.
    // Dabei werden die Datenpunkte um einen Punkt nach links verschoben:
    // =================================================================
    for(int count= 0; count < (Series1->Count()-1); count++)
    {
     Series1->XValues->Value[count]--;
    }
    
    // Neuen Punkt rechts anhängen	  
    Series1->Add(float_Y_Wert,String_X_Achsenbeschriftung,clRed);
    

  • Mod

    Hallo

    keine Ahnung ob das besser ist oder ob es funktioniert

    PerformanceGraph

    Mfg
    Klaus


Log in to reply