Befehle
Aus BusWiki
Inhaltsverzeichnis
Befehle:
Reihenfolge der Bearbeitung
Ein LCN-Modul kann mehrere Befehle auf einmal auslösen. Allerdings werden die Befehle nicht gleichzeitig gesendet, sondern kurz hintereinander auf den Bus gesendet. Manchmal ist die Reihenfolge der Befehle entscheidend für die richtige Funktion eines Programms.
Gemeinsam ausgelöste Befehle werden in folgender Reihenfolge abgearbeitet:
- Befehl: Erstbefehl / Zweitbefehl
- Taste: 1,2,3,4,5,6,7,8
- Tastentabelle: A, B, C, D
Also erfolgt die Abarbeitung in der Reihenfolge, dass für jede Tastentabelle A bis D für jede Taste 1 bis 8 jeweils zunächst die Erstbelegung und dann die Zweitbelegung bearbeitet wird.
Verzögerung auf der Datenleitung
Zu beachten ist, dass ein Modul nur maximal 5 Befehle pro Sekunde auf die Datenleitung verschickt. Wenn man über den Befehl Sende_Taste viele Tasten in einem Modul auslöst und dabei auch noch die Zweitbelegung nutzt, dann können auf einen Schwung schon bis zu 64 Befehle ( 64 = 4 Tastentabellen * 8 Tasten * 2 Belegungen ) aktiviert werden. Da können schon mal 10 Sekunden verstreichen, bis der letzte Befehl verschickt wird.
Alternativ kann man über einen Sende_Taste Befehl an eine Gruppe schicken, hier wird jedes Modul bis zur maximalen Buslast 5 Befehle pro Sekunde weiterleiten.
Zeitkritische Abarbeitung von Befehlen
Bei zeitkritischen Befehlsfolgen ist der genaue Ausführungszeitpunkt jedes einzelnen Befehls nicht vorherzusehen. Befehle, die die Ausführung eines vorherigen Befehls voraussetzen, sollten über ein Sende_Taste_verzögert abgeschickt werden.
Auch ist die Ausführungszeit bei mehreren gleichzeitigen Befehl innerhalb eines Moduls nicht 'präzise zu bestimmen. Der Nachfolgende Code sollte drei Relais der Reihe nach mit jedem neuen Tastendruck zuschalten.
Taste A1
(1) -> Segment 0, Modul 10 "test"
Kurz: Sende Tasten: 1 2 3 4 - - - - C=kurz
Taste A2
(1) -> Segment 0, Modul 10 "test"
Kurz: Sende Tasten: 1 2 3 4 - - - - C=lang
Tabelle C:
Taste C1
(1) -> Segment 0, Modul 10 "test"
Kurz: Relais: 1 0 0 - - - - -
Lang: Relais: 0 0 0 - - - - -
Los: Unprogrammiert
(2) -> Segment 0, Modul 10 "test"
Kurz: Sperre Tasten: Tabelle C Tasten 1 0 1 1 - - - -
Lang: Unprogrammiert
Los: Unprogrammiert
Taste C2
(1) -> Segment 0, Modul 10 "test"
Kurz: Relais: 1 1 0 - - - - -
Lang: Relais: 0 0 0 - - - - -
Los: Unprogrammiert
(2) -> Segment 0, Modul 10 "test"
Kurz: Sperre Tasten: Tabelle C Tasten 1 1 0 1 - - - -
Lang: Sperre Tasten: Tabelle C Tasten 0 1 1 1 - - - -
Los: Unprogrammiert
Taste C3
(1) -> Segment 0, Modul 10 "test"
Kurz: Relais: 1 1 1 - - - - -
Lang: Relais: 1 0 0 - - - - -
Los: Unprogrammiert
(2) -> Segment 0, Modul 10 "test"
Kurz: Sperre Tasten: Tabelle C Tasten 1 1 1 0 - - - -
Lang: Sperre Tasten: Tabelle C Tasten 1 0 1 1 - - - -
Los: Unprogrammiert
Taste C4
(1) -> Segment 0, Modul 10 "test"
Kurz: Relais: 1 1 1 - - - - -
Lang: Relais: 1 1 0 - - - - -
Los: Unprogrammiert
(2) -> Segment 0, Modul 10 "test"
Kurz: Unprogrammiert
Lang: Sperre Tasten: Tabelle C Tasten 1 1 0 1 - - - -
Los: Unprogrammiert
Es werden mehrere, zum Teil gesperrte Tasten gleichzeitig gedrückt. Das auslösende Relais schickt über seine Statusmeldung eine neue, andere Tastensperre.
Es stellte sich heraus, dass die Statusmeldung und damit die neue Tastensperre schon gesendet wird, obwohl noch nicht alle Befehle abgearbeitet sind. Die gedrückten Tasten werden entsperrt und der Befehl wird dann doch noch ausgelöst.
Lösungsansatz
Als programmtechnische Lösung wurde bei der Programmierung ein Zähler verwendet. Siehe auch: Musterlösung_Lichtszenen_Taster