Über eine längere Zeit hinweg gab es Probleme mit Weiche 9, die
Umschaltprobleme zeigte. Das äußerte sich dahingehend, dass die Züge von der
Zunge voraus in den falschen, nicht geplanten Abzweig fuhren.
Glücklicherweise kann man die Antriebe von den Weichen abklipsen und so hat ein Test mit einer Austauschweiche ergeben, dass es nicht am Antrieb liegt. Ursache scheint eine schwache Federung innerhalb der Weichenzunge zu sein. Da der Fehler in der Weiche liegt und nicht im Antrieb, konnte der Antrieb während des Umbaus abgeklipst und angeschlossen am Gleisbett verweilen, wodurch der Ent- und Verkabelungsaufwand vermieden werden konnte. Seit Einbau der Austauschweiche ist kein Vorfall mehr aufgetreten.
Seit geraumer Zeit wird die Steuerungs-Software der Modelleisenbahn neu
implementiert. Die Anmutung ist am originalen ESTW orientiert. Statt
Eclipse/Java wird C++/Qt verwendet. Sogar der Biermodus ist inzwischen
implementiert und funktioniert einwandfrei. Ein weiterer Vorteil ist die
direkte Ansteuerung des CAN-Bus über USB-Adapter. Dadurch entfällt die
Tunnelung durch die serielle Schnittstelle. Das Modell wird direkt geladen,
sodass kein Plugin mehr generiert und kompiliert werden muss. Ein Edit-Modus
ermöglicht die Anpassung des Gleisbild-Layouts.
Die neue Steuerung ist auf Anwendungsebene komplett neu in C++17 entwickelt worden. Die Hardware wird durch Qt abstrahiert. Software-technisch werden konsequent Statecharts unter Benutzung der Yakindu Statechart Tools benutzt. Es werden Unit Tests, SCT-Units sowie Code Coverage genutzt, um die Software-Qualität auf höchstem Niveau zu halten.
Die Software auf den ATmega32 Mikrocontrollern bleibt unangetastet.
Das Projekt ist auf github unter der MIT-Lizenz gehostet. Die Software ist fertig paketiert über ein APT-Repository für Ubuntu oder Debian verfügbar. Die unterstützte Architektur ist x86_64 und arm64. Eine Anleitung zur Einrichtung der Installation findet sich auf den github Projektseiten.
Heute wurden die provisorischen Überbrückungsklammern der denkenden
Fleischmann-Weichen durch originale Klammern ersetzt. Die kupfernen manuell
zurechgebogenen Klammern waren häufig rausgesprungen und haben für
Wackelkontakte gesorgt. Hintergrund war, dass in der ersten Anlage die Funktion
der denkenden Weichen genutzt wurde. Das ist auf Grund der CAN-Bus basierten
Steuerung nicht mehr notwendig.
Seit den ersten Entwicklungen mit dem CAN-Bus und der Eisenbahnsteuerungen hat
sich im Embedded-Markt sehr viel getan. Insofern ist es nur logisch, sich mal
günstige CAN-Busadapter anzusehen, ob sie mit der Eisenbahnsteuerung
zusammenarbeiten könnten. Nach einem kurzen Test hat sich herausgestellt, dass
der Standard-Linux-Treiber hervorragend mit dem CAN-Bus der Modelleisenbahn
kommunizieren kann. Erfreulicherweise Ist der Anschluss über USB sehr einfach.
itemis hat mir die Gelegenheit gegeben, die Eisenbahnsteuerung im Rahmen von 4+1 entwickeln zu können und hat das eindrucksvoll in diesem Video zusammengefasst:
Mehr zum Thema Karriere und Weiterbildung bei itemis findet ihr unter https://www.itemis-karriere.de
Heute Abend hat sich aus heiterem Himmel ein CAN-Controller verabschiedet.
Nach kurzer Diagnose habe ich den Controller mit der ID Nr. 10 als defekt
identifiziert. Leider hatte der Tauschcontroller einen Wackelkontakt an den
CAN-Anschlüssen. So musste erstmal die Fehlerursache für den Defekt
herausgefunden werden. Nach Abarbeitung der
Durchgangsprüfung
stellte sich eine nicht ganz sauber verlötete Drahtbrücke als Ursache
heraus. Leider hat es bei der Aktion auch den MCP2515 mitgenommen. Nach
Reparatur des Bausteins konnte die Eisenbahnanlage wieder in Betrieb
genommen werden.
Der Wackelkontakt am Tauschbaustein war ein abgebrochener Stift an der
Anschlussbuchse. Nach Tausch der Buchse funktioniert dieser Baustein auch
wieder wie gewünscht.
Bisher konnte man nur mehrere Lokomotiven gleichzeitig fahren lassen. Der Versuch, mehrere komplette Züge automatisch fahren zu lassen hat meist nach wenigen Minuten mit einem Unfall geendet. Der Grund war, dass die Waggons nicht zu einer Gleisbesetztmeldung geführt hat. Das wiederum bedeutet aus Sicht der Steuerung, dass scheinbar freie Gleisteile wieder für neue Fahrstraßen verwendet werden können. Das führt früher oder später dazu, dass Weichen unter dem fahrenden Zug verstellt wurden und den Zug so zum Entgleisen gebracht hat.
Die Lösung sieht so aus, dass die Gleisabschnitte nur blockweise, d.h. von Hauptsignal zu Hauptsignal freigegeben werden. Da viele Weichen durch Hauptsignale abgesichert sind, kann ein Verstellen damit nicht mehr eintreten.
Ein kleiner YouTube-Film veranschaulicht diese Funktionsweise:
Ein weiterer Film zeigt die Funktionsweise des unverändert gebliebenen Biermodus:
Ich habe heute zwei Drehspulinstrumente montiert, die den Stromverbrauch für
die 12V-Schiene und die 24V-Schiene anzeigen.
Dabei zeigt sich, dass die Anlage im Leerlauf ca. 2A auf der 12V-Schiene verbraucht. Sind alle Gleise und Signale ausgeschaltet, sind die Mikrocontroller die einzigen Stromverbraucher und verbrauchen nur noch knapp ein halbes Ampere. Damit zieht ein Controller-Modul samt angeschlossener Leistungselektronik nur ca. 0,4 Watt. Sind alle Signallämpchen und Gleisabschnitte eingeschaltet, beläuft sich der Stromverbrauch auf gut 6 Ampere.
Die 24-Volt-Seite verbraucht ca. ein halbes Ampere. Hier wird der Strom für die Beleuchtung der Flügelsignale verbraucht. Der kurzfristige Schaltvorgang der Weichen verbraucht bis zu 2A.
Ein normaler Betrieb der Anlage verbraucht demnach ca. 150 Watt. Dieser Wert berücksichtigt die Schaltnetzteile (Wirkungsgrad ca. 80%), den Steuerrechner (ca. 50W) und die Zimmerbeleuchtung mit 50W. Der Fahrstrom der Lokomotiven ist dabei vernachlässigbar.
Zwischen den Feiertagen habe ich an neuen Automatikmodi programmiert. Diese ermöglichen es, an Hand einer vorgegebenen Tour einen Zug sogar im Kreis fahren zu lassen. Dabei wird die Fahrstraße nach vorne automatisch verlängert, sobald ein Zug einen Block verlässt. So "gleitet" die Fahrstraße durch die vorgegebene Tour.
Eine Tour ist die sog. "Reinigungstour". Diese ist so gestaltet, dass jeder Kreis komplett abgefahren wird und dabei alle Übergänge zwischen den beiden Kreisen ebenfalls abgefahren werden. So kann mithilfe des Reinigungswagens ein großer Teil der Anlage automatisch gesäubert werden.
Es ist damit sogar möglich, mehrere Touren gleichzeitig aktiv zu haben. Ist ein Blockabschnitt belegt, wartet der Zug der anderen Tour solange vor dem Hp0 zeigenden Signal, bis der Block wieder frei ist. Die Tourensteuerung ist noch nicht fertig implementiert. Dadurch, dass Waggons nicht detektiert werden können, kann es passieren, dass Weichen unter Waggons geschaltet werden. Hier müssen entweder alle Waggons mit Widerständen nachgerüstet werden, damit die Gleisbesetztmeldung diese erkennt, oder es muss eine Verzögerung in die Steuerung implementiert werden.
Im Zuge der Tourensteuerung habe ich noch einige Blöcke hinzugefügt. Viele
liegen verdeckt im Tunnel und benötigen daher keine echten Signale. Diese
sind nur virtuell im Gleisplan modelliert. Einige weitere sichtbare Signale
habe ich aber trotzdem aufgebaut. Dadurch wird die Blocksteuerung noch
realistischer.
Die Kommandoverarbeitung in der Firmware der CAN-Knoten war ein unschönes
Stück Spaghetti-Code. Es dient trotzdem als Referenzimplementierung für
die modellbasierte Firmware-Entwicklung. Zuerst wurde ein Zustandsdiagramm
gefertigt, das die Betriebszustände enthält. Die eingehenden Kommandos sind
die Zustandsübergänge enthalten. Aus diesem Diagramm wird mit Hilfe von
openArchitectureWare
der Code für die Kommandoauswertung generiert. Der Code enthält relativ
viele Callbacks und switch/case-Anweisungen und bläht den Binärcode um ca.
1,5 KByte auf. Das ist aber nicht weiter schlimm, da jetzt noch Platz für
ca. 18 KByte im Flash des ATmega32 vorhanden ist.
Nachdem ein Blocksignal gleichzeitig rot und grün angezeigt hat, bin ich der
Sache auf den Grund gegangen. Die
BRAWA-Lichtsignale
haben Glühbirnchen, die in den Signalschirm geschoben werden. Diese haben
sich verschoben und so für
die falsche Beleuchtung gesorgt. Beim Beheben des Problems habe ich dummerweise für einen
Kurzschluss gesorgt. Die Konsequenz war, dass ein Lichtsignalmodul unter
Geruchsbildung abgeraucht ist, und der dazugehörige CAN-Knoten seinen Geist
aufgegeben hat. Bilanz des IC-Massakers: Ein ATmega32, ein MCP2515 und ein
ULN 2803 sind zum Teil effektvoll gestorben. Zur Sicherheit habe ich auch
die restlichen ICs vom Lichtsignalmodul außer Betrieb gesetzt. Auf dem
CAN-Knoten ist eine Masseleitung durchgebrannt. Diese kann problemlos
überbrückt werden. Das Gleiche ist auch mit dem CAN-Knoten passiert, dass
durch falsch geklemmte Flachbandkabel beim Anschließen zerstört wurde. Hier hat es aber nur
den ATmega32 erwischt. Ich habe die ICs bei
Reichelt
nachbestellt, um wieder Ersatzteile zu haben. Die Schaltung muss jetzt durch eine Sicherung so ergänzt
werden, dass sie kurzschlussfest wird.
Moral von der Geschicht: Beim Elektroschrauben immer schön Strom abschalten!
Die Nordausfahrt des Hauptbahnhofs ist fertig verkabelt und
funktionstüchtig. Die sieben Ausfahrsignale sehen schon beeindruckend aus.
Leider hat die Verkabelung ein wenig länger gedauert als geplant. Einige
Flachbandkabel von
Reichelt
hatten einen Kurzschluss, was zur Folge hatte, dass ein
CAN-Knoten und ein Lichtsignalmodul funktionsunfähig wurden. Ich werde jetzt
bei
Conrad
neue Flachbandkabel kaufen, denn die haben sich bei der
Yakindu
-Anlage als gut erwiesen. Da auf der
Yakindu
-Anlage keine Signale verbaut sind, sind mehrere Firmware-Bugs erst jetzt
aufgetaucht. Die Formsignale wollten gar nicht schalten und die
Ausfahrsignale konten Sh1 nicht darstellen. Die Bugs waren schnell gefunden
und gefixt. Zum ersten Mal konnte der ATmega-CAN-Bootloader seine Vorteile
voll ausspielen: Einfach Firmware-Update durchführen und alles funktionert.
Ärgerlich war auch eine falsche Beschriftung der Modulanschlüsse. So waren
die Signalbilder nicht in Ordnung und alle Lichtsignalmodule mussten
umverkabelt werden.
Das Bild zeigt den Arbeitsplatz, den ich für einige Tage genießen werde. Die
Wolldecke leistet mir unschätzbare Dienste. Sie hält meinen Rücken auf den
Fliesen warm und man kann mit ihr rutschen, als wäre es ein Rollbrett aus
einer KFZ-Werkstatt. Ansonsten ist die Arbeit gutes Bauchmuskeltraining und
fördert die Körperkoordination.
Nach einer Woche Löten sind alle 73 Module fertig gelötet und durchgeprüft.
Die Module wurden in Vierer- und Fünfergrüppchen gelötet, um so eine höhere
Produktivität erreichen zu können. Alles sieht beeindruckend aus und ich bin
froh, diese Arbeit erledigt zu haben. Schön ist auch, dass fast nichts
kaputtgegangen ist und dass kein Teil zu wenig oder zu viel bestellt wurde.
Alles hat gepasst.
Da jetzt alle Module fertig gelötet sind, kann jetzt mit der Verkabelung begonnen werden. Vorher sind aber noch ein paar vorbereitende Arbeiten nötig. Die Nutleisten müssen zurechtgesägt werden. Es muss unter der Anlage Platz geschaffen werden und die restlichen Signale und Weichen müssen verbaut werden. Diese dienten bisher als Testexemplare der Module
Heute Nacht ist mir eine Idee gekommen, wie die relativ lauten Gleisrelais
leiser gemacht werden können. Ich habe noch Reste der Schalldämmung für die
Gleise. Daraus habe ich Träger geleimt, die so am Stück unter die Platte
geleimt werden können. Das hat auch den Vorteil, dass die Verleimung der
relativ schweren Gleismodule leichter von statten gehen kann.
Als letztes Päckchen sind die Leiterplatten von
MME-Leiterplatten
eingetroffen. Die Qualität ist sehr gut. Es sind sogar noch ein paar
Leiterplatten mehr im Päckchen als bestellt waren. Die Teile sind inzwischen
nach Bauteilen vorsortiert und das Ganze erinnert an ein - jetzt vollständig
- gedecktes Frühstück. Jetzt kann mit dem Verlöten der mindestens
57 Platinen begonnen werden. Zum Glück habe ich ab
Donnerstag Urlaub, sodass in Ruhe durchgelötet werden kann.
Ähnlich einfach, wie die Entwicklung der Lichtsignal-Module gestaltete sich
heute der Prototyp für die Weichenschaltung. Nachdem auf dem Steckbrett eine
funktionierende Schaltung zusammengesteckt war, wurde ein Prototyp gelötet.
Einige Anpassungen in der CAN-Knoten-Firmware waren notwendig, damit die
Weichen oder Signale geschaltet werden können. Typische Modellweichen werden über
Magnetspulen angetrieben. Diese haben heutzutage eine Endabschaltung, um das
Durchbrennen der Magnetspulen durch Fehlbedienung zu verhindern. Diese
Endabschaltung lässt sich dazu ausnutzen, um die Lage der Weiche
festzustellen. So lassen sich manuelle Schaltvorgänge feststellen und es
lässt sich ein automatischer Schaltvorgang beschleunigen. Denn während eine
Weiche ohne Endabschaltung für eine gesicherte Zeit unter Strom gesetzt
werden muss (hier etwa eine Sekunde), kann der Strom bei einer
endabgeschalteten Weiche abgeschaltet werden und der nächste Schaltvorgang
in Angriff genommen werden. Auch lässt sich so feststellen, ob überhaupt ein
Schaltvorgang nötig ist. Zeigt eine Weiche auf den linken Abzweig, muss ein
Auftrag, die Weiche nach links zu schalten nicht mehr durchgeführt werden.
Heute wurden die Prototypen für die Module der Lichtsignale fertig gelötet.
Die Module werden über ein 10-poliges Kabel kaskadiert mit einem
Mikrocontroller verbunden. Darüber laufen Spannungsversorgung und die
Datenleitung. Auf den Modulen sind Schieberegister (74HC595) samt Leistungstreiber
(ULN 2803) für die Lichtsignale vorhanden. Es können bis zu vier Module
kaskadiert werden. Die Controller sind in der Lage, die korrekten
Signalbilder der Deutschen Bahn anzuzeigen. Es wird also nur das Kommando
gegeben, dass z.B. das Signal P3 auf Hp2 geschaltet
werden soll. Es werden Vorsignale, Blocksignale, Einfahrsignale,
Ausfahrsignale und Gleissperrsignale auseinandergehelten. Dabei könnten in
Zukunft noch weitere Signale - wie z.B. die neuen Ks-Signale - der Controller-Firmware
hinzugefügt werden, denn es ist ein In-System-Programming der Firmware über
CAN-Bus möglich.
Seit letztem Donnerstag entwickeln mein Kollege Marc Habiger und ich die
Stellwerkssteuerung für die Modellbahn.
Heute haben wir den
CAN-Protokollumfang in den Griff bekommen. Dazu zählt natürlich der
Austausch von CAN-Frames, sowie die vernünftige Filterung der Frames
am Controller. Dadurch können gleich die unwichtigen Pakete rausgefiltert
werden, ohne dass der Mikrocontroller mit Rechenzeit belastet wird. Auch das
Versenden von Standard Data Frames sowie Extended Data Frames funktioniert
problemlos.
Derzeit arbeiten wir an der Kopplung der Kommunikation mit dem PC. Diese soll über die schon altbackene RS232-Schnittstelle geschehen. Diese hat aber bis heute jeder PC und somit muss keine neue Steckkarte oder andere Erweiterung für den PC gekauft werden. Ein CAN-RS232-Gateway setzt die CAN-Frames vom PC über RS232-Schnittstelle auf den CAN-Bus um.
Ich werde häufig gefragt, warum das Ganze über CAN-Bus läuft. Schließlich gibt es genug ausgereifte Digitalmodule für die Modellbahn. Es ist so, dass der CAN-Bus viele gute Eigenschaften hat. Der CAN-Bus wurde von Bosch für den Automotive-Umfeld entwickelt. Ziel war es, durch Einsparung von Verkabelung Aufwand und Gewicht einzusparen. Inzwischen sind 20 Jahre vergangen und der CAN-Bus steckt in nahezu jedem Neuwagen. Die mechanische Belastung auch im Auto sind teilweise enorm, so dass mit dem CAN-Bus ein robuster 2-Draht-Bus (mit der Karosserie als Masse) geschaffen wurde. Bei der Modellbahn sind einige dieser Aspekte auch von Bedeutung. Ziel ist es, Verkabelung einzusparen. Nicht aus Gewichtsgründen, sondern aus rein ergonomischen Gründen, da die Drähte über Kopf montiert werden müssen. Auch die Robustheit spielt dabei eine Rolle. Es gibt auch auf einer Modellbahn viele Störeinflüsse gerade durch Antriebsspulen.
Zum guten Schluss zählt doch eins: Man hat etwas eigenes entwickelt um es zu verstehen. Obendrein ist es auch erheblich kostengünstiger, als die käuflich zu erwerbenden Digitalmodule. Letztlich ist es einfach nur cool, wenn man der Modellbahnanlage ein Firmware-Update spendiert ;-)