Aktionen

Befehle

Aus BusWiki

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:

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

Siehe auch Beitrag im Bus-Profi Forum