Befehle

Das Protokoll definiert elf fortlaufend numerierte Funktionen, die in den folgenden Abschnitten dokumentiert werden. Weitere Details zur Implementierung stehen im Quellcode der Firmware.

Name Funktion Befehl Antwort
0CMDCONNECTVerbindung herstellen4 Bytes4 Bytes
1CMDDISCONNECTVerbindung trennen4 Bytes3 Bytes
2CMDKEEPALIVEVerbindung erhalten3 Bytes3 Bytes
3CMDSIGNALSSignale verändern und auslesen7 Bytes5 Bytes
4CMDPOINTSWeichen stellen und auslesen4 Bytes4 Bytes
5CMDCONTACTSKontaktstatus abfragen3 Bytes6 Bytes
6CMDTRACKSGleistreiber setzen und auslesen6 Bytes6 Bytes
7CMDSENSORSSensoren der Gleistreiber auslesen3 Bytes6 Bytes
8CMDGLOBALGlobalen Status austauschen8 Bytes8 Bytes
9CMDRESETReset der Peripherie3 Bytes3 Bytes
10CMDEEPROMFehlerzähler lesen und zurücksetzen5 Bytes5 Bytes

Verbindung herstellen

Bevor ein Steuerrechner mit der Kommunikation beginnt, sollte er die Verbindung mit dem Befehl CMDCONNECT herstellen. Er kann so entscheiden, ob die Peripherie initialisiert oder unverändert von dem Vorgänger übernommen werden soll, zwingend nötig ist das aber nicht.

Byte Befehl
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Request-Opcode
  Bit 7:0 (Befehl)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:0 (CMDCONNECT)
 [2]Parameter für die Initialisierung
  Bit 7-1:0 (Reserviert)
  Bit 0:0 = Peripherie unverändertübernehmen
1 = Peripherie zurücksetzen
 [3]Checksumme

Das Antwortpaket ist die Bestätigung, daß die Verbindung erfolgreich aufgebaut werden konnte. Es enthält die Nummer des seriellen Eingangs, auf dem der Befehl empfangen wurde.

Byte Antwort
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Reply-Opcode
  Bit 7:1 (Antwort)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:0 (CMDCONNECT)
 [2]Verbindungsdaten
  Bit 7-2:0 (Reserviert)
  Bit 1-0:Nummer des Kanals, 0...3
 [3]Checksumme

Ab diesem Moment zeigt die Leistungselektronik die aktive Kanalnummer in ihrem Display an und ist für die anderen Kanäle gesperrt. Die Peripherie kann normal gesteuert werden.

Verbindung trennen

Braucht der Rechner die Verbindung nicht mehr, kann er sie mit CMDDISCONNECT trennen.

Byte Befehl
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Request-Opcode
  Bit 7:0 (Befehl)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:1 (CMDDISCONNECT)
 [2]Parameter für die Initialisierung
  Bit 7-1:0 (Reserviert)
  Bit 0:0 = Peripherie unverändert lassen
1 = Peripherie zurücksetzen
 [3]Checksumme

Die Antwort wird noch komplett gesendet, weitere Befehle aber nicht mehr angenommen.

Byte Antwort
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Reply-Opcode
  Bit 7:1 (Antwort)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:1 (CMDDISCONNECT)
 [2]Checksumme

Nach dem Senden der Antwort wechselt die Leistungselektronik wieder in den Suchmodus und ist offen für den nächsten Versuch, eine Verbindung aufzubauen.

Verbindung erhalten

Die Firmware trennt die Verbindung nach einer gewissen Zeit der Inaktivität, wenn keine Befehle empfangen wurden. Damit dies nicht eintritt, kann der Rechner den Befehl CMDKEEPALIVE senden. Er hat keine Wirkung auf die Peripherie, hält die Verbindung aber offen.

Byte Befehl
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Request-Opcode
  Bit 7:0 (Befehl)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:2 (CMDKEEPALIVE)
 [2]Checksumme

Weder Befehl noch Antwort enthalten irgendwelche Parameter, da sie nicht auf die Peripherie zugreifen und auch sonst keine Veränderungen auslösen.

Byte Antwort
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Reply-Opcode
  Bit 7:1 (Antwort)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:2 (CMDKEEPALIVE)
 [2]Checksumme

Signale verändern und auslesen

Der Zustand eines Signals wird von der Firmware in einem vier Bit breiten Wert codiert, die Bits (3, 2, 1, 0) stehen für (reserviert, grün, gelb, rot), wobei ein gesetztes Bit die betreffende Leuchtdiode einschaltet. Das Protokoll stellt eine einzige Funktion zur Steuerung aller Signale zur Verfügung, mit der beliebige Manipulationen aller Signale auf einmal möglich sind. Dazu wird der codierte Status jedes Signals zuerst mit einer Bitmaske AND-verknüpft und dann mit einer weiteren XOR-verknüpft. Das Ergebnis bestimmt den neuen Zustand des Signals und wird von der Funktion auch als Ergebnis zurückgegeben. Auf diese Weise können alle LEDs unabhängig voneinander eingeschaltet, ausgeschaltet, negiert oder einfach nur abgefragt werden. Die Bitmasken müssen nur passend zur gewünschten Aktion gesetzt sein.

Mit den Parametern ist es zwar möglich, den Status einer LED zu negieren, dies ist aber unsicher. Empfängt der Steuerrechner keine Antwort auf so einen Befehl, weiß er nicht, ob dieser doch ausgeführt wurde und kennt somit auch den aktuellen Zustand nicht mehr. Es ist daher besser, den Status immer nur absolut zu verändern.

Byte Befehl
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Request-Opcode
  Bit 7:0 (Befehl)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:3 (CMDSIGNALS)
 [2]Bitmaske zum Verändern des Signalstatus
  Bit 7-4:AND-Maske für Signal 3
  Bit 3-0:AND-Maske für Signal 2
 [3]Bitmaske zum Verändern des Signalstatus
  Bit 7-4:AND-Maske für Signal 1
  Bit 3-0:AND-Maske für Signal 0
 [4]Bitmaske zum Verändern des Signalstatus
  Bit 7-4:XOR-Maske für Signal 3
  Bit 3-0:XOR-Maske für Signal 2
 [5]Bitmaske zum Verändern des Signalstatus
  Bit 7-4:XOR-Maske für Signal 1
  Bit 3-0:XOR-Maske für Signal 0
 [6]Checksumme
Byte Antwort
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Reply-Opcode
  Bit 7:1 (Antwort)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:3 (CMDSIGNALS)
 [2]Neues Signalmuster
  Bit 7-4:Status von Signal 3
  Bit 3-0:Status von Signal 2
 [3]Neues Signalmuster
  Bit 7-4:Status von Signal 1
  Bit 3-0:Status von Signal 0
 [4]Checksumme

Weichen stellen und auslesen

Nach dem selben Prinzip wie bei den Signalen werden auch die Weichen und ähnliche Peripherie wie Lampen angesteuert. Der Status der vier Ausgänge ist in einer Bitmaske zusammengefaßt, ein gesetztes Bit an Position i schaltet die Weiche am Ausgang PNTi auf das Nebengleis um oder aktiviert einen dort angeschlossenen Verbraucher. Dieser Status wird mit zwei Bitmasken nacheinander AND-verknpüft und XOR-verknüpft. Das Ergebnis steuert den Weichentreiber und wird mit dem Antwortpaket an den Steuerrechner zurückgeliefert.

Byte Befehl
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Request-Opcode
  Bit 7:0 (Befehl)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:4 (CMDPOINTS)
 [2]Bitmaske zum Verändern des Weichenstatus
  Bit 7-4:AND-Maske
  Bit 3-0:XOR-Maske
 [3]Checksumme

Das Antwortpaket enthält zusätzlich den aktuellen Zustand der Weichentreiber. Dies kann für eine Anwendung von Interesse sein, weil die Schaltbefehle von der Leistungselektronik unter Umständen mit einer geringen Verzögerung umgesetzt werden.

Byte Antwort
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Reply-Opcode
  Bit 7:1 (Antwort)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:4 (CMDPOINTS)
 [2]Neuer Weichenstatus
  Bit 7-4:Aktueller Weichenstatus
  Bit 3-0:Neuer Weichenstatus (noch zu erreichender Zielwert)
 [3]Checksumme

Mit den Parametern ist es möglich, den Status einer Weiche zu negieren, dies ist aber aus den selben Gründen wie bei der Signalsteuerung nicht zu empfehlen.

Kontaktstatus abfragen

Mit der Funktion CMDCONTACTS kann der Zustand der Kontakte ausgelesen werden. Sie liefert neben dem momentanen Status der einzelnen Reedkontakte auch Informationen über registrierte Ereignisse. Dabei wird von jedem Kontakt die Richtung der letzten Auslösung und ein Sequence Counter protokolliert. Die Counter werden bei jedem Ereignis inkrementiert und geben auf diese Weise an, ob und wie viele Ereignisse seit der letzten Abfrage stattgefunden haben. Bei diesem Protokoll gehen auch bei einer schlechten Verbindung keine Ereignisse verloren.

Byte Befehl
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Request-Opcode
  Bit 7:0 (Befehl)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:5 (CMDCONTACTS)
 [3]Checksumme

Der Aufrufer muß die Daten auswerten und daraus die für ihn interessanten Ereignisse ableiten.

Byte Antwort
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Reply-Opcode
  Bit 7:1 (Antwort)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:5 (CMDCONTACTS)
 [2]Bitmaske mit dem aktuellen Zustand der Einzelkontakte
  Bit 7:1 = Kontakt CON3/1 ist momentan geschlossen
  Bit 6:1 = Kontakt CON3/0 ist momentan geschlossen
  Bit 5:1 = Kontakt CON2/1 ist momentan geschlossen
  Bit 4:1 = Kontakt CON2/0 ist momentan geschlossen
  Bit 3:1 = Kontakt CON1/1 ist momentan geschlossen
  Bit 2:1 = Kontakt CON1/0 ist momentan geschlossen
  Bit 1:1 = Kontakt CON0/1 ist momentan geschlossen
  Bit 0:1 = Kontakt CON0/0 ist momentan geschlossen
 [3]Ergebnisse der letzten Auslösungen der Kontaktpaare
  Bit 7-6:Letztes Ereignis von Kontakt 3
  Bit 5-4:Letztes Ereignis von Kontakt 2
  Bit 3-2:Letztes Ereignis von Kontakt 1
  Bit 1-0:Letztes Ereignis von Kontakt 0
   Bedeutung der Ereignisse
   0 = Nicht ausgelöst
   1 = Vorwärts
   2 = Rückwärts
   3 = Keine Richtung feststellbar
 [4]Sequence Counter
  Bit 7-6:Anzahl Ereignisse für Kontakt 3 (modulo 4)
  Bit 5-4:Anzahl Ereignisse für Kontakt 2 (modulo 4)
  Bit 3-2:Anzahl Ereignisse für Kontakt 1 (modulo 4)
  Bit 1-0:Anzahl Ereignisse für Kontakt 0 (modulo 4)
 [5]Checksumme

Gleistreiber setzen und auslesen

Über den Befehl CMDTRACKS können die Einstellungen der beiden Gleistreiber gesetzt oder gelesen werden. Dazu gehört neben dem Modus (hochohmig, vorwärts, rückwärts oder bremsen) auch eine Einstellung der Geschwindigkeit. Der Aufrufer kann je nach Bedarf eine konstante PWM vorgeben oder einen Regelalgorithmus aktivieren, der eine bestimmte Zielgeschwindigkeit zu erreichen versucht und dazu die PWM eigenständig anpaßt. Zwei Bits im Befehlspaket geben an, ob die Einstellungen des jeweiligen Treibers geändert oder nur gelesen werden sollen. In jedem Fall werden die (resultierenden) Parameter als Antwort zurückgegeben.

Byte Befehl
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Request-Opcode
  Bit 7:0 (Befehl)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:6 (CMDTRACKS)
 [2]Bitmaske mit Steuerflags und Motormodi
  Bit 7-6:0 (Reserviert)
  Bit 5:0 = Gleistreiber 1 nur abfragen
1 = Einstellungen von Gleistreiber 1ändern
  Bit 4:0 = Gleistreiber 0 nur abfragen
1 = Einstellungen von Gleistreiber 0ändern
  Bit 3-2:Modus für Gleistreiber 1, wenn Bit 5 gesetzt ist
   0 = Aus
   1 = Vorwärts
   2 = Rückwärts
   3 = Bremsen
  Bit 1-0:Modus für Gleistreiber 0, wenn Bit 4 gesetzt ist
   0 = Aus
   1 = Vorwärts
   2 = Rückwärts
   3 = Bremsen
 [3]Einstellungen für Gleis 1, wenn Bit 5 in [2] gesetzt ist
  Bit 7:0 = Steuerungüber eine feste PWM
1 = Geschwindigkeitsregler aktivieren
  Bit 6-0:PWM-Tastverhältnis, 0...127 (wenn Bit 7 = 0)
Geschwindigkeit, 0...127 (wenn Bit 7 = 1)
 [4]Einstellungen für Gleis 0, wenn Bit 4 in [2] gesetzt ist
  Bit 7:0 = Steuerungüber eine feste PWM
1 = Geschwindigkeitsregler aktivieren
  Bit 6-0:PWM-Tastverhältnis, 0...127 (wenn Bit 7 = 0)
Geschwindigkeit, 0...127 (wenn Bit 7 = 1)
 [5]Checksumme

Beim Bremsen kann die Intensität über die PWM-Rate eingestellt werden. Je größer der Wert, desto schneller kommt der Zug zum stehen. Es macht hierbei keinen Sinn, den Regelalgorithmus zu benutzen. Wird er trotzdem aktiviert, bremst die Firmware stattdessen mit voller Intensität.

Byte Antwort
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Reply-Opcode
  Bit 7:1 (Antwort)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:6 (CMDTRACKS)
 [2]Aktuelle Modi der Gleistreiber
  Bit 7-4:0 (Reserviert)
  Bit 3-2:Modus von Gleistreiber 1
   0 = Aus
   1 = Vorwärts
   2 = Rückwärts
   3 = Bremsen
  Bit 1-0:Modus von Gleistreiber 0
   0 = Aus
   1 = Vorwärts
   2 = Rückwärts
   3 = Bremsen
 [3]Einstellungen für Gleis 1
  Bit 7:0 = Steuerungüber eine feste PWM
1 = Geschwindigkeitsregler aktivieren
  Bit 6-0:PWM-Tastverhältnis, 0...127 (wenn Bit 7 = 0)
Geschwindigkeit, 0...127 (wenn Bit 7 = 1)
 [4]Einstellungen für Gleis 0
  Bit 7:0 = Steuerungüber eine feste PWM
1 = Geschwindigkeitsregler aktivieren
  Bit 6-0:PWM-Tastverhältnis, 0...127 (wenn Bit 7 = 0)
Geschwindigkeit, 0...127 (wenn Bit 7 = 1)
 [5]Checksumme

Der Zug fährt um so schneller, je höher das Tastverhältnis oder die Geschwindigkeit gewählt werden. Die höchste mögliche Geschwindigkeit hängt vom Triebwagen ab und einer der Steuertabellen entnommen werden, typische Werte liegen knapp unter 45.

Sensoren der Gleistreiber auslesen

Die Gleistreiber sind mit einer Reihe von Sensoren ausgestattet, die Kurzschlüsse erkennen, auf den Gleisen stehende Triebwagen detektieren und ihre Geschwindigkeit messen können. Die beiden letzteren werden allerdings nur in Abständen von 0,2 Sekunden während der Fahrt oder 1,0 Sekunden im Stillstand aktualisiert. Daher gibt es für jeden Gleistreiber ein Bit, das beim Eintreffen neuer Daten negiert wird. Der Benutzer muß die Bits auf Veränderungen überwachen, wenn er an aktuellen Daten interessiert ist.

Byte Befehl
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Request-Opcode
  Bit 7:0 (Befehl)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:7 (CMDSENSORS)
 [2]Checksumme

Die Kurzschlußerkennung überwacht beide Gleistreiber gemeinsam. Daher braucht sie unter Umständen einen kurzen Moment, bis sie die genaue Ursache erkannt und den dazugehörenden Treiber abgeschaltet hat. In dieser Zeit kann auch das unbeteiligte Gleis abgeschaltet werden, in der Regel dauert dies aber nur einige Sekundenbruchteile.

Byte Antwort
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Reply-Opcode
  Bit 7:1 (Antwort)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:7 (CMDSENSORS)
 [2]Statusbits der Gleistreiber
  Bit 7-6:0 (Reserviert)
  Bit 5:0 = Gleis 1 arbeitet normal
1 =Überlastsicherung hat Gleis 1 abgeschaltet
  Bit 4:0 = Gleis 0 arbeitet normal
1 =Überlastsicherung hat Gleis 0 abgeschaltet
  Bit 3:Jeder Wechsel dieses Bits zeigt neue Daten von Gleis 1 an
  Bit 2:Jeder Wechsel dieses Bits zeigt neue Daten von Gleis 0 an
  Bit 1:0 = Kein Stromverbraucher auf Gleis 1 gefunden
1 = Ein Treibewagen steht auf Gleis 1
  Bit 0:0 = Kein Stromverbraucher auf Gleis 0 gefunden
1 = Ein Treibewagen steht auf Gleis 0
 [3]Aktuelle Geschwindigkeit des Zuges auf Gleis 1
  Bit 7:0 (Reserviert)
  Bit 6-0:Betrag der Geschwindigkeit
 [4]Aktuelle Geschwindigkeit des Zuges auf Gleis 0
  Bit 7:0 (Reserviert)
  Bit 6-0:Betrag der Geschwindigkeit
 [5]Checksumme

Die Geschwindigkeiten werden unabhängig von der Richtung des Zuges immer positiv angegeben. Der Wert entspricht ungefähr Zentimetern pro Sekunde, typische Werte für die Triebwagen der Anlage liegen bei maximal 45 (siehe Steuertabelle).

Globalen Status austauschen

Die bisher vorgestellten Funktionen zur Steuerung der Peripherie erlauben einen detaillierten Zugriff auf alle Parameter. Sie erweisen sich jedoch als unhandlich, wenn das Steuerprogramm mehrere Aktionen auf einmal durchführen will. Für deren Umsetzung muß eine ganze Reihe von Befehlen erzeugt werden, die Ausführung dauert entsprechend lang. Die hier beschriebene Funktion steuert die gesamte Peripherie auf einmal, ist dafür aber in ihren Möglichkeiten leicht eingeschränkt. Sie kann insbesondere Kontakte nur als Paar und nicht mehr einzeln auslesen.

Byte Befehl
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Request-Opcode
  Bit 7:0 (Befehl)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:8 (CMDGLOBAL)
 [2]Neues Signalmuster
  Bit 7-4:Status von Signal 3
  Bit 3-0:Status von Signal 2
 [3]Neues Signalmuster
  Bit 7-4:Status von Signal 1
  Bit 3-0:Status von Signal 0
 [4]Neuer Status der Motortreiber und Weichen
  Bit 7-6:Modus für Gleistreiber 1
   0 = Aus
   1 = Vorwärts
   2 = Rückwärts
   3 = Bremsen
  Bit 5-4:Modus für Gleistreiber 0
   0 = Aus
   1 = Vorwärts
   2 = Rückwärts
   3 = Bremsen
  Bit 3-0:Neuer Zielzustand der Weichen
 [5]Einstellungen für Gleis 1
  Bit 7:0 = Steuerungüber eine feste PWM
1 = Geschwindigkeitsregler aktivieren
  Bit 6-0:PWM-Tastverhältnis, 0...127 (wenn Bit 7 = 0)
Geschwindigkeit, 0...127 (wenn Bit 7 = 1)
 [6]Einstellungen für Gleis 0
  Bit 7:0 = Steuerungüber eine feste PWM
1 = Geschwindigkeitsregler aktivieren
  Bit 6-0:PWM-Tastverhältnis, 0...127 (wenn Bit 7 = 0)
Geschwindigkeit, 0...127 (wenn Bit 7 = 1)
 [7]Checksumme

Die genaue Bedeutungen der Parameter sind bei den jeweiligen Spezialfunktionen dokumentiert.

Byte Antwort
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Reply-Opcode
  Bit 7:1 (Antwort)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:8 (CMDGLOBAL)
 [2]Ergebnisse der letzten Auslösungen der Kontaktpaare
  Bit 7-6:Letztes Ereignis von Kontakt 3
  Bit 5-4:Letztes Ereignis von Kontakt 2
  Bit 3-2:Letztes Ereignis von Kontakt 1
  Bit 1-0:Letztes Ereignis von Kontakt 0
   Bedeutung der Bitwerte
   0 = Nicht ausgelöst
   1 = Vorwärts
   2 = Rückwärts
   3 = Keine Richtung feststellbar
 [3]Sequence Counter der Kontakte
  Bit 7-6:Anzahl Ereignisse für Kontakt 3 (modulo 4)
  Bit 5-4:Anzahl Ereignisse für Kontakt 2 (modulo 4)
  Bit 3-2:Anzahl Ereignisse für Kontakt 1 (modulo 4)
  Bit 1-0:Anzahl Ereignisse für Kontakt 0 (modulo 4)
 [4]Statusbits der Gleistreiber
  Bit 7-6:0 (Reserviert)
  Bit 5:1 =Überlastsicherung hat Gleis 1 abgeschaltet
  Bit 4:1 =Überlastsicherung hat Gleis 0 abgeschaltet
  Bit 3:Jeder Wechsel dieses Bits zeigt neue Daten von Gleis 1 an
  Bit 2:Jeder Wechsel dieses Bits zeigt neue Daten von Gleis 0 an
  Bit 1:1 = Ein Treibewagen steht auf Gleis 1
  Bit 0:1 = Ein Treibewagen steht auf Gleis 0
 [5]Aktuelle Geschwindigkeit des Zuges auf Gleis 1
  Bit 7-0:Betrag der Geschwindigkeit in Zentimetern pro Sekunde
 [6]Aktuelle Geschwindigkeit des Zuges auf Gleis 0
  Bit 7-0:Betrag der Geschwindigkeit in Zentimetern pro Sekunde
 [7]Checksumme

Diese Funktion ist für alle Szenarien gut geeignet, in denen das Steuerprogramm den Zustand der Leistungselektronik in seinem Speicher festhält und in regelmäßigen Abständen mit der Hardware abgleichen will.

Reset der Peripherie

Auf Wunsch kann die Firmware den Zustand der Peripherie wieder in den Einschaltzustand bringen. Alle Signallampen werden abgeschaltet, die Weichen auf Geradeausfahrt umgestellt, Züge angehalten und der Kontaktzustand zurückgesetzt. Hinterher sind sowohl deren Sequence Counter als auch die zuletzt registrierten Ereignisse auf Null zurückgesetzt.

Byte Befehl
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Request-Opcode
  Bit 7:0 (Befehl)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:9 (CMDRESET)
 [2]Checksumme
Byte Antwort
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Reply-Opcode
  Bit 7:1 (Antwort)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:9 (CMDRESET)
 [2]Checksumme

Fehlerzähler lesen und zurücksetzen

Die Leistungselektronik verwaltet im EEPROM des Mikrocontrollers insgesamt 13 Fehlerzähler, die bei Problemen inkrementiert werden, bis sie bei 255 in die Sättigung gehen. Die Funktion CMDEEPROM kann alle Zähler einzeln auslesen und auf Null zurücksetzen.

Byte Befehl
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Request-Opcode
  Bit 7:0 (Befehl)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:10 (CMDEEPROM)
 [2]Zugriffsmodus
  Bit 7-1:0 (Reserviert)
  Bit 0:Art des Zugriffs
   0 = Lesen
   1 = Zurücksetzen
 [3]Adresse des Wertes
  Bit 7-0:Adresse, 0...12
 [4]Checksumme

Die Zähler bleiben über Neustarts hinweg erhalten und können zu einem beliebigen Zeitpunkt abgefragt und zurückgestellt werden. Sie sind ab Null numeriert.

ZählerQuelleUrsache
0CON0Versagen von Reedkontakt 0
1CON0Versagen von Reedkontakt 1
2CON1Versagen von Reedkontakt 0
3CON1Versagen von Reedkontakt 1
4CON2Versagen von Reedkontakt 0
5CON2Versagen von Reedkontakt 1
6CON3Versagen von Reedkontakt 0
7CON3Versagen von Reedkontakt 1
8TRK0Kurzschluß oderÜberlast
9TRK1Kurzschluß oderÜberlast
10PICDurch MCLR ausgelöster Reset
11PICVom Watchdog ausgelöster Reset
12PICReset durch instabile Spannung

Die Löschung eines Zählers wird von der Firmware nur vorgemerkt und zum nächstmöglichen Zeitpunkt ausgeführt, was einige Millisekunden dauern kann. Zugriffe auf das EEPROM sind nur möglich, wenn der Speicher gerade nicht anderweitig gebraucht wird. Entsprechend kann die Firmware diesen Befehl mit einem Fehler zurückweisen, das Steuerprogramm muß ihn dann zu einem späteren Zeitpunkt wiederholen.

Byte Antwort
 [0]Header
  Bit 7-0:F0h (Magic)
 [1]Reply-Opcode
  Bit 7:1 (Antwort)
  Bit 6-4:Sequenznummer, 0...7
  Bit 3-0:10 (CMDEEPROM)
 [2]Ergebnis des Zugriffs
  Bit 7-1:0 (Reserviert)
  Bit 0:Ergebnis des Zugriffs
   0 = Erfolgreich
   1 = Momentan kein Zugriff möglich
 [3]Wert des Zählers nach erfolgreichem Lesebefehl
  Bit 7-0:Wert, 0...255
 [4]Checksumme