Zeitfenster und Buckets
Eine Reihe von Blöcken, hauptsächlich die in der Aggregat-Kategorie, verwalten ein zeitbasiertes Fenster mit Eingabewerten, die in der Vergangenheit empfangen wurden. Die Ausgabe dieser Blöcke ist eine Berechnung, die auf den Werten in diesem Fenster basiert. In der Regel bieten solche Blöcke zwei verschiedene Möglichkeiten, dieses Fenster zu verwalten:
Ein Parameterwert, der die Dauer des Fensters angibt. Wenn er gesetzt ist, dann lässt das Fenster automatisch die interpretierten Werte verfallen, die älter als die angegebene Zeit sind (wobei die interpretierten Werte der letzte empfangene Wert zu einem beliebigen Zeitpunkt ist, wie in
Änderungseingaben und Zeitfenster beschrieben). Wenn der Parameter nicht angegeben ist, dann lässt der Block die Daten nicht automatisch verfallen.
Ein Eingangsport zum Zurücksetzen. Wenn ein Signal empfangen wird, dann wird der Inhalt des Fensters gelöscht und der Block wird so zurückgesetzt, so dass er keinen Inhalt mehr hat.
Man kann diese Möglichkeiten kombinieren, oder keine davon verwenden. Aber typischerweise benutzt man entweder die eine oder die andere Möglichkeit.
Für den Fall, dass die Fensterdauer angegeben wird, muss der Block in der Lage sein, alte Daten verfallen zu lassen. Eine streng exakte Implementierung wäre, jede abweichende Messeingabe zu speichern, zusammen mit dem Zeitpunkt seines Auftretens. Bei langen Fenstern und/oder hochfrequenten Eingaben kann dies dazu führen, dass eine große Menge an Daten gespeichert wird. Um eine übermäßige Datenspeicherung zu vermeiden, werden von den Produktblöcken nicht alle Messwerte und Zeiten gespeichert. Stattdessen wird die Fensterdauer in gleich große Buckets unterteilt. Die Blöcke speichern den Status pro Bucket und verwenden diese Informationen, um die Ausgabe des Blocks neu zu berechnen. Ein historischer Bucket kann entweder vollständig im Fenster liegen oder teilweise verfallen sein. Wenn ein Bucket teilweise verfallen ist, dann wendet der Block einen Bruchteil der Werte innerhalb dieses Bereichs an. Die praktische Auswirkung davon ist: wenn sich der Wert ohne signifikante Fluktuation ändert, dann gibt es nur einen kleinen Unterschied zwischen einer exakten (aber ressourcenintensiveren) Implementierung des Blocks und einer, die Buckets verwendet.
Wenn es eine signifikante Fluktuation im Eingabewert gibt, die eine Verschiebung der Ausgabe verursacht, dann geht die genaue Zeit der einzelnen Messeingaben verloren, und die Auswirkung, die der signifikante Wert bei seinem Verfall hat, wird zeitlich um bis zu einer Bucket-Dauer verteilt. Die Produktblöcke verwenden 20 Buckets als vernünftigen Kompromiss zwischen Genauigkeit und Effizienz.
Um dies zu veranschaulichen, übertreiben wir den Effekt, indem wir einen Durchschnitt (Mittelwert)-Block mit 3 Buckets und einem 3-Sekunden-Fenster simulieren, so dass jeder Bucket eine Dauer von 1 Sekunde hat. Einige anomale Messwerte (nach einer kontinuierlichen Eingabe des Wertes 1) beeinflussen den Durchschnitt sowohl für exakte als auch Bucket-basierte Durchschnitt (Mittelwert)-Blöcke auf die gleiche Weise, aber wir können das Ergebnis des exakten Verfallens jedes Werts genau 3 Sekunden nach seinem Auftreten mit der Verwendung von Buckets vergleichen, bei denen die Änderung in der Ausgabe über die Bucket-Dauer geglättet wird:
Beachten Sie, dass nicht nur der Zeitpunkt des Verfalls der anomalen Werte weniger präzise ist, sondern dass auch die exakte Form der Ausgabe verloren geht. Der Bucket-Durchschnitt ändert sich gleichmäßig zwischen 00:13 und 00:14. Denken Sie daran, dass die Produktblöcke 20 Buckets verwenden, so dass der Effekt in diesem Fall weniger stark ausgeprägt wäre.