Histgramm, Newbie braucht ein wenig Hilfe

karnik
2010-02-15
2010-02-18
  • karnik - 2010-02-15

    Hallo Zusammen!

    Ich bin mit der Programmierung noch nicht so erfahren und brauche etwas Hilfe, leider komme ich mit der Suchfunktion nicht weiter!

    Ich möchte einige Analog-Werte in der Visualisierung als Kurve darstellen.

    In der Trendanzeig ewerden ja nur die Werte dargestellt, wenn die Visualisierung betrachtet wird. Deshalb bin ich auf das Histogramm gegegangen.

    Ich habe dazu ein Array (ARRAY[1..200] OF REAL; ) erstellt, mit dem ich die letzten 200 Werte darstellen kann. Wenn ich die 200 Werte voll habe wird das Array wieder von 1 an beschrieben. D. h. die Kurve von meinem Histgramm wird wieder von vorne an überschrieben.

    Eleganter wäre es wenn natürlich wenn die komplette Kurve immer eins nach links verschoben werden würde, wenn der 201., 202. --- Wert erfasst wird.

    Wie kan nich das Array ähnlich einem Fifo Buffer um einen Wert verschieben?

    Vielen Dank für eure Hilfe

    Karnik

     
  • raadya - 2010-02-15

    Hallo,

    du kannst die Werte im Array ganz einfach verschieben:

    VAR
      myArray: ARRAY [0..20] OF REAL;
      ValueCnt : INT; (* Position im Array *)
      i : INT; 
    END_VAR
    (* Falls Buffer am End ist, wird Array nach links verschiben*)
    IF ValueCnt = 20 THEN
         FOR i := 1 TO 20 DO
          myArray[i-1] := myArray[i];
         END_FOR;
       ValueCnt := 20;
    ELSE
       ValueCnt := ValueCnt + 1;
    END_IF;
    (* Aktuellen Wert speichern *)
    myArray[ValueCnt]:= 
    
     
  • karnik - 2010-02-16

    Hallo!

    Vielen Dank für die Antwort.

    Was ist mit ar1 gemeint? Hoer sollte doch die Position im Array stehen oder nicht?

    Karnik

     
  • raadya - 2010-02-16

    aha... ein Fehler im Code. Es sollte "myArray" da stehen.

    Ich habe schon Edit gemacht.

     
  • karnik - 2010-02-16

    Hallo!

    Leider funzt das ganze so nicht.

    Du fragst ValueCnt auf 200 ab und setzt es in der Schleife wieder auf 200. Da läuft ValueCNT über die 200 weiter, weil beim nächsten Durchlaufen ja auf 201 weitergezählt wird. Mit einen Vergleich auf > 200 funktioniert es.

    Ausserdem werden bei mir die Werte nicht richtig wiedergegeben. Beim ersten ausfüllen bis Index 200 sind die Werte "Normal" danach, beim verschieben, werden sie irgentwie umgerechnet und ich erhalte Fantasiewerte.

    Gruß

    Karnik

     
  • raadya - 2010-02-17

    Hallo,

    ja, stimmt. Es gibt wirklich Fantasiewerte.

    Ich habe es einmal probiert, es hat funktioniert. Super, es ist so einfach.

    Aber nach längere Analyse habe ich auch ermittelt, das es eine blöde Sache war

    Ich habe das Code oben geändert und geprüft, es funktioniert.

     
  • karnik - 2010-02-18

    Hallo!

    Diese Lösung funktioniert!

    Vielen Dank!!

     

Log in to post a comment.