HSL 2.0-Framework  1.9
Beschreibung des Frameworks
Initialisierungs-Phase

Informationen zur Verhaltensweise von HSL2.0-Bausteinen während der Initialisierung und die richtige Vorgehensweise

Während der Initialisierung werden die Bausteine abgearbeitet. Die genaue Vorgehensweise dabei ist in der HTML-Online-Hilfe des HS/FS Experte unter "Startverhalten der Logik" (logikstart.html) beschrieben.

Bei einem HSL 2.0-Baustein sind dabei folgende Punkte/Ereignisse zu beachten, die in dieser Reihenfolge stattfinden:

Daraus folgt, dass es Situationen gibt, in denen sich HSL2.0 und HSL1.0 Bausteine unterschiedlich verhalten.

Beispiel

init_01.png

Das Schaubild zeigt vereinfacht dargestellt zwei Bausteine, die miteinander und mit mehreren KO verbunden sind:

Fall 1: Baustein B1 ist ein HSL1.0-Baustein
In diesem Fall bilden die Bausteine B1 und B2 eine "Berechnungs-Kette", die bei der Initialisierung von rechts nach links abgearbeitet wird. (siehe bereits eingangs erwähnte Doku "Startverhalten der Logik")
Dabei werden die Werte der KO, die mit den Eingängen von Baustein B1 verbunden sind, berücksichtigt und der Eingang von B2 erhält während der Initialisierung den Wert, der durch Berechnung von Baustein B1 an dessen Ausgang anliegt.
Fazit: Baustein B2 feuert nach Ende der gesamten Logik-Initialisierung genau ein einziges Mal, und zwar den Wert, der durch Berechnung der gesamten "Kette" entstanden ist.

Fall 2: Baustein B1 ist ein HSL2.0-Baustein
Baustein B1 wird während der Initialisierung der Logik instanziert. An dieser Stelle ist es nicht möglich, einen Ausgang zu beschreiben, womit die "Berechnungs-Kette" unterbrochen ist.
In diesem Fall erhält der Eingang von B2 bei dessen Initialisierung den Init-Wert des Ausgangs von B1 und nach Abschluss der Logik-Initialisierung feuert der Baustein. Dies alles findet im Logik-Kontext statt.
Baustein B1 wird parallel dazu im Baustein-Kontext berechnet, die Methode on_init() wird angestoßen und er feuert. Dieser Wert wird in die Queue des Logik-Kontexts eingereiht.
Fazit: Baustein B2 feuert nach Ende der Logik-Initialisierung einmal, und zwar den Wert, der unter Verwendung des Init-Werts vom Ausgang von Baustein B1 entstanden ist. Bei Abarbeitung der Logik-Queue kommt es dann zum zweiten Feuern von Baustein B2, diesmal mit dem Wert, der durch die Berechnung von Baustein B1 entstanden ist.

Bemerkungen
Wird ein Eingang mit einem Init-Wert belegt, der während der Laufzeit nie an diesem Eingang empfangen werden kann (der Init-Wert liegt außerhalb des Wertebereichs des mit dem Eingang verbundenen KO), kann während der Initialisierung (in der Methode on_init()) der am Eingang anliegende Wert mittels self.get_input_value() mit dem Init-Wert verglichen und somit festgestellt werden, ob der Eingang bereits vor der Berechnung des Bausteins von dem KO beschrieben wurde.