This is an old revision of the document!
MoPi - Die Modellbahn-Zentrale
Für einen Kunden soll eine Modellbahnzentrale entwickelt werden. Neben der üblichen Zentralenfunktionen soll als Alleinstellungsmerkmal der PC für das (automatisierte) Steuern sowie dem Gleisstellpult integriert werden.
Der Rechner
Raspberry Pi ist ein lowcost Rechner (Preis bei Farnell derzeit 29,03 EUR) mit einen leistungsfähigen ARM-Controller (ARM11 v6 Instruction set 800MHz, 256MB RAM-Speicher, integrierte GPU). Das Betriebssystem wird auf einer SD-Karte installiert. Eine kleine SD-Karte z.B. von Hama dürfte um die 3-4 EUR kosten.
Weiterhin hat der Pi die folgenden für dieses Projekt interessanten Schnittstellen: Ethernet, 2x USB (für Maus und Tastatur), HDMI und VGA (für den Anschluss eines Bildschirms) sowie einer GPIO-Schnittstelle auf der I2C, SPI oder UART zu finden sind (siehe dazu weiter unten). Die Stromversorgung erfolgt über ein handelsübliches USB-Steckernetzteil. Für die Stromversorgung gibt es weiter unten noch ein Kapitel.
Eine mögliche Alternative wäre der APC von Via.
Das Betriebssystem
Auf dem Pi sind gängige Linux-Derivate (leider nicht Ubuntu) lauffähig. Wir haben mit Debian (Raspbian) die ersten Gehversuche gemacht. Enthalten ist auch ein X-Server mit dem die Visualisierung (Gleisstellpult und Loksteuerdialoge) gemacht werden kann. Fast alle gängigen Standardprogramme sind verfügbar (aufpassen wegen Lizenzierungen: Bei GPL-Software sollte der Quellcode mit dabei liegen). Sollten wir an die Ressourcen des Pis stossen, würden wir auf Arch Linux gehen.
Modelleisenbahn-Software
Als GPL-lizensiertes OpenSource-Projekt ist Rocrail zu nennen. Es vereint unter dem Projekt ein Kommandozeilen-Tool, den sogenannten Rocrail-Server. Dieser steuert die konkrete Hardware (Zentrale) an. Außerdem nimmt er über eine Socket-Schnittstelle Kommandos in XML-Syntax entgegen. An der Socket-Schnittstelle können beliebig viele Clients andocken, die entweder auch auf dem Pi laufen (z.B. Rocview) oder externe Geräte (z.B. der eWicht-Handregler).
Der Maintainer von Rocrail, Rob Versluis, schränkt die Nutzung auf private Projekte ein. Dass steht jedoch nicht mit der GPL im Einklang. Wir wollen das Projekt selbverständlich finanziell unterstützen. Derzeitiger Stand (nach einem Telefonat) ist, dass wir, sobald das Produkt auf dem Markt ist einen festvereinbarten Betrag pro verkauften Gerät an das Projekt spenden (ca. 5 EUR).
Es gäbe noch zwei Alternativen zu nennen: - Das srcpd-Projekt, der Server für SRCP-Clients (ein sehr viel hardwarenaheres Projekt, ich denke, das ist nichts für Endverbraucher) - Eine Eigenkreation, basierend auf Webtechnologie (Webserver mit CGI und Datenbank als Server-Ersatz, die Clients würden dann über Browser die Anlage steuern). Einfach aus Standardbausteinen zusammenzusetzen, jedoch nicht mehr dieses Jahr.
MoPi-Treiber
Ich habe jetzt einen Treiber in Python geschrieben, der direkt mit dem MoPi-Controller über die serielle Schnittstelle kommuniziert. Wie performant das Ganze ist, wird sich noch zeigen.
Der Python-Treiber kommuniziert später mit dem Rocrail-Server über einen virtuellen Com-Port. Es wird dort das sogenannte P50X-Interface implementiert. Dieses Protokoll stammt von Uhlebrock und wurde für die Intellibox entwickelt. Die Doku ist frei verfügbar. Diese Lösung hat den Vorteil, dass ich die Sourcen des Rocrail-Servers nicht ändern muss.
GPIO-Schnittstelle
Die GPIO-Schnitstelle beinhaltet eine UART-Schnittstelle. Diese kann bis 115200 Baud (mit gepachten Kernel auch mehr). Leider kann sie kein Hardware-Handshake. Weiterhin sind die Versorgungsspannungen 5V und 3,3V auf die GPIO-Leiste geführt.
Der MoPi-Controller
Der MoPi-Controller erzeut das DCC-Gleissignal und liest S88-Rückmelder ein. Außerdem wird das Active-Signal für einen Booster erzeugt (üblich bei Märklin-Boostern) und das Kurzschluss-Signal der Booster eingelesen. Für das Programmieren der Loks wird noch das ACK-Signal benötigt, welches ebenfalls vom MoPi-Controller eingelesen wird.
Die bidirektionale Kommunikation mit dem Pi erfolgt über die serielle Schnittstelle.
. Die Schnittstelle sollte galvanisch getrennt ausgeführt werden (zwei Optokoppler, die bis zu 115200 Baud mitmachen). Die Kommunikation erfolgt derzeit mit 38400 Baud (Format 8N1). Es kommt ein Software-Handshake zum Einsatz.