Schattenbahnhofsteuerung

Hallo,
ich beschäftige mich seit langem mit einer Schattenbahnhof Steuerung mit dem Mega, habe die Hardware gelöst, komme aber mit der Programmierung nicht weiter.
Ich suche auch schon seit längerem nach Lösungen, habe aber nur schon Anregungen gefunden. Auch Chatgpt ist nicht in der Lage ein funktionierendes Programm zu schreiben.
(das angehängte Programm ist auf den Vorschlag aufgebaut)
Ich hoffe ich habe die richtige Kategorie gefunden.

Es sind 2 identische, voneinander unabhängige Schattenbahnhöfe (einer für jede Richtung) mit jeweils 10 Gleisen und 9 endabgeschalteten Weichen (nicht alle hintereinander, s.u.).
Gesteuert werden soll die Bahnhofseinfahrt, die Ausfahrt ist mit einem Zufallsschaltwerk gelöst. Die Blockstellensteuerung erfolgt über SRTs und bistabile Relais. Das funktioniert halt nicht für die Schattenbahnhofeinfahrt, dehalb die Anfrage!

Für jedes Gleis gibt es 1 Taster, mit dem manuell das Gleis gewählt wird.
Jedem Gleis ist im Stellpult eine LED zugeordnet.
Da die Weichen endabgeschaltet sind, kann mit einem LTV844 die Stellung ausgelesen werden.
Alle Weichen werden mit ULN2803 und 24V= gestellt.
Damit die Anzahl IO im Mega ausreicht ist für jeweils 4 Weichen ein Portexpander MCP23S17 vorgesehen.

Der Programmablauf:
Nach Programmstart sollen in einem ersten Durchlauf zum Test für 5 Sekunden alle Gleis LEDs angeschaltet werden und danach alle Weichenstellungen abgefragt und die auf das gestellte Gleis zugehörige LED angeschaltet werden.
in einer Schleife werden die Gleistaster abgefragt (die Taster schalten auf GND, deshalb Input Pullup)
Wird ein Taster gedrückt läuft das Programm ab:
Die zum Gleis führenden Weichen werden der Reihe nach gestellt.
Zur Erklärung: der zur Stellung der Weichenspule zugehörige Port A (0-7) zeigt auf Port B (0-7) die Stellung (high falsch, low richtig; die Anschlüss der Spulen sind hardwaremäßig gekreuzt)
Zunächst wird die Stellung der Weiche abgefragt, steht sie richtig, geht es zur nächsten Weiche, steht sie falsch wird sie gestellt (digital output, 200ms), danach die Stellung abfragen. Steht sie immer noch falsch, wird der Stellungsbefehl 2x wiederholt. Hilft das nicht, gibt es eine Fehlermeldung , die GleisLEDs blinken.
Danach wird die nächste Weiche gestellt.
Sind alle Weichen korrekt gestellt, wird die betreffende GleisLED angeschaltet.
Dann werden wieder die Gleistaster abgefragt.

Beide Schattenbahnhöfe sollten unabhängig voneinander gesteuert werden können.
Könnte das Probleme geben, wenn in den Programmablauf hinein ein Taster vom anderen Bahnhof gedrückt wird?

Die Zuordnung der Gleise eines Schattenbahnhofs zu den Weichenstellungen:
Gleistaster 1, Weiche 1 abzweigend
Gleistaster 2, Weiche 1 geradeaus, Weiche 2 abzweigend, Weiche 3 abzweigend
Gleistaster 3, Weiche 1 geradeaus, Weiche 2 abzweigend, Weiche 3 geradeaus
Gleistaster 4, Weiche 1 geradeaus, Weiche 2 geradeaus, Weiche 4 geradeaus, Weiche 5 abzweigend, Weiche 6 geradeaus
Gleistaster 5, Weiche 1 geradeaus, Weiche 2 geradeaus, Weiche 4 abzweigend, Weiche 5 abzweigend, Weiche 6 abzweigend
Gleistaster 6, Weiche 1 geradeaus, Weiche 2 geradeaus, Weiche 4 abzweigend, Weiche 5 geradeaus
Gleistaster 7, Weiche 1 geradeaus, Weiche 2 geradeaus, Weiche 4 geradeaus, Weiche 7 abzweigend, Weiche 8 abzweigend, Weiche 9 abzweigend
Gleistaster 8, Weiche 1 geradeaus, Weiche 2 geradeaus, Weiche 4 geradeaus, Weiche 7 abzweigend, Weiche 8 abzweigend, Weiche 9 geradeaus
Gleistaster 9, Weiche 1 geradeaus, Weiche 2 geradeaus, Weiche 4 geradeaus, Weiche 7 abzweigend, Weiche 8 geradeaus
Gleistaster 10, Weiche 1 geradeaus, Weiche 2 geradeaus, Weiche 4 geradeaus, Weiche 7 geradeaus
Beim 2. Bahnhof sind es Gleise 11-20 und Weichen 11-19.

Zur Info hänge ich das Layout für die Hardware von der Weichensteuerungsplatine an, als neuer User darf ich meinen rudimentärer Versuch fürs Programm nicht hochladen.

1 Like

Wenn Du in deutsch schreibst, ist nur die Kategorie international->deutsch richtig. Das wird ein Moderator richtigstellen müssen.

Das wundert mich wenig. Vergiss ChatGPT - erst recht für so komplexe Aufgaben.

Ein ordentlicher Gleisplan würde helfen - Bilder sind immer besser als viele Worte.

Leider glänzt dein Schaltplan nicht gerade durch Übersichtlichkeit. So kreuz-und-quer Leitungen gehen gar nicht. Ich habe da eigentlich nichts verstanden. Wie bestimmst Du mit dem Optokoppler die Weichenstellung?

Den Sketch kannst Du direkt in deinen Text einstellen - aber mit 'Code-Tags'.

Lies dir bitte dies durch:

Danke für die schnelle Antwort!

Entschuldigung mit dem Schaltplan, das war für mich einfacher als die Leitungen außenherum zu legen. Das kommt auch daher, dass beim Portexpander A0 gegenüber B7 liegt und ich die korrespondierenden In- und Outputs nicht softwaremäßig zuordnen wollte. Mit der Software habe ich ja mein Problem, deshalb mein Post.

Zum Optokoppler:
ich habe den 844 gewählt, weil dort verpolen egal ist und er gleich viel kostet. (Beim Analogbetrieb ist die Besetztmeldung so einfacher, weil es für beide Richtungen funktioniert.)
Die Endabschaltung bedeutet, dass die Weichenspule in die gestellte Richtung abgeschaltet und die andere eingeschaltet wird, d.h. die eine ist auf +24v, die andere wird über den Optokoppler auf GND entladen.
Mit den +24V der eingeschalteten ("falschen") Spule wird der Optokoppler mit Input Pullup auf Gnd gezogen und zeigt low an, d.h. die Weiche ist in die richtige Richtung gestellt.

Hallo schanderl

Wie redet die Weiche mit dem Programm ?

Wenn du es richig machst klares nein.

Das was du da vor hast, ist sehr umfangreich.
An deiner Stelle würde ich mal Anfangen eine einzige Weiche zu stellen/auszulesen.
Das ist dann ein Sketch den du sicher auch als Anfänger posten kannst.

Hast du so etwas? Dann post mal so etwas. Ein einfacher Sketch der auf Tastendruck eine Weiche stellt.
Wenn du so etwas hast, kann man das sicher auch in eine Variante heben, in der du viele Weichen, Fahrstraßen, Ziele ... bekommst ohne in einem Spaghetti-Code zu verenden.

Structs und arrays sind dabei deine Freunde.

Das geht nicht. Da fehlt irgendwo eine Weiche.

Hier hab ich auch mein Problem

Irgendwas geht da nicht zwischen W7 und W5

Ohne dass @schanderl mal einen Gleisplan postet, kann man eh nichts sagen. Wie so oft: ein Bild sagt mehr als tausend Worte. Da sieht man dann gleich, welche Weichen gestellt werden müssen um ein bestimmtes Gleis zu erreichen.

1 Like

Ich hätet das auch aus der Beschreibung ausgelöst. Ist ja nur Logik :wink: Aber die passt nicht. Entweder W7 ist W5 oder Vor W7 kommt W5 geradeaus.

Hallo,

wenn der TO einen Gleisplan zeigt, könnte vielleicht etwas passen was schon im Forum schlummert. Wobei ein Schattenbahnhof eigentlich nicht schwer ist. x Gleise und an beiden Seiten Weichen. Der alte Thread könnte wieder interessant werden.

kannst du das bitte noch mal erklären?

Heißt dass

  • die zwei Spulen von der ersten Weiche hängen an Port A Bit 0 und 1
  • die Rückmeldung (?) von Spule 1 der ersten Weiche meldet an Port B Bit 0 retour, Spule 2 an Port B Bit 1?
  • was ist "gekreuzt"?

Es gibt zwar einen Gleiplan, aber der ist nicht wirklich zu lesen und die Weichen sind nicht nummeriert. Es handelt sich auch nicht um meine HO Anlage, sondern die von einem Freund. Ich wollte eigentlich die ganzen Schattenbahnhöfe automatisieren, aber das war mir Softwareseitig erst recht zu komplex.

Zu den komischen Gleiszuordnungen: teilweise kommen nach 1 Weiche im Hauptstrang 2 Weichem im Nebenstrang, deshalb sind manche Weichen „ausgelassen“.

Das Programm „redet“ mit den Weichen, nicht umgekehrt. Stellung abfragen und danach ev. stellen. S.o.

Vielen Dank für die vielen Fragen und Beiträge!
Ich bin zuversichtlich, irgendwann (bald) eine Lösung zu finden.

Ich bin grad unterwegs und melde mich wieder morgen um die anderen Fragen zu beantworten.

Ich bin am Handy und habe deshalb und aus Unerfahrenheit mit diesem Forum die letzte Antwort erst jetzt abgeschickt.

Das ist richtig Gekreuzt bedeutet, dass die andere Spule der Weiche die Rückmeldung gibt. A0 Stellbefehl Spule geradeaus, B0 Abfrage der komplementären Spule abzweigend

Vielleicht hilft dies zum Verständnis des Systems

Statt den Leuchtmitteln der Rückmeldung, kann man ein Optokoppler nutzen und dessen Schalten zur Auswertung mit dem μC.

Bei mir auch oft verbaut. Hatte mir damals ein kleines Board entwickelt was direkt an die Weichenkabel kommt. Funktioniert zuverlässig.

Das ist richtig, ich habe schnell mal eine Prinzipskizze gemacht, die die Zeichnung ergänzt.
Es handelt sich um Fleischmann Weichen, die lassen sich mit 16V= noch nicht schalten. Auf die 24V bin ich gekommen, weil ich ein 3fach Netzteil mit 5, 12 und 24V von Meanwell gefunden habe, mit dem sich die Steuerung kompakt versorgen lässt. 12V für den Mega, 5V für die Peripherie, ein Vorteil ist damit auch der gemeinsame Gnd.

Nochmals Danke!

d.h. eigentlich ergibt sich die Stellung schon aus B0. Das ist gesetzt oder nicht.
Oder gibt es Situation wo beide Eingänge HIGH oder beide Eingänge LOW sind?

erwischt! Da hab ich das mehrmals kontrolliert und immer den Fehler übersehen. Bei Gleis 4 muss natürlich Weiche 4 abzweigend sein.

1 Like

Das stimmt prinzipiell, aber wenn die Weiche nicht korrekt in Endstellung schaltet, sind beide Spulen high. Um das auszuschließen nehme ich die stromführend geschaltete Spule als Rückmeldung.
Das erinnert mich daran, dass bei der Initialisierung des Programms noch keine Fehlermeldung vorgesehen ist, falls eine Weiche nicht korrekt in Endstellung steht und beide Spulen high sind.
Beim Programmablauf habe ich das schon.

ok, dann hats einen Grund. Kein Problem.
Wenn du nun ein Muster-Sketch postest für EINE Weiche dann kann man das sicher in eine schöne Klasse packen die auch gut wiederverwendbar ist.

Hab ich dir in #5 eigentlich auch schon angeboten, aber von dir muss dazu auch was kommen.

1 Like

Ich halte nicht viel davon, die Weiche mit Endschalter so mit Gleichspannung zu betreiben. Das tut dem Schalter nicht gut, und die Freilaufdiode des ULN2803 hilft da auch nichts.