Modellbahn erweiterte Beleuchtungssteuerung

  • Hallo,


    aktuell haben mein Sohn und ich, das Projekt einer Modellbahn am laufen. In der ersten Phase ist geplant die Beleuchtung o.ä. automatisch oder auf Tastendruck bzw. durch in die Schienen eingelassenen Reed Kontakte zu schalten. Auch die Schrankensteuerung über Servos mit PWM und das blinken der Warnzeichen am Andreaskreuz (Schranke schließt nach überfahren des vorgelagerten Reed Kontaktes des Bahnübergangs und öffnet die Schranke wieder nach überfahren des nachgelagerten Reed Kontaktes) sollte ja grundsätzlich kein großes Problem darstellen.


    Später soll noch die Steuerung der Abzweige und der Stop Stellen, des Car Systems mit Ampelschaltung dazu kommen, und vielleicht mit einem zweiten Raspi die Steuerung der Weichen mit einem systematischen Gleisstellpult und Knöpfen und evtl. dargestellten Fahrstraßen. Aber Rom is ja auch nicht an einem Tage erbaut worden.


    Für den Endausbau werden grob überschlagen je bis zu 50 Ein- sowie 50 Ausgänge benötigt. Ich kann die Anzahl der Ports ja mit Expandern auf dem I2C Bus erweitern, soweit ist mir das auch klar.


    Für mich stellt sich nun die Frage: Ein paar LED an- oder auszuschalten bzw. blinken zu lassen, kein Thema, das packe ich alles in ein Script und fertig. Nur bei der Anzahl der Ein- und Ausgänge bin ich mir nicht sicher ob das bei zeitkritischen Vorgängen so funktioniert, wie ich mir das vorstelle.


    Lege ich alles in ein Script oder sollte dies unterteilt in "Subroutinen" externe Script gelegt werden o.ä. In welchem Bereich/Stichwort muss ich mich einlesen? Oder lassen sich diverse Scripte parallel starten. Ich will jetzt nicht viele Zeilen Code schreiben und dann feststellen, dass durch die Abfrage der vielen Eingänge der Raspberry das Script nicht so schnell abarbeiten kann. Fatale Folge wäre, dass die Schranke nicht oder nur verspätet schließt und das Auto des Car Systems (Stop Stelle vor der Schranke, wird mit schließen der Schranke aktiviert) nicht anhält und von der Modellbahn erfasst wird. Aber vielleiht denke ich auch nur zu kompliziert. :conf:


    Vielen Dank für Euere Unterstützung

  • Ein interessantes Projekt. Ich denke jedoch, Deine Bedenken gehen in eine Richtung, in der Du eher weniger Probleme erwarten wirst. Jeds Script im Userlevel ausgeführt bzw. in einer Interpretesprache ausgeführt, ist vermutlich schnell genug, um Deine (noch nicht näher quantifizierten zeitkritischen) physikalischen Anforderungen zu erfüllen. Ich denke eher, daß es die Struktur des Codes ist, die hier darüber entscheidet, ob das Projekt zum Erfolg wird oder nicht.

    Anders herum ausgedrückt - man kann in jeder Programmiersprache beliebig "langsame" und ungeschickte Konstrukte aufstellen, sodaß ein Projekt scheitert. Allenfalls liegt einem persönlich eher die eine oder ander Sprache und bietet genau die Ausdrucksmöglichkeiten, die am ehesten zum Problem passen und die es erlaubt, langfristig den Überblick zu erhalten.

  • Zeitkritisch wird das eher nicht. Aber Zugriffskritisch. Denn wie verhinderst Du, dass ein Script auf den I2C-Bus zugreift, während ein anderes Script diesen gerade benutzt.


    Leider ist es bei Linux so - alles ist eine Datei -, dass jedes Programm jederzeit auf die Ports zugreifen kann. Was auch mal die Portparameter am Uart verstellen kann. Oder Gpios setzen, die ein anderes Programm bereits benutzt.


    Es wäre also eine gute Idee, dass nur ein Programm Zugriff auf den I2C-Bus hat, und die Scripte diesem Programm zuarbeiten.