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 |
0 | CMDCONNECT | Verbindung herstellen | 4 Bytes | 4 Bytes |
1 | CMDDISCONNECT | Verbindung trennen | 4 Bytes | 3 Bytes |
2 | CMDKEEPALIVE | Verbindung erhalten | 3 Bytes | 3 Bytes |
3 | CMDSIGNALS | Signale verändern und auslesen | 7 Bytes | 5 Bytes |
4 | CMDPOINTS | Weichen stellen und auslesen | 4 Bytes | 4 Bytes |
5 | CMDCONTACTS | Kontaktstatus abfragen | 3 Bytes | 6 Bytes |
6 | CMDTRACKS | Gleistreiber setzen und auslesen | 6 Bytes | 6 Bytes |
7 | CMDSENSORS | Sensoren der Gleistreiber auslesen | 3 Bytes | 6 Bytes |
8 | CMDGLOBAL | Globalen Status austauschen | 8 Bytes | 8 Bytes |
9 | CMDRESET | Reset der Peripherie | 3 Bytes | 3 Bytes |
10 | CMDEEPROM | Fehlerzähler lesen und zurücksetzen | 5 Bytes | 5 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ähler | Quelle | Ursache |
0 | CON0 | Versagen von Reedkontakt 0 |
1 | CON0 | Versagen von Reedkontakt 1 |
2 | CON1 | Versagen von Reedkontakt 0 |
3 | CON1 | Versagen von Reedkontakt 1 |
4 | CON2 | Versagen von Reedkontakt 0 |
5 | CON2 | Versagen von Reedkontakt 1 |
6 | CON3 | Versagen von Reedkontakt 0 |
7 | CON3 | Versagen von Reedkontakt 1 |
8 | TRK0 | Kurzschluß oderÜberlast |
9 | TRK1 | Kurzschluß oderÜberlast |
10 | PIC | Durch MCLR ausgelöster Reset |
11 | PIC | Vom Watchdog ausgelöster Reset |
12 | PIC | Reset 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 |
|