puls_efn.jpg Wir leben Modellbahn. puls.jpg

Steuerung der Schranken am Bahnübergang

Auf der Vereinsanlage befinden sich seit Neuestem 2 Bahnübergänge mit automatischen Schranken. Ein Bahnübergang (Wurzener Str.) war schon seit langem mit einer REED-Kontakt/Relais Schaltung versehen, die einigemaßen ihren Dienst versah. Im Fahrbetrieb kam es jedoch immer wieder mal vor, das die Schranke bei einem herannahenden Zug nicht herunterging, mal eine Schranke nicht synchron zur anderen war oder es kam auch vor, das die Schranke unten blieb. Diese Zustände mag man sich im realen Leben gar nicht vorstellen. Wir hätten einen hohen Verschleiß von Naunhofern- und Klingaern-Bürgern zu verzeichnen!!!
Problem Bahnübergang
Das sich nun auch noch der zweite Bahnübergang (Großsteinberger Str.) harmonisch und automatisiert in die Landschaft integrieren sollte haben wir einige Überlegungen zum Funktionsupdate angestellt. Hier unsere technischen und organisatorischen Randbedingungen:

  • zuverlässiger Betrieb der „zwei“ Bahnübergänge unabhängig voneinander
  • Minimierung der Ausfall- und Reparaturzeiten
  • schnelle Änderung der Funktionalität, falls sich Umstände oder Einflüsse ändern
  • preiswerter Aufbau aus Standardkomponenten

Im unten zu sehenden Gleisplan sind die verbauten REED-Kontakte zu sehen.
Gleisplan

Verbaute REED-Kontakte

  • Wurzener Str.: 8 Stück
  • Großsteinberger Str.: 7 Stück
A N Gleis1 N B
C N Gleis2 N D

Die Realisierung erfolgt über Standardbauteile, die im folgenden gelistet sind.

Arduino NANO Board V3Mikrocontrollerbord
AZDelivery Relais 5VRelais
Lochrasterplatinen + AnschlußklemmenLochrasterplatten
USB-Netzteil zur Spannungsversorgung der ProgrammlogikNetzteile
BASCOM Compiler Software zur ProgrammierungBascom Compiler
fertige PlatinePlatine
Programm in Bascom
basic
'*********************************************
'* Filename    : EFN Schrankensteuerung      *
'* Revision    : 2.0                         *
'* Controller  : Arduino NANO V3.0           *
'* Stand       : Juli/2021                   *
'*********************************************
$regfile = "m328pdef.dat" 'Arduino Nano V3.0
$crystal = 16000000       '16 MHz                                  '
$baud = 19200             'COM4
$loadersize = &H800 'Bootloader nicht ueberschreiben
 
$hwstack = 40
$swstack = 20
$framesize = 20
 
'*********************************************
'Ausgänge
Config PORTB.5=Output 'On-Board LED
LED_ON_BOARD alias PORTB.5
LED_ON_BOARD=0
Reset LED_ON_BOARD
 
Config PORTD.6=Output
LED alias PORTD.6
LED=0
Reset LED
 
Config PORTD.7=Output
RELAIS alias PORTD.7
RELAIS=0
Reset RELAIS
 
'*********************************************
'Eingänge konfigurieren als Taster
Config PinB.0 = Input
Config PinB.1 = Input
Config PinB.2 = Input
Config PinB.3 = Input
Config PinB.4 = Input
 
'Pull up einschalten
PORTB.0=1
PORTB.1=1
PORTB.2=1
PORTB.3=1
PORTB.4=1
 
'*********************************************
'Variablen
KeyN alias PINB.4
KeyFA alias PINB.3
KeyFB alias PINB.2
KeyFC alias PINB.1
KeyFD alias PINB.0
 
Dim bitKeyN As Bit  '=1 wenn gedrückt
Dim bitKeyFA As Bit '=1
Dim bitKeyFB As Bit '=1
Dim bitKeyFC As Bit '=1
Dim bitKeyFD As Bit '=1
 
Dim SCHRANKE as String * 4
Dim B, B_OLD, G1, G2, A1, A2, C1, C2 as bit
Dim I, ZAEHLER, Z, FAZ, FBZ, FCZ, FDZ, NZ, SZ as integer
SZ=0
Const VZ_ALLE=-3
Const VZ_A=-5
Const VZ_B=0
Const VZ_C=0
Const VZ_D=0
 
'*********************************************
'Konfiguriere INT1 für Tastenerkennung mit Dioden
Config INT1=FALLING  'PIND.3=INT1
On Int1 TASTEN       'INT1 Interrupt-Routine
Enable INT1          'INT1 einschalten
Enable Interrupts    'Interrupts erlauben
 
stop adc
stop AC
 
declare sub anzeige
declare sub erkennen
declare sub var_reset
 
var_reset
 
'*********************************************
do
  Incr ZAEHLER
  if ZAEHLER=100 then
    var_reset
  endif
  anzeige
  erkennen
  Toggle LED_ON_BOARD
  wait 1
loop
end
 
'*********************************************
sub erkennen () {
 
if bitKeyN=1 then
  ZAEHLER=-20
  bitKeyN=0
  incr NZ
end if
 
if bitkeyFA=1 then
  if B=1 and C1=1 then
    ZAEHLER=VZ_ALLE+VZ_A
  else
    ZAEHLER=ZAEHLER
  end if
  G1=1
  A1=1
  bitKeyFA=0
  incr FAZ
end if
 
if bitKeyFB=1 then
  if B=1 and A1=1 then
    ZAEHLER=VZ_ALLE+VZ_B
  else
    ZAEHLER=ZAEHLER
  end if
  G1=1
  C1=1
  bitKeyFB=0
  incr FBZ
end if
 
if bitkeyFC=1 then
  if B=1 and C2=1 then
    ZAEHLER=VZ_ALLE+VZ_C
  else
    ZAEHLER=ZAEHLER
  end if
  G2=1
  A2=1
  bitKeyFC=0
  incr FCZ
end if
 
if bitKeyFD=1 then
  if B=1 and A2=1 then
    ZAEHLER=VZ_ALLE+VZ_D
  else
    ZAEHLER=ZAEHLER
  end if
  G2=1
  C2=1
  bitKeyFD=0
  incr FDZ
end if
end sub
 
'*********************************************
sub anzeige
'print "Schrankensteuerung"
 
B_OLD=B
if ZAEHLER < 0 then
  SCHRANKE="ZU"
  B=1
  RELAIS=1
  LED=1
else
  SCHRANKE="AUF"
  B=0
  RELAIS=0
  LED=0
end if
 
'Flanke von "zu" nach "auf" loescht gesetzte Variablen
if B_OLD > B then
  Z=0
  G1=0
  G2=0
  A1=0
  A2=0
  C1=0
  C2=0
  incr SZ 'Schrankenzähler + 1
end if
 
'Anzahl der Zuege
if G1=1 and G2=1 then
  Z=2
elseif G1=0 and G2=0 then
  Z=0
else
  Z=1
end if
 
print "Gleis1   : ";G1
print "Gleis2   : ";G2
print "Zuege    : ";Z
print "Schranke : ";SCHRANKE
print "Zaehler  : ";ZAEHLER
print
print "A: ";FAZ;" B: ";FBZ;" C: ";FCZ;" D: ";FDZ;" N: ";NZ
print "Schliesssungen: ";SZ
print
end sub
 
'*********************************************
sub var_reset
SCHRANKE="AUF"
LED=0
RELAIS=0
B=0
G1=0
G2=0
A1=0
A2=0
C1=0
C2=0
Z=0
ZAEHLER=0
bitKeyFA=0
bitKeyFB=0
bitKeyFC=0
bitKeyFD=0
bitKeyN=0
for I=1 to 8 '4*blinken
  toggle LED_ON_BOARD
  waitms 100
next
end sub
 
'*********************************************
TASTEN:
'Interrupt on INT1
  bitKeyN = Not KeyN
  bitKeyFA = Not KeyFA
  bitKeyFB = Not KeyFB
  bitKeyFC = Not KeyFC
  bitKeyFD = Not KeyFD
Return
  • Die Interruptroutine ermittelt bei Kontaktgabe eines Reed-Kontaktes, welcher ausgelöst hat.
  • Die fernen Kontakte (FA-FC) setzten je nach Zustand (Besetzt/Frei) die Öffnungs- bzw. Schließdauer der Schranken.
  • Der nahe Kontakt (N) schließt sofort die Schranke und lässt den Öffnungszähler ablaufen.
  • Eine Verzögerungszeit ist je fernen Kontakt zur individuellen Anpassung einstellbar.
  • Über die COM Schnittstelle kann das Programm überwacht werden.
  • Je ein weiterer Zähler zählt Schrankenbewegungen und Betätigung der Kontakte
  • Aller 100 Sekunden wird die Schaltung resettet, alle wichtigen Variablen werden auf Null gesetzt
  • Die On Board LED dient als Herzschlag-Anzeige, bei Variablen-Reset blinkt sie 4mal.
  • Beispiel:Kein Zug in den Bereichen FA-FB und FC-FD.
  • Zug überfährt FA: es passiert äußerlich nichts, innerlich wird registriert, das der Bereich A1 belegt ist.
  • Zug überfährt N: Schranke schließt sofort, Bereich B ist belegt, der eingestellte Ablaufzähler (20 Sekunden) beginnt abzulaufen.
  • Zug überfährt N: Schranke bleibt geschlossen, Bereich A2 nun belegt, der eingestellte Ablaufzähler (20 Sekunden) beginnt abzulaufen.
  • Zug überfährt FB: der Ablaufzähler wird um einen Verzögerungswert (3 Sekunden) reduziert, ist der Ablaufzähler gleich NULL öffnet die Schranke, alle Bereiche A1, B und A2 werden freigegeben
  • Ausnahme: befährt der Zug die Richtung FB–>B–>FA ist am Auslösepunkt FA z.Z. ein größerer Verzögerungswert (5 Sekunden) eingestellt. Dies ist im Programm für jeden F-Punkt einstellbar und soll der unterschiedlichen Länge der Bereiche Rechnung tragen.

Profilvergleich H0-Bettungsgleise

Bildlicher Vergleich Trix/Märklin-C-Gleis und Roco Vergleich


Begrifflichkeiten Leistung, Strom, Spannung

„da ist kein Strom drauf“besser —> „da ist keine Spannung drauf“
im Kraftwerk wird Spannung produziertman sagt immer es wird Strom erzeugt, der Strom entsteht doch erst wenn Leistung verbraucht wird
wieso haben wir einen Stromverbauch?der Strom fliesst doch zurück zum Kraftwerk, ist es nicht ein Leistungsverbauch?