ja in der freinen lib oscat findest du verschiedene methoden um den mittelwert zu bilden.
der klassische fall wäre hier ein pt1 glied, das einen tiefpass darfstellt.
ft_pt1
wenn du abtasten willst kannst du die verschiedenen sh (sample und hold bausteine benutzen, es gibt hier auch einen der bereits den mittelwert bildet und zu festen zeiten abtastet.
Das Ganze, kannst Du am einfachsten, mit einem sogenannten Ringspeicher bewerkstelligen (Findest Du sicher auch in der Oscat.lib). Ein Array, z.B. mit 10 Feldern, bei dem Du bei jedem Wechsel des Eingangswertes, den ältesten gespeicherten Wert rausschmeisst und den neuen Wert reinschreibst. Zugleich rechnest Du den Durchschnitt der gespeicherten Werte aus und gibst diesen an einen Ausgang weiter. Am einfachsten in form eines FB's. Somit kannst Du die Signalkurve sehr stark glätten. Je mehr Felder Du einbeziehst, desto weicher wird die Ausgangskurve.
Mit freundlichen grüssen! Pitsch
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
mburggra hat geschrieben:
wenn ich die oscat lib benutze, kommt immer, dass ich die maximale anzahln an bausteine überschritten habe...
was kann ich da tun ?
ganz einfach:
die Oscat.lib umbenennen in Oscat.pro,
dann aus deinem Projekt heraus : Projekt-kopieren-
uns sich die nötigen Bausteine holen.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Was ich auch vielfach mache, ist, den Code der Oscat.Lib Bausteine nachprogrammieren (abschreiben). Es ist manchmal, wenn da in mehreren Routinen umhergesprungen wird, ein bisschen Denk-Arbeit nötig. Doch dann hast Du das was Du brauchst und nicht mehr.
Mit freundlichen Grüssen! Pitsch
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
Ich habe ein Signal, das sich sehr oft ändert, ca 1 mal pro sekunde.
Gibt es eine Funktion, die den Mittelwert aus diesem Signal bildet und sich nach einer bestimmten Zeit immer aktualisiert ??
ja in der freinen lib oscat findest du verschiedene methoden um den mittelwert zu bilden.
der klassische fall wäre hier ein pt1 glied, das einen tiefpass darfstellt.
ft_pt1
wenn du abtasten willst kannst du die verschiedenen sh (sample und hold bausteine benutzen, es gibt hier auch einen der bereits den mittelwert bildet und zu festen zeiten abtastet.
die lib findest du unter w www.oscat.de w
wenn ich die oscat lib benutze, kommt immer, dass ich die maximale anzahln an bausteine überschritten habe...
was kann ich da tun ?
Hallo mrburggra.
http://www.oscat.de/community/index.php ... 269.0.html
Da findest Du eine gute Info von Hugo.
Gruss
McNugget
Eine Variante mit Arrays:
FUNCTION_BLOCK Mittelwert
VAR_INPUT
I_LastS:REAL; (Einganswert)
END_VAR
VAR_OUTPUT
I_LastMW:REAL; (Ausgangswert als Mittelwert der Eingänge)
END_VAR
VAR
Messpunkte:ARRAY[1..Anzahl_MP] OF Messpunkt;
i: INT;
k:INT;
Ausgabe:ARRAY[1..Anzahl_MP] OF Messpunkt;
I_LastMWZ: REAL;
END_VAR
VAR CONSTANT
Anzahl_MP:INT:=20;
END_VAR
IF i<Anzahl_MP THEN
i:=i+1; ( Counter i=1 bis Anzahl Messpunkte )
Messpunkte[i].Strom:=I_LastS; ( Array-bilden, Große Anzahl Messpunkte of Stromwerte )
I_LastMWZ:=I_LastMWZ+Messpunkte[i].Strom; ( Zwischenvariable = Summe Messpunkte )
END_IF
IF i>=Anzahl_MP THEN
END_IF
Hallo
Das Ganze, kannst Du am einfachsten, mit einem sogenannten Ringspeicher bewerkstelligen (Findest Du sicher auch in der Oscat.lib). Ein Array, z.B. mit 10 Feldern, bei dem Du bei jedem Wechsel des Eingangswertes, den ältesten gespeicherten Wert rausschmeisst und den neuen Wert reinschreibst. Zugleich rechnest Du den Durchschnitt der gespeicherten Werte aus und gibst diesen an einen Ausgang weiter. Am einfachsten in form eines FB's. Somit kannst Du die Signalkurve sehr stark glätten. Je mehr Felder Du einbeziehst, desto weicher wird die Ausgangskurve.
Mit freundlichen grüssen! Pitsch
ganz einfach:
die Oscat.lib umbenennen in Oscat.pro,
dann aus deinem Projekt heraus : Projekt-kopieren-
uns sich die nötigen Bausteine holen.
Hallo
Was ich auch vielfach mache, ist, den Code der Oscat.Lib Bausteine nachprogrammieren (abschreiben). Es ist manchmal, wenn da in mehreren Routinen umhergesprungen wird, ein bisschen Denk-Arbeit nötig. Doch dann hast Du das was Du brauchst und nicht mehr.
Mit freundlichen Grüssen! Pitsch
Hi
Welchen Controller verwendest du ?
Signal dämpfen:
Ich mache das immer mit einem flotten Einzeiler:
rWert:=(9*rWert+rEingangswert)/10;
Den Altwert nehmen, mit 9 multiplizieren, einen Neuwert hinzuaddieren und das Ganze durch 10 dividieren.
oder Dämpfung einstellbar (iPT):
rWert:=(iPT*rWert+rEingangswert)/(iPT+1);