28-09-2012, 18:07:08
Die Sache ist im Grunde schrecklich einfach. Und gleichzeitig einfach schrecklich.
Zustandsvariable sind ja nur Speicherzellen in der Zentrale. Man muss sie nicht über ein kompliziertes Funkprotokoll antriggern.
Also werden Zustandsvariablen unverzüglich gesetzt, wenn die Bedingungen eines Logikprofils erfüllt sind.
Ein realer Aktor aber muß seine Befehle über Funk erhalten.
Wenn jetzt ein Logikprofil einen Aktor schaltet, dann wird dieser Schaltbefehl erstmal in eine Warteschlange eingereiht.
Diese Warteschlange wird nach dem FIFO (First in First out)-Prinzip abgearbeitet.
Über den Funkkanal kann immer nur eine Funktelegramm gleichzeitig abgesetzt werden.
Wenn unser armer kleiner Schaltbefehl an der Reihe ist, geht er über die Antenne raus an den Aktor.
Wenn dieser ihn empfängt, führt er die Schalthandlung aus und sendet eine Vollzugsmeldung an die Zentrale.
Wenn die Vollzugsmeldung in der Zentrale empfangen und verarbeitet ist, hakt die Zentrale den Schaltbefehl ab und setzt den Zustand des Aktors auf "Schaltbefehl ausgeführt". Erst dann ist der Aktor für die Zentrale im neuen Zustand.
Auf diesem Weg kann es eine ganze Reihe von Verzögerungen geben:
* Viel Funkverkehr. Wie im Straßenverkehr muß unser armer kleiner Schaltbefehl zuerst mal abwarten, bis er eine Lücke im laufenden Funkverkehr findet.
* Der Aktor ist schwerhörig - es gibt Übertragungsfehler. Dann muss die Zentrale den Schaltbefehl wiederholen.
* Die Zentrale ist schwerhörig. Dann muss der Aktor die Vollzugsmeldung nochmal schicken.
Während all das abläuft, ist die gleichzeitig geschaltete Zustandsvariable längst in ihrem neuen Zustand.
Logik, die darauf baut, dass Variable und Aktor gleichzeitig schalten, fällt da auf die Nase.
Da ist in der Tat Zufall im Spiel, das ist aber prinzipbedingt und kein Mangel der Software.
Zustandsvariable sind ja nur Speicherzellen in der Zentrale. Man muss sie nicht über ein kompliziertes Funkprotokoll antriggern.
Also werden Zustandsvariablen unverzüglich gesetzt, wenn die Bedingungen eines Logikprofils erfüllt sind.
Ein realer Aktor aber muß seine Befehle über Funk erhalten.
Wenn jetzt ein Logikprofil einen Aktor schaltet, dann wird dieser Schaltbefehl erstmal in eine Warteschlange eingereiht.
Diese Warteschlange wird nach dem FIFO (First in First out)-Prinzip abgearbeitet.
Über den Funkkanal kann immer nur eine Funktelegramm gleichzeitig abgesetzt werden.
Wenn unser armer kleiner Schaltbefehl an der Reihe ist, geht er über die Antenne raus an den Aktor.
Wenn dieser ihn empfängt, führt er die Schalthandlung aus und sendet eine Vollzugsmeldung an die Zentrale.
Wenn die Vollzugsmeldung in der Zentrale empfangen und verarbeitet ist, hakt die Zentrale den Schaltbefehl ab und setzt den Zustand des Aktors auf "Schaltbefehl ausgeführt". Erst dann ist der Aktor für die Zentrale im neuen Zustand.
Auf diesem Weg kann es eine ganze Reihe von Verzögerungen geben:
* Viel Funkverkehr. Wie im Straßenverkehr muß unser armer kleiner Schaltbefehl zuerst mal abwarten, bis er eine Lücke im laufenden Funkverkehr findet.
* Der Aktor ist schwerhörig - es gibt Übertragungsfehler. Dann muss die Zentrale den Schaltbefehl wiederholen.
* Die Zentrale ist schwerhörig. Dann muss der Aktor die Vollzugsmeldung nochmal schicken.
Während all das abläuft, ist die gleichzeitig geschaltete Zustandsvariable längst in ihrem neuen Zustand.
Logik, die darauf baut, dass Variable und Aktor gleichzeitig schalten, fällt da auf die Nase.
Da ist in der Tat Zufall im Spiel, das ist aber prinzipbedingt und kein Mangel der Software.