BiDiB, ein universelles Steuerprotokoll für Modellbahnen

Nachrichten für Lichtsteuerungen/Schaltfunktionen

BiDiB - Bidirektionaler Bus - Logo

Inhaltsverzeichnis

Allgemeines

Das Protokoll BiDiB dient zur Kontrolle einer Modellbahnanlage. Es ermöglicht die Ansteuerung von Loks, Zubehör und sichere Übertragung von Rückmelderinformationen aus der Modellbahnanlage an den steuernden Rechner.

BiDiB kann über verschiedene Übertragungsmedien transportiert werden, dabei wird das Framing und die Sicherung der Nachrichten gewährleistet.

Eine Erläuterung der hier verwendeten Begriffe und der Protokollgrundzüge findet sich im allgemeinen Teil der Protokollbeschreibung, gleiches gilt auch für die Hinweise zur Benutzung und zur Lizenz.

Dieser Abschnitt der Protokollbeschreibung erläutert nur einen Teil der Nachrichten.

Revisionsstand

Dieses Dokument beschreibt Revision 1.26 von BiDiB, Stand 15.08.2016.

Die Revisionsgeschichte ist dem allgemeinen Teil zu entnehmen.

4.6.5. Ansteuerung Zubehör / Schaltfunktionen

Knoten mit Schaltfunktionen können z. B. Lichtsteuerungen, Animationen (mit Bewegung) o.ä. sein. Auch Bedienpulte sind möglich, Knoten dürfen auch Tastereingaben haben. Knoten mit Schaltfunktion haben das Class-ID-Flag 'Schalten' gesetzt.

Knoten mit Schaltfunktionen haben einen oder mehrere Ein- und Ausgänge. Diese werden als 'Ports' angesprochen, jeder Port lässt sich individuell konfigurieren, abfragen und schalten.

Schaltfunktionen unterscheiden sich erheblich, je nach Art des Ausgangs: Hier gibt es reine Schaltausgänge, Lichtausgänge mit Dimm- oder Blinkfunktionen, Servos (mit Positionierung), Sounds, Analogspannungen usw. Für Ausgänge gibt es daher einen 'Ausführbefehl', mit dem eine Veränderung des Ausgangs angesteuert wird und einen Konfigurationsbefehl, mit welchem die Eigenschaften festgelegt werden.

Knoten können auch über die Fähigkeit verfügen, Ports in ihrer Funktion zu verändern. So kann beispielsweise ein Ausgang zu einem Eingang umkonfiguriert werden. Dies soll während der Konfigurationsphase des Knotens, nicht im operativen Einsatz geschehen. Die Umkonfiguration des Typs soll keine Auswirkungen auf die restlichen Konfigurationsparameter des Ports haben.

Ein Knoten kann überdies Makros unterstützen, diese optionale Fähigkeit bringt weitere Befehle und Konfigurationsmöglichkeiten mit:

  • Zusammenfassen von Schaltfunktionen zu lokalen Makroabläufen
  • Konfiguration dieser Makroabläufe (Ablaufgeschwindigkeit, Startbedingung)
  • Konfiguration dieser Makroabläufe hinsichtlich der Ansteuerquelle (per Schaltbefehl, per Uhrzeit)

Für das Ansprechen von Ports gibt es ab Protokollversion 0.6 zwei verschiedene Adressierungsmodelle. Beide verwenden 2 Bytes, unterscheiden sich jedoch in der Anordnung der verfügbaren Ports im Adressraum.

Typorientiertes Portmodell Flaches Portmodell
Definition Jeder Ausgang und Eingang (Port) ist fest einem Porttyp zugeordnet. Jeder Porttyp hat einen eigenen Nummernbereich, welcher jeweils für sich von 0 an beginnend gezählt wird. Die Funktion (z. B. Servoausgang, Schaltausgang) ist damit direkt in der Adresse kodiert. Alle Ausgänge und Eingänge (Ports) benutzen einen gemeinsamen Nummernbereich, die Adressen werden linear für alle Ports vergeben. Der Porttyp (Funktion) ist einzig über die Konfiguration des jeweiligen Ports bestimmt. Im flachen Portmodell besteht damit die Möglichkeit, dass sich der Typ eines Ports durch eine Konfigurationsnachricht verändern lässt.
Aktivierung Das typorientierte Portmodell ist an einem Knoten aktiv, wenn FEATURE_CTRL_PORT_FLAT_MODEL und FEATURE_CTRL_PORT_FLAT_MODEL_EXTENDED nicht vorhanden sind oder den Wert 0 haben.
Die Anzahl der verfügbaren Ports wird vom Knoten je Typ über FEATURE_CTRL_*_COUNT bekanntgegeben.
Das flache Portmodell ist an einem Knoten aktiv, wenn FEATURE_CTRL_PORT_FLAT_MODEL und/oder FEATURE_CTRL_PORT_FLAT_MODEL_EXTENDED einen Wert > 0 hat. In diesem Fall geben diese Features auch gleich die Gesamtzahl aller Ports an, sie berechnet sich als die Summe PORT_FLAT_MODEL_EXTENDED*256+PORT_FLAT_MODEL.
Die FEATURE_CTRL_*_COUNT geben, falls vorhanden, die maximal mögliche Anzahl der auf den jeweiligen Typ konfigurierbaren Ports an.
Dieses Modell ist ab Protokollversion 0.6 verfügbar.
PORT0 PTYPE Ausgangstyp. PORTADDRESS Ausgangsnummer pro Knoten; diese wird ab 0 gezählt. Sie wird als 16-bit little-endian Integer kodiert, dessen 4 MSB reserviert und mit 0 zu belegen sind. Wertebereich 0…4095
PORT1 PORTNUM Ausgangsnummer pro Typ; diese wird ab 0 gezählt. Wertebereich 0…127, Bit 7 ist reserviert (0).
Kodierung der Porttypen
WertNameBedeutungOperationenKonfigurationsmöglichkeiten
0 SWITCH Schaltausgang (früher: SPORT) aus/ein keine
1 LIGHT Lichtausgang (früher: LPORT) aus/ein/blinken/dimmen Helligkeit, Dimmgeschwindigkeit
2 SERVO Servoausgang positionieren Endpositionen, Umlaufgeschwindigkeit
3 SOUND Tonausgang play/pause/stop Lautstärke, Tonquelle
4 MOTOR Motorausgang Drehen/Geschwindigkeit Regelung
5 ANALOGOUT allgemeine Ansteuerung Spannung Maximalwerte
6 BACKLIGHT Lichtausgang Helligkeit direkt Dimmgeschwindigkeit, Kanal-Mapping
7…14 reserviert
15 INPUT Kontakteingang, z. B. Taster oder Endschalter offen/geschlossen keine
16…254 reserviert
255 reserviert (interner Gebrauch in Knoten oder PC-Programmen)
4.6.6. Features für Schaltfunktionen

Die Eigenschaften der Knoten (wie z. B. die Anzahl der jeweiligen Ausgangsarten) sind mittels Feature-Abfragen feststellbar:

Aufstellung der Features für die Schaltfunktions-Klasse
NummerNameBedeutung
50 FEATURE_CTRL_INPUT_COUNT Anzahl der Eingänge (z. B. für Taster)
Wertebereich: 0…128.
51 FEATURE_CTRL_INPUT_NOTIFY Spontan-Meldung von Taster-Eingängen erlaubt. Der Knoten liefert Änderungen des Tasterzustand von selbst an den Host.
Wertebereich: 0…1.
52 FEATURE_CTRL_SWITCH_COUNT Anzahl der Standard-Ausgänge
Hier wird die Anzahl der Schaltausgänge abgefragt. Wertebereich: 0…128.
53 FEATURE_CTRL_LIGHT_COUNT Anzahl der Licht-Ausgänge
Lichtausgänge haben erweiterte Eigenschaften, wie z. B. Blinken, Dimmen, usw.
Hier wird die Anzahl der Lichtausgänge abgefragt. Wertebereich: 0…128.
54 FEATURE_CTRL_SERVO_COUNT Anzahl der Servoausgänge
Hier wird die Anzahl der Servoausgänge abgefragt. Wertebereich: 0…128.
55 FEATURE_CTRL_SOUND_COUNT Anzahl der abspielbaren Sounds
Hier wird die Anzahl der Sounds abgefragt. Wertebereich: 0…128.
56 FEATURE_CTRL_MOTOR_COUNT Anzahl der Motorausgänge
Gemeint sind hier Motorausgänge für Zubehörartikel (z. B. Karusselldrehzahl)
Wertebereich: 0…128.
57 FEATURE_CTRL_ANALOGOUT_COUNT Anzahl der Analogausgänge
Hier wird die Anzahl der Analogausgänge abgefragt. Wertebereich: 0…128.
58 FEATURE_CTRL_STRETCH_DIMM Verlangsamung von Helligkeitsübergängen bei Lichtausgängen. Helligkeitsübergänge werden zusätzlich um diesen Faktor verlangsamt. Wertebereich 1…250.
59 FEATURE_CTRL_BACKLIGHT_COUNT Anzahl der Lichtausgänge (dimmbar, für Raumlicht)
Gemeint sind hier Lichtausgänge, deren Helligkeit dann im Stellbefehl einstellt wird.
Wertebereich: 0…128.
70 FEATURE_CTRL_PORT_FLAT_MODEL Unterstützung des flachen Portmodells, unteres Byte der Anzahl der darin ansprechbaren Ports. Zahl der insgesamt am Knoten vorhandenen Ein- und Ausgänge.
Wertebereich: 0…255.
71 FEATURE_CTRL_PORT_FLAT_MODEL_EXTENDED Unterstützung des flachen Portmodells, oberes Byte der Anzahl der darin ansprechbaren Ports. Zahl der insgesamt am Knoten vorhandenen Ein- und Ausgänge.
Wertebereich: 0…16.
66 FEATURE_CTRL_PORT_QUERY_AVAILABLE Abfragen von Portzuständen möglich
0 = Ausgangszustände sind nicht abfragbar. (default)
1 = Ausgangszustände sind abfragbar, es erfolgt eine Antwort auf MSG_LC_PORT_QUERY(_ALL).
67 FEATURE_SWITCH_CONFIG_AVAILABLE (veraltet, ab Protokollversion 0.6 ist MSG_LC_CONFIGX zur Portkonfiguration zu verwenden)
Konfiguration von Ports möglich
0 = Schaltport sind nur einfach schaltbar. (default)
Bit 1 = Schaltports bieten eine erweiterte Konfiguration und können zu INPUTs werden.
4.6.7. Downlink: Nachrichten für Schaltfunktionen
  • MSG_LC_OUTPUT:

    Direkte Ausgangsoperation, es folgen 3 Bytes: PORT0, PORT1, PORTSTAT. Diese drei Bytes definieren den Ausgang und die Operation, welche auf diesem erfolgt.

    MSG_LC_OUTPUT Parameter
    ParameterBeschreibung
    PORT[2] Diese Bytes adressieren den Port
    PORTSTAT Dieses Byte beschreibt den Zustand des Ports, die Bedeutung ist abhängig vom Typ des angesprochenen Ausgangs.
    AusgangstypKodierung der Schaltbefehle
    0 (=BIDIB_PORTTYPE_SWITCH) Normaler Schaltausgang, es gibt folgende Operationen:
    WertNameOperation
    0BIDIB_PORT_TURN_OFFAusgang AUS schalten
    1BIDIB_PORT_TURN_ONAusgang EIN schalten
    2-255-reserviert
    Ist der Port Teil eines Paares, muss beim Einschalten der Nachbarport abgeschaltet werden.
    Mögliche weitere Modi: Ausgangspuls (für Weichen)
    1 (=BIDIB_PORTTYPE_LIGHT) Schaltausgang für Lichtsteuerung, es gibt folgende Operationen:
    WertNameOperation
    0BIDIB_PORT_TURN_OFFAusgang direkt in die Helligkeit AUS schalten
    1BIDIB_PORT_TURN_ONAusgang direkt in die Helligkeit EIN schalten
    2BIDIB_PORT_DIMM_OFFAusgang in die Helligkeit AUS dimmen
    3BIDIB_PORT_DIMM_ONAusgang in die Helligkeit EIN dimmen
    4BIDIB_PORT_TURN_ON_NEONAusgang in die Helligkeit EIN mit Neonflackern einschalten
    5BIDIB_PORT_BLINK_AAusgang blinkt mit etwa 1Hz, das blinken beginnt mit der Ein-Phase. Ein konfiguriertes Dimmen ist dabei aktiv.
    6BIDIB_PORT_BLINK_BAusgang blinkt mit etwa 1Hz, das blinken beginnt mit der Aus-Phase. Ein konfiguriertes Dimmen ist dabei aktiv.
    7BIDIB_PORT_FLASH_AAusgang blinkt mit etwa 3Hz, das blinken beginnt mit der Ein-Phase.
    8BIDIB_PORT_FLASH_BAusgang blinkt mit etwa 3Hz, das blinken beginnt mit der Aus-Phase.
    9BIDIB_PORT_DOUBLE_FLASHAusgang macht Doppelblitze, wiederholend (Einsatzfahrzeuge)
    Ist der Port Teil eines Paares, muss bei allen Operationen außer TURN_OFF und DIMM_OFF der Nachbarport abgeschaltet werden.
    Die Modi 5 und 6 sind für Bahnübergänge gedacht, die Modi 7 und 8 für Warnblinker.
    2 (=BIDIB_PORTTYPE_SERVO) Servoausgang, PORTSTAT ist in diesem Fall die Zielposition des Servos. Dabei entspricht ein PORTSTAT von 0 dem unteren Anschlag, 255 dem oberen.
    Optional lassen sich die Anschläge konfigurieren (siehe unten), der maximale Einstellbereich soll eine Servopulsbreite von 0.5ms bis 2.5ms umfassen. Die Anschlagwerte sind hier weiter gefasst als die normierten 1ms bis 2ms, da sich Servos in der Realität oft über diesen Bereich hinaus ansteuern lassen.
    3 (= BIDIB_PORTTYPE_SOUND) Soundfunktion (genauere Definition folgt)
    4 (= BIDIB_PORTTYPE_MOTOR) Motorfunktion, PORTSTAT gibt die Geschwindigkeit an. Die Kodierung entspricht DCC128:
    • Das MSB kodiert die Drehrichtung: 1 = vorwärts, 0 = rückwärts
    • Die LSBs (Bit 6…0) kodieren die 126-stufige Geschwindigkeit, wobei 0 = Halt und 1 = Nothalt bedeutet.
    Ist der Port Teil eines Paares, muss beim Einsatz der Nachbarport abgeschaltet werden.
    5 (= BIDIB_PORTTYPE_ANALOGOUT) Analogfunktion (genauere Definition folgt)
    6 (= BIDIB_PORTTYPE_BACKLIGHT) Lichtfunktion, direkt dimmbar. PORTSTAT gibt die Helligkeit an, Bereich 0…255.
    Ist der Port Teil eines Paares, muss beim Einschalten der Nachbarport abgeschaltet werden.
    7…15 reserviert

    Auf eine Schaltanforderung antwortet ein Knoten mit MSG_LC_STAT. Sollte ein Port außerhalb der vorhandenen Ports angesteuert werden, oder ein Schaltzustand angesteuert werden, der nicht unterstützt wird, so antwortet der Knoten mit MSG_LC_NA. Sollte ein Knoten einen bestimmten Zustandsübergang nicht beherrschen, so soll er den nächstmöglichen Übergang durchführen: also z. B. Neon-Einschaltflackern sei nicht vorhanden, es wird normal eingeschaltet.

  • MSG_LC_PORT_QUERY:

    (bis einschließlich Protokollversion 0.6 unter dem Namen MSG_LC_OUTPUT_QUERY, nur für Ausgänge)

    Abfrage des Status eines Ausgangs oder Eingangs, es folgen 2 Bytes zur Adressierung des Ports. Auf eine Abfrage antwortet ein Knoten mit MSG_LC_STAT oder fallweise MSG_LC_NA.

    Hinweise:
    Dieser Befehl ist optional für Ausgänge. Ob der Knoten diesen Befehl beantwortet, wird im Feature FEATURE_CTRL_PORT_QUERY_AVAILABLE festgelegt. Fehlt dieses Feature oder ist es 0, dann kann die Antwort auf MSG_LC_PORT_QUERY ausbleiben. Hat der Knoten Eingänge, so müssen diese immer abfragbar sein.
    Dieser Befehl soll dem Host ermöglichen, eine Ausgangsstellung zurückzulesen um z. B. die richtige Darstellung am Schirm durchführen zu können.
    Ausgangszustände sind als knotenintern zu behandeln, sie können jederzeit durch Accessory-Stelloperationen, Makroausführungen, als Reaktion auf Eingänge, wegen Zeitabhängigkeiten oder Anderem wechseln. Änderungen an ihnen werden nicht automatisch dem Host mitgeteilt. Wo dies nötig ist, sind Accessorys zu verwenden, für welche entsprechende Absicherungsnachrichten im Protokoll vorgesehen sind.
  • MSG_LC_KEY_QUERY:

    (veraltet, ab ausgewiesener Protokollversion 0.7 ist der Befehl MSG_LC_PORT_QUERY zu verwenden)

    Mit dieser Nachricht kann der Zustand eines lokalen Tasters eines Knotens abgefragt werden. Ob der Knoten Taster hat (und wie viele) ist durch eine Feature-Abfrage zu klären. Es folgt ein Byte: PORT.

    MSG_LC_KEY_QUERY Parameter
    ParameterBeschreibung
    PORT Nummer des Tasteneingangs. Entspricht PORT0 im flachen Portmodell und PORTNUM im typorientierten (bei PTYPE=15).

    Der Knoten antwortet mit einer MSG_LC_KEY Nachricht, welche den Zustand des Tasters enthält, oder fallweise mit MSG_LC_NA.

  • MSG_LC_PORT_QUERY_ALL:

    Abfrage des Status aller oder mehrerer Ports. Es folgen 0, 2 oder 6 Bytes. Sofern Parameter folgen, geben diese die abzufragenden Typen sowie den Bereich an.

    MSG_LC_PORT_QUERY_ALL Parameter
    ParameterBeschreibung
    SELECT[2] Diese Bytes bilden eine 16 Bit lange Bitmap, mit der sich die abzufragenden Ports nach Typ filtern lassen. Bit 0 von SELECT0 entspricht SWITCH, Bit 1 LIGHT usw. Ist das entsprechende Bit nicht gesetzt, so wird der Port übersprungen.
    START[2] Diese Bytes adressieren den ersten zu übertragenden Port.
    END[2] Diese Bytes adressieren den ersten nicht mehr zu übertragenden Port.

    Sind die Parameter nicht vorhanden, so wird für SELECT der Wert 0xFFFF, für START der Wert 0 und für END der Wert 0xFFFF angenommen. Es muss START <= END gelten.

    Der Knoten antwortet mit mehreren MSG_LC_STAT Nachrichten, für jeden am Knoten vorhandenen Port welcher im von START und END angegebenen Bereich liegt und für welchen das seinem Typ entsprechende Bit in SELECT gesetzt ist. Die Reihenfolge der Ports ist dabei zu befolgen, die Antworten sind aufsteigend nach Portnummer zu senden.

    Am Ende der Übertragung sendet der Knoten MSG_LC_NA mit der Portadresse 0xFFFF.

    Hinweise:
    Die schnelle Abfrage mehrerer Ports eines Knoten ist ab ausgewiesener Protokollversion 0.7 verfügbar.
    Unterstützt der Knoten keine Abfrage von Ausgangszuständen (FEATURE_CTRL_PORT_QUERY_AVAILABLE), so werden diese Ports ignoriert (SELECT &= 0xFF00).
    Dieser Befehl dient zum schnellen Einlesen der Port-Zustände eines Knotens. Das Senden geschieht unter Ausnutzung der Blocktransferfähigkeit des Protokolls und unter selbständiger Beachtung der Transportkapazität seitens des Knotens, der Host muss keine besonderen Vorkehrungen zur Datenflusskontrolle (vgl. MSG_STALL) treffen. Der Knoten muss während der Abarbeitung des Befehls weiterhin andere Nachrichten empfangen und beantworten können.
    MSG_LC_PORT_QUERY_ALL wird nicht gepuffert. Wenn während einer laufenden Übertragung eine weitere MSG_LC_PORT_QUERY_ALL-Nachricht an den Knoten geschickt wird, so wird die aktive Sequenz abgebrochen und eine neue Übertragung gestartet. Durch Abfragen eines leeren Bereichs kann eine Übertragung damit auch beendet werden.
    Die MSG_LC_NA-Nachricht dient als Markierung, um das Ende der Übertragung auch ohne Kenntnis der vorhandenen Ports und ihrer Typen sicher erkennen zu können.
    Beispiele:
    Eine Abfrage MSG_LC_PORT_QUERY_ALL 0xFF 0xFF, 0x00 0x00, 0xFF 0xFF liefert die Zustände aller Ports des Knotens (wie auch die Abfrage ohne Parameter).
    Eine Abfrage MSG_LC_PORT_QUERY_ALL 0x00 0xFF, 0x00, 0x00, 0x08, 0x00 auf einem Knoten mit dem typorientierten Portmodell liefert nur MSG_LC_NA 0xFF 0xFF, da der Filter nur Eingänge und der Bereich nur Ausgänge selektiert.
    Eine Abfrage MSG_LC_PORT_QUERY_ALL 0x06 0x00, 0x01 0x00, 0xFF 0xFF liefert die Zustände aller Licht- und Servoausgänge ab der Portadresse 16.
  • MSG_LC_CONFIGX_SET:

    Konfiguration eines Ports. Es folgen n Parameter:

    MSG_LC_CONFIGX_SET Parameter
    ParameterBeschreibung
    PORT[2] Diese Bytes adressieren den Port
    DATA[2…41] Liste aus 1 bis 8 Schlüssel-Wert-Paaren, bestehend jeweils aus Parametertyp und -wert.
    P_LIST ::= P_PAIR | P_PAIR P_LIST
    P_PAIR ::= P_ENUM P_VALUE

    Der Knoten speichert diese Parameter ab und antwortet mit einer Nachricht MSG_LC_CONFIGX, dabei werden die neu eingestellten Werte übermittelt sowie etwaige Parameter-Fehler mittels BIDIB_PCFG_NONE gemeldet. Existiert der angesprochene Port am Knoten nicht, wird stattdessen mit MSG_LC_NA geantwortet.

    Kodierung der Portkonfigurations-Parameter
    NameCodeWerttypBedeutung
    BIDIB_PCFG_NONE 0x00 uint8 0: keine Parameter für diesen Port verfügbar
    1…n: Fehlerhafter Parameter (unbekannter oder an diesem Port nicht unterstützter Typ, ungültiger Wert). Das Byte gibt dabei den Code des Parameters an. Bei ungültigen Werten wird der alte Wert beibehalten und mitgesendet.
    BIDIB_PCFG_LEVEL_PORT_ON 0x01 uint8 Analogwert der Helligkeit für den Zustand EIN, Wertebereich 0…255; (1)
    BIDIB_PCFG_LEVEL_PORT_OFF 0x02 uint8 Analogwert der Helligkeit für den Zustand AUS, Wertebereich 0…255 (1)
    BIDIB_PCFG_DIMM_UP 0x03 uint8 Dimmzeit in Richtung EIN, unit 10ms (2)
    BIDIB_PCFG_DIMM_DOWN 0x04 uint8 Dimmzeit in Richtung AUS, unit 10ms (2)
    BIDIB_PCFG_OUTPUT_MAP 0x06 uint8 Zuordnung zu Ausgabekanal (wie bei DMX) (3)
    BIDIB_PCFG_SERVO_ADJ_L 0x07 uint8 Unterer Justierwert für Servos (4)
    BIDIB_PCFG_SERVO_ADJ_H 0x08 uint8 Obererer Justierwert für Servos (4)
    BIDIB_PCFG_SERVO_SPEED 0x09 uint8 Servo Speed (Umlaufzeit)
    BIDIB_PCFG_IO_CTRL 0x0a uint8 IO-Verhalten (5)
    BIDIB_PCFG_TICKS 0x0b uint8 Einschaltzeit S eines Pulsausgangs, unit 10ms
    BIDIB_PCFG_IS_PAIRED 0x0c uint8 Flag, ob ein Port mit seinem Nachbarn (XOR 1, d.h. Adressen 0 und 1, 2 und 3, …) ein Paar bildet, damit sie nie gleichzeitig aktiviert werden (6). Wertebereich: 0, 1. Hat nur eine Wirkung, wenn das Flag auch beim Nachbarn gesetzt ist und beiden denselben Typ haben.
    BIDIB_PCFG_DIMM_UP_8_8 0x43 uint16 Dimmzeit in Richtung EIN, unit 10ms, Wertebereich 1…65535 (7)
    BIDIB_PCFG_DIMM_DOWN_8_8 0x44 uint16 Dimmzeit in Richtung AUS, unit 10ms, Wertebereich 1…65535 (7)
    BIDIB_PCFG_RGB 0x80 uint24 RGB-Wert zur Farbwahl eines Lichtausgangs: erstes Byte Rot, zweites Grün, drittes Blau
    BIDIB_PCFG_RECONFIG 0x81 uint24 Port Reconfiguration (8)
    BIDIB_PCFG_CONTINUE 0xFF none Eine zusätzliche Nachricht mit weiteren Wertepaaren folgt
    (1)
    Sollte die Lichtsteuerung eine andere interne Auflösung besitzen, so werden die Werte von der Lichtsteuerung selbst auf ihre eigene Auflösung umgerechnet. Ein evtl. notwendige Gammakorrektur soll der Knoten selbst berechnen.
    (2)
    Die Dimmzeit wird als Schrittweite angegeben, d.h. ein Wert von 255 'durchschreitet' den Helligkeitsbereich in einem Schritt (also keine Zwischenstufen), eine Schrittweite von 1 steuert alle möglichen Zwischenstufen an. Die Zeit für einen Dimmschritt ist 10ms, so lassen sich Zeiten bis zu 2,5s erzielen, was für typisches Verhalten von Signalen geeignet ist.
    (3)
    Kanalmapping: Durch Angabe einer Zuordnungsnummer lassen sich unterschiedliche LIGHT- oder BACKLIGHT-Ports auf eine gemeinsame Ausgabe abbilden. Dadurch können z. B. unterschiedlich schnelle Dimmvorgänge oder Farbe auf der gleichen Lampe konfiguriert werden. (virtuelle Ports)
    (4)
    Die Werte sind immer im Bereich 0…255 angegeben und werden vom Knoten auf den Servopulsbreitenbereich von 0.5ms bis 2.5ms abgebildet.
    (5)
    IO-Setup.
    • 0=output (direkt schaltend)
    • 1=High Puls (wenn auf 1 geschaltet wird, kehrt der Ausgang nach der Zeit S auf 0 zurück)
    • 2=Low Puls
    • 3=tristate (d.h. der PORT ist inaktiv)
    • 4=pullup (d.h. der PORT kann nicht mehr geschaltet werden, er agiert als Input)
    • 5=pulldown (d.h. der PORT kann nicht mehr geschaltet werden, er agiert als Input)
    (6)
    Ein Paar von Ports wird beim Schalten und Abfragen gesondert behandelt, um Konfliktzustände an den Ausgängen zu verhindern. Insbesondere die gleichzeitige und gegenläufige Ansteuerung von Spulenantrieben, Motoren oder Ähnlichem, die im schlimmsten Falle zu Schäden an den Bauteilen führen kann, lässt sich hiermit unterbinden.
    (7)
    Bietet ein Knoten Dimmzeiten als 16-Bit Werte an, so kann er entsprechend langsamere Dimmvorgänge fahren – von 10ms bis 10min. Das ist insbesondere für die Anlagenbeleuchtung zur Tag/Nacht-Simulation interessant. Ein Knoten kann entweder DIMM-Werte im 8-Bit Bereich oder im 16-Bit Bereich parametrieren.
    (8)
    Typkonfiguration: Der Parameter beschreibt, welche Typen in einer variablen Konfigurationsumgebung am angesprochenen Port verfügbar sind, und welcher Porttyp aktuell gesetzt ist. Der Wert besteht aus 3 Bytes: ACT_TYPE, PORTMAP0, PORTMAP1. ACT_TYPE gibt den eingestellten bzw. einzustellenden Porttyp an. PORTMAP gibt als 16 Bit lange Bitmap über die gesetzten Bits an, welche Typen an diesem Port einstellbar sind; Bit 0 von PORTMAP0 entspricht SWITCH, Bit 1 LIGHT usw. Die PORTMAP wird beim Setzen des Parameters ignoriert.
    Hinweise:
    Der Befehl löst die CONFIG_SET-Nachricht ab. Die Konfiguration eines Ports mit 'CONFIGX…'-Nachrichten ist ab ausgewiesener Protokollversion 0.6 verfügbar und zu verwenden.
    Das P_ENUM BIDIB_PCFG_NONE wird nur im Upstream benötigt.
    Wenn ein Port mehr als 8 Konfigurationsparameter hat, dann wird nach dem letztem Parameter der ersten Nachricht ein P_ENUM BIDIB_PCFG_CONTINUE angefügt; es wird dann auch nur eine Antwort des Knotens (mit mehreren Nachrichten) erwartet.
    Wenn ein Knoten die gespeicherten Parameterwerte nicht sofort zur Anwendung bringen kann, soll er den betroffenen Port deaktivieren; d.h. Schalt- oder Abfrage-Nachrichten werden per MSG_LC_NA mit der Ursache BIDIB_ERR_LC_PORT_INACTIVE abgelehnt bis die Konfiguration wirksam ist. Zusätzlich kann per MSG_SYS_ERROR der genaue Grund signalisiert werden, etwa die Erfordernis eines Neustarts.
    Ein Hostprogramm darf nur diejenigen P_ENUMs an eine Knoten und Port senden, die der Knoten zuvor bei einer Abfrage als 'am Knoten bekannt' mitgeteilt hat. Damit wird sichergestellt, dass der Knoten keine ihm unbekannten P_ENUMs (v.a. unbekannter Größe) auswerten muss.
  • MSG_LC_CONFIGX_GET:

    Abfrage der Konfiguration eines Ports. Es folgen 2 Parameter:

    MSG_LC_CONFIGX_GET Parameter
    ParameterBeschreibung
    PORT[2] Diese Bytes adressieren den Port

    Die Nachricht MSG_LC_CONFIGX_GET wird mit einer Nachricht MSG_LC_CONFIGX beantwortet, dabei werden alle eingestellten Werte übermittelt. Existiert der angesprochene Port am Knoten nicht, wird stattdessen mit MSG_LC_NA geantwortet.

    Hinweise:
    Der Befehl löst die CONFIG_GET-Nachricht ab. Die Konfiguration eines Ports mit 'CONFIGX…'-Nachrichten ist ab ausgewiesener Protokollversion 0.6 verfügbar und zu verwenden.
    Die Anwortlänge auf MSG_LC_CONFIGX_GET kann bis zu 45 Byte sein, dies ist entsprechend in der Datenflusskontrolle (vgl. MSG_STALL) zu berücksichtigen. Typischerweise muss man die Antwort auf MSG_LC_CONFIGX_GET abwarten, bevor man neue Abfragen an den Knoten schicken kann. Die Nachricht MSG_CONFIGX_GET_ALL hat diese Einschränkung nicht.
  • MSG_LC_CONFIGX_GET_ALL:

    Abfrage der Konfigurationen aller oder mehrerer Ports. Es folgen 0 oder 4 Bytes. Sofern Parameter folgen, definieren diese den Bereich.

    MSG_LC_CONFIGX_GET_ALL Parameter
    ParameterBeschreibung
    START[2] Diese Bytes adressieren den ersten zu übertragenden Port.
    END[2] Diese Bytes adressieren den ersten nicht mehr zu übertragenden Port.

    Sind die Parameter nicht vorhanden, so wird für START der Wert 0 und für END der Wert 0xFFFF angenommen. Es muss START <= END gelten.

    Der Knoten antwortet mit mehreren MSG_LC_CONFIGX Nachrichten, für jeden am Knoten vorhandenen Port welcher im von START und END angegebenen Bereich liegt. Die Reihenfolge der Ports ist dabei zu befolgen, die Antworten sind aufsteigend nach Portnummer zu ordnen.

    Hinweise:
    Die Konfiguration eines Ports mit 'CONFIGX…'-Nachrichten ist ab ausgewiesener Protokollversion 0.6 verfügbar und zu verwenden.
    Dieser Befehl dient zum schnellen Einlesen der Port-Konfiguration eines Knotens. Das Senden geschieht unter Ausnutzung der Blocktransferfähigkeit des Protokolls und unter selbständiger Beachtung der Transportkapazität seitens des Knotens, der Host muss keine besonderen Vorkehrungen zur Datenflusskontrolle (vgl. MSG_STALL) treffen. Der Knoten muss während der Abarbeitung des Befehls weiterhin andere Nachrichten empfangen und beantworten können.
    Die Anzahl der zu erwartenden Antwortnachrichten kann durch entsprechende Featureabfragen vorab bestimmt werden.
    MSG_LC_CONFIGX_GET_ALL wird nicht gepuffert. Wenn während einer laufenden Übertragung eine weitere MSG_LC_CONFIGX_GET_ALL-Nachricht an den Knoten geschickt wird, so wird die aktive Sequenz abgebrochen und eine neue Übertragung gestartet.
    Beispiele:
    Eine Abfrage MSG_LC_CONFIGX_GET_ALL 0, 0, 0xFF, 0xFF liefert alle Ports des Knotens (wie auch die Abfrage ohne Parameter).
    Bei Verwendung des typorientierten Portmodells liefert eine Abfrage MSG_LC_CONFIGX_GET_ALL BIDIB_PORTTYPE_SERVO, 0, BIDIB_PORTTYPE_SERVO+1, 0 alle Servoports des Knotens.
    Zum selben Ergebnis führt MSG_LC_CONFIGX_GET_ALL BIDIB_PORTTYPE_SERVO, 0, BIDIB_PORTTYPE_SERVO, $SERVO_COUNT (mit der eingelesenen Anzahl von Servos)
  • MSG_LC_CONFIG_SET:

    (veraltet, ab ausgewiesener Protokollversion 0.6 ist der Befehl MSG_LC_CONFIGX_SET zu verwenden)

    Konfiguration eines Ports hinsichtlich seiner Parameter. Es folgen 6 Bytes:

    MSG_LC_CONFIG_SET Parameter
    ParameterBeschreibung
    PORT[2] Diese Bytes adressieren den Port im typorientierten Portmodell
    DATA[4]Konfigurationswerte

    Die Konfigurationswerte sind immer als uint8 (im Bereich 0…255) angegeben. Ihre Bedeutung ist abhängig vom Ausgangstyp und entspricht jeweils einem CONFIGX-Wertepaar:

    Typ (PORT0)DATA0DATA1DATA2DATA3
    Schaltausgang
    0 (=BIDIB_PORTTYPE_SWITCH)
    Hier ist im Normalfall keine Konfiguration vorgesehen. Für Sonderanwendungen (z. B. Kontrolle weiterer Baugruppen) gibt es die Möglichkeit der Konfiguration. Ob der Knoten diese Konfiguration anbietet, ist dem Feature FEATURE_SWITCH_CONFIG_AVAILABLE zu entnehmen. Fehlt dieses Feature, gibt es keine Konfiguration und Schaltports können nur geschaltet werden.
    BIDIB_PCFG_IO_CTRL BIDIB_PCFG_TICKS reserviert reserviert
    Lichtausgang
    1 (=BIDIB_PORTTYPE_LIGHT)
    Bei Lichtausgängen ist die min. und und max. Helligkeit, Geschwindigkeit des Dimmens konfigurierbar.
    Mittels des Features FEATURE_CTRL_STRETCH_DIMM (sofern vorhanden) kann der Übergang bis zum Faktor 250 zusätzlich verlangsamt werden, damit dauert ein Helligkeitsübergang bis zu 10min und ist damit für die Tag-Nacht-Simulation einer Anlage geeignet.
    BIDIB_PCFG_LEVEL_PORT_OFF BIDIB_PCFG_LEVEL_PORT_ON BIDIB_PCFG_DIMM_DOWN BIDIB_PCFG_DIMM_UP
    Servoausgang
    2 (=BIDIB_PORTTYPE_SERVO)
    Bei Servoausgängen lässt sich der untere und obere Anschlag justieren sowie die Umlaufgeschwindigkeit festlegen.
    BIDIB_PCFG_SERVO_ADJ_L BIDIB_PCFG_SERVO_ADJ_H BIDIB_PCFG_SERVO_SPEED reserviert
    Lichtausgang
    6 (=BIDIB_OUTTYPE_BACKLIGHT)
    Bei Lichtausgängen mit direkt steuerbarer Helligkeit ist eine eventuelle Abbildung auf die echte Hardware und Geschwindigkeit des Dimmens konfigurierbar.
    BIDIB_PCFG_DIMM_DOWN BIDIB_PCFG_DIMM_UP BIDIB_PCFG_OUTPUT_MAP reserviert
    3, 4, 5, … Genauere Definition für Sound, Motor- und Analogspannungsausgänge folgt.

    Reservierte Werte sind mit 0 zu belegen.

    Der Knoten speichert diese Parameter ab und antwortet mit einer MSG_LC_CONFIG Nachricht. Sollte ein Port außerhalb der vorhandenen Ports angesteuert werden, so antwortet der Knoten mit MSG_LC_NA.

  • MSG_LC_CONFIG_GET:

    (veraltet) Abfrage eines Ports hinsichtlich seiner Parameter. Es folgen 2 Parameter:

    MSG_LC_CONFIG_GET Parameter
    ParameterBeschreibung
    PORT[2] Diese Bytes adressieren den Port

    Sollte ein Port außerhalb der vorhandenen Ports angesteuert werden, so antwortet der Knoten mit MSG_LC_NA. Ansonsten erfolgt eine Antwort mit MSG_LC_CONFIG.

4.6.8. Uplink: Nachrichten für Zubehör / Schaltfunktionen
  • MSG_LC_NA:

    Diese Nachricht wird als Fehlernachricht gesendet, wenn beim Schalten oder Konfigurieren eines Ausgangs ein Fehler aufgetreten ist. Es folgen zwei oder drei Bytes mit Angaben zu Typ, Nummer des Ausgangs und Fehlerursache.

    MSG_LC_NA Parameter
    ParameterBeschreibung
    PORT[2] Diese Bytes geben den angesprochenen Port an.
    ERRCAUSE[0…1]Optionaler Parameter, kodiert die Fehlerursache.
    Kodierung der Fehlerursache
    WertNameBedeutung
    0 reserviert (interner Gebrauch in Knoten oder PC-Programmen)
    1 BIDIB_ERR_LC_PORT_GENERAL (oder Parameter ERRCAUSE nicht vorhanden) Fehlerursache nicht näher spezifiziert
    2 BIDIB_ERR_LC_PORT_UNKNOWN Port ist unbekannt, nicht aktivierbar: Der angesprochene Port bzw. Typ existiert an dem Knoten nicht. Dieser Fehler ist auch durch eine Konfigurationsänderung nicht heilbar.
    Beispiel: Ein Knoten meldet per Feature nur 16 Ports, es wurde aber eine Nachricht für Port 20 gesendet.
    3 BIDIB_ERR_LC_PORT_INACTIVE Port ist aufgrund der Knotenkonfiguration zurzeit nicht nutzbar. Er ist deaktiviert. Dieser Fehler kann durch eine Umkonfiguration geheilt werden.
    Beispiel 1: Angenommen flaches Portmodell, Port 0 lässt sich als SWITCH und SERVO konfigurieren, blockiert in zweiterem Fall aber Port 1. Dieser beantwortet Schaltbefehle dann mit BIDIB_ERR_LC_PORT_INACTIVE.
    Beispiel 2: Ein Port wurde mit zueinander inkompatiblen (aber für sich validen) Parametern konfiguriert, oder eine Parameteränderung ist vor einem Neustart noch nicht wirksam. Er lehnt währenddessen Schaltbefehle ab.
    4 BIDIB_ERR_LC_PORT_EXEC Ausführen der Portoperation nicht möglich.
    Beispiele: Ein SWITCH-Port erhält einen Befehl mit PORTSTAT 5. Oder ein Ausgang im flachen Portmodell wird mit MSG_LC_KEY_QUERY abgefragt.
    5…254   reserviert
    255 BIDIB_ERR_LC_PORT_BROKEN Hardwarefehler liegt vor. Diese Meldung betrifft genau den gemeldeten Port, genauere Ursachen (interner Knotenfehler, Stromversorgung, usw.) werden fallweise über die allgemeinen Knotenfehler berichtet.
    Hinweise:
    Ein Steuerprogramm soll bei vorhandenem ERRCAUSE die Ursache anzeigen. Bei unbekannter Ursachennummer soll die Fehlernummer angezeigt werden.
  • MSG_LC_STAT:

    Diese Nachricht überträgt den momentanen Zustand eines Ports. Es folgen drei Bytes: PORT0, PORT1, PORTSTAT.

    Für Ausgänge wird sie als Antwort auf eine Abfrage gesendet oder als Quittung für einen Operationsbefehl, sobald der Ausgang seinen gewünschten Zustand erreicht hat. Sollte es sich um einen Ausgang mit mehr als 100ms Schaltzeit handeln, so wird sofort nach dem Erhalt der MSG_LC_OUTPUT eine Nachricht MSG_LC_WAIT zurückgesendet.

    Für Eingänge wird sie als Antwort auf eine Abfrage gesendet oder auch spontan, wenn sich der Portzustand ändert und der Knoten enabled ist sowie FEATURE_CTRL_INPUT_NOTIFY gesetzt ist.

    MSG_LC_STAT Parameter
    ParameterBeschreibung
    PORT[2] angesprochener Port
    PORTSTAT Je nach Porttyp: Zustand des Ausgangs, identisch zu MSG_LC_OUTPUT kodiert, oder Zustand des Eingangs:
    • 0: offen.
    • 1: geschlossen.
    (Üblicherweise werden Schalter/Taster gegen Masse eingesetzt, diese ziehen den Prozessoreingang auf Low, wenn der Taster geschlossen/gedrückt ist. (=Active Low))
    Ist ein Eingang Teil eines Paars, so wird sein Nachbar ebenfalls abgefragt; es wird erwartet dass dessen Zustand komplementär ist. Haben beide Eingänge denselben Zustand, ist dies als Fehler zu werten, es wird MSG_LC_NA statt MSG_LC_STAT gesendet.
    Hinweis:
    Diese Nachricht soll dem Host ermöglichen, an knoteninterne Portzustände zu gelangen um diese z. B. passend anzeigen zu können. Die Übertragung erfolgt jedoch ohne gesonderte Absicherung mit Quittung oder Wiederholung. Wo dies erforderlich ist, sollen Accessorys oder Melder verwendet werden.
  • MSG_LC_WAIT:

    Diese Nachricht wird als sofortige Empfangsbestätigung gesendet, wenn der Ausgang seinen angeforderten Zustand erst nach einer Zeit von 100ms oder mehr erreicht.

    Es folgen drei Bytes: PORT0, PORT1, TIME.

    MSG_LC_WAIT Parameter
    ParameterBeschreibung
    PORT[2] angesprochener Port
    TIME Prognostizierte Umlaufzeit. Diese Umlaufzeit wird analog zur Railcom-Spezifikation wie folgt kodiert: Die 7 niederwertigen Bits der Restlaufzeit kennzeichnen die Laufzeit bis zum Erreichen des Ende-Zustand der angeforderten Schaltaktion (prognostizierte Umlaufzeit). Die Zeit wird abhängig vom MSB in Einheiten von 1/10 Sekunden (MSB = 0) oder 1 Sekunde (MSB = 1) angegeben. Eine Zeit von 0 bedeutet keine Schaltzeit ermittelbar. Damit ergibt sich ein Wertebereich 0…12,7 Sekunden bzw. 0…127 Sekunden.
  • MSG_LC_KEY:

    (veraltet, ab ausgewiesener Protokollversion 0.7 wird nur MSG_LC_STAT verwendet)

    Diese Nachricht wird gesendet, wenn der Knoten lokale Taster enthält und diese betätigt wurden oder wenn eine explizite Abfrage erfolgte. Diese Nachricht erfolgt spontan (MSG_SYS_ENABLE und das entsprechende feature muss hierfür gesetzt sein) und wird nicht wiederholt. Es folgen zwei Bytes: PORT, KSTATE.

    MSG_LC_KEY Parameter
    ParameterBeschreibung
    PORT Nummer des Tasteneingangs. Entspricht PORT0 im flachen Portmodell und PORTNUM im typorientierten (bei PTYPE=15).
    KSTATE Zustand des Tasters:
    • 0: nicht gedrückt.
    • 1: gedrückt.
  • MSG_LC_CONFIGX:

    Nachricht eines Ports hinsichtlich seiner Parameter. Es folgen 4 bis max. 43 Bytes Parameter.

    MSG_LC_CONFIGX Parameter
    ParameterBeschreibung
    PORT[2] Diese Bytes geben den angesprochenen Port an.
    DATA[2…42] Liste aus 1 bis 8 Schlüssel-Wert-Paaren, bestehend jeweils aus Parametertyp und -wert. Die Kodierung entspricht der Nachricht MSG_LC_CONFIGX_SET.
    Hinweise:
    Die Meldung löst die CONFIG-Nachricht ab. Die Konfiguration eines Ports mit 'CONFIGX…'-Nachrichten ist ab ausgewiesener Protokollversion 0.6 verfügbar und zu verwenden.
    Wenn ein Port mehr als 8 Konfigurationsparameter hat, dann wird nach dem letztem Parameter der ersten Nachricht ein P_ENUM BIDIB_PCFG_CONTINUE angefügt, das zeigt dem Hostprogramm an, dass automatisch eine weitere Nachricht MSG_LC_CONFIGX übermittelt wird.
    Das P_ENUM BIDIB_PCFG_RECONFIG wird nur bei Verwendung des flachen Portmodells benötigt. Es ist dann im Upstream verpflichtend mitzusenden, um dem Host den Typ des Ports bekanntzugeben – auch wenn der Knoten keine Umkonfiguration unterstützt und der aktuelle Typ der einzig verfügbare ist.
  • MSG_LC_CONFIG:

    (veraltet.) Diese Nachricht wird nach einer Konfiguration oder nach einer Abfrage mittels MSG_LC_CONFIG_GET gesendet. Sie beschreibt die Einstellung eines einzelnen PORTs.

    Es folgen 6 Parameter, Reihenfolge und Kodierung wie bei MSG_LC_CONFIG_SET.

4.6.9. Lokale Makros

Zubehörsteuerungen können die Fähigkeit zu Makros haben, diese Fähigkeit kann unterschiedlich gut ausgeprägt sein und wird durch einen Level definiert. Ob Makros unterstützt werden und welcher Level der Makrofähigkeit unterstützt wird, kann durch eine Feature-Abfrage geklärt werden.

Ebenso sind Anzahl und mögliche Länge der Makrokanäle durch Featureabfragen zu klären.

Makros des Level 1 bestehen aus einer linearen Liste an Schaltpunkten, zu denen bestimmte Aktionen ausgeführt werden. Ein Schaltpunkt ist definiert durch den zeitlichen Abstand zum vorherigen Schaltpunkt, durch den geschalteten Ausgang und durch den Befehlswert. Jede dieser Aktionen entspricht einem MSG_LC_OUTPUT-Kommando. Zusätzlich hat ein Makro noch generelle Parameter wie z. B. die Schrittgeschwindigkeit, mit der es ausgeführt wird.

(Anmerkung: Intern im Knoten kann durch geschickte Programmierung der MSG_LC_OUTPUT-Befehl auf 2 Bytes verkürzt werden, damit ist dann bei einer Verwendung innerhalb Makros auch bei knappen Speicher eine große Zahl an Schaltpunkten möglich.)

Makros des Level 2 bestehen ebenso aus einer linearen Liste an Schaltpunkten (entsprechend Level 1), zusätzlich gibt es Schaltpunkte, welche das Starten und Anhalten weiterer Makros sowie das Synchronisieren verschiedener Makroläufe und die Abfrage von Eingängen (z. B. Endschalter oder Bedientaster) ermöglichen. Damit lassen sich dann bereits kleine lokale Ablaufsteuerungen realisieren, wie sie für animierte Szenen auf der Modellbahn gebraucht werden.

Ein Makro ist also eine Schrittkette von Aktionen auf einem Knoten, welche in einem bestimmten Raster ausgeführt wird. Das Raster für die Ausführung wird durch MACRO_TICK definiert. MACRO_TICK ergibt sich durch BIDIB_MACRO_PARA_SLOWDOWN (s.u.), multipliziert mit der Grundeinheit von 20ms.

Beispiel: stellt man BIDIB_MACRO_PARA_SLOWDOWN auf 50, so ergibt sich MACRO_TICK zu 50 * 20ms = 1s. Das Makro wird also jede Sekunde um einen TICK weitergeschaltet.

Makros sind selbständig. Makros lassen sich individuell laden, verändern und starten. Eine bestimmte Aktion oder ein bestimmter Ausgang darf in mehreren Makros vorkommen. Es dürfen so viele Makros gleichzeitig gestartet werden, wie der Dekoder anbietet. Auch kann es möglich sein, aus Makros Accessory-Objekte zusammenzustellen.

Beispiel für ein Makro:

Dieses Beispiel zeigt eine Verkehrsampel, ein Makro A soll diese auf den Signalisierungsbegriff 'STOP' schalten, ein weiteres Makro B soll die Ampel auf 'FAHRT' schalten.

Makro A (Ampel schaltet von grün nach rot)
DelayAktion
0Ausgang für 'GELB' einschalten.
0Ausgang für 'GRÜN' ausschalten.
10Ausgang für 'ROT' einschalten.
0Ausgang für 'GELB' ausschalten.

Erklärung: beim Start des Makros wird ohne Verzögerung GELB ein- und GRÜN ausgeschaltet (die Ampel springt also auf GELB). Die nächste Aktion hat eine Wartezeit von 10, nach dieser Wartezeit geht ROT an und ohne weitere Verzögerung geht GELB aus.

Makro B (Ampel schaltet von rot über rot-gelb nach grün)
DelayAktion
0Ausgang für 'GELB' einschalten.
10Ausgang für 'ROT' ausschalten.
0Ausgang für 'GELB' ausschalten.
0Ausgang für 'GRÜN' einschalten.

Bei diesem Makro wird zuerst GELB zugeschaltet, dann nach einer Verzögerung ROT zusammen mit GELB abgeschaltet und zugleich grün eingeschaltet.

Makros sind Konfigurationshilfsmittel für Knoten, die Fähigkeit zum Anzeigen und Erstellen von Makros ist für PC-Programme optional.

4.6.10. Features für lokale Makros

Die Makrounterstützung und das Level der Makrofähigkeit sind mittels Feature-Abfragen feststellbar:

Aufstellung der Features für Makro-Unterstützung
NummerNameBedeutung
60 FEATURE_CTRL_MAC_LEVEL Unterstützter Makro-Level
0 = keine Makrofähigkeit
1 = Makros des Level 1 (einfache Aktionslisten)
2 = Makros des Level 2 (Aktionslisten, mit Abfragen, Start, Stop, Zufall)
61 FEATURE_CTRL_MAC_SAVE Permanente Speicherung von Makros möglich
0 = keine Speicherfähigkeit;
1…n = Anzahl der Speicherplätze für permanente Speicherung
62 FEATURE_CTRL_MAC_COUNT Zahl möglicher Makros
0 = keine Makrofähigkeit
1…n = Anzahl der möglichen Makros des angegebenen Levels
63 FEATURE_CTRL_MAC_SIZE Länge lokaler Makrolisten
0 = keine Makrofähigkeit;
1…n = Anzahl der Einträge je Makroliste
64 FEATURE_CTRL_MAC_START_MAN Start von Makros durch lokale Eingänge
0 = Makros können nicht durch lokale Eingänge gestartet werden.
1 = Makros können durch lokale Eingänge gestartet werden. Dabei gilt eine feste Zuordnung: Eingang 0 startet Makro 0, Eingang 1 startet Makro 1, usw.
65 FEATURE_CTRL_MAC_START_DCC Start von Makros durch DCC
0 = Makros können nicht durch DCC gestartet werden.
1 = Makros können durch DCC-Befehle gestartet werden. Die Programmierung der DCC-Adresse erfolgt mit den jeweils üblichen Mitteln (z. B. per Progtaster oder CV-Programmierung. Zubehörbefehl 0 startet Makro 0, usw.
4.6.11. Downlink: Nachrichten für lokale Makros

Es gibt folgende Befehle zum Erstellen und Verwalten von Makros:

  • MSG_LC_MACRO_HANDLE:

    Es folgen zwei Bytes: Makroindex, Operations-Code. Die jeweilige Operation wird mit einer MSG_LC_MACRO_STATE beantwortet.

    Kodierung des Makro-Operations-Codes
    WertNameBedeutung
    0 BIDIB_MACRO_OFF Makro soll abgebrochen werden.
    1 BIDIB_MACRO_START Makro soll gestartet werden.
    2…0xFB   reserviert.
    0xFC (=252) BIDIB_MACRO_RESTORE Wiederherstellen. Das angegebene Makro wird aus dem Permanentspeicher (sofern vorhanden, dies kann durch eine Abfrage des Features überprüft werden) übertragen und überschreibt damit das aktuell geladene Makro. Sollte kein Permanentspeicher vorhanden sein, so wird das angegebene Makro gelöscht (wie BIDIB_MACRO_DELETE).
    0xFD (=253) BIDIB_MACRO_SAVE Sichern. Das angegebene Makro wird in den Permanentspeicher (sofern vorhanden, kann durch eine Abfrage des Features überprüft werden) übertragen und steht nach dem erneuten Start des System wieder zur Verfügung.
    0xFE (=254) BIDIB_MACRO_DELETE Löschen des Makros. Der Inhalt des angegebene Makros wird gelöscht (im Arbeitsspeicher). Diese Operation ist identisch zum Setzen aller(!) Schaltzustände auf 255, 255 (END_OF_MACRO).
    Hinweis:
    Das Sichern eines Makros kann im Knoten einige Zeit beanspruchen. Je nach Implementierung des Knotens kann dieser fallweise in dieser Zeit keine Anfragen beantworten. Es ist daher die Antwort auf diesen Befehl abzuwarten, bevor weitere Befehle gesendet werden.
  • MSG_LC_MACRO_SET:

    Setzen eines Makroschaltpunktes, damit wird ein einzelner Makropunkt definiert. Es folgen 6 Parameter:

    MSG_LC_MACRO_SET Parameter
    ParameterBeschreibung
    DATA0 Index des Makros
    DATA1 Index des Punktes innerhalb des Makros
    DATA2 DELAY: Verzögerungszeit zum Vorgängerpunkt. Wertebereich 0…250 SYS_TYPE: unverzögerter Aufruf einer Systemfunktion. Wertebereich 251…255
    DATA3 PORT[2]: Diese Bytes geben den angesprochenen Port an. SYS_CMD: Systemfunktion, z. B. das Ende des Macros.
    DATA4 SYS_ARG[2]: Argumente der Systemfunktion.
    Von der jeweiligen Funktion nicht verwendete Bytes sind mit 0 zu belegen, sie werden zwar mitübertragen, jedoch nicht ausgewertet.

    DATA5 PORTSTAT: Schaltzustand gemäß der Tabelle bei MSG_LC_OUTPUT

    Das Setzen eines Makroschaltpunktes wird mit einer MSG_LC_MACRO Nachricht beantwortet. Sollte ein Port außerhalb der vorhandenen Ports konfiguriert werden, so wird das Makro bei Ausführung an dieser Stelle beendet.

    Das Ende eines Makro wird mit dem Setzen aller Parameter auf 255 signalisiert, bzw. wenn der für Makro verfügbare Speicherplatz zu Ende ist.

    DELAY, Verzögerungszeit: Die hier angegebene Zahl bezeichnet die Zeit bezogen auf den vorhergehende Makropunkt. Eine Zeit von 0 bedeutet keine zeitliche Lücke zwischen den Aktionen (wiewohl sie doch aus physikalischen Gründen i. d. R. knapp nacheinander ausgeführt werden). Die hier angegebene Zeit bedeutet die Zahl der MAKRO_TICKs, welche bis zur Ausführung der Schaltaktion vergehen. Der gültige Bereich beträgt 0…250.

    Die tatsächliche Wartezeit ergibt sich, wenn man diese Zahl mit der Geschwindigkeit der Makroausführung multipliziert. Damit lassen sich Zeiten von 20ms bis über 20min realisieren.

    Für Makros des Level 2 sind bei DELAY = 255 weitere Systemfunktionen gemäß folgender Tabelle definiert:

    Kodierung der Systemfunktionen bei DELAY=255 (Makro Level 2)
    WertNameFunktion
    255 BIDIB_MSYS_END_OF_MACRO Das Makro wird beendet.
    254 BIDIB_MSYS_START_MACRO Das in SYS_ARG0 angegebene Makro wird gestartet. Dies kann auch das aktuelle Makro sein, es beginnt dann wieder von vorn.
    253 BIDIB_MSYS_STOP_MACRO Das in SYS_ARG0 angegebene Makro wird gestoppt. Stop bedeutet hierbei Abbruch, nicht Pause. Sollte sich das Zielmakro in einem kritischen Abschnitt befinden, so wird die Stopanforderung nach dem kritischen Abschnitt ausgeführt.
    252 BIDIB_MSYS_BEGIN_CRITCAL Das Makro wird nicht durch eine Stopanforderung angehalten, der momentane Ablauf soll fertiggestellt werden (bis END_CRITICAL).
    Beispiel: die Bewegung eines mechanisches Objekts soll nicht 'auf halber Strecke' abbrechbar sein.
    251 BIDIB_MSYS_END_CRITCAL Das Makro darf durch eine Stopanforderung angehalten werden (default)
    250 BIDIB_MSYS_FLAG_QUERY1 Das in SYS_ARG0 angegebene Flag wird auf Zustand 1 abgefragt. Sofern es nicht gesetzt ist, wird die Makroausführung pausiert, bis das Flag (z. B. durch ein anderes Makro) gesetzt ist.
    249 BIDIB_MSYS_FLAG_SET Das in SYS_ARG0 angegebene Flag wird gesetzt. Wertebereich: 0…15
    248 BIDIB_MSYS_FLAG_CLEAR Das in SYS_ARG0 angegebene Flag wird gelöscht. Wertebereich: 0…15
    247 BIDIB_MSYS_INPUT_QUERY1 Der in SYS_ARG angegebene Eingang bzw. Schalter wird abgefragt. Im flachen Portmodell wird hier die Portadresse angegeben, im typorientierten wird nur die PORTNUM in SYS_ARG0 kodiert (mit PTYPE=15).
    Sofern der Schalter offen ist (PORTSTATE=0), wird die Makroausführung pausiert. Wenn der Schalter geschlossen ist (PORTSTATE=1), wird die Makroausführung fortgesetzt.
    246 BIDIB_MSYS_INPUT_QUERY0 Der in SYS_ARG angegebene Eingang / Schalter wird abgefragt. Im flachen Portmodell wird hier die Portadresse angegeben, im typorientierten wird nur die PORTNUM in SYS_ARG0 kodiert (mit PTYPE=15).
    Sofern der Schalter geschlossen ist (PORTSTATE=1), wird die Makroausführung pausiert. Wenn der Schalter offen ist (PORTSTATE=0), wird die Makroausführung fortgesetzt.
    245 BIDIB_MSYS_DELAY_RANDOM Die Makroausführung wird um eine zufällige Zeit verzögert. Die Zeitspanne wird als Zufallswert aus einem Zeitraum von 0…SYS_ARG0 MACRO_TICKS bei jedem Aufruf neu berechnet. Damit lassen sich z. B. bei Beleuchtungen von Häusern realistische Abläufe erzielen.
    244 BIDIB_MSYS_DELAY_FIXED Die Makroausführung wird um eine feste Zeit von 0…255 MACRO_TICKS verzögert. Die Zeit ist in SYS_ARG0 angegeben.
    243 BIDIB_MSYS_ACC_OKAY_QIN1 Der in SYS_ARG angegebene Eingang / Schalter wird abgefragt. Im flachen Portmodell wird hier die Portadresse angegeben, im typorientierten wird nur die PORTNUM in SYS_ARG0 kodiert (mit PTYPE=15).
    Sofern der Schalter geschlossen ist (PORTSTATE=1), wird an das Accessory, welches dieses Makro gestartet hat, eine erfolgreiche Ausführung gemeldet. Wenn der Schalter offen ist (PORTSTATE=0), wird ein Rückmeldefehler gemeldet.
    242 BIDIB_MSYS_ACC_OKAY_QIN0 Der in SYS_ARG angegebene Eingang / Schalter wird abgefragt. Im flachen Portmodell wird hier die Portadresse angegeben, im typorientierten wird nur die PORTNUM in SYS_ARG0 kodiert (mit PTYPE=15).
    Sofern der Schalter offen ist (PORTSTATE=0), wird an das Accessory, welches dieses Makro gestartet hat, eine erfolgreiche Ausführung gemeldet. Wenn der Schalter geschlossen ist (PORTSTATE=1), wird ein Rückmeldefehler gemeldet.
    241 BIDIB_MSYS_ACC_OKAY_NF An das Accessory, welches dieses Makro gestartet hat, wird eine erfolgreiche Ausführung gemeldet (mit der Zusatzinfo: No Feedback available).
    240 BIDIB_MSYS_SERVOMOVE_QUERY Das in SYS_ARG angegebene Servo wird abgefragt. Im flachen Portmodell wird hier die Portadresse angegeben, im typorientierten wird nur die PORTNUM in SYS_ARG0 kodiert (mit PTYPE=2).
    Sofern die Bewegung des Servos noch nicht beendet ist, wird die Makroausführung pausiert. Wenn die Bewegung beendet ist, wird die Makroausführung fortgesetzt.
    239 BIDIB_MSYS_FLAG_QUERY0 Das in SYS_ARG0 angegebene Flag wird auf Zustand 0 abgefragt. Sofern es gesetzt ist, wird die Makroausführung pausiert, bis das Flag (z. B. durch ein anderes Makro) rückgesetzt ist.
  • MSG_LC_MACRO_GET:

    Abfrage eines Makropunktes, es folgen zwei Bytes mit Makroindex und Schaltpunktindex. Die Abfrage wird mit einer MSG_LC_MACRO beantwortet.

    MSG_LC_MACRO_GET Parameter
    ParameterBeschreibung
    DATA0Index des Makros, in dem der Schaltpunkt abgefragt wird.
    DATA1Index des Schaltpunktes innerhalb des Makros

    Die Indizes werden beginnend ab 0 gezählt.

  • MSG_LC_MACRO_PARA_SET:

    Setzen eines allgemeinen Parameters für ein Macro, damit werden die Ausführungsparameter des Makros festgelegt: Makrogeschwindigkeit, Ausführungsmode (z. B. repetierend), Startbedingung usw. Es folgen 6 Parameter:

    MSG_LC_MACRO_SET_PARA Parameter
    ParameterBeschreibung
    DATA0Index des Makros
    DATA1Index des Parameters
    DATA2Wert des Parameters (LSB)
    DATA3Wert des Parameters
    DATA4Wert des Parameters
    DATA5Wert des Parameters (MSB)

    Das Setzen eines Makroparameters wird mit einer MSG_LC_MACRO_PARA Nachricht beantwortet.

    Indexwerte der Parameter:

    Kodierung der Makrokonfigurations-Parameter
    WertNameBedeutung
    1 BIDIB_MACRO_PARA_SLOWDOWN Laufgeschwindigkeit des Macros. Mit diesem Wert wird die Abarbeitungsgeschwindigkeit angegeben. Die Grundeinheit ist 20ms.
    Wertebereich: 1…250
    Voreinstellung 1.
    Beispiel: bei einer Einstellung von 5 schaltet das Macro alle 100ms um einen Macro-Tick weiter. Wenn also in der Makroliste etwa 2 angegeben ist, dann bedeutet das in Summe einen zeitlichen Abstand von 200ms zwischen den Aktionen.
    2 BIDIB_MACRO_PARA_REPEAT Wiederholungen des Makros. Das Makro wird so oft wiederholt, wie hier angegeben. Wenn hier 0 angegeben wird, dann wird das Makro endlos wiederholt.
    Wertebereich: 0…250
    Voreinstellung: 1, d.h. das Makro wird genau einmal ausgeführt.
    3 BIDIB_MACRO_PARA_START_CLK Macrostart per Systemuhr freigegeben. DATA2 bis DATA5 enthalten den Zeitpunkt als TCODE (siehe hierzu die Erläuterungen beim Befehl MSG_SYS_CLOCK)
    Ergänzend zum Start zu einer bestimmten Modell-Uhrzeit besteht auch den Möglichkeit, Macro-Starts wiederholend festzulegen, also z. B. jede Stunde. oder jeden Tag zur gleichen Stunde. Dies wird durch Angabe eines TCODEs erreicht, welcher nicht in einer normalen Zeitnachricht enthalten sein kann. Solche TCODEs sind also Triggerbedingungen, welche ähnlich einem 'wildcard' bei mehreren Zeitpunkt erfüllt werden:
    TCODExBedeutung
    00mmmmmm mmmmmm = Angabe der Minute:
    0…59: definierte Startzeit
    60: Start jede Minute
    61: Start jede halbe Stunde (d.h. bei 0,30)
    62: Start jede Viertelstunde (d.h. bei 0,15,30,45)
    100HHHHH HHHHH = Angabe der Stunde
    0…23: definierte Startzeit
    24: Start zu jeder Stunde
    25: Start zu jeder Stunde, 8:00 bis 17:00 (nur tagsüber)
    01000www www = Wochentag, 0=Montag, 1=Dienstag,…6=Sonntag.
    7: Start an jedem Tag
    110fffff fffff = Uhrbeschleunigungsfaktor (für Macro irrelevant).
    Ein Makro startet immer dann, wenn der Knoten eine Übereinstimmung bei Minute, Stunde und Tag erkennt.
    Soll das Starten via TCODE unterbunden werden, sind alle Triggerbedingungen auf void zu stellen, d.h. für min/hr/day ist jeweils 0x3F als Datenwert anzugeben. Wenn also die Triggerung ganz abgeschaltet werden soll, so ist 0x3f, 0xbf, 0x7f, 0xff zu senden.
    Voreinstellung: 0x3f, 0xbf, 0x7f, 0xff (=abgeschaltet)
    Beispiele:
    TCODE = (0x00 + 15), (0x80 + 24), (0x40 + 7): Hier erfolgt ein Start jeden Tag, jede Stunde, immer zur Minute 15.
    TCODE = (0x00 + 00), (0x80 + 18), (0x40 + 7): Hier erfolgt ein Start jeden Tag, 18:00
    tbd. tbd. Macrostart per DCC-Schaltbefehl freigegeben.
    tbd. tbd. Macrostart per externen Eingang freigegeben.

    Wenn ein Knoten in der Lage ist, Makros permanent zu speichern, dann müssen die Makroparameter bei diesem Vorgang auch mit abgespeichert werden.

  • MSG_LC_MACRO_PARA_GET:

    Abfrage eines Makroparameters, es folgen zwei Bytes mit Makroindex und Parameterindex. Die Abfrage wird mit einer MSG_LC_MACRO_PARA beantwortet.

4.6.12. Uplink: Nachrichten für lokale Makros
  • MSG_LC_MACRO_STATE:

    Die Nachricht wird als Quittung nach der Zustandsänderung (Operation) eines Makros gesendet. es folgen zwei Bytes mit Makroindex und Zustand.

    Kodierung des Makrozustands
    WertNameBedeutung
    0 BIDIB_MACRO_OFF Makro ist angehalten
    1 BIDIB_MACRO_START Makro wird gestartet
    2 BIDIB_MACRO_RUNNING Makro wird bereits ausgeführt
    252 BIDIB_MACRO_RESTORE Makro wurde wiederhergestellt
    253 BIDIB_MACRO_SAVE Makro wurde gesichert
    254 BIDIB_MACRO_DELETE Makro wurde gelöscht
    255 BIDIB_MACRO_NOTEXIST Makro existiert nicht (Makroindex beim Aufruf zu groß)
  • MSG_LC_MACRO:

    Übermittlung eines abgefragten Makropunktes, es folgen 6 Bytes mit Makroindex und Schaltpunktindex sowie dem Inhalt dieses Punktes. Die Kodierung ist identisch zu MSG_LC_MACRO_SET.

  • MSG_LC_MACRO_PARA:

    Übermittlung eines abgefragten Makroparameters, es folgen 6 Bytes mit Makroindex, Parameterindex und Parameterwert (Data). Wenn der Parameter im Knoten nicht existiert, dann wird der Wert 0xFF für alle Datenbytes zurückgeliefert.

    MSG_LC_MACRO_PARA Parameter
    ParameterBeschreibung
    DATA0Index des Makros
    DATA1Index des Parameters
    DATA2Wert des Parameters (LSB)
    DATA3Wert des Parameters
    DATA4Wert des Parameters
    DATA5Wert des Parameters (MSB)