Рет қаралды 453
Die 6 Blöcke sind linear hintereinander geschaltet. Die Züge fahren vom hintersten Gleis (Gleis 1, Block 1) zum Block 2 unten links, zum Block 3 im Bahnhof Gleis 2, zum Block 4 unten links, zum Block 5 im Bahnhof (abwechselnd Gleis 3 oder Gleis 4) und dann über die Brücke zum Block 6 unten links und von dort zurück zum Block 1 (Gleis 1 im Bahnhof oben).
Jeder Block ist mit einem Märklin Bremsbaustein ausgerüstet.
Die Steuerung erfolgt über eine CS3 und einem Python Programm welches auf einem Rasperry P400 läuft.
Die Züge fahren in diesem Demo-Video alle etwa gleich schnell, sonst würde der langsamste Zug die anderen ausbremsen und die schnelleren Züge müssten immer warten, bis der Block davor wieder frei ist.
Die Anlage hat 66 Rückmeldekontakte; davon werden hier aber nur deren 13 verwendet.
Der Code ist eine Erweiterung des letzten Videos:
• Märklin CS3 einfache B...
hier noch jener Teil des Codes, der sich vom Code im letzten Video unterscheidet:
while True:
monitor status change of relevant contacts
msg = cs3_socket.recv(13)
msg_hex = binascii.b2a_hex(msg)
if (msg_hex[2:3] == b'2' and msg_hex[3:4]==b'3'): # command b'23': ein S88 Kontakt hat Status geändert
module = int(msg_hex[16:17])+1
module_input=int(msg_hex[17:18],16)
input_status=int(msg_hex[21:22])
if ((module==1) and (module_input==8) and (input_status==1)): # Ausf Bhf G1: Ausfahrt Block 1 (Bhf G1) Rot
set_signal(6,"rot")
set_signal(41,"rot")
elif ((module == 4) and (module_input == 7) and (input_status == 1)): #Ausf Bhf S G1: Ausfahrt Block 6 (Bhf S G1) Rot
set_signal(31, "rot")
set_signal(59, "rot")
elif ((module == 4) and (module_input == 9) and (input_status == 1)): # Ausf Bhf S G2 : Ausfahrt Block 2 (Bhf S G2) Rot
set_signal(30, "rot")
set_signal(58, "rot")
elif ((module == 1) and (module_input == 9) and (input_status == 1)): # Ausf Bhf G2: Ausfahrt Block 3 (Bhf G2) Rot
set_signal(7, "rot")
set_signal(42, "rot")
elif ((module == 1) and (module_input == 10) and (input_status == 1)): # Ausf Bhf G3: Ausfahrt Block 5 (Bhf G3) Rot
set_signal(8, "rot")
set_signal(43, "rot")
set_signal(9, "rot")
set_signal(44, "rot")
elif ((module == 4) and (module_input == 10) and (input_status == 1)): # Ausf Bhf S G3: Ausfahrt Block 4 (Bhf S G3) Rot
set_signal(29, "rot")
set_signal(57, "rot")
#Ungerade Blöcke freigeben
elif ((module==3) and (module_input==11) and (input_status==1)): #Einf Bhf S G2: Einfahrt Block 1 (Bhf G1) aus Block 6 freigeben
set_signal(31, "gruen")
set_signal(59,"gruen")
elif ((module == 3) and (module_input == 12) and (input_status == 1)): # Einf Bhf G2: Einfahrt Block 3 (Bhf G2) aus Block 2 freigeben
set_signal(30, "gruen")
set_signal(58, "gruen")
elif ((module == 3) and (module_input == 10) and (input_status == 1)): # Einf Bhf S G3: Einfahrt Block 5 aus Block 4
set_signal(29, "gruen")
set_signal(57, "gruen")
if (flag_Ausf_Gleis3 and (not flag_Ausf_Gleis3a)):
flag_Ausf_Gleis3 = False
elif ((not flag_Ausf_Gleis3) and flag_Ausf_Gleis3a):
flag_Ausf_Gleis3 = True
#gerade Blöcke freigeben
elif ((module == 4) and (module_input == 12) and (input_status == 1)): # Einf Bhf S G1: Einfahrt Block 6 aus Bloock 5
if (flag_Ausf_Gleis3):
set_weiche(3, "gerade")
set_weiche(23, "gerade")
set_signal(8, "gruen")
set_signal(43, "gruen")
if (flag_Ausf_Gleis3 and flag_Ausf_Gleis3a):
flag_Ausf_Gleis3a = False
elif (flag_Ausf_Gleis3 and flag_Ausf_Gleis3a):
flag_Ausf_Gleis3a = True
elif (not flag_Ausf_Gleis3):
set_weiche(3, "rund")
set_weiche(4, "rund")
set_weiche(23, "rund")
set_weiche(24, "rund")
set_signal(9, "gruen")
set_signal(44, "gruen")
flag_Ausf_Gleis3a = True
elif ((module == 4) and (module_input == 13) and (input_status == 1)): # Einf Bhf S G1: Einfahrt Block 4 aus Block 3 freigeben
set_signal(6, "gruen")
set_signal(41, "gruen")
elif ((module == 4) and (module_input == 14) and (input_status == 1)): # Einf Bhf S G1: Einfahrt Block 3 (Bhf G2 freigeben)
set_signal(7, "gruen")
set_signal(42, "gruen")