Befehle
Aus BusWiki
Inhaltsverzeichnis
Befehle:
Reihenfolge der Bearbeitung
Ein LCN-Modul kann mehrere Befehle auf einmal auslösen. Allerdings werde 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.
Die Befehle werden in folgender Reihenfolge gesendet:
- Befehl: Erstbefehl / Zweitbefehl
- Taste: 1,2,3,4,5,6,7,8
- Tastentabelle: A, B, C, D
Also in der Reihenfolge (Tastentabelle, Taste, Erst-Zweitbelegung) A,1,1
A,1,2
A,2,1
A,2,2
A,3,1
B,1,1 .....
Zu beachten ist, dass ein Modul nur maximal 5 Befehle pro Sekunde verschickt. Wenn man über den Befehl Sende_Taste mehrere Tasten auslöst, möglichst noch mit Zweitbelegung, dann können schon leicht 2-3 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