Ein Messwert Mittelwert bilden

sde628

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich bin Anfänger und hab die Aufgabe einen einzelnen Messwert zu glätten.
Ich soll mit einem ARRAY einen Messwert einlesen, der dann weiter auf die zweite Stelle geschoben wird und so weiter bis zur 10. Stelle und danach wird der Wert aus der Mittelwertbildung rausfgeschmissen.
Wie könnte ich das realisieren?
 
Mit OSCAT gibt es fertige Averager. Aber Vorsicht: In einigen gibts kleine Fehler (vertauschte Codezeilen).

Im Prinzip bastelts Du Dir einen Baustein, idealerweise in SCL.
Eingänge:
-Meßwert
-Gültigkeitstrigger (immer nur neue Werte verwenden!)
-(Anzahl der Werte für Mittelwert)

Ausgang: Mittelwert

Arrayvariablen passen zum Eingangswert wählen. Wenn Eingangswert Int, dann Array in DINT, damit bei der Addition kein Überlauf entsteht!

Grober Ablauf:
(nur wenn MW dynamisch) Eingang "Anzahl der Werte" auf Gültigkeit überwachen!
Wenn Trigger, dann
- Messwert auf Position 0 des Array schreiben
- Summenwert nullsetzen
- Schleife Array von 0 bis Anzahl der Meßwerte -1 addieren Ende Schleife
- Durch Anzahl der Meßwerte teilen --> Wert auf Ausgang schreiben
- Schleife von Anzahl Meßwerte - 2 nach 0 Schrittweite -1 (*rückwärts, um gültige Werte nicht zu überschreiben*)
- Array (index) umkopieren nach Array (index+1)
- ende Schleife
- ende wenn

In der Summe so ~ 15 Codezeilen ( bei sinnvollen Zeilenumbrüchen und Einrückungen ;) ).

Versuch ees einfach mal!!
 
Zuletzt bearbeitet:
Am einfachsten, aber "unflexibel":
MittelWert := (MittelWert + MessWert) / 2
wobei der "MittelWert" rechts von ":=" natürlich der Zustand von der vorherigen Berechnung ist.

Etwas variabler und trotzdem ohne Array:
MittelWert := (MittelWert * a + MessWert * b) / (a + b)
a und b sind "kleine" Werte, z.B. im Bereich 1 bis 5.
Wenn a > b, dann Glättung stärker, wenn a < b, dann Glättung geringer.

Gruss, Heinileini
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Heinileini
Die Aufgabe ist aber ein 10stufiger Averager :cool:
Das Array ist ebenfalls explizit erwähnt.

@sde628
In OSCAT suchst Du nach FILTER_MAV_W. Die Bibliothek kannst Du öffnen und Dir den Code ansehen. Mir war so, als wenn das da sogar weniger als 15 Zeilen waren.

Die Forensuche zum "gleitenden Mittelwert" liefert auch das eine oder andere Hilfreiche.
 
Zuletzt bearbeitet:
Zurück
Oben