v o l l a u t o n o m e   M o d e l l b a h n s t e u e r u n g

Diese Seite zeigt die Steuerung und Regelung einer einfachen Modellbahnanlage in Spur H0, mit 2 Abstellgleisen, 2 untereinander verbundenen Kreisen und dementsprechend 4 Wechselstrom - 16 Volt-Weichen.

Es lassen sich mit dem Programm und der Hardware Weichen stellen, einzelne Fahrstrecken stromlos schalten und die Fahrtrichtung wechseln.
Der aktuelle Zustand des Gleissystems wird grafisch angezeigt.

Die Anlage kann sowohl manuell, als auch vollautonom betrieben werden. Hier ist eine Stellautomatik realisiert, die das kollisionsfreie Fahren von 2 Zügen steuert, welche einen gemeinsamen Gleisabschnitt benutzen, siehe Abbildung unter.

Das Programm läuft auf einem 286 ohne Coprozessor mit 1MB RAM Hauptspeicher mit handelsüblicher Standardtastatur.
Die Hautpstromversorgung der Gleisanlage übernimmt ein Spielzeugtransformator ME 005, die der Elektronik der angeschlossene Steuer-PC.

Das dazugehörige Programm wurde in Turbo PASCAL 6.0 und Turbo Assembler 2.0 geschrieben.
Weiter unten auf dieser Seite ein kleiner Auszug. Das gesamte Programm ist ca. 12 A4 lang.


d e t a i l i e r t e   F u n k t i o n s b e s c h r e i b u n g

Die Weichen können über die Tasten 1, 2, 3, und 4 geschaltet werden (Proc.Stellen). Die einzelnen Streckenabschnitte lassen sich mit den Tasten Q, W, E und R ein- und ausschalten (Proc.Fahrstrom und Maske). Die Fahrtrichtung ist über die Taste F (Proc.Richtung) zu beeinflussen. Eine Assemblerroutine (Proc.helpget) übernimmt des kontinuierliche Abfragen der Tastatur, ohne das Programm zu stoppen.

Ist die Proc.Stellautomatik eingeschaltet, werden die Proc.Stellautomatik, Stillstand und Weiterfahrt durchlaufen. Hier werden die Weichen so gestellt, dass je ein Zug auf dem Innenkreis und ein Zug auf dem Aussenkreis fährt, ohne zu kollidieren.

Die 8 Reedrelais geben die momentane Position der Loks an (Proc.Schalterabfrage). Über die Variabele diffcou wird eine Zeitmessung simuliert. Werden die Reedrelais 4 und 6 bzw. 3 und 7 unterhalb eines kritischen Zeitfensters überfahren (Kollision), bleibt die Lok stehen, die zuletzt einen der Schalter überfuhr (Proc.Stillstand). Wiederum nach einer festgelegten Zeitkonstante wird die Weiterfahrt (Proc.Weiterfahre) freigegeben.

Unter den Loks ist jeweils mittig ein Magnet verbaut, welcher die Reedrelais auf den Schienen auslöst.
Die 8 Streckenabschnitte und Fahrtrichtungen werden über Relais angesteuert, sowie mit einer kleinen Elektronik und einer einfachen in den ISA-PC-Slot verbauten Steckkarte, die der Stromversorgung der Elektronik dient.

Die Steuerelektronik zwischen den seriellen/parallelen Schnittstelle des PC und der Gleisanlage wurde mit Transistorschaltungen, Relais und den ICs CD4094BCN und TC4094BP aufgebaut.

Es werden 2 serielle Ports zur Datenausgabe (COM1 und COM2) und 1 Parallelport (LPT1) zur Dateneingabe benutzt. In der Proc.Initialisieren werden Variablen auf Null gesetzt, die Grafik aufgebaut (Proc.Grafik), die Schnittstellen eingerichtet (Proc. Oeffnen, Ausgeben, Senden) sowie das gesamte System (Gleisabschnitte und Weichen) in einen definierten Anfangszustand gebracht.
Eine Endlosschleife die ständig durchlaufen wird, (ca. 190 mal pro Sekunde) übernimmt die Tastaturabfrage, ließt eingehende Signale der Reedrelais und regelt den Fahrbetrieb (Proc.Tastenabfrage).

Wird ein Reedrelais bei angestellter Stellautomatik überfahren, ertönt durch die Proc.Pip ein Signalton. In der Proc.Automatiktest wird geprüft (Variablen h[12]-[h14]) ob ein Zug im Zustand HALT ist, und in diesem Fall nicht zugelassen, dass die Weichenstellautomatik außer Betrieb gesetzt wird.

Über die Taste M kann die Weichenstellautomatik ausgeschaltet werden (Proc.Weischaltung). Die Proc.Registrierung ist eine Unterproc. der Proc. Stellautomatik. Hier wird in einem Array die Reihenfolge und Nummer der überfahrenden Reedrelais gespeichert, zum kollisionsfreien Fahrbetrieb.

Beim Beenden des Programms (Taste SPACE) wird die Anlage ebenfalls in einen definierten Endzustand gebracht (Proc.Schliessen, Beenden).



die Anlage selbst, leider fehlen 2 Weichen...


und die Grafikausgabe des PASCAL Programms Anlage groß...


mit zugehöriger Elektronik



Dieses Programm funktioniert im Prinzip gleich dem Obigen, allerdings in einer deutlich kleinen Anlage.
Zwei Loks können autonom jeweils von links nach rechts fahren.
Die Auswahl des Zielgleises erfolgt via Zufallsgenerator.

die Anlage selbst...


und die Grafikausgabe des PASCAL Programms Anlage klein...


mit zugehöriger Elektronik





der Trafo ME 005



{-------------------Programmbeginn----------------------------------}
program modellba;

{-------------------Bibliotheken laden------------------------------}
uses
crt,
graph;

{-------------------Variablen- und Konstantendefinition-------------}
const
ba=$3f8;
ba1=$378;

var
diffcou,difft:longint;
cou,grtr,treiber,pot,tv:integer;
wei,scha,help:char;
masch,rcou:byte;
x : array [1..8] of byte;
h : array [0..14] of byte;
regresch : array [1..100] of byte;
regt :array [1..100] of longint;

{--------------------H A U P T P R O G R A M M---------------------}
begin
initialisieren;
repeat
begin
    helpget;
    tastenabfrage;
    delay(5);    {Erholungspause}
end;
until help=' ';
beenden;
end.
{---------------------Schnittstellen oeffnen------------------}
procedure oeffnen;
begin

port[$2fb]:=128; {Baudeingabe aktivieren}
port[$2f8]:=96; {Baudrate - LSB, 1200 Baud}
port[$2f9]:=0; {Baudrate - MSB}
port[$2fb]:=3; {8 Bit, no Parity, 1 Stop}
port[$2fc]:=3; {DTR =1, RTS = 1}
end;
{---------------------permanente Tastaturabfrage ohne Programmstopp---------------------}
procedure helpget;
begin

asm
    mov ah,6
    mov dl,255
    int 21h
    mov masch,al
end;
help:=chr(masch);
end;
{-------------------komplettes System initialisieren-------------------------------}
procedure initialisieren;
begin
oeffnen;
ausgeben(170);
delay(100);
ausgeben(0);
senden(0);
for cou:=0 to 14 do h[cou]:=0;
for cou:=1 to 100 do
    begin
        regresch[cou]:=0;
        regt[cou]:=0;
    end;
scha:='x';
diffcou:=0;
rcou:=0;
grtr:=5;
treiber:=0;
initgraph(treiber,grtr,'c:\sprachen\tp\bgi');
grafik; {herc 720*348}
sound(440);
delay(300);
nosound;
end;
-----------------Schnipp-----------------
...und noch ganz viel Restprogramm...
-----------------Schnapp-----------------

{---------------------komplettes System beeenden------------------------}
procedure beenden;
begin

ausgeben(0);
senden(0);
schliessen;
closegraph;
end;
Last modified : 27.März.2001; Roland Leisering