Serielle Ports

Jedes System mit einer seriellen Schnittstelle im RS232-Standard kann die Leistungselektronik über ein Kommunikationsprotokoll steuern. Dafür ist die Platine mit vier Buchsen versehen, die über einen Multiplexer mit dem Mikrocontroller verbunden sind. Der Prozessor kann eine Schnittstelle auswählen und dann durch diese mit dem externen Rechner kommunizieren.


Ansteuerung der seriellen Schnittstellen
Kompletter Schaltplan als PDF

Ein Analog Switch vom Typ 4052 übernimmt die Aufgabe des Multiplexers für die Pins RX und TX des Mikrocontrollers, der aktive Kanal kann über zwei weitere Pins ausgewählt werden. Am Ausgang des Multiplexers halten Pullup-Widerstände inaktive Leitungen auf dem Ruhepegel, bevor zwei MAX232 Pegelwandler die Spannungen für Anschlußbuchsen umsetzen. Die Bausteine enthalten auch alle nötigen Schutzvorrichtungen zur Absicherung der Schnittstellen.

Über Jumper können die Sendeleitungen der Platine und damit die Eingänge der Steuerrechner synchronisiert werden. So kann ein inaktiver Rechner die Antworten der Firmware mitlesen, wenn diese gerade auf einem anderen Kanal kommuniziert. Diese Funktion ist wichtig, wenn redundante Rechner die Leistungselektronik mit Hot Standby steuern sollen. Im Layout der Platine ist nicht genügend Platz für vier Buchsen vorhanden, daher ist eine doppelt belegt. Sie enthält auf den Pins DTR und DSR die vierte Schnittstelle, eine Kabelpeitsche trennt die Schnittstellen wieder .

Suche nach einem Steuerrechner

Wenn ein Rechner die Kontrolle über die Leistungselektronik übernehmen will, sendet er dazu einen entsprechenden Befehl über die serielle Schnittstelle. Das Problem hierbei ist, daß die Firmware nicht wissen kann, auf welchem Eingang sie diesen empfangen kann. Daher gibt es einen Suchmodus, in dem der Mikrocontroller sehr schnell alle Eingänge reihum auf Aktivität prüft. Dabei konfiguriert er den RX-Pin als digitalen Eingang und sucht nach einem Low-Pegel (die Leitungen liegen im Ruhezustand auf High). Entdeckt der Mikrocontroller Aktivität auf einem Kanal, beendet er die Suche, wechselt den Eingang nicht mehr und aktiviert seinen seriellen Transceiver. Ab dann läuft die Kommunikation nach dem RS232-Standard. Dieses Verfahren reicht alleine aber noch nicht aus. Egal wie schnell die Schnittstellen abgefragt werden, wenn der Transceiver aktiviert wird, hat dieser bereits den Anfang des Bytes verpaßt und es kommt zu einem Fehler. Die Firmware löst dieses Problem mit einem Trick.

  • Randbedingungen
    • Das Protokoll schreibt vor, daß jedes Paket mit dem Byte 0xF0 beginnt. Auf der Leitung wird es als 5 Takte Low (Startbit plus untere 4 Bits), gefolgt von 5 Takten High (obere 4 Bits plus Stopbit) übertragen. Dies verschafft dem Suchmodus eine ausreichend lange ununterbrochene Low-Phase, um den Kanal finden zu können.
  • Suche nach Aktivität
    • Alle 4 Eingänge werden nach dem beschriebenen Muster laufend abgefragt, wobei ein Test wenigstens alle 45 Mikrosekunden stattfindet. Ist ein Eingang zu dem Zeitpunkt Low, wird der Kanal vorläufig nicht mehr gewechselt.
    • Der Pegel muß wieder auf High wechseln, wenn die zweite Hälfte des Bytes beginnt. Passiert dies nicht rechtzeitig, wechselt die Suche wieder den Kanal.
    • Bei Erfolg wird der serielle Transceiver aktiviert, der jetzt ausreichend Zeit für die Initialisierung hat und die Daten ab dem zweiten Byte korrekt empfängt.
  • Herstellen und Trennen der Verbindung
    • Das fehlende erste Byte aus dem Header ergänzt die Software intern.
    • Innerhalb von 0,03 Sekunden muß der erst gültig Befehl vollständig empfangen sein, anderenfalls wird die Verbindung wieder getrennt. Solange bleiben die Motortreiber noch deaktiviert, um ein ungewolltes Anfahren der Züge zu verhindern.
    • Ab dann läuft die Kommunikation normal, bis der externe Rechner sie explizit beendet oder für 0,2 Sekunden lang gar keinen gültigen Befehl sendet.

Der Algorithmus ist so konzipiert, daß ein korrekter Verbindungsaufbau normalerweise bereits beim ersten Versuch erfolgreich ist. Auf der anderen Seite dürfen Fehler auf einem Kanal nicht die gesamte Kommunikation blockieren und funktionierende Rechner aussperren. Daher wird bei Anzeichen gravierender Probleme die Verbindung möglichst schnell wieder unterbrochen.

Kommunikation

Ist die Verbindung erst einmal hergestellt, übernimmt der Transceiver im Mikrocontroller den größten Teil der Ansteuerung. Alle empfangenen Daten werden in einem Ringpuffer von 16 Bytes gespeichert und auf gültige Pakete hin durchsucht.

  • Empfang von Daten
    • Jedes korrekt empfangene Byte wird zunächst in dem Ringpuffer abgelegt.
    • Anschließend überprüft eine Funktion, ob am Anfang des Puffers ein gültiges Paket enthalten ist, und liefert eine der Antworten "Ja", "Nein" und "Vielleicht".
    • Bei der Antwort "Ja" wird der empfangene Befehl ausgeführt, ein Paket mit der passenden Antwort erzeugt und der Befehl selbst aus dem Puffer entfernt.
    • Die Antwort "Vielleicht" bedeutet, daß nicht ausreichend Daten für eine Entscheidung im Puffer enthalten ist. In diesem Fall wartet die Firmware auf weitere Bytes.
    • Bei der Antwort "Nein" wird das erste Byte des Puffers gelöscht. Dadurch kann die Kommunikation hinter einem defekten Paket irgendwann wieder aufsetzen.
    • Sollte der Transceiver einen Übertragungsfehler (Overrun, Framing Error) melden, wird der gesamte Inhalt aller Empfangspuffer gelöscht. Das gleiche passiert, wenn innerhalb eines Befehls eine ungewöhnlich lange Pause auftritt.

Die gesamte Kommunikation arbeitet nach dem Prinzip fail silent. Ist der empfangene Befehl korrekt, wird er von der Firmware an den entsprechenden Handler weitergeleitet. Dieser kümmert sich um die Ausführung und generiert ein Antwortpaket, das zunächst in einem 16 Bytes großen Ringpuffer abgelegt wird. Die Firmware leert den Puffer laufend in Richtung des Transceivers. In allen anderen Fällen wird der Befehl ignoriert. Das Steuerprogramm kann beim Ausbleiben einer Antwort nicht feststellen, ob der Befehl ausgeführt wurde.


Multiplexer, Jumper und Treiber der seriellen Schnittstellen

Ein Steuerrechner muß laufend Befehle senden, um die Verbindung aufrecht zu halten. Sollte sie getrennt werden, kann der selbe oder ein anderer Rechner diese wieder übernehmen. Auf Wunsch passiert das nahtlos, also ohne Reset der Leistungselektronik. Damit ist eine redundante Steuerung möglich, auch wenn immer nur ein Rechner zur Zeit Befehle senden darf.

Die Ansteuerung erlaubt ausdrücklich, einen Befehl zu senden, während die Firmware noch die Antwort auf den vorigen überträgt (Vollduplex-Betrieb). Dabei ist nur darauf zu achten, daß der Sendepuffer des Mikrocontrollers nicht überläuft. Dies kann passieren, wenn die Befehle kleiner als die Antwortpakete sind und völlig ohne Pausen gesendet werden. In so einem Fall kommt die Firmware mit dem Senden nicht schnell genug hinterher und muß Befehle ignorieren, wenn im Sendepuffer kein Platz für das Antwortpaket ist.