Diese Funktion differenziert numerisch ein zeitlich äquidistant abgetastetes Signal. So kann z. B. aus einer gemessenen Ortskurve die Geschwindigkeit, oder aus der gemessenen Geschwindigkeit die Beschleunigung errechnet werden. Um die Auswirkungen eines streuenden Messsignals zu minimieren nutzt dieser Algorithmus ein Ausgleichspolynom.
Die Funktion berechnet die differenzierten Werte azyklisch.
Die Funktion liest ein Array ein, das differenziert wird. Aus N-Messwerten lassen sich N-4 geglättete Messwerte berechnen. Das Ausgabe-Array enthält im Index (0,1,N-1,N) den Wert 0. Allerdings können Ersatzwerte berechnet werden.
LGF_DifferenceQuotientFC (FC) | ||||||||
---|---|---|---|---|---|---|---|---|
LReal | deltaT | Ret_Val | Void | |||||
error | Bool | |||||||
status | Word | |||||||
Array[*] of LReal | values | Array[*] of LReal | ||||||
Array[*] of LReal | derivatedValues | Array[*] of LReal | ||||||
Bezeichner | Datentyp | Beschreibung |
---|---|---|
deltaT | LReal | Äquidistanter Abstand zwischen zwei Messwerten. (z. B. 1s) |
Bezeichner | Datentyp | Beschreibung |
---|---|---|
Ret_Val | Void | Void - Funktion hat keinen Rückgabewert |
error | Bool | FALSE: Kein Fehler TRUE: Während der Ausführung des FB ist ein Fehler aufgetreten |
status | Word | 16#0000-16#7FFF: Status des FB 16#8000-16#FFFF: Fehleridentifikation (siehe folgende Tabelle) |
Bezeichner | Datentyp | Beschreibung |
---|---|---|
values | Array[*] of LReal | Werte, die in die Differenzierung eingehen sollen. |
derivatedValues | Array[*] of LReal | Der differenzierte Wertereihe. |
Code / Wert | Bezeichner / Beschreibung |
---|---|
16#0000 | STATUS_FINISHED_NO_ERROR Status: Abarbeitung ohne Fehler beendet |
16#8200 | ERR_DELTA_T Fehler: Abtastzeit `deltaT` darf nicht null sein. |
16#8400 | ERR_ARRAYS_DIFFERENT Fehler: Die Arraygrößen sind nicht gleich. Die Arrays `values` und `derivatedValues` müssen die gleiche Größe besitzen. |
16#8401 | ERR_NOT_ENOUGH_VALUES Fehler: Nicht genug Werte. Der Baustein benötigt Fünf (5) Werte, um einen differenzierten Wert zu berechnen. Übergeben Sie weitere Werte mit einer positiven Flanke am Eingang `insert`. |
Zur Berechnung des Differenzenquotienten eines streuenden Signals wird zuerst ein Ausgleichspolynom dritten Grades durch die Messwerte gelegt. Anschließend wird dieses Polynom differenziert. Durch dieses Verfahren kann auch ein verrauschtes Eingangssignal noch sinnvoll differenziert werden.
Der Differenzquotient berechnet sich mit folgender Formel:
y^{\prime}(n) = \frac{y(n-2) - 8y(n-1) + 8y(n+1) - y(n+2)}{12 \cdot deltaT}deltaT: äquidistanter Abstand zwischen zwei Messwerten (z.B. 1s).
Die Funktion (FC) kann aus N-Messwerten N-4 differenzierte und geglättete Messwerte berechnen. Das Ausgabe-Array würde im Index (0,1,N-1,N) mit 0 belegt werden. Allerdings können mit folgenden Formalismen Ersatzwerte berechnet werden:
y^{\prime}(n-2) = \frac{-125(y(n-2) + 136y(n-1) + 48y(n) - 88y(n+1) + 29y(n+2)}{84 \cdot deltaT} y^{\prime}(n-1) = \frac{-38(y(n-2) - 2y(n-1) + 24y(n) + 26y(n+1) - 10y(n+2)}{84 \cdot deltaT} y^{\prime}(n+1) = \frac{10(y(n-2) - 26y(n-1) - 24y(n) + 2y(n+1) + 38y(n+2)}{84 \cdot deltaT} y^{\prime}(n+2) = \frac{-29(y(n-2) + 88y(n-1) - 48y(n) - 136y(n+1) + 125y(n+2)}{84 \cdot deltaT}Version & Datum | Änderungsbeschreibung | |
---|---|---|
01.00.00 | Siemens Industry Online Support | |
23.11.2018 | First released version | |
01.00.01 | Simatic Systems Support | |
15.11.2019 | Regions, comments and constants are added | |
03.00.00 | Simatic Systems Support | |
23.04.2020 | Set version to V3.0.0, harmonize the version of the whole library | |
03.00.01 | Simatic Systems Support | |
06.04.2021 | Insert documentation |