Verbindungen zwischen Modellen
Mit den Aus- und Eingabeblöcken können Sie mehrere Modelle miteinander verbinden. Ein Modell, das einen Ausgabeblock wie den Messwertausgabe-Block enthält (für Measurement-Objekte von Cumulocity IoT), generiert eine Reihe von Ereignissen, und diese Ereignisse können in einem anderen Modell von einem passenden Eingabeblock (wie zum Beispiel dem Messwerteingabe-Block) verarbeitet werden.
Anmerkung:
Die Ereignisse von einem Modell können nur dann von einem anderen Modell verarbeitet werden, wenn alle beteiligten Modelle im Produktionsmodus aktiv sind. Wenn die Modelle im Test- oder Simulationsmodus aktiv sind, dann werden virtuelle Geräte verwendet, und die Ereignisse von einem Modell können daher nicht von einem anderen Modell verarbeitet werden.
Die Ein- und Ausgabeblöcke identifizieren eine Reihe von Ereignissen, indem sie einen Schlüssel für diese Ereignisreihe festlegen. Der Schlüssel kann aus mehreren Blockparametern bestehen und unterscheidet diese Ereignisreihe von anderen Ereignisreihen des selben Blocktyps. Zum Beispiel:
![*](chapterTOC_bullet.png)
Bei Ein- und Ausgaben von
Measurement-Objekten würde der Schlüssel aus Folgendem bestehen: Gerät, Fragment und Serie. Der
Unit-Parameter, der in einem Ausgabeblock angegeben wird, ist nicht Bestandteil des Schlüssels (er dient nur zur Information), und es ist nicht erforderlich, dass er mit den Parametern des Eingabeblocks übereinstimmt.
![*](chapterTOC_bullet.png)
Bei
Event-Objekten würde der Schlüssel aus Folgendem bestehen: Gerät und Ereignistyp.
Wenn ein Modell einen synchronen Ausgabeblock hat, der eine Reihe von Ereignissen für einen bestimmten Schlüssel generiert, und wenn ein zweites Modell einen Eingabeblock hat, der dieselbe Ereignisreihe (mit denselben Schlüsselparametern) verarbeitet, dann bildet dies eine Verbindung zwischen dem ersten und dem zweiten Modell. Nachdem das erste Modell seinen Ausgabeblock verarbeitet hat, wertet das zweite Modell die neue Eingabe mit seinem Eingabeblock aus.
Es ist auch möglich, die Verbindungen zwischen den Modellen mit Hilfe der Ausgabe eines asynchronen Ausgabeblocks herzustellen. Wenn in diesem Fall das erste Modell den asynchronen Ausgabeblock auslöst, wird die Ausgabe generiert und an das externe System (zum Beispiel Cumulocity IoT) gesendet. Die Daten von dem externen System werden zu einem späteren Zeitpunkt wieder zurückerhalten und verursachen die Auswertung aller anderen Modelle, die die Daten verwenden.
Ähnlich wie bei der Verarbeitungsreihenfolge der Verbindungen innerhalb eines Modells (siehe auch
Verarbeitungsreihenfolge der Verbindungen), gilt Folgendes, wenn ein Ausgabeblock in einem Modell eine Reihe von Ereignissen generiert, die von einem Eingabeblock in einem anderen Modell verarbeitet werden:
![*](chapterTOC_bullet.png)
Ein einzelnes Modell kann dieselben Ereignisse an mehr als ein anderes Modell senden. Somit ist es möglich, dass ein einzelnes Modell eine allgemeine Vorverarbeitung durchführt, wie zum Beispiel die Umrechnung von Einheiten oder die Berechnung eines Durchschnittswerts (mit dem
Durchschnitt (Mittelwert)-Block) und dass dieser Wert anschließend von mehreren anderen Modellen verwendet wird.
![*](chapterTOC_bullet.png)
Die Modelle werden in Reihenfolge ausgeführt, gemäß den Verbindungen zwischen den Modellen, die durch synchrone Ausgaben gebildet wurden. Die Quelle einer Verbindung wird immer vor dem Ziel der Verbindung ausgewertet. Wenn ein Modell Verbindungen von mehreren Blöcken hat, die alle von demselben Ursprungsereignis kommen, dann werden zuerst alle Verbindungen ausgewertet, und das empfangende Modell wertet alle Eingaben anschließend einmal aus.
Verbindungen, die mit Hilfe von asynchronen Ausgaben hergestellt wurden, haben keine bestimmte Ausführungsreihenfolge. Ein Modell, das die Ausgabe verwendet, wird nur ausgeführt, wenn die Ausgabe vom externen System zurückerhalten wird.
Ähnlich wie bei den Verbindungseinschränkungen in einem Modell (siehe auch
Verbindungseinschränkungen), gibt es Einschränkungen wie die Aus- und Eingangsblöcke zum Verbinden der Modelle benutzt werden können:
![*](chapterTOC_bullet.png)
In allen Modellen darf ein einziger Block eine synchrone Ereignisreihe für einen bestimmten Schlüssel generieren. Mehrere Ausgabeblöcke, die asynchrone Ereignisse erzeugen, können innerhalb eines einzelnen Modells oder über mehrere Modelle hinweg verwendet werden.
![*](chapterTOC_bullet.png)
Bei einer asynchronen Ausgabe können zwischen den Modellen keine Kreisläufe erstellt werden. Ein Modell, das Ereignisse über einen Eingabeblock empfängt, der synchron von einem anderen Modell generiert wurde, kann keinen Ausgabeblock enthalten, der synchrone Ereignisse generiert, die das andere Modell verarbeiten würde. Dies gilt sogar dann, wenn eines der Modelle zwei separate Teile enthält, so dass es keinen tatsächlichen Kreislauf bezüglich der Verbindungen zwischen den Modellen gibt. Kreisläufe zwischen den Modellen können durch asynchrone Ausgaben erstellt werden. Daher müssen Sie darauf achten, dass ihr Modell keine unbestimmten Kreisläufe ausführt.
Jedes Modell, das sich nicht an diese Einschränkungen hält, verursacht bei dem Versuch es zu aktivieren einen Fehler, wenn es in Kombination mit den bereits aktivierten Modellen verwendet wird. Dies gilt für das letzte Element in einem Modellkreislauf. Bei einem solchen Fehler liegt das Problem eher in der Interaktion zwischen den Modellen und nicht in einem modellspezifischen Problem; jedoch werden vorhandene, bereits aktivierte Modelle nicht automatisch deaktiviert. Wenn zum Beispiel mehrere Modelle dieselbe synchrone Ereignisreihe (mit demselben Schlüssel) generieren, dann kann das erste zu aktivierende Modell bereitgestellt werden, aber alle nachfolgenden Modelle melden beim Aktivierungsversuch einen Fehler.
Das folgende Beispiel benutzt drei Modelle: Modell1, Modell2 und Modell3. Ein Kreislauf kann in den folgenden Fällen bestehen:
![*](chapterTOC_bullet.png)
Ein Ausgabeblock von Modell1 erzeugt eine Reihe von synchronen Ereignissen, die von einem Eingabeblock in Modell2 verarbeitet werden, und Modell2 enthält einen Ausgabeblock, der eine zweite Reihe von synchronen Ereignissen generiert, und
![*](chapterTOC_bullet.png)
Modell3 enthält einen Eingabeblock, der eine Reihe von Ereignissen von Modell2 verarbeitet, und Modell3 enthält auch einen Ausgabeblock, der eine Reihe von synchronen Ereignissen generiert, die von einem Eingabeblock in Modell1 verwendet werden.
In diesem Fall können nur zwei dieser Modelle fehlerfrei aktiviert werden. Bei einer Aktivierung in Reihenfolge hätte nur Modell3 einen Fehler. Wenn Modell1 oder Modell2 jedoch nicht aktiv wären, dann könnte Modell3 aktiviert werden. Der Fehler tritt auch dann auf, wenn eines der Modelle keine Verbindung von dem Eingabeblock in der Kette zu dem Ausgabeblock in derselben Kette hat, wie in dem Beispiel für Modell3 unten: Die Ereignisse von Modell2 bilden bei der Verbindung mit dem An Modell1 Messung-Ausgabeblock keinen Kreislauf; sie zählen aber als Kreislauf, weil sich beide im selben Modell befinden. (In diesem Fall könnte das Problem gelöst werden, indem man das Modell in zwei Modelle aufteilt und den Kreislauf somit beseitigt.)