Digitalbahn

Hallo liebe Modellbahnfreunde. Auf dieser Seite werde ich erklären, wie man einen Einstieg in die Entwicklung einer Modellbahnsteuerung bekommt. Meine Software arbeitet mit der Intellibox der Firma Uhlenbrock zusammen. Entwickelt wurde mit einem Pentium II, 300MHz unter Visual C++ dotNET. Screenshots der Software sind zu finden unter http://www.m-haaser.de/index.html in dem Untermenü "Die Software / digitale Details".

Benötigte Informationen: Auf den Webseiten von Uhlenbrock findet sich leicht versteckt hinter dem Menübaum Homepage --> Digitale Produkte --> Steuern --> Intellibox --> Interface Protokoll der Link für die Beschreibung des Schnittstellenprotokolls "P50X". (Diese Angaben sind von Dezember 2003 und können jederzeit geändert werden.) Leider steht keine deutsche Version zur Verfügung, aber nach eingehender Lektüre wird das Prinzip halbwegs klar.

Zum leichteren Einstieg habe ich mir eine Demoversion einer Modellbahnsteuerungssoftware installiert und dann mit einer Demoversion einer Schnittstellen-Monitoring-Software den Datenverkehr auf der Schnittstelle mitgeloggt.

Eingesetzte Modellbahnsoftware: Win-Digipet, erster Eindruck von mir: Schöne Software, intuitiv zu bedienen und läuft stabil. Demoversion ist leider auf 2 Loks begrenzt.

Eingesetzte  Monitoring-Software: Serial Monitor von HHD Software, http://www.hhdsoftware.com, sehr empfehlenswert!!! Demoversion ist zeitlich beschränkt.

Im folgenden werde ich den Start einer Verbindung zeigen. Es ist ein Auszug aus einem Monitoring-Mitschnitt. Die Fremdsoftware macht noch ein paar Dinge mehr, deren Bedeutung mir aber verborgen blieb, weshalb ich sie mir dann auch gespart habe. Die blauen Zeilen sind die Anfragen, also PC --> Intellibox, die roten sind die Antworten, also Intellibox --> PC.

  Ansicht hexadezimal Ansicht ASCII
Request 58 0D X. 
Answer:  (+0.2002880000 seconds) 0D 5D  .] 
Request:  (+0.4005760000 seconds) 78 62 31 39 32 30 30 0D   xb19200.
Answer: 1 (+0.0500720000 seconds) 42 61 75 64 20 72 61 74 65 20 63 68 61 6E 67 65 64 21 0D 5D Baud rate changed!.]
Request:  (+0.7911376000 seconds) 78 72 74 31 30 0D xrt10. 
Answer:  (+0.0200288000 seconds) 52 53 2D 32 33 32 20 43 54 53 20 6C 69 6E 65 20 61 75 74 6F 2D 6F 6E 20 3D 20 31 30 0D 5D RS-232 CTS line auto-on = 10.] 
Request:  (+0.0000000000 seconds) 78 73 65 30 0D  xse0. 
Answer:  (+0.0200288000 seconds) 53 38 38 20 63 6F 6E 74 69 6E 75 6F 75 73 20 72 65 61 64 69 6E 67 20 64 69 73 61 62 6C 65 64 20 28 65 6E 64 20 66 6C 61 67 20 76 61 6C 75 65 20 69 73 20 7A 65 72 6F 29 0D 5D S88 continuous reading disabled (end flag value is zero).] 
Request:  (+0.2002880000 seconds) 78 6D 74 32 0D xmt2.
Answer:  (+0.0200288000 seconds) 4D 69 6E 2C 20 4D 61 78 20 6B 38 33 20 4F 4E 20 74 69 6D 65 20 28 69 6E 20 35 30 20 6D 73 20 75 6E 69 74 73 29 3A 20 32 2C 20 31 30 30 0D 5D Min, Max k83 ON time (in 50 ms units): 2, 100.] 

Zwischen den Anfragen lasse ich 600ms Zeit verstreichen, die Antwort werte ich nicht aus. Das ganze läuft sehr stabil, es gab bei mir noch nie Probleme oder Abweichungen im Ablauf dieses "Start-Stapels". Am Ende wird direkt der Rückmeldedekoder ausgelesen und der Eingangspuffer für den Rückmeldedekoder in der Intellibox geleert. Und nicht zu vergessen: Alle Loks defaultmässig stoppen!

S88 abfragen 58 C8 X.
S88 Puffer leeren 78 CB x.
Lok stoppen 78 80 01 00 20 60 ....

Die Erläuterung zu den Befehlen werden am einfachsten deutlich, wenn Ihr in meinem Quellcode in der Datei Interface.cpp etwas stöbert. Der gesamte Quellcode liegt gezippt hier. Halt! Erst noch ein Hinweis: Ich übernehme für garnix Verantwortung!

Die Software teilt sich in einen ganzen Haufen einzelner Dateien. Die einzig wichtige ist die Datei Interface.cpp. Zum Beispiel zeigt die Funktion void CInterface::SendVelocityTelegram(int LokIndex), wie Lok, Fahrtrichtung und Funktionstaster gesetzt werden.  Die Funktion void CInterface::S88Port(int p) decodiert die S88-Rückmeldesignale und löst die nötigen Aktionen aus. Die Funktion void CInterface::SwitchDevice(int DevAdr, int Mode) schaltet Signale und Weichen und erwartet nur die Weichenadresse und die Angabe, ob bei Handbetrieb die rote oder die grüne Taste manuell betätigt würde. Es ist also eine riesige Fundgrube an Funktionen, die hier ausgeschöpft werden kann. Nur die Programmiersprache C++ sollte man halbwegs beherrschen.

Vor dem ersten Start ist die Datei "Digitalbahn.ini" in das Windows-Verzeichnis zu kopieren! Diese Datei beinhaltet alle Eigenschaften der Loks und kann leicht auf den eigenen Fuhrpark angepasst werden.

Wenn jemand mangels Kommentare an dem Inhalt verzweifeln sollte, darf er mir gerne mailen an post#m-haaser.de. Im Moment möchte ich aber nicht mehr Arbeit in die Erklärung stecken, da ich nicht weiss, ob es überhaupt jemanden interessiert.