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.
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
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).
{-------------------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, insgesamt ca. 12 A4 Seiten...
-----------------Schnapp-----------------------------------------
{---------------------komplettes System beeenden------------------------}
procedure beenden;
begin
ausgeben(0);
senden(0);
schliessen;
closegraph;
end;
Last modified : 27.März.2001; Roland Leisering