Gleitender Mittelwert - TwinCAT

Exilim

Level-1
Beiträge
44
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Community,

ich versuche zur Zeit über den Baustein FB_CTRL_MOVING_AVERAGE den gleitenden Mittelwert meiner Messdatenerfassung zu erhalten.
Hat jemand Erfahrung mit dem Baustein oder kann mir einer erklären wie ich diesen Nutzen muss? Oder kann mir jemand eine Alternative (FOR-Schleife) näher bringen?
Die Funktionalität des gleitenden Mittelwertes ist mir soweit klar.

Vielen Dank im voraus.

Viele Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es gibt da auch was von "Ratio..arm" ...
Code:
Outwert := (FaktorGlaettung * LastWert + aktWert) / (FaktorGlaettung + 1) ;
LastWert := aktWert ;
FaktorGlaettung ist dabei eine Ganzzahl (du musst also ggf. noch einen TypeCast mit einbauen).

Gruß
Larry
 
FaktorGlaettung ist dabei eine Ganzzahl
Das muss nicht zwingend sein, mit einem krummen Faktor >0 funktionierts auch.
allerdings müsste es heissen
Code:
Outwert := (FaktorGlaettung * LastWert + aktWert) / (FaktorGlaettung + 1) ;
LastWert := Outwert;
oder einfacher so:
Code:
Outwert:= (FaktorGlaettung * Outwert + aktWert) / (FaktorGlaettung + 1);
 
Kann man sich auch schnell selbst schreiben, etwa so:
Code:
IF PufferFüllstand < PufferGrösse THEN
   PufferFüllstand := PufferFüllstand + 1;
ELSE
   PufferSumme := PufferSumme - PufferWerte[PufferIndex];
END_IF
PufferWerte[PufferIndex] := NeuerWert;
PufferIndex := (PufferIndex + 1) MOD PufferGrösse;
PufferSumme := PufferSumme + NeuerWert;
Mittelwert := PufferSumme / PufferFüllstand;
Man kann natürlich noch einiges drumherum bauen. Trigger, falls das Ding für zyklischen Aufruf gedacht ist, auch wahlweise wie bei dem Siemens-FB, Resetfunktion, Übergabe des PufferWerte-Arrays als
VAR_IN_OUT, um die Grösse flexibel zu halten und wer weiss was noch.
 
Zurück
Oben