Werte eines sich verändernden Arrays addieren

TL6

Level-1
Beiträge
1
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.

Mein Ziel ist das Flattern eines analogen Messwerts zu unterdrücken. Meine Idee war, die Werte nacheinander in ein Array mit der Größe x zu schreiben und dann den Mittelwert des Arrays zu berechnen. Sobald das Array voll ist und es von vorn neu überschrieben wird, addiert es aber bis jetzt die neuen Werte auf die Summe der x Summanden wodurch die Mittelwertberechnung nicht mehr klappt.
Code:
WHILE Datenindex<199 DO
    Daten[Datenindex]:=MV_Temperatur;
    Summe:=Summe+Daten[Datenindex]; (*die Zeile muss ersetzt werden*)
    Datenindex:=Datenindex+1;
END_WHILE;

IF Datenindex=199 THEN
    Datenindex:=0;
    voll:=TRUE;
END_IF;

IF voll=TRUE THEN
    AnzahlWerte:=200;
    ELSE
        AnzahlWerte:=Datenindex;
END_IF;

Temperatur_MW:=Summe/AnzahlWerte;
Wie kann ich es in ST umsetzen, dass es immer nur die Summe der aktuell im Array gespeicherten x Werte berechnet? Ich bin dankbar für jegliche Denkanstöße.
 
Moin so wie du das ganze angegangen bist wird das nicht funktionieren.

die While schleife wird so lange aufgerufen bis der index über 199 ist und das in einem zyklus. ich denke nicht das sich dein messwert in einem zyklus ändert oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die ganz exakte aufwendige Variante:
Code:
  Daten : Array [0..9] OF REAL;
END_VAR

Datenindex := Datenindex MOD 10;     //sicherstellen daß Datenindex ist 0..9
Daten[Datenindex] := MV_Temperatur;
Datenindex := Datenindex + 1;        //Datenindex ist ab hier 1..10 !

IF Datenindex > Anzahlwerte THEN
  Anzahlwerte := Datenindex;
END_IF;

Summe := 0.0;
FOR i := 0 TO AnzahlWerte - 1 DO
  Summe := Summe + Daten[i];
END_FOR;

Temperatur_MW := Summe / AnzahlWerte;

Praktisch ausreichend gut: wenn das Array mit allen Werten = 0.0 startet, dann braucht man keine Schleife (der Mittelwert steigt dann während der ersten Array-Füllung in 10%-Schritten):
Code:
Datenindex := Datenindex MOD 10;     //sicherstellen daß Datenindex ist 0..9
Summe := Summe - Daten[Datenindex] + MV_Temperatur;
Daten[Datenindex] := MV_Temperatur;
Datenindex := Datenindex + 1;        //Datenindex ist ab hier 1..10 !
Temperatur_MW := Summe / 10;

Wie ist Deine Zykluszeit? Wie schnell liefert der Analogeingang neue Werte?

Harald
 
Zurück
Oben