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 gemeinsam aufgerufen (siehe Befehl "Sende Tasten: 1 2 3 4 - - - - C=kurz") auch wenn z.B: nur Taste C1 aktiv ist. Die Belegung der C1 Taste wird dann auch ausgeführt und diese schafft es schnell noch Taste C2 zu aktivieren und dann kommt das <<selbe>> Kommando "Sende Tasten: 1 2 3 4 - - - - C=kurz" doch noch für Taste C2 zur Ausführung. usw.

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