• » Abkürzungen
  • » Kontakt
  • » Datenschutz
  • » Impressum
  • » English French German Italian

SaMoba Software

Das SaMoBa Steuerprogramm

Die Software ist in 2 wesentliche Steuer-Programmpakete geteilt:
  1. der echtzeit kritische Teil: ich nenne es DOS-Programm und es läuft speicherresident im DOS Real Mode mit einem (gekauften) Echtzeit Kernel (RTKernel von der Firma On-Time), Windows bekommt die Priorität des terminierten Hauptprogramms
  2. der zeitunkritische Teil: dieser Teil läuft im DOS Protected Mode von Windows 98 und kommuniziert mit dem Real-Mode DOS Programm auf 2 Arten
  • wenn zeitkritisch: Interrupt-gesteuert über Interprocess-Communication IPC (Processor Register tranportieren Daten)
  • wenn nicht zeitkritisch: polling-gesteuert über einen Shared Memory Bereich
Beide Programmpakete sind in Pascal geschrieben, der DOS-Teil in Turbo-Pascal für DOS (ich benutze immer noch TurboPascal 6.0 für DOS) und der Windows Teil in einem damals neuen Turbo-Pascal für Windows , das Borland dann nicht mehr weiterentwickelte und stattdessen Delphi herausbrachte.


pascal dos    pascal windows
DOS-Pascal                Windows-Pascal

System Schematik
Bild: System Schematik

Im wesentlichen hat das Programmsystem diese Aufgaben
  1. Digitale 0/1 Zustände von der Moba lesen und, in der anderen Richtung, zur Moba schicken (Aufgabe des DOS Teils)
  2. die Steuerprogramm(e) ausführen (zyklische und nicht-zyklische)
  3. Befehle von Tastatur und Maus auswerten und dem Steuerprogramm übergeben
  4. das Gleisbild anzeigen
  5. Hilfsfunktionen, wie zB Datensicherung auf Festplatte

Einige Konzepte der Datenkommunikation:
  1. Alle Inputs / Outputs von und zur Anlage laufen über den Echtzeit Teil (DOS Teil), nur der spricht die ISA-Karte an
  2. Die ISA Slotkarte und alle Input/Output Karten werden über Port I/O angesprochen (ein typischer "Port", den alle kennen, ist z.B. der PC Drucker); in den frühen Versionen hatte ich dafür memory-mapped IO benutzt, um zu Testzwecken einige Steuerprogramme unter Delphi laufen zu lassen, das kein memory-mapped IO unterstützt (soweit mir damals bekannt war).
  3. Das Lesen des Besetztzustands aller Blockstrecken, ihre Auswertung und der Output der Lok-Geschwindigkeit werden zyklisch in 20 msec Intervallen gemacht. Damit überfahren Loks ihre Stop-Stellen nur um 1-2 cm (wenn sie zuvor auf Langsam-Fahrt im Bremsabschnitt des Blocks abgebremst hatten).
  4. Die System Steuerung und das Gleisbild werden vom zeitunkritischen Teil ausgeführt.


zurück

Initialisierug - Es geht los

Am Anfang jedes Programms gibt eine Funktion, die sich "Initialisierung" nennt. Es müssen Anfangstätigkeiten gemacht werden, sonst funktioniert das gesamte Programm nicht richtig. Zum Beispiel
  1. die Ein- / Ausgabekarten müssen konfiguriert werden; dem Chip 8255 auf den Karten muß gesagt werden, ob sie als Ausgabe oder Eingabe Karte arbeiten sollen
  2. Alle Ausgänge aller Ausgabekarten werden in einen sicheren Zustand gesetzt, sodass kein Zug unkontrolliert losfährt
  3. Es wird der alte Zustand der Anlage von der Festplatte des PC in das Steuerprogramm zurückgelesen
  • wo stehen welche Loks und welche Fahrpulte sind ihnen zugeordnet (das ist eigentlich die wichtigste Info die von der Platte gelesen werden)
  • die Fahrpläne / Umlaufdaten für jeden Zug werden gesetzt (ebenfalls von Platte gelesen)
4. Der Belegtzustand der Gleise wird aktuell gelesen (also nicht von Platte). Das ist möglich, weil ich statische Gleisbesetztmelder verwende (=Strom-Widerstandsfühler und keine Kontaktgleise  oder SRKs).


A) Initialisierungen im DOS Programm
  1. Das DOS Programm wurde schon beim Booten des PCs geladen und gestartet, es bleibt aktiv während Windows 98 bootet.
  2. alle Weichenlagen werden aktuell gelesen (nicht verstellt), alle Signale auf Hp0 gestellt.
  3. Alle Besetztmelder werden gelesen (periodisch).
  4. Die Eingangsspannung aller Digital Potis wird durch ein Relay physikalisch abgeschaltet,
  5. alle Fahrpulte (es gibt 4 davon) werden auf Null gestellt, dadurch bewegt sich nichts, alle Züge stehen.

 
DOS Bildschirm  DOS Bildschirm
Bild: Screenshots der Initialisierung des DOS Programms



B) Initialisierungen im Windows Programm

  1. In Windows wird manuell das Steuerprogramm gestartet
  2. Das Shared Memory wird initialisiert, und ein Kommunkations-Test mit dem DOS Programm durchgeführt.



C) Das Gleisbild-Stellpult auf dem Bildschirm
Das Steuerprogramm zeigt zZ 5 Unterfenster:

Windows Bildschirm
Bild: Screenshot des Windows Steuerprogramms

Fenster 1 (Gleisbild):
Das Streckengleisbild
mit einem Streckenverlauf der gesamten Anlage für Zugfahrten,  Rangiergleise werden nicht gezeigt
  • jeder Block ist durch einen numerierten (=Blocknummer)Tastknopf anklickbar
  • belegte Blöcke werden
    • rot angezeigt, wenn kein Fahrpult zugeteilt ist
    • farbig (gelb, blau, grün, braun) angezeigt, wenn eines der 4 Fahrpulte zugeteilt ist
  • wenn ein Block einem Fahrpult zugeteilt ist, wird die Stellung der/des Blocksignale(s) durch kleine rote, grüne, gelbe Punkte dargestellt
  • Weichenstellungen werden angezeigt
    • gelb, wenn die Weiche in dieser Stellung nicht verriegelt ist
    • blau, wenn sie verriegelt ist
  • ein Haupttaster (das Hp0/Hp2 zeigende Signal) als Start/Nothalt Schalter
  • kleine Richtungspfeile, die die Stellung der Polwenderelais anzeigen (soweit für den Streckenabschnitt vorhanden)
  • durch Rechtsklick auf eine Blocknummer erscheint ein Dialogfenster, in dem alle Parameter der Lok in diesem Block gelesen und geändert werden können

Fenster 2 (Automatik):
hier werden angezeigt in 4 Zeilen (je eine Zeile pro Zug)
  • der Umlauf, 
  • die Signalstellung des Blocks in dem der Zug sich aufhält wird im Umlauf rot / grün hinterlegt,
  • Lokname, Fahrstufe, Zugtyp, Zuglänge, Kennwerte des PWM-Fahrreglers

Fenster 3 (Lokbilder):
für jeden der 4 Züge wird ein Bild der Zuglok gezeigt

Fenster 4 (Rangieren):
das Rangiergleisbild
  • es werden alle Gleise dargestellt in denen rangiert werden kann
  • Fahrstraßen werden mit Start-Ziel Tasten manuell gestellt
  • da mit nur einem Fahrpult rangiert wird, ist immer nur eine Fahrstaße aktiv
  • bevor rangiert wird, werden alle Blocksignale auf der Strecke und alle Hauptsignale in Bahnhöfen auf Hp0 gestellt und es muss abgewartet werden bis alle Züge angehalten haben
  • dem Zug mit Fahrpult #1 wird das Fahrpult während des Rangierens weggenommen und steht Rangierloks zur verfügung; nach dem rangieren wird das Fahrpult #1 dem Zug wieder automatisch zugeteilt
  • Rangierfahrten werden ohne irgendwelche Block-Sicherungen gemacht, weil keine Zugbegegnungen möglich sind (Züge halten an Hp0 Signalen und es rangiert immer nur eine Lok)

Fenster 5 (Monitor des DOS-Programms):

Dieses Fensters dient zur Überwachung und Fehlersuche. Es werden die rohen Bitformate gezeigt, wie sie zu den Ausgabekarten geschickt werden, bzw. von den Eingabekarten gelesen werden; das unterstützt das Testen und die Fehlersuche.
Hier werden periodisch angezeigt:
  • alle gelesenen und ausgegebenen 0/1 Signale der Interface Karten (im Rohzustand, unkalibriert),
  • Parameter von den DOS-Programmen, zB Programmzähler, Kommandozähler,
  • Letzte Adressen der Multi- / Demultiplexer der Weichen- und Signal-Kommandos,
  • letztes Kommando vom Windows- an das DOS-Programm, mit Kommandozähler und Acknowledge,
  • und noch einige Parameter mehr, die den inneren Zustand des DOS Programms anzeigen,
  • die Ausgabebits zu den Z-Schaltungen sind farblich den 4 Zugfarben zugeordnet.





zurück

Betrieb

D) Betriebsbeginn
Mit einem Tastendruck (Taste neben dem großen roten Signal auf dem Bildschirm) wird die Anlage gestartet, der Automatik-Betrieb beginnt, die Züge folgen ihrem Umlaufplan, FaStr werden entsprechend automatisch gestellt --- die Züge beschleunigen langsam.

Das Streckengleisbild Fenster

                                 

Fenster für Streckenfaht

 Bild: Das Fenster für Streckenfaht

Dies ist das Hauptfenster der Steuerung.
  • jeder der 4 Züge hat seine eigenen Farbe (1=blau, 2=grün, 3=lila, 4=braun)
  • Es wird der Belegtzustand aller Gleisabschnitte angezeigt (wird aus den Messungen der Gleisbesetztmelder abgeleitet),
  • mit Hilfe der gestellten Fahrstraßen und der Zuginformation kann der Aufenthaltsort jedes Zuges angezeigt werden,
  • Fahrstraßen können manuell mit der Tastatur Maus mit Start- und Zieltasten gestellt werden, dazu hat jedes Gleis einen Button; 
  • bevor eine Fahrstraße gestellt wird (egal ob manuell oder von der Automatik), wird automatisch überprüft ob ALLE Weichen und Schutzweichen des Fahrwegs entriegelt sind,
  • Weichen werden nacheinander gestellt; das entlastet die Netzteile,
  • wenn eine Fahrstraße gestellt ist, werden alle ihre Weichen (und die Schutzweichen gegen Flankenfahrten) verriegelt, die Weichenstellung wird blau angezeigt und die Fahrstraße wird farbig ausgeleuchtet (die Farbe entspricht dem Fahrpult),

Das Gleisbild Fenster hat mehrere Dialogfenster, die nur bei Aufruf besonderer Funktionen öffnen, zB
  • ein Rechtsklick auf ein Gleis, das vom Besetztmelder als "besetzt" gemeldet ist, öffnet einen Dialog zum Ansehen und Ändern der Parameter der Zuglok
  • für das manuelle Stellen einer Weiche oder eines Signals
  • für das manuelle Öffnen und Schließen von Bahnübergängen
  • zum Ändern / Setzen der Fahrpultzuteilung eines Zuges ohne die lokspezifischen Parameter zu ändern
  • zum Testen der Kommunikation zwischen DOS- und Windowsprogram durch Senden von Testkommandos
  • zum Konfigurieren der automatischen Zugumläufe

Blockbetrieb und FahrStraßen

Grundsätzlich wird im Blockbetrieb gefahren, dabei sind die Signale auf der Anlage nur dekoratives Beiwerk, sie haben KEINE Steuerfunktion.
Fahrtstrecken werden in FaStr geschaltet.
FaStr und ihre Weichen werden verriegelt (funktionell in der Software, nicht physikalisch) bevor die Fahrt freigegeben wird.
Ein Block wird erst wieder freigegeben wenn
- die Zugspitze (kann auch ein Steuerwagen bei Wendezügen sein) am vorderen Signal angekommen ist UND
- der rückwärtige Block frei ist (der Zug also keinen Wagen verloren hat... dazu ist die letzte Achse mit Widerstandslack überbrückt oder der letzte Wagen/Lok ist ein Stromverbraucher)

Bremsen und Beschleunigen
Strecken-Blöcke haben 3 Abschnitte (Fahren, Bremsen, Signalhalt).

Beim Fahren werden periodisch (jede 20-30 msec) alle Gleisabschnitte gelesen.

Fährt ein Zug auf ein Hp0 Signal zu, wird beim Einfahren in den Bremsbereich die Fahrspannung vom augenblicklichen Wert langsam linear runtergefahren auf eine "Kriechgeschwindigkeit", bei Erreichen des Signals wird schell der gesamte Block auf null Spannung gesetzt. Dadurch werden alle Züge, auch die mit einer Schiebelok am Ende des Zuges, punktgenau vor dem Hp0 Signal angehalten:
  • Schaltet das Signal von Hp0 auf HP1/2, wird die Spannung langsam linear hochgefahren
  • Schaltet das Signal von Hp0 auf Hp1/2 noch während der Zug auf das Signal zufährt und abbremst, dann wird von dem aktuellen Spannungswert angefangen die Spannung wieder erhöht. Damit wird ein gleichmäßiges Fahren ohne Spannungssprünge erreicht.

Alle Brems- und Anfahrbeschleunigungen, die Kriechgeschwindigkeit und die Maximalgeschwindigkeit werden lokspezifisch vom Steuerprogramm eingestellt.

Die Automatik
Jedem Zug wird ein "Umlauf-Plan" eingegeben (Fenster "Automatik"), das ist eine Reihenfolge von Block-Nummern, die nacheinander durchfahren werden. Ist der letzte Block erreicht, wird mit der Reihenfolge automatisch wieder gestartet.
In einem Untermenü können vordefinierte Umläufe aus einer Liste ausgewählt werden und manuell geändert werden.

Fahrstraßen werden in dieser Betriebsart von den Zügen selbst gestellt, natürlich immer unter Blocksicherung.
Die Ereignisse, bei denen geschaltet wird, werden von den Änderungen der Besetztmelder abgeleitet; es werden alle Besetztmelder, auch die innerhalb eines Blockes ausgewertete.
Ich verwende keinerlei Kontaktgleise oder SRKs sondern nur die Block-Besetztmelder.

Das Fenster "Automatik"
Hier wird der Zustand der Automatik für jeden der 4 Züge periodisch angezeigt:
- die augenblickliche Gleispannung (Counter 0 - 15)
- zugeteilte Blöcke (rot / grün hinterlegt)
- die Signalstellungen in den zugeteilten Blöcken (rot / grün hinterlegt)
- ZugTyp-Parameter: Baureihe, F/D/G/N für Fern-, D-, Güter-, Nahzug .... E/D/V für E-, Dampf- oder Diesel-Lok, und Zuglänge k/n/l (für kurz, normal oder lang)

Automtik Fenster
Bild: Das Automtik Fenster


zusätzliche Automatiken
In Bahnhofs- und Schattenbahnhofsgleisen können Züge auf andere Züge warten. Trifft der erwartete Zug auf einem Nachbargleis ein, wird er am Signal angehalten und sein Fahrpult dem wartenden Zug übergeben, der dann mit seinen eigenen Parametern und seinem eigenen "Umlauf" losfährt.

An Bahnhöfen mit zu kurzen Bahnsteigen, halten Züge mit "Zugart= lang" am Einfahrtsignal und fahren durch den Bahnhof ohne Halt.
"Kurz-Züge" können so programmiert werden, daß sie an langen Bahnhofgleisen nicht bis zum Signal am Ende des Bahnsteigs vor fahren, sondern vorher halten an der Trennstelle zwischen Fahr- und Brems-Abschnitt.
Was nicht der Wirklichkeit entspricht, aber toll auf der MoBa ist: Züge suchen sich in Bahnhöfen selbst ein freies Bahnsteig-Gleis.
In den Bahnhöfen können Gleise gesperrt werden, z.B. wenn dort Wagen stehen, auf die der Besetztmelder nicht anspricht , weil sie kein Stromverbraucher ist sind.

Handbetrieb/Mischbetrieb
Es kann in die Automatik eingegriffen werden:
  • jedes Fahrpult ist ein Digitales Poti, dessen Max Spannung ich manuell an einem Poti einstellen kann, dadurch fahren Züge in ihrer Maximalstufe nicht schneller als die Automatik vorgibt, sondern nur langsamer oder gleich.
  • die manuell fahrenden Züge reihen sich in die automatisch fahrenden Züge ein mit Blockkontrolle
  • ein Fahrpult kann manuell einem Zug weggenommen werden (er bleibt dann stehen) und einem anderen Zug jederzeit neu zugeteilt werden

Rangieren
Wenn in einem Bhf rangiert werden soll, dann
  • wird das Rangier-Fenster geöffnet, es zeigt alle Gleise in denen rangiert werden kann,
  • halten alle Züge automatisch am nächsten Signal und der Bahnhof wird für Automatik verriegelt,
  • wird mit dem Handregler rangiert; dazu wird eines der 4 Fahrpulte ausgewählt und der Rangier-Lok zugeteilt.
Mit einem Mausklick auf einen Menü-Button wird der Rangierbetrieb beendet und das Rangier-Fenster geschlossen.
Vor Strecken-Signalen wartende Züge beschleunigen dann langsam wieder.

zurück

Dialog Lokparameter

Da meine Loks keine Decoder enthalten, werden die Lokparameter nicht in der Lok sondern im Steuerprogramm gespeichert.
Z.B. bevor es losgeht: eine stehende Lok wird erkannt (d.h. der Besetztmelder hat angesprochen) aber sie hat noch keine Parameter, dann sehe ich auf das Gleis, wähle im Programm aus einer Liste von Loks die betreffende Lok aus und teile ihr ihre spezifischen Parameter zu.

Lok Parameter werden in einem speziellen Dialog-Fenster eingestellt. Diese sind:
  • Lok-Typ (Dampf, E-Lok, Diesel)
  • Lok-Baureihe (z.B. BR 01, E-103) ... allen Loks sind Bilder hinterlegt
  • Fahrparameter (Vmax, Vmin, Trägheit); bei den neuen PWM-Reglern kommen noch die beiden PWM-Parameter PWM-Frequenz und PWM-Impulshöhe hinzu
  • Zuglänge (kurz, normal, lang)
  • Zugart (Nahzug, Fernzug, Güterzug)
  • der "Fahrplan": für jeden Zug eine Reihenfolge von Blocks die automatisch durchfahren werden sollen


Fenster für Zuteilung der Lok- & Zugparameter zu einem Zug
Bild: ALT Fenster für Zuteilung der Lok- & Zugparameter zu einem Zug (ohne PWM Regler)

dialog-pwm4
Bild: NEU Fenster für Zuteilung der Lok- & Zugparameter zu einem Zug (mit PWM Regler)
 
Für alle Loks, die ich besitze, sind die Parameter bereits als Defaults im Programm codiert, können aber während des Betriebs geändert werden.

Wenn nun eine Lok mit ihren zugeteilten Parametern losfährt, weiss das Programm, wohin sie fährt (es hat ja die FahrStr gestellt) und teilt damit dem nächsten Block die gleichen Parameter zu. Damit fahren die Parameter praktisch mit der Lok durch die Anlage. Gehen einer Lok ihre Parameter mal verloren, weil sie wegen fehlerhafter Weichenstellung in ein falsches Gleis gefahren ist, bleibt die Lok im neuen Gleis stehen. Sie fährt erst weiter, wenn ihr Parameter und ein Fahrpult wieder manuell zugeteilt worden sind.

Logging


Während des Betriebs wird in einem speziellen Windows Fenster ein Protokoll ausgeschrieben, zum Beispiel:
  • wichtige Meldungen und Daten während der System-Initialisierungen
  • alle Kommandos vom Windows zum DOS Programm mit ihren Acknowledge-Rückmeldungen
  • wichtige Meldungen der verschiedenen Windows-Programme

Dieses Protokoll wird auch ständig auf die Festplatte geschrieben und kann mit einem Editor ausgewertet werden zur Fehlersuche.

Logging-Fenster
Bild: Screenshot Logging-Fenster

zurück