Aktionen

Befehle

Aus BusWiki

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:

  1. Befehl: Erstbefehl / Zweitbefehl
  2. Taste: 1,2,3,4,5,6,7,8
  3. 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

Siehe auch Beitrag im Bus-Profi Forum