Werttypen
Die folgenden Typen werden als Werttypen bezeichnet:
boolean
string
float
any wenn darin ein Wert vom Typ
boolean,
string oder
float enthalten ist
Werttypen sind bei der Modellierung von Messungen nützlich (zum Beispiel bei Sensorwerten), die periodisch gelesen oder als Stichprobe genommen werden können. Zwischen den Ablesungen hat die zu messende physikalische Eigenschaft (wie zum Beispiel die Temperatur) immer noch einen gewissen Wert, da es sich um eine kontinuierliche Eigenschaft handelt. Aus praktischen Gründen kann es sein, dass ein Sensor keine kontinuierliche Ausgabe liefert und dass statt dessen nur eine periodische Stichprobe genommen wird. Oder es kann sein, dass nur dann neue Messwerte geliefert werden, wenn sich der zu messende Wert ändert (im Rahmen der vom Sensor bereitgestellten Messauflösung). Die Blöcke verwenden zwischen den Stichproben immer den neuesten empfangenen Wert. Sie gehen davon aus, dass ein Wert so bleibt, wie er zuletzt gelesen wurde, und zwar solange bis ein neuer Wert empfangen wird.
Stellen Sie sich zum Beispiel zwei Temperatursensoren vor. Der eine Sensor liefert alle 10 Sekunden einen neuen Messwert. Der andere Sensor liefert nur dann einen neuen Wert, wenn sich die Temperatur um 0,5 Grad verändert. Wenn wir diese Sensoren mit einem Differenz-Block verbinden, dann könnten wir Eingabewerte wie in der folgenden Tabelle erhalten, mit einem entsprechenden Ergebnis des Absolute Differenz-Ausgangsports des Differenz-Blocks:
Zeit | Sensor 1 (liest alle 10 Sekunden) | Sensor 2 (Ausgabe bei Änderung von 0,5 Grad) | Differenz-Block: Absolute Differenz |
10:00:00 | 20,0 | | |
10:00:03 | | 22,0 | 2 |
10:00:10 | 20,0 | | 2 |
10:00:20 | 20,0 | | 2 |
10:00:23 | | 22,5 | 2,5 |
10:00:28 | | 23,0 | 3 |
10:00:30 | 21,1 | | 1,9 |
10:00:35 | | 23,5 | 2,4 |
10:00:40 | 22,8 | 24,0 | 1,2 |
Beachten Sie, dass zwei Eingaben für denselben Block (zu unterschiedlichen Eingangsports des Blocks) mit demselben Zeitstempel nur eine einzige Ausgabe erzeugen. Für jede Verbindung innerhalb eines Modells (und für jeden Eingabeblock) kann es zu einem bestimmten Zeitpunkt immer nur einen einzigen Wert geben. Ein Eingabeblock kann nicht mehr als eine Ausgabe für denselben Zeitstempel erzeugen. Wenn ein Block mehrere Ereignisse zum selben Zeitpunkt empfängt, dann ist es unbestimmt, welches der Ereignisse genommen wird.
Im Allgemeinen wird einer Verbindung keine Bedeutung zugemessen, wenn sie dieselben boolean-, float- oder string- Werte wie zuvor empfängt. Die meisten Blöcke ändern das Verhalten in diesem Fall nicht. Dies gilt für alle arithmetischen Blöcke, wie zum Beispiel auch für den Differenz-Block im obigen Beispiel: bei wiederholten Ablesungen von Sensor 1 ist die Ausgabe immer noch 2. Es gibt jedoch einige Ausnahmen, wie zum Beispiel den Fehlende Daten-Block, wenn das Kontrollkästchen Wiederholte Eingaben ignorieren nicht markiert wurde (false).
Wenn ein einzelner Block einen numerischen Werteingang und
pulse-Signale (wie zum Beispiel zum Zurücksetzen) hat, dann bedeutet das Fehlen eines neuen Werts bei einem erneuten
pulse-Signal, dass der Wert immer noch so behandelt wird als hätte er denselben Wert. Wenn also ein
Durchschnitt (Mittelwert)-Block zurückgesetzt wird, dann ist dessen Ausgabe mit der zuletzt empfangenen Eingabe identisch (unter der Voraussetzung, dass er seit dem Starten des Modells eine Eingabe empfangen hat). Für das nachstehenden Beispiel wurde die Dauer des
Durchschnitt (Mittelwert)-Blocks nicht definiert und der Schwellenwert für die Ausgabe wurde auf 0,05 eingestellt. Dies bedeutet, dass der Block auch dann eine neue Ausgabe generiert, wenn er keine neue Eingabe erhält (siehe
Häufig vorkommende Blockeingänge und Parameter).
Zeit | Zurücksetzen-Signal | Sensor 2 | Ausgabe des Durchschnitt (Mittelwert)-Blocks | Anmerkungen |
10:00:00 | Zurücksetzen | | | Keine Ausgabe. Es ist noch kein Eingabewert vorhanden. |
10:00:03 | | 22,0 | 22,00 | Ohne Historie entspricht der Ausgabewert dem Eingabewert. |
10:00:23 | | 22,5 | | Bis zu diesem Zeitpunkt waren alle Werte 22. Der Durchschnittswert ist immer noch 22 (somit wird keine neue Ausgabe generiert). |
10:00:25.22 | | | 22,05 | Ein Durchschnitt von 20 Sekunden bei einem Wert von 22, und 2,22 Sekunden bei einem Wert von 22,5. |
10:00:28 | | 23,0 | 22,10 | Ein Durchschnitt von 20 Sekunden bei einem Wert von 22, und 5 Sekunden bei einem Wert von 22,5. |
10:00:30 | Zurücksetzen | | 23,00 | Die Eingabe ist immer noch 23 (wir haben kein neues Ereignis erhalten). Das Zurücksetzen löscht nur die Historie. Ohne Historie entspricht der Ausgabewert dem Eingabewert. |
10:00:35 | | 23,5 | | |
10:00:35.56 | | | 23,05 | Durchschnitt zu verschiedenen Zeitpunkten, wenn sich die Ausgabe um 0,05 ändert. |
10:00:36.25 | | | 23,10 |
10:00:37.14 | | | 23,15 |
10:00:38.33 | | | 23,20 |
10:00:40 | | 24,0 | 23,25 | Durchschnitt von 5 Sekunden bei einem Wert von 23 (vom Zurücksetzen um :30 bis :35), und 5 Sekunden bei einem Wert von 23,5 (von :35 bis :40). |
Die folgende Grafik zeigt die Eingaben für den Durchschnitt (Mittelwert)-Block und die Ausgabe dieses Blocks:
Beachten Sie wie der effektive Eingabewert solange unverändert bleibt, bis eine neue Messeingabe erfolgt und wie der Durchschnitt (Mittelwert)-Block auf diesen effektiven Wert wirkt (die rote Linie oben in der Grafik). Beim Zurücksetzen gibt der Block den aktuellen effektiven Eingabewert aus, der beim zweiten Zurücksetzen um 10:00:30 den Wert 23 hat. Wenn der Parameter Ausgabe-Schwellenwert definiert wurde, dann können neue Ausgaben sogar dann generiert werden, wenn keine neue Eingabe vorliegt; der Ausgabewert nähert sich dann asymptotisch dem letzten Eingabewert. Denken Sie daran, dass sich dieses Verhalten von Apama-Abfragen oder Stream-Abfragen unterscheidet.
Hätte man den Durchschnitt (Mittelwert)-Block mit einem Fenster von 10 Sekunden konfiguriert, dann würde sich das Fenster folgendermaßen auswirken:
Zeit | Zurücksetzen-Signal | Sensor 2 | Effektiver Eingabewert | Ausgabe des Durchschnitt (Mittelwert)-Blocks | Werte in der Historie des Fensters | Anmerkungen |
10:00:00 | Zurücksetzen | | | | | |
10:00:03 | | 22 | 22 | 22,00 | | Erster Wert nach dem Start: Das Fenster ist leer. Daher wird der Eingabewert vom Durchschnitt (Mittelwert)-Block für die Ausgabe benutzt. |
10:00:23 | | 22,5 | 22,5 | | 22 | |
10:00:23 - 10:00:28 | | | 22,5 | Steigt von 22,00 auf 22,20 | 22, 22,5 | Der Anteil des Fensters, der bei 22 oder 22,5 ist, ändert sich mit der Zeit. Daher ändert sich die Ausgabe. |
10:00:28 | | 23 | 23 | 22,25 | 22, 22,5 | |
10:00:28 - 10:00:30 | | | 23 | Steigt von 22,25 auf 22,40 | 22, 22,5, 23 | |
10:00:30 | Zurücksetzen | | 23 | 23,00 | | Das Fenster wird zurückgesetzt und ist jetzt somit leer. Der aktuelle (effektive) Eingabewert ist 23. Daher wird dieser Wert vom Durchschnitt (Mittelwert)-Block für die Ausgabe benutzt. |
10:00:35 | | 23,5 | 23,5 | | 23 | |
10:00:35 - 10:00:40 | | | 23,5 | Steigt von 23,00 auf 23,20 | 23, 23,5 | |
10:00:40 | | 24 | 24 | 23,25 | 23, 23,5 | Da Fenster ist jetzt voll (10 Sekunden seit dem Zurücksetzen). |
10:00:40 - 10:00:45 | | | 24 | Steigt von 23,25 auf 23,75 | 23, 23,5, 24 | |
10:00:45 | | | 24 | 23,75 | 23,5, 24 | Der Wert 23 ist nun endgültig im Fenster abgelaufen (dies war der effektive Eingabewert bis 10:00:35, also bis vor 10 Sekunden). |
10:00:45 - 10:00:50 | | | 24 | Steigt von 23,75 auf 24 | 23,5, 24 | |
10:00:50 | | | 24 | 24 | 24 | Der Wert 23,5 ist nun endgültig im Fenster abgelaufen (dies war der effektive Eingabewert bis 10:00:40, also bis vor 10 Sekunden). Das Fenster enthält jetzt Messungen aus 10 Sekunden, alle mit dem Wert 24. |
In dem Beispiel oben können Sie erkennen, dass der aktuelle Wert erst dann eine Gewichtung im Fenster hat (das heißt, zum Ausgabewert beiträgt) nachdem der Messwert empfangen wurde. Zu dem Zeitpunkt, zu dem der Messwert empfangen wird, hat er im Vergleich zur vorherigen Historie eine Gewichtung von Null. Wie zuvor bleibt der Sensorwert so lange der effektive Eingabewert, bis er durch einen neueren Wert ersetzt wird (beachten Sie, dass dies anders ist als bei Aggregaten mit zeitgesteuerten Fenstern in Apama-Queries oder Stream-Queries). Zum Beispiel: der Block hat von 10:00:35 bis 10:00:40 einen effektiven Eingabewert von 23,5, und der Wert 23,5 ist erst um 10:00:50 endgültig aus dem Fenster abgelaufen, also 10 Sekunden, nachdem er aufgehört hat, der aktuelle effektive Eingabewert zu sein (und nicht 10 Sekunden, nachdem er das erste Mal in das Fenster eingetreten ist). Beachten Sie abschließend Folgendes: wenn das Fenster leer ist, dann wird der effektive Eingabewert stattdessen als Ausgabe verwendet, da das Fenster die Länge Null hat.