Schalten mehrerer Magnetartikel (z.B. Weichenstraßen) |
Als ich meine erste Weichenstraße schalten wollte, sah der Quellcode wie folgt aus :
Prozedur |
... ' --- Weiche 1 schalten ' ---
Weiche 2 schalten ' ---
Weiche 3 schalten ' ---
Magnetartikel abschalten ... End Sub |
Sonderbarerweise tat sich nicht
viel, keine der Weichen zeigte auch nur die geringste Reaktion.
Zuerst glaubte ich, die Instruktionen würden nicht korrekt
gesendet.
Der Trace zeigte jedoch, das die Befehle jedesmal
einwandfrei übertragen wurden.
Ich habe dann einen Haltepunkt
auf die markierte Zeile gesetzt und das Programm im Einzelschritt-Modus
abgearbeitet und siehe da,
alle Weichen schalteten plötzlich wie erwartet.
Es konnte folglich nur ein Zeitproblem sein. Und genau das ist es
auch.
Erklärung:
Sowie die Instruktion für die 1. Weiche von Interface empfangen
wird, sendet die CU den Schaltstrom an die betreffende
Weiche.
Dieser fließt nun solange, bis entweder
Und hier genau liegt das Problem :
das Übertragen einer Instruktion dauert bei 2.400 b/s und 11
Bits ca. 4 Millisekunden (!).
Das heißt, nach 4 mSec kommt bereits die nächste Instruktion.
Und damit ist die Zeit in welcher der Schaltstrom fließt,
viel zu kurz.
Wir müssen folglich dafür
sorgen, das die jeweils nachfolgende Instruktion etwas verzögert
gesendet wird.
Dazu können wir die Funktion oder Prozedur SLEEP.
verwenden
Dies ist eine allg. API-Funktion und steht damit allen Windows-Programmen
zur Verfügung
Wir finden sie in der WIN32API.TXT und können
sie mittels dem API-Viewer leicht in unser Programm einbinden.
Public Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long) |
SLEEP wartet die angegebene Zeit und setzt dann das Programm fort.
Beispiel:
SLEEP (500) unterbricht den Programmablauf für 500
Millisekunden.
Unser ursprünglicher Quellcode sieht dann wie folgt aus
Prozedur |
... ' --- Weiche 1 schalten ' ---
Weiche 2 schalten ' --- 400
mSek warten ' ---
Weiche 3 schalten ' --- 200
mSek warten ' ---
Magnetartikel abschalten ... End Sub |
Die Prozedur Delay |
Die Funktion SLEEP ist sehr einfach
einzusetzen, hat aber auch einen nicht zu unterschätzenden Nachteil: solange ein SLEEP
-Aufruf aktiv ist, wartet unser Programm, bis die Funktion beendet wird.
Das kann bei zeitkritischen Abläufen problematisch werden.
Besser ist in solchen Fällen die API-Funktion
Public Declare Function GetTickCount Lib "kernel32" () As Long |
GetTickCount gibt die Anzahl der
Millisekunden zurück, die seit dem Start von Windows vergangen sind.
Da wir aber nicht jedesmal die Differenz zwischen aktuellem Zeitpunkt und
gewünschter Zeitspanne ausrechnen wollen, schreiben wir (wieder mal ;-) ) eine
kleine Routine:
Prozedur Delay (mSekunden) |
Public Sub Delay(ByVal
mSekunden As Long) |
Der Prozedur wird die gewünschte Zeitspanne in
Millisekunden übergeben,
in der Prozedur werden diese zur aktuellen Zeit hinzuaddiert.
Dann wartet die Prozedur, bis dieser Zeitpunkt erreicht ist, erlaubt aber
währenddessen anderen Ereignissen Zugriff auf das System
Überwachung der Digitalspannung |
Oft ist es von Interesse zu
erfahren, ob die Digitalspannung anliegt oder ob diese durch z.B.
Kurzschluss von der CU
abgeschaltet wurde.
Eine solche Überwachung lässt
sich leicht durch ein Relais realisieren.
Das Relais wird einfach an die Digitalspannung geschaltet und
schaltet seinerseits durch einen Kontakt
den Eingang eines Rückmeldemoduls.
Allerdings belastet das Relais den
Ausgang der CU, d.h., es verbraucht einen kleinen Teil des
Digitalstromes.
Diesen Verbrauch kann man jedoch durch die Verwendung eines
hochohmigen Relais auf ein zu vernachlässigendes Maß reduzieren
oder man wählt statt eines Relais einen Opto-Koppler.
Anschlussbeispiele für märklin -Hobby-Signale |
Die neuen Hobby-Signale sind von
exzellenter Qualität und dabei sehr preiswert.
Ich habe mir auch gleich ein Hauptsignal zugelegt. Was mir jedoch
nicht gefällt und auch nicht in mein Anlagenkonzept passt, ist
das zugehörige Schaltpult.
Für alle, die ohne ein solches Pult auskommen wollen oder müssen,
im folgenden eine einfache Schaltung zum Betrieb der Hobby-Signale.
Behandeln wir erstmal das reine Signalbild:
die Leuchtdioden (LED) im Signal sind antiparallel
geschaltet, d.h., je nach Polung der angelegten Gleichspannung
leuchtet die rote oder die grüne LED. Nun könnte man ein Relais
mit zwei Umschaltern verwenden und Gleichstrom mal in der einen
und mal in der anderen Richtung durch das Signal schicken. Das
bedeutet aber, das wir eine Gleichspannungsquelle vorhalten müssen.
Es geht viel einfacher:
wir verwenden Wechselstrom ! (und der steht uns ja mit 16 Volt
reichlich zur Verfügung)
Da, wie bereits geschildert, die LEDs antiparallel geschaltet
sind, leuchten beim Anlegen von Wechselspannung beide
LED.
Das ist natürlich nicht in unserem Sinne und wir brauchen eine Lösung,
um entweder die rote oder die grüne LED
leuchten zu lassen.
Am einfachsten läßt sich das mit Dioden erreichen.
Im folgenden Schaltbild sorgt der Umschalter U
in Zusammenarbeit mit den Dioden D1 und D2
für die ordnungsgemäße Darstellung des Signalbilds.
Die Umschaltung könnte dabei mit einem einfachen,
handbetriebenen Umschalter oder mit einem Relais erfolgen.
Schaltung 1
Bedenken, die LEDs könnten wegen
der unterdrückten Halbwelle flackern, sind völlig grundlos, das
jeweilige Signalbild leuchtet konstant und flackerfrei.
Wie bereits erwähnt, erreichen wir mit der o. a. Beschreibung nur
die korrekte Darstellung des Signalbilds, wer zum Anhalten der Züge
auf einen stromlosen Gleisabschnitt angewiesen ist, muß die
Schaltung erweitern. Am einfachsten geht das mit einem Relais,
welches mit einem Arbeitskontakt (Schließer) versehen ist.
Schaltungsbeschreibung:
Bei 'Halt' fließt der Lichtstrom über den
oberen Kontakt des Umschalters U zur Diode D1
und über die rote LED nach Masse.
Wird auf 'Fahrt' umgeschaltet, fließt der Strom
über den unteren Kontakt des Umschalters u. a. zur Diode D2
und über die grüne
LED nach Masse.
Über die Diode D3 gelangt der Strom aber auch
zum Relais F. Dieses zieht an und legt mit seinem
Kontakt f den Fahrstrom an den bisher stromlosen
Gleisabschnitt an.
Der Kondensator C verhindert ein evt. Flattern
des Relais und kann eine Kapazität von 100µ - 470µ haben.
Diese Art Schaltung funktioniert auch im Digitalbetrieb mit der
vorhandenen Digitalspannung:
Schaltung 2
Hier kann z.B. zum Umschalten des
Signalbilds ein Ausgang eines K84-Decoders verwendet werden.
Da wir Digitalstrom verwenden, können wir auf ein weiteres
Relais zum Freischalten des Gleisabschnitts verzichten und
benutzen die Arbeitsseite des Umschalters des K84-Decoders.
Hinweise:
_________________________________________________________________
märklin Hobby-Signal mit Überblendung
Schaltung 3
Wie bei Schaltung 3 zu erkennen, genügen 3 weitere Bauteile, um ein sanftes Verlöschen bzw. Aufleuchten der Signalbilder zu erreichen.
Schaltungsbeschreibung:
Beim Wechseln des Signalbildes muß die Spannung erst den
Kondensator C1 / C2 (*) umladen, bevor die
Spannung ausreicht, die jeweilige LED zum Leuchten zu bringen. Das Potentiometer
P1 dient u. a. zum Reduzieren
der Spannung auf ca. 8 Volt und damit zur Verlängerung der
Umladezeit des Kondensators.
Die benötigte Kapazität liegt bei ca. 470 µF - 1.000 µF (pro Kondensator)
für ein einzelnes Hauptsignal, bei einem parallel dazu betriebenen
Vorsignal sollte die Kapazität
etwa 1.000 µF betragen. Hier kann jeder selbst experimentieren.
Generell gilt: Größere Kapazitäten verlängern, kleinere
Kapazitäten verringern die Überblenddauer.
Beim Digitalstrom sind die positiven Anteile nicht im gleichen Maße wie die
negativen vorhanden. Das führt zwangsläufig zu ungleichen Zeiten bei der
Überblendung von Rot ->
Grün bzw. Grün
-> Rot. Dieser Unterschied kann mit dem Poti
P1 beseitigt werden.
Wer's ganz genau haben will, kann mit einem Messgerät die Spannung am Ausgang
zum Signal messen. Wenn bei beiden Signalbildern die gleiche Spannung anliegt,
ist auch die Überblenddauer exakt gleich.
(*)
Wer genau hingeschaut hat, wird sich ggf. über die gegenpolig
geschalteten Kondensatoren wundern.
Das hat seinen Grund darin, das an dieser Stelle ein bipolarer
Kondensator benötigt wird. Bipolare Kondensatoren (keramisch /
MP) sind für diese großen Kapazitäten aber nur schwer zu
bekommen, voluminös (etwa so groß wie eine Cola-Dose) und daher
auch entsprechend teuer.
Der o .a. Trick macht aus zwei unipolaren Elektrolytkondensatoren
einen bipolaren Kondensator. Allerdings halbiert sich die Kapazität
bei Reihenschaltungen von Kondensatoren (was aber für uns
belanglos ist).
Die Kosten für die zusätzlichen Bauteile dürften bei etwa 4.00
. (Okt. 2004) liegen.
einfache und preiswerte Gleisbesetztmeldung |
Um den Zustand bzw. den Status auf
unserer Modellanlage abzufragen, verwenden wir z.B. das Rückmeldemodul
(RmM) 6088.
Das RmM benötigt dazu Massepotential an einem seiner Eingänge.
Wie ich bereits an einer anderen Stelle (Gleisbesetzmeldung) beschrieben habe, gibt es mehrere Möglichkeiten,
Massepotential an das RmM zu liefern.
Die folgende Schaltung reagiert auf den Stromfluss innerhalb eines
Bahnstromkreises:
Gleisbesetztmeldung
Schaltungsbeschreibung:
Sobald sich eine Lok im Streckenbereich befindet, fließt ein
Strom über die Dioden 1 N 4007 zum Gleis und über
den Motor zur Masse.
An den Dioden fällt damit eine geringe Spannung (2 x ca. 600 mV)
ab.
- diese Spannung reicht aus, um die Leuchtdiode des Optokopplers
anzusprechen und den Transistor durchzuschalten
- der Transistor zieht den Ausgang des Rückmeldemoduls gegen
Masse
- das Rückmeldemoduls meldet den Ausgang als "1".
Hinweise:
Relais-Ansteuerungen mit dem k83 o.ä. Decodern |
Oftmals kommt es vor, das wir auch andere Geräte als
Weichen oder Signale betätigen wollen.
Leider gibt es keine direkte Möglichkeit,
'artfremde' Teile digital anzusteuern.
Ein gutes Beispiel wäre der Kran 7051, welcher sich zwar auch mit dem
Digital-Nachrüst-Set 7652 digitalisieren lässt, aber dieses lässt sich märklin sehr teuer bezahlen.
Wesentlich preiswerter geht es mit der folgenden Schaltung:
Schaltung 1
In Schaltung 1 wird sowohl über den
roten als auch über den
grünen Ausgang des Decoders je ein Relais angesprochen.
Die Verwendung eines Relais garantiert eine saubere Trennung der Digitalspannung
von der zu schaltenden 'fremden' Spannung.
In unserem Beispiel könnte mit Relais
A der Kranhaken gehoben und mit Relais
B gesenkt
werden.
Zum Drehen des Kranes wäre ein weiterer Decoder-Ausgang sowie 2 weitere Relais
erforderlich.
Anmerkung:
In der folgenden Beschreibung verwenden wir das märklin-Keyboard zum
Ansteuern des Decoders.
Selbstverständlich sind auch alle anderen Ansteuerungen wie Memory oder PC
möglich.
Schaltung 1 eignet sich gut für sogenannte
Momentschaltungen, d.h., nur so lange wir den Finger auf der betr. Taste halten,
tut sich was,
sobald wir loslassen, kehrt das angesprochene Relais in die Ruhelage zurück.
Ein Vorteil ist, mit einem Decoder-Ausgang zwei verschiedene
Funktionen durchführen zu können.
Wenn wir eine längere andauernde Funktion, wie z.B.
die Beleuchtung eines Hauses, einschalten wollen, müssen wir dafür sorgen, das
die entspr. Information auch nach dem Abschalten des Decoder-Ausgangs erhalten
bleibt.
Dazu erweitern wir Schaltung 1:
Schaltung 2
Da das Relais A nur solange
steht, wie die rote Taste gedrückt wird, benötigen
wir eine Hilfsspannung zum Erhalt der Funktion.
Schaltungsbeschreibung:
Durch drücken der roten Taste wird z.B. der
Decoder-Ausgang rot aktiviert. Damit zieht Relais A an und sein
Kontakt a schließt.
Nun fließt unsere Hilfsspannung von 12 Volt über den Kontakt a zum Relais C und weiter
über den geschlossenen Kontakt b gegen 0 Volt oder Masse.
Relais C zieht
an und schließt u. a. seinen Kontakt c1.
Über den Kontakt c2 wird in unserem Beispiel die Beleuchtung
eingeschaltet.
Wird nun die Taste geöffnet, fällt Relais A wieder ab.
Relais C hält
sich jedoch weiter über seinen Kontakt c1 und über c2 bleibt auch
die Beleuchtung erhalten.
Um die Beleuchtung wieder auszuschalten, wird die grüne
Taste betätigt.
Dadurch zieht Relais B an und öffnet seinen Kontakt b.
Der Stromfluß für Relais C wird unterbrochen und Relais C fällt ab.
Die Beleuchtung erlischt und die Schaltung kehrt in die Ruhelage zurück.
Einfacher, aber auch teurer ist die Verwendung eines
bistabilen Relais.
Ein solches Relais wird direkt an die Ausgänge des Decoders angeschlossen, hat 2
Umschaltekontakte und kann z.B. bei
Fa. Littfinski, Datentechnik (www.ldt-infocenter.com)
bezogen werden.
Bezeichnung: Dauerstrom-Umschalter DSU
Preis ca. 10 Euro (Jan. 2005).
Schalten einer fremden Spannung mittels Kontaktstrecke |
Weder die Intellibox, noch die
ControlUnit oder die neue mobile station lieben es, ausgangsseitig
mit fremden Spannungen in Berührung zu kommen.
Aber es gibt immer wieder mal die Notwendigkeit,
'fremde' Spannungen für z.B. Bahnhofsbeleuchtung, Motoren o.ä. durch einen
fahrenden Zug schalten zu lassen.
Solang dieses Ein- und Ausschalten durch einen potentialfreien Kontakt
geschieht, kann kaum etwas Unvorhersehbares geschehen.
Problematischer wird es aber dann, wenn ein Zug über eine Kontaktstrecke die
Schaltung auslösen soll.
Die Option, fremde Spannungen mit einem Bein an die Masseschiene der Gleise
anzuschließen ist nicht nach jedermanns Geschmack und was im Falle des
Entgleisens passiert (Mittelleiter via Schleifer am Gegenpotential) weiß man
immer erst hinterher.
Mit wenigen Bauteilen lässt sich eine Schaltung realisieren, welche die Digitalspannung kaum belastet und eine saubere Trennung zwischen Digitalspannung und Fremdspannung gewährleistet.
Schaltungsbeschreibung:
Die Digitalspannung liegt über den Widerstand (1...10k) an der LED des
Optokopplers an.
Der andere Anschluß der LED ist mit der Kontaktstrecke verbunden.
Sobald ein Zug über die Kontaktstrecke fährt, gelangt Masse über die Achsen an
die Kontaktstrecke und die LED im Optokoppler leuchtet.
Der Optokoppler schaltet über seinen Transistor das Relais ein.
Da die Digitalspannung keine reine Gleichspannung ist, und die LED daher auch
nicht konstant leuchtet (sondern eher flimmert), würde ein einzelnes Relais
flattern. Der parallel zum Relais geschaltete Kondensator verhindert dieses
indem er die pulsierende Gleichspannung glättet und die stromlosen Abschnitte
überbrückt .