Changelog: 12.07.2018: - die Befehle XFunc34 und XFunc34Sts unterstützen jetzt bei MFX die Funktionen bis F31 - Alle Lok-Adressen sind im Prinzip 16 bit lang, könnten also von 0 .. 65535 alle Werte annehmen. Die Adresse 0 illegal, da intern reservier. Die Adressierung von Märklin/Motorola ist begrenzt auf 1 .. 255, DCC 1 .. 10239 und MFX auf 1 .. 16383. Um diese verschiedenen formatanghängigen Werte nicht jedesmal explizit aufführen zu müssen, wird der gültige Adressbereich jeweils mit "1 .. MAXADR" angegeben. 13.05.2017: - neuer ASCII Befehl FM für Funktionsmappings - neuer ASCII Befehl CVER für Softwareversionen der Clients 02.07.2016: - neuer ASCII Befehl MRST für einen Master-Reset (Werksreset) 14.05.2016: - neuer ASCII Befehl MFX zum Auslesen der MFX-UID und programmieren der Lokadresse 24.02.2016: - Unterstützung des 'SO' XSoSet-Befehls für SO999 (Magnetbefehle auf den Boosterausgängen unterdrücken). 29.12.2015: - neuer Befehl SWUPDATE für RedBox 26.09.2015: - BinaryState Befehl XBinSt (0x8B) implementiert 13.12.2014: - Ein weiterer (optionaler) Parameter für die ASCII-Befehle PD, PA und PX (POM - Programming on Main für Multifunction-Decoder, Accessory-Decoder und extended Accessory-Decoder). 21.09.2014: - Ein weiterer (optionaler) Parameter für den ASCII-Befehl RCR (RailCom Read). 13.07.2014: - Neuer Befehl Xm3Sid (0x87) zum Setzen einer Lokadresse für eine m3 UID (MAC). Diese UID muß vorher bekannt sein (evtl. am Programmiergleis auslesen). 30.01.2012: - Anzahl der s88-Module von 32 auf 52 korrigiert. Diese Anzahl an Modulen wird bereits seit einigen Jahren unterstützt, lediglich die Dokumentation war diesbezüglich noch auf einem alten Stand. Das betrifft allerdings nicht das original Märklin-Protokoll (P50). Hier bleibt es aufgrund der Befehlsstruktur bei einer Beschränkung auf max. 31 Module. 05.01.2012: - Umrechnung der Dekoder-FS in den Interface-Speed (0 - 127) wird über Tabellen gemacht. Die dokumentierten Werte in diesen Tabellen (also die resultierenden gemeldeten Geschwindigkeiten) stammten aus einer alten Version und unter- scheiden sich im unteren Geschwindigkeitsbereich von den tatsächlich ge- lieferten Werten. -> Dokumentation der Tabellen entsprechend korrigiert. - Umrechnung der Interface-Speedangaben in reale Decoder-FS ist nun etwas klarer formuliert und die Angaben zu den Speeds, die zur maximalen Geschwin- digkeit führen, sind noch einmal überprüft worden und beziehen sich nun auf die Angabe im Interface-Befehl. 30.11.2011: - Dokumentation der Funktion XTrntX (0x91) - Setzen des Aspects eines extended Accessory Decoders - XTrntGrp war falsch implementiert und lieferte das dritte Antwortbyte (Reser- vierungsstatus) nicht aus. Ab Software 1.4.6h ist das korrigiert. 06.11.2011: - Neue Funktionen zum Handling der Funktionsbits F17 bis F28 aus dem OpenDCC- Projekt von Wolgang Kufer übernommen (XFunc34 und XFunc34Sts). 30.10.2011: - Doku zu den erweiterten Funktionen (XFuncX und XFuncXSts) auf den nun möglichen Bereich bis F16 angepasst. 19.10.2008 - Parameter des RC-Befehls (RailCom-Unterstützung) kann jetzt mehr Werte annehmen. 20.09.2008 - RC gibt den Status der RailCom-Unterstützung aus. Mit RC 1 kann sie ein- und mit RC 0 ausgeschaltet werden. 09.04.2008 - TRKDUMP und TRKADD können nun auch Traktionen mit Loks unterschiedlicher Fahrtrichtung anlegen bzw. ausgeben. 14.11.2006 - Erweiterung um P50Xa-Commands zum Programmieren auf dem Programmiergleis und Schreiben von von CVs auf dem Hauptgleis. 27.10.2006 - Erweiterung um XLokCfgSet, 'LS', 'TPM' 11.08.2006 - Doku zu den IF-Befehlen für die Lok-Datenbank 19.11.2005: - XEvtTrn liefert jetzt auch den aktuellen Magnetstatus (an oder aus) 17.10.2005: - Unterstützung des 'SO' bzw. XSoGet-Befehls für SO1 (Baudrate aus Menü). 03.08.2005: - vergessene Kommandos aus P50X_GEN.TXT dokumentiert - Präzisierung des s88 Autoreset-Verhaltens - Dokumentation der P50Xa Kommandos 'SS' und 'SE' - P50Xb-Command XtrntGrp neu aufgenommen - Liste aller möglichen Kommandos angefügt - neues Kommando XLokX (0x81) wie XLok (0x80) aber mit Decoder-Speed statt Interface-Speed. - Hinweis, dass die MC sich die Weichenstellung nicht merkt entfernt 25.07.2005: - Hinweis auf BABI (Baudratenerkennung) angefügt 24.07.2005: - P50Xa, 'T': Richtung der Weichen wird jetzt doch mitgeführt (allerdings nicht über einen RESET hinaus). Beschreibung der unterstützten Interface-Commands EasyControl ============================================================= Vorbemerkung ------------- Alle hier gemachten Angaben sind zunächst noch vorläufig und stellen eher das unterstützte Minimum dar. Es kann sowohl noch Erweiterungen als auch Korrekturen geben. Insbesondere falls sich grobe Inkompatibilitäten mit der IB ergeben, sollte hier nachgebessert werden. Wem solche Schnitzer auffallen, der möge sich bitte melden! Allgemein ---------- Die EasyControl Zentrale (MasterControl, im weiteren Text als MC bezeichnet) arbeitet an der seriellen Schnittstelle mit 1200, 2400, 4800, 9600, 14400, 19200, 38400 oder 57600 Baud. Das Datenformat ist immer 8 Datenbits, kein Parity, 1 Stopbit (8n1). Bei Kommunikation über USB (intern einfach eine weitere serielle Schnittstelle) wird immer mit 57600 Baud gearbeitet (egal was das PC-Programm einstellt). Standardmäßig interpretiert die MC ankommenden Daten als Märklin 6050 binäre Interfacecommands (bei der Intellibox [IB] P50-Commands genannt). Ist das erste Zeichen jedoch ein 'X' oder 'x' (Hex-Codes 0x58 bzw. 0x78) so werden die Befehle im erweiterten Command-Set interpretiert (bei der IB P50X-Commands genannt). Nach Abarbeiten eines P50X-Commands und Ausgabe eventueller Antworten wird als Abschluß die Zeichenfolge + ']' ausgegeben. Dieser Prompt dient als Bereitschaftsanzeige der MC zur Annahme weiterer Kommandos. Insofern verhält sich die MC ganz ähnlich wie die IB. Ziel ist eine möglichst weitgehende Kompatibilität. Jedoch verhält sich die MC in einigen Details etwas anders, da z.Zt. auch nicht all die vielen Special-Options (SOs) der IB vorge- sehen sind. Details dazu folgen später. Die beiden Schnittstellen (seriell und USB) können als zwei getrennte Interfaces betrachtet werden. Über beide können gleichzeitig Befehle geschickt werden. Dahinter sitzt jedoch selbstverständlich nur eine Zentrale,so dass bei in Konflikt miteinander stehenden Befehlen der zuletzt gesendete Vorrang hat (z.B. eine Lokgeschwindigkeit) bzw. der zuerst gesendete die Daten abgreift (z.B. Events). Die Einstellung auf P50X-only oder P50X-mixed mode ist jedoch individuell pro Schnittstelle einstellbar! Die MC ermöglicht theoretisch Lok-Adressen von 1 .. 65535. Die Adresse Null ist grundsätzlich ungültig! Der tatsächlich durch das jeweilige Protokoll ermöglichte Adressbereich ist wie folgt eingeschränkt: - Märklin / Motorola: 1 .. 255 - DCC: 1 .. 10239 - m3/MFX: 1 .. 16383 Parameter bei P50Xa (ASCII) Kommandos dürfen Leerzeichen auch zwischen dem Parameter und einem folgenden Komma haben (ist bei der IB verboten! -> könnte das zu Inkompatibilitäten führen???). Unbekannte P50Xa-Kommandos werden mit "Unknown command" beantwortet. ACHTUNG: Nach Neustart der MC (Strom aus, an) oder abziehen des USB-Kabels ist die serielle Schnittstelle über USB nicht mehr gültig (USB meldet sich nach Einschalten neu am System an -> Hotplug!). In diesem Fall ist das Filehandle für die geöffnete Schnittstelle unbrauchbar (es können keine Zeichen mehr ver- sandt werden und es wird natürlich nichts mehr empfangen). In diesem Fall muß die Schnittstelle erneut geöffnet werden. Die Kommandos zur Steuerung der Programmierung (PT, Programming Track) werden z.Zt. nicht unterstützt. Dies wird evtl. in einer späteren Softwareversion implementiert. 14.11.2006: Ab Rev. 1.4.3f sind die P50Xa-Commands für die DCC-Programmierung implementiert! Automatische Baudratenerkennung -------------------------------- Die MC unterstützt die automatische Baudratenerkennung BABI wie die IB. Die Implementation ist etwas anders, sollte sich jedoch durchweg kompatibel ver- halten. Anmerkungen ------------ Geschwindigkeiten (P50X-Commands): Es wird grundsätzlich mit einer Skala von 0 bis 127 gearbeitet. Diese wird dann auf die jeweils verfügbaren Geschwindigkeitsstufen umgerechnet. Dies gilt grund- sätzlich für alle Formate und für beide Richtungen. Die Geschwindigkeitsstufe 1 bedeutet dabei immer Not-Halt (Emergency-Stop). Im Gegensatz zur IB gelten Not- Halt und Richtungsumkehr nicht als Zustände sondern sind Ereignisse. Somit können sie zwar an die MC gesendet werden und beeinflussen den Lok-Zustand bzw. deren Verhalten, umgekehrt werden diese Zustände aber nicht zurückgeliefert. Ein Not-Halt resultiert daher in Geschwindigkeit 0. Eine Richtungsumkehr halt in einer umgekehrten Richtung! Unterstützte Funktionen (F0 .. Fn) (P50X-Commands): Die MC unterstützt grundsätzlich die Funktionen F1 bis F14, sowie FL / Licht / function / F0. Die vom Decoderformat nicht unterstützten Funktionen werden allerdings nicht ans Gleis gesendet (wie denn auch?). Zudem ist die Übertragung der Funktionen F9 .. F12 für DCC momentan nicht implementiert (wird aber noch kommen). Die Funktionen F13 und F14 werden meines Wissens z.Zt. von noch keinem Format offiziell unterstützt. Bei DCC ist eine Erweiterung auf bis zu 127 Funktionen in Vorbereitung. Sobald das offiziell wird, wird die MC das unterstützen. s88-Autoreset: Man kann das s88-Autoreset ein- und ausschalten. Die Wirkung betrifft das P50Xa Kommando 'SS', das P50Xb Kommando XSensor (0x98) und das P50 Kommando 0x81 bis 0x9F bzw. 0xC1 bis 0xDF. Das Auslesen des s88-Moduls liefert den aufsummierten Zustand (Oder-Verknüpfung) seit dem letzten Reset. Bei eingeschaltetem Autoreset werden nach dem Auslesen alle Bits wieder auf Null gesetzt. Ohne Autoreset bleiben diese erhalten. Einen Reset erhält man in diesem Fall also nur durch Umschalten in den Autoresetmodus und auslesen aller zu löschenden s88-Module. Anschließend kann bei Bedarf der Autoreset wieder abgeschaltet werden. P50-Commands (Märklin 6050): ----------------------------- 0x00 .. 0x1F: Geschwindigkeit und 'Function' (2 Bytes) Die unteren 4 Bits des ersten Bytes sind die Geschwindigkeit (0 .. 14). Der Wert 15 bedeutet Richtungsumkehr. Das Bit 4 (0x10) schaltet die 'Function' (Licht). Ist es gesetzt so wird das Licht eingeschaltet, sonst aus. Das zweite Byte ist die Lokadresse. Gültige Adressen: 1 .. 255. 0x20 .. 0x22: Weichen (2 Bytes) Das erste Byte kodiert die Funktion für die Weiche: 0x20 = Weichenantrieb aus, 0x21 = Weiche gerade ('grün'), 0x22 = Weiche auf Abzweig ('rot'). Das zweite Byte ist die Weichenadresse 1 .. 255. Anmerkungen: Das Kommando 0x23 ist eigentlich nicht vorgesehen. Es verhält sich jedoch genauso wie 0x20 (Weichenantrieb aus). Im Kommandobereich bis 0x3F wiederholen sich die Weichenkommandos alle 4 Werte (0x24, 0x28, ... 0x3C sind also das Gleiche wie 0x20). ACHTUNG: die Magnete sollten sicherheitshalber automatisch abschalten .... (oder nicht???) 0x40 .. 0x4F: Funktionen F1 bis F4 (2 Bytes) Das erste Byte enthält in den unteren 4 Bits den neuen Zustand der Funktionen F1 bis F4. Dabei wird F1 durch Bit 0 (0x01) und F4 durch Bit 4 (0x08) darge- stellt. Das zweite Byte ist die Lokadresse 1 .. 255. Anmerkung: Das Kommando wiederholt sich im Bereich 0x50 .. 0x5F. AUSNAHME: 0x58 = 'X' dient als Prefix für erweiterte Kommandos (P50x) 0x60 .. 0x61: Start / Stop (1 Byte) 0x60 entspricht dem Drücken der Taste "GO", 0x61 entspricht dem Drücken der Taste "STOP". Die Kommandos wiederholen sich alle 2 Kommandowerte bis 0x7F wobei jeder gerade Wert einem "GO" entspricht und jeder ungerade einem "STOP". AUSNAHME: 0x78 = 'x' dient als Prefix für Erweiterte Kommandos (P50x) 0x80 .. 0x9F: Ausgabe einer Anzahl S88-Units / S88 Reset aus (1 Byte) Die unteren 5 Bits sind die Anzahl der auszugebenden S88 Module (1 bis 31). Wird als Anzahl 0 angegeben (Kommando 0x80) so wird das S88-Autoreset abgeschaltet. 0xA0 .. 0xBF: unbenutzt (1 Byte) 0xC0 .. 0xDF Ausgabe einer S88-Unit / S88 Reset ein (1 Byte) Die unteren 5 Bits ist die Nummer des auszugebenden S88-Moduls (1 bis 31). Wird als Anzahl 0 angegeben (Kommando 0xC0) so wird das S88-Autoreset eingeschaltet. 0xE0 .. 0xFF: unbenutzt (1 Byte) P50Xa-Commands (ASCII-Commands, Abschluss mit CR): --------------------------------------------------- ?: Help Syntax: ? H: Help Syntax: H Gibt einen Hilfestrings zur weiteren Hilfe per HL, HT und HF Kommando aus. HL: Help für Lok-Commands Syntax: HL Antwort "L {Lok#, [Speed], [FL], [Dir], [F1], [F2], [F3], [F4]}" HT: Help für Turnout-Commands (Weichen) Syntax: HT Antwort "T {Trnt#, [Color], [Status]}" HF: Help für Funktionskommandos Syntax: HF Antwort "F {Lok#, [F1], [F2], [F3], [F4], [F5], [F6], [F7], [F8]}" .: Stop Syntax: . STOP: Stop Syntax: STOP Führt einen STOP aus (selbe Aktion wie Drücken der roten STOP-Taste). Die Gleissignale werden abgeschaltet. Antwort: "Pwr off" !: Go Syntax: . GO: Go Syntax: GO Führt einen GO aus (selbe Aktion wie Drücken der grünen GO-Taste). Die Gleissignale werden eingeschaltet. Antwort: "Pwr on" HALT: Halt Syntax: HALT Die Funktion hält alle Loks an (per Emergency-Stop), schaltet die Gleis- signale jedoch nicht ab. Solange die Anlage in diesem Zustand ist, kann keine Lok angefahren werden, der Rest funktioniert jedoch normal. Antwort: "Halted!" L: Lok Steuerung Syntax: L {Lok#, [Speed], [FL], [Dir], [F1], [F2], [F3], [F4]} Lok#: Lokadresse (1 .. MAXADR) Speed: Geschwindigkeit (0 .. 127: 0 = Stop, 1 = Em.Stop) FL: Front-Light (0 = aus, 1 = ein) Dir: Direction (0 oder r = rückwärts, 1 oder f = vorwärts) Fn: Funktionsausgang n (0 = aus, 1 = ein) Die Geschwindigkeit wird für alle Lokformate einheitlich im Bereich von 0 bis 127 definiert. Die MC rechnet die Geschwindigkeiten intern auf die jeweiligen Bereiche um. Dabei kommt folgendes Vorgehen zum Zuge: 1. Speed 1 ist immer Nothalt (Emergency Stop). Dieser Wert wird vor einer Umrechnung abgefangen und entsprechend ohne weitere Umrechnung in eine Nothalt-Aktion umgesetzt. 2. Speed 0 ist immer Null (und wird nicht weiter bearbeitet!) 3. Für die folgende Formel wird zunächst 1 vom angegebenen Speed subtrahiert (jetzt liegt die Angabe im Bereich 0 bis 126) 4. Der Speed wird in Abhängigkeit der verfügbaren Non-Stop-Speeds durch die aufgeführten Formeln umgerechnet (alle Berechnungen werden als reine Integer-Berechnungen durchgeführt): 14 Speeds = (speed + 8) / 9 27 Speeds = (speed * 3 + 11) / 14 28 Speeds = (speed * 2 + 7) / 9 126 Speeds = speed Dadurch ist sichergestellt, dass bei einer Interface-Angabe von Speed = 2 immer die erste Fahrstufe des Zielformats anliegt und die Höchstfahrstufe erreicht werden kann ohne überschritten zu werden. Der Punkt, ab dem die höchste Fahrstufe anliegt ist unterschiedlich und beträgt bei 14 Speeds: 119 27 Speeds: 124 28 Speeds: 123 126 Speeds: 126 Wird der Status abgefragt (nur der erste Parameter wurde angegeben) so wird die Geschwindigkeit wieder zurückgerechnet. Dabei wird grundsätzlich die Fahrstufe 0 als 0 ausgegeben und der Speed-Step 1 (Emergency-Stop Code) übersprungen. Daher beginnt die minimale Fahrstufe bei 2. Die Speeds werden anhand von Tabellen in die Interfacegeschwindigkeit umgerechnet (Tabelle beginnt bei internem Speed 1 = kleinste Fahrgeschwindigkeit): 14 Speeds: 2 12 21 29 38 48 57 67 76 86 95 105 114 127 27 Speeds: 2 7 12 16 21 26 30 35 40 44 49 54 58 63 68 72 77 82 86 91 96 100 105 110 115 121 127 28 Speeds: 2 7 11 16 20 25 29 34 38 43 48 53 57 63 67 72 76 81 86 91 95 100 105 109 114 118 123 127 126 Speeds: Berechnung als (speed + 1) Die Fahrtrichtung ist bei "Motorola old" mit Vorsicht zu genießen, da es im MM-I Format keine absolute Richtungsinformation gibt. Als Antwort gibt der Befehl die momentane Einstellung (entweder als Ergebnis der vorgenommenen Veränderungen oder als Antwort auf die Statusabfrage) aus: z.B.: "L 23 0 0 f 1 0 0 0" Ist die Lok bereits an der MC oder einer LC unter Kontrolle, so wird "Lok busy!" ausgegeben. LC: Lok Protokoll Konfiguration ausgeben Syntax: L {Lok#} Lok#: Lokadresse (1 .. MAXADR) Je nach eingestelltem Format wird ausgegeben: Motorola I: "Motorola Old" Motorola II: "Motorola New" DCC: "DCC" m3: "m3" Ist die Lok nicht im Refresh-Buffer (bei der IB heißt das wohl 'Slot') vermerkt, so wird "unused" ausgegeben. Bei illegaler (oder fehlender) Lok- Adresse wird "Loco adress out of range" ausgegeben. Es ist keine Möglichkeit vorgesehen, das benutzte Protokoll über das Interface zu ändern. F: Function Syntax: F {Lok#, [F1], [F2], [F3], [F4], [F5], [F6], [F7], [F8]} Lok#: Lokadresse (1 .. MAXADR) Fn: Funktionsausgang n (0 = aus, 1 = ein) Wird mehr als der erste Parameter beigestellt, so werden die Funktionsbits entsprechend gesetzt. Abschließend werden die resultierenden / aktuellen Funktionsbits ausgegeben. Das Motorola-Format unterstützt nur die Funktionen F1 bis F4 (intern werden die Funktionen aber bis F14 durchaus gespeichert). FX: Function (eXtended) Syntax: FX {Lok#, [F9], [F10], [F11], [F12], [F13], [F14]} Lok#: Lokadresse (1 .. MAXADR) Fn: Funktionsausgang n (0 = aus, 1 = ein) Dieses Kommando ist als Erweiterung für mehr Funktionsbits vorgesehen. Z.Zt. unterstützt die MC intern die Funktionen bis F14. Für die Controls (MasterControl und LokControl) gibt es keine Möglichkeit, diese Funktionen ein- oder auszuschalten oder auch nur anzuzeigen. Für die Übertragung über das Gleissignal (nur DCC bis F12) müssen noch Änderungen eingebaut werden. Dadurch werden diese Funktionsbits momentan lediglich gespeichert und wieder ausgegeben. T: Turnout Syntax: T {Trnt#, [Color], [Status]} Trnt#: Weichen-Nummer (DCC: 1 .. 2040, Motorola: 1 .. 1020) Color: 0 oder 'r' = Rot / Abzweig, 1 oder 'g' = Grün / gerade aus Status: 1 = ein, 0 oder nicht angegeben = aus Schaltet die Weiche entsprechend oder gibt den Status der Weiche aus. Beispiel: "T 5 g 0" Y: Status Syntax: Y Gibt den momentanen Systemstatus aus. "Pwr off", "Halted!", "Pwr on", "DCC program" oder "RESET" V: Version Syntax: V Gibt die Versions- und Seriennummer der MC aus: "MC Revision 1.4.0" "SerNr. 1234" MT: Magnetartikel Timer Syntax: MT {[TMin], [TMax]} TMin: Mindestzeit die ein Magnetartikel eingeschaltet wird (Angabe in 50ms- Einheiten, Bereich 0 .. 20 => 0,0 .. 1,0s). TMax: Höchstzeit die ein Magnetartikel eingeschaltet wird (Angabe in 50ms- Einheiten, Bereich 2 .. 510 => 0,1 .. 25,5s). Abgespeichert wird der Wert in 100ms-Einheiten. Daher tritt hier eine Rundung auf gerade Werte auf. Setzt die Mindest- und Höchsteinschaltdauern von Magnetartikeln. Als Ergebnis wird die neue Einstellung wieder ausgegeben: "MT 2 80" SR: s88-Autoreset Syntax: SR {[Flag]} Flag: 0 (aus) oder 1 (ein) Stellt den s88-Bus auf Autoreset oder manuellen Reset. Als Ergebnis wird die resultierende / aktuelle Einstellung ausgegeben. SS: s88-Modul auslesen Syntax: SS {Modulnummer} Modulnummer: 1..52 Ausgabe z.B. für Modul 1: "Module #1 (input 1..8 & 9..16) = 00000000 00000000" SE: Anzahl s88-Module definieren Syntax: SE {[AnzModul]} AnzModul: Anzahl der s88-Halbmodule (0..104) Die Anzahl der automatisch einzulesenden Module ist die angegebene Anzahl dividiert durch 2 (die IB rechnet hier in 'Halbmodulen', entsprechend Bytes). Ungerade Anzahlen werden nach oben gerundet. Eine Angabe von 0 als Anzahl zu lesender Halbmodule führt zum Abschalten des s88-Bus (es werden keine Daten eingelesen). Nur automatisch eingelesene Module können Events auslösen. Im Gegensatz zur IB können auch keine Daten von nicht eingelesenen Modulen geliefert werden. In diesem Fall wird als Status dann immer 0x0000 geliefert (kein s88-Bit ge- setzt). Als Antwort wird das Kommando mit der resultierenden Anzahl der Halbmodule wieder ausgegeben (z.B. Kommando 'SE 15'): SE 16 ZzA: Umschalten zwischen P50X-Only und P50/P50X-Mixed Modus Syntax: ZzA [Flag] Flag: 0 (mixed mode) oder 1 (P50X-only mode) Schaltet das Interface in den P50X-only mode (nur P50X Kommandos erlaubt) oder wieder zurück in den mixed mode (P50 und P50X Kommandos erlaubt). Achtung: Bei diesem Befehl ist die Groß-/Kleinschreibung zu beachten. Befindet sich das Interface im P50X-Mode, so ist zum Umschalten in den mixed mode der Befehl selbstverständlich ohne das 'X' einzugeben. @@: Kaltstart der MC Syntax: @@ Es wird ein Kaltstart der MC durchgeführt. Alle angeschlossenen Slaveunits werden dadurch auch neu gestartet. Die LokControls und die MC holen sich die zuletzt kontrollierten Loks wieder, ansonsten sind alle Einstellung (z.B. Funktionen, Fahrtrichtung, etc.) gelöscht. Da die Stromversorgung nicht unterbrochen wird, arbeitet die USB-Schnittstelle normal weiter. Durch den Reset kann kein Prompt ']' ausgegeben werden! B: Baudrate Syntax: B [Baud] Baud: Baudrate (1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600) Die Baudrate wird immer auf einen der festen Werte gesetzt. Dazu wird eine Grenzbetrachtung gemacht. Z.B. führen alle Werte über 2000 zunächst zu 2400 Baud, dann alle Werte über 4000 zu 4800 Baud usw. bis zu Werten über 55000, die dann alle bei 57600 Baud landen. Es sollten jedoch auf jeden Fall die korrekten Baudraten verwendet werden. Ein Umstellen der Baudrate erfolgt direkt _nach_ Ausgabe des Prompts ']'! Es ist garantiert, dass die Ausgabe dieses Prompts noch mit der alten Baudrate geschieht. Nach Übertragung des Stopbits des Promptzeichens ist innerhalb weniger Microsekunden die neue Baudrate eingestellt. Wenn die Baudrate nur abgefragt werden soll wird als Antwort die gerade ein- gestellte Baudrate ausgegeben. Bei USB ist dies immer fest 57600. Allerdings darf das PC-Programm einstellen, was es will. Alle Baudraten werden intern durch 57600 Baud ersetzt! SO: SO-Variable (Special Option) auslesen / setzen Syntax: SO [DATA] Adresse: Die Adresse einer SO-Variablen (0 .. 999) DATA: Ein Datenbyte (0 .. 255) Die EC unterstützt lediglich solgende SOs: - 1 (nur lesen): Baudrate der seriellen Schnittstelle - 999 (lesen und schreiben): Unterdrücken der Magnetbefehle auf dem Haupt- und Programmiergleis. Mögliche Werte: 0 - nicht unterdrückt 1 - Unterdrückung auf dem Hauptgleis 2 - Unterdrückung auf dem Programmiergleis 3 - komplette Unterdrückung MRST: MasterReset Syntax: MRST Alle Daten werden gelöscht und die MasterControl in den Auslieferungszustand versetzt. Es werden die selben Löschroutinen wie im Menüpunkt "Einstellungen" -> "Konfiguration löschen" aufgerufen. MFX: Auslesen der MFX-UID Syntax: MFX [Adresse] Adresse: zuzuweisende Lok-Adresse 1 - 16383 bzw. 0 oder nicht angegeben Wird keine Lok-Adresse (oder die 0 als Adresse) angegeben, so wird nur die UID des MFX-Dekoders ausgelesen und als 8 HEX-Ziffern als Antwort ausgegeben (kein 0x-Prefix oder Ähnliches!). Wurde die optionale Adresse angegeben, so wird diese nach Auslesen der UID gleich in den Dekoder programmiert. FM: Function mapping Syntax: FM { [func],[map] } ... Adresse: Lok-Adresse bei der das Mapping abgelegt bzw. angezeigt werden soll. func / map: jeweils als Paar (im Rahmen des Zeilenspeichers beliebig oft). Ein Funktionsmapping ermöglicht die Einteilung der Funktionen in bestimmte Funktionsgruppen (z.B. Signale, Beleuchtungsfunktionen, etc.). Die aktive Steuerung kann dann z.B. den Funktionen bestimmte Symbole zuordnen. Weitere Einflüsse hat das Mapping in der Zentrale nicht - es ist also eher nur eine Datenbank. Wird eine Funktion (im Bereich F0 bis F32767) auf das Mapping 0 abgebildet, so wird dieser Eintrag aus der Datenbank gelöscht. Die Angabe ohne Funktions-Paare gibt alle Mappings zur angegebenen Lokadresse aus. CVER: Soft- und Hardwareversionen der Bus-Teilnehmer ausgeben. Synatx: CVER Für jede im Netzwerk registrierte Control wird eine Zeile ausgegeben. Diese Zeile beinhaltet die Netzwerkadresse (0 .. 63), die Hardware-Version und die Softwareversion. Die Zentrale gibt sich dabei als erstes aus und trägt als Netzwerkadresse ein 'C' ein (Central). Diese Version gibt es erst ab Version 2.1.0. Netzteilnehmer, die dieses Feature noch nicht unterstützen melden sich nicht und werden somit auch nicht angezeigt. Da die Ausgabe letztlich eine Liste ist, wird sie mit einer Zeile "*END*" beendet bevor wieder der Prompt ausgegeben wird. ----- Programmiergleisbefehle ----- Die PT-Befehle funktionieren im Prinzip wie andere P50Xa-Befehle auch - sie können jedoch deutlich länger brauchen (bis zu mehreren Sekunden). Die Kommandos geben ein Ergebnis in der Form von Zahlen oder einen Fehlercode als Wort zurück. Jede Ausgabe wird mit dem Prompt ( + ']') abgeschlossen. Entsprechend der IB-Dokumentation sind die folgend aufgeführten Fehlercodes vor- gesehen. Einige werden jedoch beim gegenwärtigen Softwarestand nicht verwendet: - "Ok": Funktion erfolgreich beendet (z.B. bei schreibenden Zugriffen) - "Error": Allgemeiner Fehler, vor allem für falsche oder fehlende Parameter - "Yes": Bei Abfragen einer Funktionalität: positive Antwort - "No": Bei Abfragen einer Funktionalität: negative Antwort - "Busy!": PT belegt - "Short!": Kurzschluß auf dem Programmiergleis - "No decoder": kein Decoder gefunden - "No ack": Nach der Programmierung oder bei der Abfrage wurde kein ACK empfangen - "No page": Nach Programmierung im Pagemode wurde kein ACK empfangen - "Bit read error": Fehler in einem direkten CV-Zugriff auf Bitebene - "Timeout": beim Programmieren gab es ein Timeout Aufgrund der derzeitigen Implementierung kann es eigentlich nur die Codes "Ok", "Error" und "No ack" geben. PTRR: Read using register mode Syntax: PTRR [Register] Register: 1 .. 8 Zurückgeliefert wird der Inhalt des adressierten Registers als einfache Zahl. PTWR: Write using register mode Syntax: PTWR [Register], [Value] Register: 1 .. 8 Value: 0 .. 255 Der angegebene Wert wird in das Register geschrieben. PTRP: Read using page mode Syntax: PTRP [CV] CV: 1 .. 1024 Zurückgeliefert wird der Inhalt der adressierten CV als einfache Zahl. PTWP: Write using page mode Syntax: PTWP [CV], [Value] CV: 1 .. 1024 Value: 0 .. 255 Der angegebene Wert wird in die entsprechende CV geschrieben. PTRD: Read using direct byte mode Syntax: PTRD [CV] CV: 1 .. 1024 Zurückgeliefert wird der Inhalt der adressierten CV als einfache Zahl. PTWD: Write using direct byte mode Syntax: PTWD [CV], [Value] CV: 1 .. 1024 Value: 0 .. 255 Der angegebene Wert wird in die entsprechende CV geschrieben. PTRB: Read using direct bit mode Syntax: PTRB [CV] CV: 1 .. 1024 Das Kommando ist identisch mit PTRD, da laut IB-Dokumentation immer eine komplette CV ausgelesen wird und nicht nur ein einzelnes Bit. PTWB: Write using direct bit mode Syntax: PTWB [CV], [Bit], [Value] CV: 1 .. 1024 Bit: 0 .. 7 Value: 0 .. 1 Der angegebene Wert wird in die entsprechende Bitposition der spezifizierten CV geschrieben. PTRL: Read long Adress using direct mode Syntax: PTRL Das Kommando gibt die gespeicherte lange Adresse (CV17 / CV18) als Dezimal- zahl aus und setzt automatisch das Bit 5 in CV29 um diese dann anschließend auch zu verwenden. Ist die Adresse ungültig, so wird "Error" geliefert und das Bit 5 in CV29 nicht gesetzt. PTWL: Write long Adress using direct mode Syntax: PTWL [Adr] Adr: 128 .. MAXADR Die angegebene Adresse wird in das korrekte CV17/CV18-Format umgerechnet und dort abgelegt. Bei Erfolgt wird anschließend das Bit 5 in CV29 gesetzt um diese Adresse zu verwenden. CV: Calculate adress from CV17 and CV18 values Syntax: CV [CV17], [CV18] CV17: 192 .. 231 CV18: 0 .. 255 Die Funktion berechnet die lange Adresse, die sich aus den übergebenen Werten für CV17 und CV18 ergeben würde. Dies ist eine reine Rechenfunktion und pro- grammiert nicht den Decoder! Die Funktion berechnet den Wert auch für Adresse 1 .. 127, die von der MC im Betrieb jedoch immer als kurze Adressen gesendet werden. CA: Calculate CV17 and CV18 values from adress Syntax: CA [Adr] Die Funktion berechnet die Werte für die CVs 17 und 18 für die angegebene lange Adresse und gibt diese in der Form , aus. Dies ist eine reine Rechenfunktion und programmiert nicht den Decoder! Die Funktion berechnet die Werte auch für Adresse 1 .. 127, die von der MC im Betrieb jedoch immer als kurze Adressen gesendet werden. PD: Read/Write CV to decoder on main track Syntax: PD [Adr], [CV] {, [Value] {, [Repeat] }} Adr: Lokadresse 1 .. MAXADR CV: 1 .. 1024 Value: 0 .. 255 Repeat: 0 .. 128 Schreibt den in die des über die Adresse anzusprechenden Decoders (Multi-Function-Decoder, also ein normaler Lok-Dekoder). Es gibt keine Rückmeldung, daher wird der Befehl blind abgesetzt und als Ergebnis "Ok" geliefert. Das Kommando wird ganz normal über das Gleissignal gesendet (nicht über das Programmiergleis). Vorsicht ist beim Programmieren der Dekoder-Adresse (CV1 bzw. CV17/18) geboten. Programmiert man hier einen Wert ein, den bereits ein anderer Decoder hat, so haben beide anschließend die selbe Adresse und weitere Programmierungen beschreiben jeweils beide Dekoder. Wird der Value weggelassen, so wird ein Compare mit dem Registerwert 0 ge- macht. Mittels RailCom kann dann jedoch der Wert aus der Dekoderantwort gelesen werden. Zum Schreiben kann ein Repeat-Count angegeben werden. Wird kein Wert oder der Standardwert 0 angegeben, so wird ein in der Software festgelegter Default-Wert (z.Zt. 64) als Repeat-Count angenommen. Ein Repeat-Count ungleich 0 schaltet bei der Befehlsübertragung auch die eigentlich vor- gesehenen Folgebefehle (4 x Idle, 1 x Reset, 10 x Idle) ab. Dadurch lassen sich größere Mengen CV-Befehle schneller übertragen. PA: Read/Write CV to accessory decoder on main track Syntax: PA [Adr], [CV] {, [Value] {, [Repeat] }} Adr: Accessory-Dekoder 0 .. 510 CV: 1 .. 1024 Value: 0 .. 255 Repeat: 0 .. 128 Schreibt den in die des über die Adresse anzusprechenden Decoders (Accessory-Decoder, also z.B. ein Weichen-Dekoder). Für die Art der Programmierung gilt das unter 'PD' gesagte. Die Adresse eines Accessory- Dekoders berechnet sich z.B. aus der Weichennummer () wie folgt: Adr = (Trnt - 1) / 4 für einen Dekoder der z.B. Weiche 19 Schaltet also (19 - 1) / 4 => 4. Nach- kommastellen werden dabei abgeschnitten. Lesen und Repeat-Count wie bei 'PD'. PX: Read/Write CV to extended accessory decoder on main track Syntax: PX [Adr], [CV] {, [Value] {, [Repeat] }} Adr: Accessory-Dekoder 0 .. 510 CV: 1 .. 1024 Value: 0 .. 255 Repeat: 0 .. 128 Schreibt den in die des über die Adresse anzusprechenden Decoders (Extended-Accessory-Decoder, also z.B. ein Signal-Dekoder). Für die Art der Programmierung gilt das unter 'PD' gesagte. Die Adresse eines Accessory- Dekoders berechnet sich z.B. aus der Signalnummer () wie folgt: Adr = (Sig - 1) / 4 für einen Dekoder der z.B. Weiche 19 Schaltet also (19 - 1) / 4 => 4. Nach- kommastellen werden dabei abgeschnitten. Lesen und Repeat-Count wie bei 'PD'. ----- Proprietäre Erweiterungen der EasyControl ----- LS: Lok Set (Datenformat vorgeben) Syntax: LS [Adr], {[Fmt]}, {[Speed]} Als wird das Lokformat als 'MM1', 'MM2' oder 'DCC' akzeptiert (wie bei LOCDUMP bzw. LOCADD). Als wird die Anzahl der Fahrstufen akzeptiert. Vom Format nicht unterstützte Fahrstufen führen zu einem Fehler (XBADPARM). Die Unterscheidung bei MM-Protokollen zwischen 27a und 27b geschieht mittels Anhängen des Buchstabens wie unter LOCDUMP bzw. LOCADD beschrieben. Nicht angegebene Parameter führen zu Default-Einstellungen (je nach Einstellung der MC bzw. angegebener Adresse ist das 'MM2' oder 'DCC' mit 14 bzw. 28 FS) oder zum Beibehalten der bisherigen Einstellungen. Die Lok wird sofort in den Refresh-Buffer aufgenommen. Ist dort kein Slot frei, so wird als Fehlercode XNOSLOT geliefert. LOCDUMP: Lok-Datenbank ausgeben Syntax: LOCDUMP Es wird ein Listing mit einem Datensatz pro Zeile ausgegeben. Der Aufbau ist wie folgt: , , , Beim Speed werden die möglichen Fahrstufen als Zahl ausgegeben (14, 27, 28, 126). Ausnahme: bei Motorola wird zur Unterscheidung der beiden verfügbaren Modi bei 27 Fahrstufen jeweils ein 'a' bzw. 'b' angehängt. Das Format () kann folgende Werte annehmen: MM1, MM2 oder DCC. Der Name ist dann bis zum Ende der Zeile zu lesen (Leerstellen oder Kommas würden normalerweise eine Abtrennung weiterer Parameter bedeuten. Das ist hier dann ausnahmsweise zu ignorieren). Die Liste wird mit einer Zeile "*END*" abgeschlossen. LOCADD: Eintrag zur Lokdatenbank hinzufügen Syntax: LOCADD , , , Die Angaben entsprechen den Ausgaben von LOCDUMP. Der Name sollte in einfache oder doppelte Hochkommas eingeschlossen werden, wenn er Leerzeichen oder Kommata enthält.:w LOCCLEAR: Lok-Datenbank löschen Syntax: LOCCLEAR Die Datenbank wird (selbstredend ohne Nachfrage!) gelöscht. Ein PC-Programm kann mit LOCDUMP alle Loks einlesen (oder bei Null beginnen) und eine interne Liste von Loks aufbauen (z.B. durch den Anwender editieren lassen). An- schließend löscht es die Lok-DB mit LOCCLEAR und sendet eine komplett neue Liste mit LOCADD an die MC. TRKDUMP: Alle Traktionen ausgeben Syntax: TRKDUMP Es wird ein Listing mit einem Datensatz pro Zeile ausgegeben. Der Aufbau ist wie folgt: , [, ...] Loks, die eine Fahrtrichtung entgegen der führenden Lok haben, erhalten ein Ausrufezeichen '!' an die Adresse angehängt. Die angegebenen Adressen bilden eine Traktion aus bis zu sieben Loks. Die Steuerung von Traktionen ist z.Zt. nur für maximal zwei Loks (Doppel- Traktion) implementiert, lediglich die Datenbank ist bereits für mehr aus- gelegt. TRKADD: Eine Traktion anlegen Syntax: TRKADD , [, ...] Legt entsprechend eine Traktion mit den aufgeführten Adressen an. Loks, die eine Fahrtrichtung entgegen der führenden Lok haben sollen, muß ein Ausrufezeichen '!' an die Adresse angehängt werden: TRKADD 15, 66! Da Mehrfachtraktionen mit drei oder mehr Loks noch nicht unterstützt werden, sollte von einer solchen Definition abgesehen werden. Syntaktisch läßt die Software beliebig viele Loks zu. Dabei wird jedoch nach jeder Lok die bereits definierte Traktion wieder gelöscht. An Controls angezeigte Traktionen werden dadurch nicht überschrieben, sind in der MC intern aber umgestellt bzw. angelegt! TRKCLEAR: Alle definierten Traktionen löschen Syntax: TRKCLEAR Alle Traktionen werden (selbstredend ohne Nachfrage!) gelöscht. An Controls angezeigte Traktionen werden dadurch jedoch nicht überschrieben, sind in der MC aber nicht mehr vorhanden! TPM: Tams Programming Mode Syntax: TPM [] Mit diesem Befehl kann in den "Tams Programming Modus" gelangen. Der optionale Parameter ist eine Lokadresse. Wird diese angegeben, so wird sie zum Senden der Umkehrpakete verwendet, ansonsten wird die Default- adresse 78 benutzt. RC: RailCom Mode Syntax: RC [] Mit diesem Befehl kann die RailCom-Unterstützung abgeschaltet werden. Der Parameter kann zwischen '0' und '7' sein. Ohne Parameter wird der momentane Status zurückgeliefert. Der Wert ist ein Bitset mit folgenden Werten: 1 = RailCom Tailbits (6 statt 2) werden hinter jedes DCC-Paket geschrieben. 2 = In Abständen wird der IdNotify Befehl zum Anmelden von Loks gesendet. 4 = In Abständen wird ein AccQuery Befehl für RailCom Rückmeldung von Accessory-Decodern gesendet. Das System erwartet, dass bei einem gesetzen Bit alle niedrigeren Bits eben- falls gesetzt sind (also z.B. die RailCom Tailbits aktiviert werden, wenn der IdNotify-Befehl gesendet werden soll). Daher passt das System falsche Werte an. Effektiv setzen kann man also nur die Werte 0, 1, 3 und 7. RCR: RailCom READ Syntax: RCR [] Adr: Lokadresse 1 .. MAXADR CV: 1 .. 1024 RPT: 0 .. 255 (optional) Sendet einen RailCom Lesebefehl an die Lok mit der Adresse für die angegebene . Ist die Lok keine DCC-Lok oder die MC im STOP-Modus, so wird eine Fehlermeldung ausgegeben. Der RailCom Befehl wird mit der unter angegebenen Anzahl von Wieder- holungen gesendet. Dieser Parameter ist optional. Wird er nicht (oder mit dem Standardwert 0) angegeben, so wird automatisch die Standardanzahl an Wieder- holungen gesendet. Die angegebe Anzahl an Wiederholungen gilt nur für den aktuellen Befehl und hat keine Auswirkungen auf andere Befehle oder die RailCom Befehle über das MC-Menü. Die angegebene Lok muß sich bereits im Refresh-Cyclus der MC befinden. Sie wird nicht automatisch geladen. Die Fehlermeldung ist dann die gleiche, als hätte sie einfach das falsche Format. Der gelesene Wert kann z.Zt. nicht zurückgeliefert werden, sondern steht lediglich über die RailCom-Decoder extern zur Verfügung. SWUPDATE: Umschaltung in den Software-Update Modus Um bei der RedBox (keine Tastatur / Display) den Software-Update für am EasyNet angeschlossene Geräte starten zu können, muß dieser Befehl genutzt werden. Einmal gestartet, kann der Update-Modus für beliebig viele Updates von Slaves genutzt werden. Wie üblich sollte sich jeweils nur ein Slave am EasyNet-Anschluß befinden um den Updateprozess nicht zu stören. Der Update-Modus kann nur über das Menüsystem verlassen werden. Im Falle der RedBox ist daher die einzige Möglichkeit ein Reset (Power-Cycle). P50Xb-Commands (Binary-Commands, feste Länge): ----------------------------------------------- Jedes Kommando besteht aus einer festen Anzahl Bytes. Es wird nicht per abgeschlossen. Ist die MC im P50X-mixed mode, so muß auch ein P50Xb-Kommando mit führendem 'X' eingeleitet werden. Das erste Byte (nach dem eventuell notwendigen 'X') ist das Kommandobyte und bestimmt, wieviele Parameter-Bytes folgen werden. Direkt nach Abschluß der Verarbeitung wird das Ergebnis ausgegeben. Dises ist in fast jedem Fall zunächst einmal ein Error-Code (ein Byte). Anschließend können, je nach Befehl, noch weitere Bytes als Antwort folgen. Einige Befehle liefern Ergebnisse mit einem Erweiterungsbit im MSB zurück. Ist dieses gesetzt, so folgt ein weiteres Byte. Auch hier entscheidet dann wieder das MSB über das Vorhandensein eines weiteren Ergebnisbytes. Eine weitere Methode für variabel lange Antworten besteht in der Möglichkeit als erstes Byte einen Code zu verwenden, der angibt ob ein weiteres Ergebnisset folgt (dann immer ein ganzes Set einer bestimmten Größe). Dabei kann dieses erste Byte bereits Daten enthalten. Ein bestimmter Code (nicht unbeding 0) be- endet die Liste. Die letzte Variante für variable Ergebnislängen besteht in der Angabe der Anzahl von Ergebnissets im ersten Byte. Es folgen dann genau so viele Sets wie ange- geben. Eine Anzahl von Null Sets bedeutet, dass keine Ergebnisbytes folgen werden. Liste der Error-Codes: 0x00 OK - kein Fehler, Befehl korrekt ausgeführt 0x02 XBADPRM - Parameterfehler (Parameterbyte außerhalb der zulässigen Werte) 0x06 XPWOFF - Befehl nicht ausgeführt, da MC im Modus STOP 0x07 XNOTSPC - Weichen-Queue ist voll, es können momentan keine weiterern Weichenbefehle angenommen werden. 0x08 XNOLSPC - Kein Platz im Kommandobuffer, Kommando später wiederholen 0x0A XNODATA - Lok ist nicht im Refresh-Buffer, daher kein Status verfügbar 0x0B XNOSLOT - Kein PLatz in der Refresh-Queue (Slot) 0x0D XLKBUSY - Lok wird bereits von einer anderen Unit kontrolliert 0x0E XBADTNP - Die Weichenadresse ist für das eingestellte Protokoll ungültig 0x41 XLKHALT - Lok-Kommando akzeptiert, aber nicht ausgeführt, da Steuerung im HALT-Modus ist. Die Geschwindigkeit wird auf 0 gesetzt. 0x42 XLKPOFF - Lok-Kommando akzeptiert, aber nicht ausgeführt, da Steuerung im STOP-Modus ist. Die Geschwindigkeit wird auf 0 gesetzt. *** XLok (0x80) - Länge = 1+4 bytes Command: 0: 0x80 XLok 1: LSB der Lokadresse 2: MSB der Lokadresse (Adresse im Bereich 1 .. MAXADR) 3: Speed (0 .. 127). Siehe P50Xa L-Command 4: Funktionsbits etc: bit# 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ |ChgF |Force| Dir | FL | F4 | F3 | F2 | F1 | +-----+-----+-----+-----+-----+-----+-----+-----+ ChgF wenn gesetzt, werden die Bits F4 .. F1 als Funktionsbits über- nommen, sonst werden diese Bits ignoriert Force Wenn gesetzt, werden die Lokdaten übernommen, auch wenn bereits eine andere Unit diese Lok kontrolliert. Die Implementation ist noch nicht endgültig beschlossen. Evtl. werden auch alle Kom- mandos als 'forced' betrachtet. Dir Fahrtrichtung wie beim L-Command: 1 = vorwärts, 0 = rückwärts FL Frontlicht (FL): 1 = an, 0 = aus F4..F1 Status der Funktionen F1 .. F4, wenn Bit ChgF gesetzt ist Antwort: 1 Byte 0: Error-Code Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Lokadresse außerhalb des Bereichs (1 .. MAXADR) XNOLSPC - Der Befehl kann z.Zt. nicht abgearbeitet werden, da die Queue bereits voll ist. Befehl später wiederholen. XNOSLOT - Z.Zt. kann die Lok nicht neu in den Refreshbuffer aufgenommen werden, da keine Lok aus diesem entfernt werden kann. Befehl später wiederholen. XLKHALT - MC ist im HALT-Modus. Der Befehl wurde akzeptiert (bezüglich der Funktionen und der Fahrtrichtung) aber mit V=0. Er wird so modifiert ans Gleis gesendet. XLKPOFF - MC ist im STOP-Modus. Der Befehl wurde akzeptiert (bezüglich der Funktionen und der Fahrtrichtung) aber mit V=0 und nicht ans Gleisgesendet *** XLokX (0x81) - Länge = 1+4 bytes Command: 0: 0x81 XLokX 1: LSB der Lokadresse 2: MSB der Lokadresse (Adresse im Bereich 1 .. MAXADR) 3: Speed als echter Decoderspeed 0..14/27/28/126 4: Funktionsbits etc: bit# 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ |ChgF |Force| Dir | FL | F4 | F3 | F2 | F1 | +-----+-----+-----+-----+-----+-----+-----+-----+ ChgF wenn gesetzt, werden die Bits F4 .. F1 als Funktionsbits über- nommen, sonst werden diese Bits ignoriert Force Wenn gesetzt, werden die Lokdaten übernommen, auch wenn bereits eine andere Unit diese Lok kontrolliert. Die Implementation ist noch nicht endgültig beschlossen. Evtl. werden auch alle Kom- mandos als 'forced' betrachtet. Dir Fahrtrichtung wie beim L-Command: 1 = vorwärts, 0 = rückwärts FL Frontlicht (FL): 1 = an, 0 = aus F4..F1 Status der Funktionen F1 .. F4, wenn Bit ChgF gesetzt ist Antwort: 1 Byte 0: Error-Code Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Lokadresse außerhalb des Bereichs (1 .. MAXADR) XNOLSPC - Der Befehl kann z.Zt. nicht abgearbeitet werden, da die Queue bereits voll ist. Befehl später wiederholen. XNOSLOT - Z.Zt. kann die Lok nicht neu in den Refreshbuffer aufgenommen werden, da keine Lok aus diesem entfernt werden kann. Befehl später wiederholen. XLKHALT - MC ist im HALT-Modus. Der Befehl wurde akzeptiert (bezüglich der Funktionen und der Fahrtrichtung) aber mit V=0. Er wird so modifiert ans Gleis gesendet. XLKPOFF - MC ist im STOP-Modus. Der Befehl wurde akzeptiert (bezüglich der Funktionen und der Fahrtrichtung) aber mit V=0 und nicht ans Gleisgesendet Anmerkung: Die angegebene echte Dekodergeschwindigkeit stimmt nicht mit der P50-Geschwindigkeit überein (1 = Umkehr, 15 = max.Speed). Die IB setzt bei solchen Angaben auch immer noch den Emergency-Stop Code (1) dazwischen. All dies entfällt. Die Geschwindigkeitsangabe ist jedoch mit der MC-Version des XLokSts-Kommandos kompatibel. Ein Notstop ist über das normale XLok-Kommando auszulösen. *** XLokSts (0x84) - Länge = 1+2 bytes Command: 0: 0x84 XLokSts 1: LSB der Lokadresse 2: MSB der Lokadresse (Adresse im Bereich 1 .. MAXADR) Antwort: 1 / 4 Bytes 0: Error-Code. Wenn OK (0x00), dann folgend die weiteren Antwort-Bytes 1: Speed (0 .. 127). Der Emergency-Stop Code 1 wird nicht ausgegeben. 2: Funktionen und Richtung (wie bei XLok): bit# 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | 0 | 0 | Dir | FL | F4 | F3 | F2 | F1 | +-----+-----+-----+-----+-----+-----+-----+-----+ Dir Fahrtrichtung wie beim L-Command: 1 = vorwärts, 0 = rückwärts FL Frontlicht (FL): 1 = an, 0 = aus F4..F1 Status der Funktionen F1 .. F4, wenn Bit ChgF gesetzt ist 3: Echte Lok-Geschwindigkeit wie sie am Control angezeigt wird: 0 = Stop, 1 .. 14/27/28/126 je nach Format. Es gibt keine Emergency- Stop Codes oder Codes für Fahrtrichtungsumkehr! Das Richtungsbit ist nicht enthalten und muß aus dem Dir-Bit von Byte 2 gelesen werden. Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Lokadresse außerhalb des Bereichs (1 .. MAXADR) XNODATA - Es liegen keine Lokdaten vor (Lok nicht in Refresh-Queue) *** XLokCfg (0x85) - Länge = 1+2 bytes Command: 0: 0x85 XLokCfg 1: LSB der Lokadresse 2: MSB der Lokadresse (Adresse im Bereich 1 .. MAXADR) Antwort: 1 / 5 Bytes 0: Error-Code. Wenn OK (0x00), dann folgend die weiteren Antwort-Bytes 1: Lok-Protokoll: 0 .. 3 = m3, MM-I, MM-II, DCC 2: Anzahl Geschwindigkeitsstufen (ohne Stop): 14, 27, 28 oder 126 Bei MM-I/MM-II werden bei MM27a 27FS und bei MM27b 28FS ausgegeben. 3: 0xFF (bei IB zur Kennzeichnung virtueller Loks -> gibt es hier nicht) 4: 0xFF (bei IB zur Kennzeichnung virtueller Loks -> gibt es hier nicht) Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Lokadresse außerhalb des Bereichs (1 .. MAXADR) XNODATA - Es liegen keine Lokdaten vor (Lok nicht in Refresh-Queue) *** XLokCfgSet (0x86) - Länge = 1+4 bytes Command: 0: 0x86 XLokCfg 1: LSB der Lokadresse 2: MSB der Lokadresse (Adresse im Bereich 1 .. MAXADR) 3: Lok-Protokoll: 1 .. 3 = MM-I, MM-II, DCC 4: Anzahl Geschwindigkeitsstufen (ohne Stop): 14, 27, 28 oder 126 Bei MM-I/MM-II werden 27FS als MM27a und 28FS als MM27b interpretiert Antwort: 1 Byte 0: Error-Code Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Lokadresse außerhalb des Bereichs (1 .. MAXADR) XNOSLOT - Kein Slot frei in der Refresh-Queue *** Xm3Sid (0x87) - Länge = 1+6 bytes Command: 0: 0x87 Xm3Sid 1: LSB der Lokadresse 2: MSB der Lokadresse (Adresse im Bereich 1 .. 16383) 3: LSB der UID 4: nächstes Byte der UID 5: nächstes Byte der UID 6: MSB der UID Antwort: 1 Byte 0: Error-Code Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Lokadresse außerhalb des Bereichs (1 .. 16383) XNOSLOT - Kein Slot frei in der Refresh-Queue XLKPOFF - die MC befindet sich nicht im GO-Mode - Befehl ignoriert Die UID eines m3 Dekoders ist grundsätzlich eine 32-Bit "MAC"-Adresse. Diese muß zur Nutzung des Befehls im Voraus bekannt sein. Sie wird hier im Little- Endian-Format angegeben (da ja auch die Lokadressen immer in diesem Format angegeben werden). Beim Absetzen dieses Befehls wird die spezifizierte Lok-Adresse in die Refresh-Queue übernommen und auf das m3-Format gesetzt sowie alle Funktionen und die Geschwindigkeit genullt. *** XFunc (0x88) - Länge = 1+3 bytes Command: 0: 0x88 XFunc 1: LSB der Lokadresse 2: MSB der Lokadresse (Adresse im Bereich 1 .. MAXADR) 3: Status der Funktionen F1 (Bit #0) bis F8 (Bit #7) Antwort: 1 Byte 0: Error-Code Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Lokadresse außerhalb des Bereichs (1 .. MAXADR) XNOSLOT - Kein Platz in Refresh-Queue *** XFuncSts (0x8C) - Länge = 1+2 bytes Command: 0: 0x88 XFuncSts 1: LSB der Lokadresse 2: MSB der Lokadresse (Adresse im Bereich 1 .. MAXADR) Antwort: 1 / 2 Bytes 0: Error-Code. Wenn OK (0x00), dann folgend die weiteren Antwort-Bytes 1: Status der Funktionen F1 (Bit #0) bis F8 (Bit #7) Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Lokadresse außerhalb des Bereichs (1 .. MAXADR) XNODATA - Es liegen keine Lokdaten vor (Lok nicht in Refresh-Queue) *** XFuncX (0x89) - Länge = 1+3 bytes Command: 0: 0x89 XFuncX 1: LSB der Lokadresse 2: MSB der Lokadresse (Adresse im Bereich 1 .. MAXADR) 3: Status der Funktionen F9 (Bit #0) bis F16 (Bit #7) Antwort: 1 Byte 0: Error-Code Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Lokadresse außerhalb des Bereichs (1 .. MAXADR) XNOSLOT - Kein Platz in Refresh-Queue *** XFuncXSts (0x8D) - Länge = 1+2 bytes Command: 0: 0x8D XFuncXSts 1: LSB der Lokadresse 2: MSB der Lokadresse (Adresse im Bereich 1 .. MAXADR) Antwort: 1 / 2 Bytes 0: Error-Code. Wenn OK (0x00), dann folgend die weiteren Antwort-Bytes 1: Status der Funktionen F9 (Bit #0) bis F16 (Bit #7) Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Lokadresse außerhalb des Bereichs (1 .. MAXADR) XNODATA - Es liegen keine Lokdaten vor (Lok nicht in Refresh-Queue) *** XFunc34 (0x8A) - Länge = 1+4 bytes Command: 0: 0x8A XFunc34 1: LSB der Lokadresse 2: MSB der Lokadresse (Adresse im Bereich 1 .. MAXADR) 3: Status der Funktionen F17 (Bit #0) bis F24 (Bit #7) 4: Status der Funktionen F25 (Bit #0) bis F32 (Bit #7), DCC unterstützt bis F28, MFX bis F31 (Begrenzung in der MC) Antwort: 1 Byte 0: Error-Code Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Lokadresse außerhalb des Bereichs (1 .. MAXADR) XNOSLOT - Kein Platz in Refresh-Queue *** XFunc34Sts (0x8E) - Länge = 1+2 bytes Command: 0: 0x8E XFunc34Sts 1: LSB der Lokadresse 2: MSB der Lokadresse (Adresse im Bereich 1 .. MAXADR) Antwort: 1 / 3 Bytes 0: Error-Code. Wenn OK (0x00), dann folgend die weiteren Antwort-Bytes 1: Status der Funktionen F17 (Bit #0) bis F24 (Bit #7) 2: Status der Funktionen F25 (Bit #0) bis F32 (Bit #7), DCC unterstützt bis F28, MFX bis F31 (Begrenzung in der MC) Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Lokadresse außerhalb des Bereichs (1 .. MAXADR) XNODATA - Es liegen keine Lokdaten vor (Lok nicht in Refresh-Queue) *** XBinSt (0x8B) - Länge = 1+4 bytes Command: 0: 0x8B XBinSt 1: LSB der Lokadresse 2: MSB der Lokadresse (Adresse im Bereich 1 .. MAXADR) 3: LSB des anzusprechenden BinaryState (Bits 0 .. 6) Bit #7 - Status des Flags (ON oder OFF) 4: MSB des anzusprechenden Binary State Antwort: 1 Byte 0: Error-Code Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Lokadresse außerhalb des Bereichs (1 .. MAXADR) oder Lok nicht im DCC-Format XNODATA - Es liegen keine Lokdaten vor (Lok nicht in Refresh-Queue) Die MC wählt automatisch die richtige Länge des Befehl (abhängig von der Adresse des BinaryState - kurz bei Adressen bis 127, lang darüber). Wird als BinaryState-Adresse die 0 übergeben, so wird der kurze Befehl benutzt und alle BinaryStates von 1 - 127 auf den übergebenen Wert gesetzt. Die Langform mit der Adresse 0, bei der alle BinaryStates von 1 - 32767 auf den angegebenen Wert gesetzt werden sollen, läßt sich nicht erzeugen. Dieses Verhalten ist kompatibel zur Implementation der Intellibox. BinaryStates werden nur "blind" abgesendet. Sie werden weder refreshed noch wird der Zustand in der MC gespeichert. Daher kann ein BinaryState auch nicht wieder abgefragt werden. *** XTrnt (0x90) - Länge = 1+2 bytes Command: 0: 0x90 XTrnt 1: LSB der Weichenadresse (A0 .. A7) 2: MSB der Weichenadresse (A8 .. A10) inkl. Richtung und Status bit# 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ |Color| Sts | x | x | x | A10 | A9 | A8 | +-----+-----+-----+-----+-----+-----+-----+-----+ Color 1 = gerade (grün), 0 = abbiegen (rot) Sts Ein- bzw. Abschalten der Magnetspule (1 = an, 0 = aus) A10..A8 MSBs der Weichenadresse Antwort: 1 Byte 0: Error-Code Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Weichenadresse außerhalb des Bereichs (1 .. 2040) XPWOFF - MC ist im STOP-Modus XNOTSPC - Weichen-Queue ist voll XBADTNP - Weichenadresse bei Konfiguration auf MM-Signale im Bereich 1021 .. 2040 (das Motorola-Protokoll unterstützt nur Weichen- adressen bis 1020) *** XTrntX (0x91) - Länge = 1+2 bytes Command: 0: 0x91 XTrntX 1: LSB des Extended-Accessory-Decoders (A0 .. A7) 2: MSB des Extended-Accessory-Decoders (A8 .. A10) inkl. Aspect bit# 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | As4 | As3 | As2 | As1 | As0 | A10 | A9 | A8 | +-----+-----+-----+-----+-----+-----+-----+-----+ As4..As0 5 Bit Aspect (Bedeutung abhängig vom Decoder) A10..A8 MSBs des Extended-Accessory-Decoders Antwort: 1 Byte 0: Error-Code Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Adresse des Decoders außerhalb des Bereichs (1 .. 2040) XPWOFF - MC ist im STOP-Modus *** XTrntSts (0x94) - Länge = 1+2 bytes Command: 0: 0x94 XTrntSts 1: LSB der Weichenadresse (A0 .. A7) 2: MSB der Weichenadresse (A8 .. A10) Antwort: 1 / 2 Bytes 0: Error-Code. Wenn OK (0x00), dann folgend die weiteren Antwort-Bytes 1: Status / Konfiguration der Weiche: bit# 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | 0 | 0 | 0 | 0 | 0 |Color| 0 | Fmt | +-----+-----+-----+-----+-----+-----+-----+-----+ Fmt 1 = DCC, 0 = Motorola Color 1 = gerade (grün), 0 = abbiegen (rot) Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Weichenadresse außerhalb des Bereichs (1 .. 2040) *** XTrntGrp (0x95) - Länge = 1+1 bytes Command: 0: 0x95 XTrntgrp 1: Nummer der Weichengruppe (1 = Weichen 1..8, ...). Bereich 1..255 Antwort: 1 / 3 Bytes 0: Error-Code. Wenn OK (0x00), dann folgend die weiteren Antwort-Bytes 1: Richtung der Weiche (1 Bit pro Weiche, 1 = gerade/grün, 0 = abbiegen/rot). Weiche #1..8 entspricht Bit #0..7. 2: Reservierungsstatus der Weiche (1 Bit pro Weiche, 1 = reserviert, 0 = nicht reserviert). Zuordnung wie Antworbyte 1. Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Gruppenadresse außerhalb des Bereichs (1 .. 255) Anmerkung: Der Reservierungsstatus ist immer 0x00, da die MC eine Reser- vierung nicht vorsieht! *** XP50Len1 (0xC6) - Länge = 1+1 bytes Command: 0: 0xC6 XP50Len1 1: P50 Kommandobyte (nur ein-Byte-Kommandos) Antwort: keine (Kompatibilität mit IB) *** XP50Len2 (0xC7) - Länge = 1+2 bytes Command: 0: 0xC7 XP50Len2 1: P50 Kommandobyte (nur zwei-Byte-Kommandos) 2: P50 Parameter-Byte Antwort: keine (Kompatibilität mit IB) *** XPwrOff (0xA6) - Länge = 1 byte Command: 0: 0xA6 XPwrOff Antwort: 1 Byte 0: Error-Code Mögliche Error-Codes: OK - OK, Befehl ausgeführt *** XPwrOn (0xA7) - Länge = 1 byte Command: 0: 0xA7 XPwrOn Antwort: 1 Byte 0: Error-Code Mögliche Error-Codes: OK - OK, Befehl ausgeführt *** XSoSet (0xA3) - Länge = 1+3 bytes Command: 0: 0xA4 XSoGet 1: LSB der SO-Adresse 2: MSB der SO-Adresse 3: Datenbyte Es wird der Wert der Menü-Konfigurationsvariablen ausgegeben. Die IB erlaubt dabei SO-Adresse 0 .. 999. Die EC unterstützt z.Zt. nur die Adresse 1 (Baud- rate der seriellen Schnittstelle) und 999 (Unterdrücken der Magnet-Befehle auf Haupt- bzw. Bremsbooster). Antwort: 1 Byte 0: Error-Code. Wenn OK (0x00) oder Error-Code Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - SO-Adresse unbekannt *** XSoGet (0xA4) - Länge = 1+2 bytes Command: 0: 0xA4 XSoGet 1: LSB der SO-Adresse 2: MSB der SO-Adresse Es wird der Wert der Menü-Konfigurationsvariablen ausgegeben. Die IB erlaubt dabei SO-Adresse 0 .. 999. Die EC unterstützt z.Zt. nur die Adressen 1 und 999 (siehe XSoSet). Antwort: 1 / 2 Bytes 0: Error-Code. Wenn OK (0x00), dann folgend die weiteren Antwort-Bytes 1: ausgelesener SO-Parameter Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - SO-Adresse unbekannt *** XHalt (0xA5) - Länge = 1 byte Command: 0: 0xA5 XHalt Antwort: 1 Byte 0: Error-Code Mögliche Error-Codes: OK - OK, Befehl ausgeführt *** XVer (0xA0) - Länge = 1 byte Command: 0: 0xA0 XVer Antwort: 1 / n Bytes 0: Anzahl folgender Bytes 1 .. n: Versions- / Seriennummern Es werden zwei Daten ausgegeben: die Versionsnummer und die Seriennummer. Die Versionsnummer ist dreistufig mit eventuell angehängtem Buchstaben. z.B. "1.4.0f". Die Ausgabe dieser Versionsnummer würde folgendermaßen aus- sehen: 0x04 0x01 0x04 0x00 'f' (das letzte Zeichen - falls vorhanden - wird als ASCII-Code ausgegeben, der Rest ist binär kodiert). Die Seriennummer wird wie bei der IB als BCD-String (4-stellig) ausge- geben. Beispiel: 0x04 0x00 0x13 0x07 0x56 (SerNr. 00130756) Wie bei der IB wird die Ausgabe mit einem Null-Byte beendet: 0x00 *** XStatus (0xA2) - Länge = 1 byte Command: 0: 0xA2 XStatus Antwort: 1..n Byte 0: Systemstatus bit# 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ |Sts2 | 0 | 0 |Halt | Pwr | 0 | 0 | 0 | +-----+-----+-----+-----+-----+-----+-----+-----+ Sts2 0: letztes Statusbyte, 1: ein weiteres Statusbyte folgt. Z.Zt. wird immer nur ein Statusbyte gesendet. Halt MC im HALT-Mode wenn gesetzt Pwr Es wird ein Signal an das Gleis abgegeben (Ist gesetzt in den Zuständen HALT und GO). Wenn dieses Bit 0 ist, so befindet sich die MC im Zustand STOP oder SHORT. *** XNop (0xC4) - Länge = 1 byte Command: 0: 0xC4 XNop Antwort: 1 Byte 0: Error-Code Mögliche Error-Codes: OK - OK, Befehl ausgeführt *** XSensor (0x98) - Länge = 1+1 bytes Command: 0: 0x98 XSensor 1: s88 Modul (1 .. 52) Antwort: 1 / 3 Bytes 0: Error-Code. Wenn OK (0x00), dann folgend die weiteren Antwort-Bytes 1: Kontakte #1..8 (Bits #7..0) 2: Kontakte #9..16 (Bits #7..0) Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - Moduladresse außerhalb des gültigen Bereichs Der s88-Status ist die aufsummierte Menge (Oder-Verknüpfung) der s88-Bits seit letztem Reset. Ist das Autoreset eingeschaltet, so wird der Reset der Datenbits dieses s88-Moduls sofort nach der Abfrage ausgeführt. Andernfalls bleibt der momentane Zustand erhalten und es werden nur noch neue gesetzte Bits hinzugefügt. Zum manuellen Reset ist der Autoreset zu setzen und der Status einmal abzufragen (und danach der Autoreset wieder auszuschalten). *** XSensOff (0x99) - Länge = 1 byte Command: 0: 0x99 XSensOff Antwort: 1 Byte 0: Error-Code Mögliche Error-Codes: OK - OK, Befehl ausgeführt Dieser Befehl bewirkt, dass alle s88-Module die mindestens ein gesetztes Bit haben als verändert gekennzeichnet werden. Somit lösen sie einen entsprechen- den Event aus. Die PC-Software hat so einfach die Möglichkeit nach dem Start den aktuellen Zustand aller s88-Module zu erfahren ohne jedes einzeln ein- lesen zu müssen. *** X88PGet (0x9C) - Länge = 1+1 bytes Command: 0: 0x9C X88PGet 1: s88-Parameter Nummer 0x00 = Anzahl der s88-Halbmodule (wie P50Xa 'SE') (0x01 / 0x02 = Counter / Timer bei IB - nicht unterstützt) 0x03 = s88-Autoreset (1 = ein, 0 = aus) Antwort: 1 / 2 Bytes 0: Error-Code. Wenn OK (0x00), dann folgend die weiteren Antwort-Bytes 1: ausgelesener s88-Parameter Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - s88-Parameter Nummer ungültig *** X88PSet (0x9D) - Länge = 1+2 bytes Command: 0: 0x9D X88PSet 1: s88-Parameter Nummer (siehe X88PGet) 2: s88-Parameter Wert Antwort: 1 Byte 0: Error-Code. Wenn OK (0x00), dann folgend die weiteren Antwort-Bytes Mögliche Error-Codes: OK - OK, Befehl ausgeführt XBADPRM - s88-Parameter Nummer oder Wert ungültig *** XEvent (0xC8) - Länge = 1 byte Command: 0: 0xC8 XEvent Antwort: 1..n Byte Das jeweils oberste Bit des Bytes ist gesetzt, wenn ein weiteres Byte folgt. Nicht gesendete Bytes sind als 0x00 anzunehmen. 0: Event-Flags 1 bit# 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | Ev2 | 0 |Trnt | 0 |PwOff| Sen | 0 | Lok | +-----+-----+-----+-----+-----+-----+-----+-----+ Ev2 Wenn gesetzt folgt als nächstes Byte Event-Flags 2 Trnt Es wurde eine Weiche gestellt (nicht vom PC aus) PwOff Es gab eine Power-Off Situation (das Signal kann jedoch bereits wieder eingeschaltet worden sein) Sen Es gab ein Sensor-Event (Änderung des s88-Status) Lok Es wurde der Status einer Lok verändert (nicht vom PC aus) 1: Event-Flags 2 bit# 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | Ev3 | Sts | 0 | 0 | 0 | 0 | 0 |ExtSh| +-----+-----+-----+-----+-----+-----+-----+-----+ Ev3 Wenn gesetzt folgt als nächstes Byte Event-Flags 3 Sts ein XStatus-Kommando sollte gesendet werden ExtSh Ein Booster meldete Kurzschluß (MC im Status "SHORT") 2: Event-Flags 3 (enthält z.Zt. keine relevanten Informationen die die MC betreffen und wird daher auch nicht gesendet) bit# 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | Ev4 | x | x | x | 0 | 0 | 0 | 0 | +-----+-----+-----+-----+-----+-----+-----+-----+ Ev4 Wenn gesetzt folgt als nächstes Byte Event-Flags 4 Z.Zt. ist Event-Flags 4 nicht definiert und daher Ev4 immer 0 *** XEvtSen (0xCB) - Länge = 1 byte Command: 0: 0xCB XEvtSen Antwort: 1 / n Bytes 0: Wenn dieses Byte Null ist, folgen keine weiteren Sensordaten. Ist das Byte größer Null, so stellt es die Nummer des s88-Moduls dar dessen aktueller Zustand in den nächsten zwei Bytes gesendet wird (Datenbits #1..8 in Byte 1 Bits #7..0, Datenbits #9..16 in Byte 2 Bits #7..0). Die Antwortliste wird jeweils mit der s88-Modulnummer fortgesetzt, solange noch weitere Events vorliegen. Jedes ausgegebene Modul setzt das zugehörige Event-Flag zurück. Die ausgegebenen Daten stellen den aktuellen Zustand des Moduls (nicht den aufsummierten Zustand) dar. Ist ein auslösendes Event zum Abfragezeitpunkt schon wieder vorbei, so ist es über die Eventsteuerung nicht mehr erkennbar. Lediglich der Fakt, dass sich etwas verändert hat ist immer eindeutig. Benötigt man den aufsummierten Status, so ist im Anschluß an die Event-Verarbeitung ein normaler Abfragezyklus (XSensor, 0x98) durchzuführen. Das Ende der Event-Liste ist erreicht, wenn als s88-Modulnummer ein Nullbyte übertragen wird. *** XEvtLok (0xC9) - Länge = 1 byte Command: 0: 0xC9 XEvtLok Antwort: 1 / n Bytes 0: Wenn dieses Byte 0x80 ist, folgen keine weiteren Lokdaten. Ist das Byte kleiner 0x80, so stellt es die Geschwindigkeit der Lok dar (weitere Datenbytes folgen). Ein Wert größer als 0x80 ist laut IB-Dokumentation für spätere Erweiterungen reserviert. Die Geschwindigkeit wird als Interface-Speed im Bereich von 0 .. 127 angegeben (0 = Stop, 2 = min. Speed, 127 = max. Speed). Der Notstop- Code 1 wird nicht ausgegeben. 1: F1..F8 in den Bits #0..7 2: LSB der Lokadresse 3: MSB der Lokadresse und FL / Dir bit# 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | Dir | FL | A13 | A12 | A11 | A10 | A9 | A8 | +-----+-----+-----+-----+-----+-----+-----+-----+ Dir Fahrtrichtung (1 = vorwärts, 0 = rückwärts) FL Licht / F0 (1 = an, 0 = aus) A13..A8 sind die MSBs der Lokadresse 4: Echte Geschwindigkeit (abhängig von Format und Anzahl unterstützter Geschwindigkeiten) Es werden jene Loks gemeldet, deren Status sich durch eine der Controls (also nicht Ansteuerung durch den PC) geändert hat. Die Antwortliste wird jeweils mit der Lokgeschwindigkeit fortgesetzt, solange noch weitere Events vorliegen. Jede ausgegebene Lok setzt das zugehörige Event-Flag zurück. Die ausgegebenen Daten stellen den aktuellen Zustand der Lok dar. Hat es seit der letzten Event-Abfrage mehrere Änderungen an einer Lok gegeben, so wird diese trotzdem nur einmal ausgegeben (mit dem letzen aktuellen Zustand). Das Ende der Event-Liste ist erreicht, wenn als Lokgeschwindigkeit ein Byte 0x80 übertragen wird. Es können bis zu 64 Loks (maximale Anzahl Loks im Refreshbuffer / Anzahl der Slots) ausgegeben werden. *** XEvtTrn (0xCA) - Länge = 1 byte Command: 0: 0xCA XEvtTrn Antwort: 1 / n Bytes 0: Anzahl der Weichenschaltvorgänge die im Anschluß gemeldet werden. Ist das Byte Null, so wurden keine Weichen geschaltet. Für jede Weiche werden zwei Bytes gesendet. Das Format entspricht dem des Kommandos XTrnt (0x90). Die Bits #3..5 des zweiten Bytes sind jedoch stets 0. 1: LSB der Weichenadresse (A0 .. A7) 2: MSB der Weichenadresse (A8 .. A10) inkl. Richtung bit# 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ |Color| Sts | 0 | 0 | 0 | A10 | A9 | A8 | +-----+-----+-----+-----+-----+-----+-----+-----+ Color 1 = gerade (grün), 0 = abbiegen (rot) Sts 1 = eingeschaltet, 0 = ausgeschaltet A10..A8 MSBs der Weichenadresse Es werden jene Weichen gemeldet, deren Status sich durch eine der Controls (also nicht Ansteuerung durch den PC) geändert hat. Hat sich der Status einer Weiche seit der letzten Abfrage sogar mehrfach geändert, so kann es vor- kommen, dass der gemeldete Status dem letzen bekannten Status entspricht. Um kompatibel zur IB zu sein und die Antwort nicht zu lang werden zu lassen werden maximal 32 Weichen-Events pro Abfrage gemeldet. Liegen weitere Events vor, so liefern weitere Aufrufe von XEvtTrn diese weiteren Daten bis alle Events gemeldet wurden (Antwort ist dann ein Null-Byte). Kommen während einer solchen fortgesetzten Abfrage weitere Events hinzu, so werden diese auch wieder gemeldet. Der Algorithmus geht einfach ein Bitset (Flags) über alle Weichen durch und meldet maximal die ersten 32 gesetzten Bits. Auflistung sämtlicher Kommandos (und Vergleich IB/MC sowie P50Xb/P50Xa): ------------------------------------------------------------------------- In der Liste sind zunächst alle möglichen P50Xb Kommandos sortiert nach OpCode aufgelistet. In der Spalte IB ist für jedes tatsächlich definierte Kommando ein '*' für 'vorhanden' bzw. ein '-' für nicht vorhanden gesetzt. Bei der MC kommt zusätzlich ein '+' vor, wenn das Kommando sich nicht exakt so verhält wie bei der IB. In diesem Fall ist die Beschreibung der IB mit dieser Beschreibung zu vergleichen um die Unterschiede festzustellen. In der IB-Spalte ist zusätzlich ein '?' definiert für Kommandos, die laut Be- schreibung zwar vorgesehen, aber nicht weiter dokumentiert bzw. als zukünftige Erweiterung vorgesehen sind: "(to be defined and documented)". Die Spalte 'P50Xa Alternative' listet das dem P50Xb-Kommando entsprechende P50Xa-Kommando auf. Die IB-Dokumentation listet den Bereich 0xE0..0xFE als PT-Commands (Programming- Track). Hier sollten also keine neuen Kommandos, die nichts mit dem Program- mieren zu tun haben, definiert werden. P50Xb P50Xb Command IB MC P50Xa Alternative --------------------------------------------------------------- 0x80 XLok * + L 0x81 XLokX - * 0x82 0x83 XLokDisp * - 0x84 XLokSts * * L 0x85 XLokCfg * * LC 0x86 XLokCfgSet - * LS 0x87 Xm3Sid - * 0x88 XFunc * * F 0x89 XFuncX ? * 0x8a XFunc34 - * 0x8b XBinSt * * 0x8c XFuncSts * * F 0x8d XFuncXSts ? * 0x8e XFunc34Sts - * 0x8f 0x90 XTrnt * + T, TR 0x91 XTrntX - * 0x92 0x93 XTrntFree * - 0x94 XTrntSts * + T, TR 0x95 XTrntGrp * + 0x96 0x97 0x98 XSensor * + SS 0x99 XSensOff * * 0x9a 0x9b 0x9c X88PGet * + SR, SE, SX 0x9d X88PSet * + SR, SE, SX 0x9e Xs88Tim * - ST 0x9f Xs88Cnt * - SC 0xa0 XVer * + V 0xa1 XP50XCh * - PX 0xa2 XStatus * + Y 0xa3 XSoSet - + SO 0xa4 XSoGet * + SO 0xa5 XHalt * * HALT 0xa6 XPwrOff * * STOP 0xa7 XPwrOn * * GO 0xa8 0xa9 0xaa 0xab 0xac 0xad 0xae 0xaf 0xb0 0xb1 0xb2 0xb3 0xb4 0xb5 0xb6 0xb7 0xb8 0xb9 0xba 0xbb 0xbc 0xbd 0xbe 0xbf 0xc0 XLocoNet ? - 0xc1 0xc2 0xc3 0xc4 XNOP * * 0xc5 0xc6 XP50Len1 * * 0xc7 XP50Len2 * * 0xc8 XEvent * + 0xc9 XEvtLok * * 0xca XEvtTrn * + 0xcb XEvtSen * + 0xcc XEvtIR * - 0xcd XEvtLn ? - 0xce XEvtPT * - 0xcf XEvtTkR ? - 0xd0 XEvtMem ? - 0xd1 0xd2 0xd3 0xd4 0xd5 0xd6 0xd7 0xd8 0xd9 0xda 0xdb 0xdc 0xdd 0xde XDCC_PD * - PD 0xdf XDCC_PA * - PA 0xe0 XPT_Sts * - PT 0xe1 XPT_On * - PT 0xe2 XPT_Off * - PT 0xe3 0xe4 XPT_SXRd * - PTSR 0xe5 XPT_SXWr * - PTSW 0xe6 XPT_SXSr ? - 0xe7 XPT_ZZZSr * - PTFS 0xe8 XPT_ZZZWr * - PTFW 0xe9 XPT_MrkSr * - PTMS 0xea XPT_DCCSr * - PTDS 0xeb XPT_DCCQA * - PTQA 0xec XPT_DCCRR * - PTRR 0xed XPT_DCCWR * - PTWR 0xee XPT_DCCRP * - PTRP 0xef XPT_DCCWP * - PTWP 0xf0 XPT_DCCRD * - PTRD 0xf1 XPT_DCCWD * - PTWD 0xf2 XPT_DCCRB * - PTRB 0xf3 XPT_DCCWB * - PTRW 0xf4 XPT_DCCQD * - PTQD 0xf5 XPT_DCCRL * - PTRL 0xf6 XPT_DCCWL * - PTWL 0xf7 XPT_DCCRA ? - PTRA 0xf8 XPT_DCCWA ? - PTWA 0xf9 XPT_U750 * - PTUA 0xfa XPT_U755 * - PTUB 0xfb XPT_U760 * - PTUC 0xfc XPT_Src ? - PTID 0xfd XPT_Ctrl ? - 0xfe XPT_Term * - 0xff ACHTUNG: lt. IB-Doku haben XDCC_PD und XDCC_PA den gleichen Opcode (0xde)! P50Xa Command IB MC ------------------------------ L * * LC * * LS - * F * * T * * TR * - LM ? - FX ? * H/? * * HL * * HT * * HF * * STOP/. * * GO/! * * HALT * * Y * * V * + MT * + SR * * SS * * SE * * SX * - ST * - SC * - RT * - ZzA * * PX * - @ * - @@ * + B * + CT * - ID * - NR * - SO * + PT * - PTSR * - PTSW * - PTFS * - PTFW * - PTMS * - PTUA * - PTUB * - PTUC * - PTDS * - PTQA * - PTRR * * PTWR * * PTRP * * PTWP * * PTRD * * PTWD * * PTRB * * PTWB * * PTQD * - PTRL * * PTWL * * PTRA ? - PTWA ? - PTID ? - CV * * CA * * PD * * PA * * TPM - * LOCDUMP - * LOCADD - * LOCCLEAR - * TRKDUMP - * TRKADD - * TRKCLEAR - * CFGDUMP - * CFGACC - * CFGSYS - * RC - * RCR - *