Hallo liebe Mitleser!
Wie ich in meiner Vorstellung schon geschrieben habe, bin ich auf der Softwareseite zu Hause und ich habe mir ein Projekt "eingetreten", nämlich eine Steuerungssoftware für Modellbahnanlagen zu entwickeln.
Da ich weder groß Erfahrung mit Modelleisenbahnen habe, noch Erfahrung mit zugehörigen Steuerungssoftwaren, ist das Projekt für mich durchaus eine Herausforderung. Eine zusätzliche Herausforderung ist, dass ich im Zuge des Projektes die Programmiersprache Java lernen muss, denn damit muss es gemacht werden. Da fährt die Eisenbahn drüber.
Ich arbeite nicht alleine an dem Projekt, es ist noch ein Elektroniker mit an Bord, der das mit dem Strom macht.
Konkret wollen wir keine der fertigen Softwaren verwenden, weil wir viele Ideen haben, und unser System mit vielen Strömen gleichzeitig fahren wird können (Analog/Digital/Dreileiter/Selbstfahrer), und noch dazu mangelt es an Budget, sodass wir nicht fertige recht teure Fahrmodule kaufen könnten für die ganze Anlage.
Die ganze Anlage hat in etwa 80 Blocks die in je 4 Unterblocks aufgeteilt sind. Dazu 220 Weichen, und wenn Betrieb herrscht, dann fahren angeblich 40 Züge gleichzeitig - leider hab ich das nie gesehen weil die Anlage nicht mehr geht. Zu viele Schaltkreise sind den Verwitterungstod gestorben. Konkret handelt es sich um die N Anlage im Eisenbahnmuseum Strasshof, falls die jemand von euch kennt. Hier soll die Software als erstes eingesetzt werden, anschließend auf andere Anlagen im Museum ausgerollt werden.
Die Software muss mehrere "Schichten" haben, und idealerweise sollte es auch einen Simulator geben, sodass nicht die gesamte Logik erst am lebenden Projekt ausprobiert werden muss.
Enwicklungsstart war in etwa am 1.12.2017.
Die 3 Schichten sind also der Simulator, der simulieren muss, dass sich Loks auf Schienen bewegen, aber nur wenn der richtige Strom drin ist. Er bekommt Befehle, Strom einzuschalten, und er liefert die Information, welcher Block nun gerade belegt ist und frei wurde. Er ist auch die Schnittstelle zwischen den Weichen und Signalen. Er bekommt Befehle eine Weiche zu stellen, und meldet das dann zurück.
Die nächste Schicht ist der "Server", der die Kommunikation mit dieser Zentrale aufrechterhält. Dieser Server sorgt auch für die Sicherheit im Fahrbetrieb, er wird Loks bremsen die zu schnell fahren, wird verhindern dass in belegte Blöcke eingefahren wird, und er wird das alles weitererzählen in die oberste Schicht, in die Fahrcockpits.
Die oberste Schicht sind also die Fahrprogramme. Mehrere können gleichzeitig eingesetzt werden, und doch muss sich alles so integriert anfühlen als wäre es ein System, jeder Fahrer kann also mehr oder weniger mit der ganzen Anlage fahren, oder auch nur mit einem Teil davon, was konkret wohl mehr Sinn machen wird.
Das Fahrprogramm kann nun ein PC Programm sein, oder auf einem Tablet laufen, oder auf einem Handy. Lustig fände ich persönlich ja die Idee, für Besucher der Anlage eine App zur Verfügung zu stellen, wo der Besucher einen Code kaufen kann und dann mit einer Lok auf einem abgetrennten Bereich mitspielen kann. Nachdem die Entwicklungsbasis Java ist, ist der Weg zu Android ja nicht soo weit.
Es ist also eine große Wiese, und wenn man keine konkreten Vorgaben hat, weiß man möglicherweise nicht, wo man denn nun genau anfangen könnte.
Ich hab mir mal die Kommunikationsprotokolle für die 3 Ebenen ausgesucht und einen Simulator programmiert und einen Server und ein Fahrprogramm, und die mal zusammengeschaltet um zu sehen ob die überhaupt miteinander sprechen können.
Ebene 1 - Hardware Zentrale und Simulator
Hier ein Screenshot des Simulators, der so tut als wäre er eine Anlage plus Elektronik, und er zeigt sich als "Zentrale". Die Zentrale weiß alles was auf der Anlage los ist, und daher sieht sie auch so aus.
Man kann hier zwar keine Schienen sehen, aber man sieht 8 Fahrmodule mit je 4 Blöcken, und drauf fahren sogar Lokomotiven. Man hat Controls mit welchen man Loks aufgleisen kann und die fahren dann los, sofern in den Schienen der richtige Strom drin ist. Digitale Loks werden per Speedkommando direkt auf die Reise geschickt.
Der richtige Strom? Es gibt Analog Plus, Analog Minus, Digital Plus, Digital Minus (vgl Wendeschleifen), Dreileiter analog (Märklin ist gemeint), Dreileiter digital. Und dann gibt theoretisch auch batteriebetriebene Loks, von diesen bekommt man nur Belegtmeldungen und denen kann man Signale zeigen, wenn sie bitte anhalten mögen.
Dieses unterste Simulationsprogramm läuft mehr oder weniger in einer Endlosschleife wo in jeder Zehntelsekunde ausgerechnet wird, um wieviele mm sich eine Lok weiterbewegt hat, und ob sie vielleicht schon den nächsten Block erreicht hat. Falls das der Fall ist, gehen Meldungen raus dass der neue Block nun belegt ist, und der vorige frei wurde. Dieses Simulatorprogramm muss auch wissen, wie die Blocks zusammenhängen, und daher wird es früher oder später auch mit dem Gleisplan vertraut gemacht werden. Momentan ist es alles ein großer Kreis, es wird von Block 1 bis 8 durchgefahren, und dann kommt die Lok wieder bei Block 1 rein.
Ebene 2 - Server
Nun zur Ebene zwei, zum Server. Der muss mal echt groß werden, und sehr stabil laufen bitte. Also keine Nullpointer Exceptions wenn geht ..
In meinem ersten Versuch geht es mir ja um die Kommunikation zwischen den Ebenen. Daher zeigt dieses Programm an, was es von der Hardware Zentrale raufbekommt, und es zeigt an, was es an die Clients versendet. Hier wird dann rechts auch ein Gleisplan angezeigt, wo man auch schon sehen sollte, wo sich die Züge befinden, wie die Weichen und Signale gestellt sind, und so weiter.
Was dieses Serverprogramm auch macht, ist das abarbeiten der Fahrpläne. Es hat eine Tickermaschine integriert, das Züge nach Fahrplan fahren lässt. Grundsätzlich ist das schon eingebaut, und es ist auch so eine Zehntelsekundenmaschine wie unten im Hardwaresimulator.
Für die Tests hab ich mir hier ein Eingabefeld gebaut, wo ich Kommandos an die Hardware senden kann. Zb HSSB03S50 - das heißt (H)ardware (S)et (S)peed für (B)lock 03 auf (S)peed 50. 50 von 100. Das muss der Simulator unten verstehen, und am Bildschirm anzeigen, und die Loks müssen dann wirklich mit 50 durch diesen Block durchgerechnet werden, und nicht mehr mit 20.
Ebene 3 - Train Dispatching System
Und dann kommt noch das Fahrprogramm, wo die Leute arbeiten werden. Das ist momentan noch im Babystadium, aber es spricht schon mit.
Eigentlich hab ich gar keine Zeit, dieses Posting zu erstellen. Weil mich aber fasziniert, wie hier viele Leute ihre Projekte dokumentieren, möchte ich das auch machen. Es passt schließlich auch zum Thema, und vielleicht ist das für den einen oder anderen ganz interessant bei so einer Entwicklung dabeizusein.
Ungefährlich ist das nicht, denn Softwareprojekte können, wie viele von uns wissen, auch scheitern.
Als nächstes muss ich auf jeden Fall den Gleisplan Editor entwickeln, denn ohne Gleisplan kann man der Simulation der Zugfahrten echt schlecht zusehen. Und Weichenstellungen kann ich da unten im Simulator nicht wirklich simulieren, wenn es keine Gleisbild mit Weichen gibt ...
Na gut, ich sollte wieder was hackeln .. bis bald!