Moin,
um das ganze jetzt etwas aufzutrennen:
Für die Zugverfolgung habe ich eine neue Idee, wie ich mir mit der CS 3 behelfen könnte. Da mache ich aber einen separaten Post nochmal zu in diesem Thema.
Es wird aber auf den Erkenntnissen dieses Beitrags beruhen. Die Idee ist, durch das Lok-Ersetzen eine Steuerung zu ermöglichen, das die CS 3 weiß welche Lok in welchem Block ist, und ich dann über einfache Befehle sagen kann, Wenn eine Lok den Block X betritt, dann bremse bitte ab.
@TT800
Vielen herzlichen Dank für deine Hilfe! Dein letzter Link hat mir SEHR geholfen!
Daher möchte ich auch gerne einmal Präsentieren was ich damit jetzt gemacht habe.
Für Verbesserungsvorschläge und Alternativen bin ich offen!
Und es tut mir leid das ich das ganze so lang geschrieben habe, ich habe aber versucht auf alles einzugehen worauf man dabei achten muss, damit man das auch selber mal nachbauen und testen kann.
Idee:
Ich möchte über eine Vorwahl in einer Lok die Entscheidung treffen ob sie sich an Ereignisse halten soll oder nicht (quasi Automatik an oder aus).
Als Test dafür, habe ich mich entschieden bei den Betroffenen Zügen die Geschwindigkeit auf 60 zu setzen für Automatik ein, und auf 0 für Automatik aus.
Hinweis:
Wer sich für den Parallel-Betrieb von Ereignissen mit Lok-Ersetzung nicht interessiert, schaut bitte nur in der Übersicht und dann ab Ereignis 310 weiter.
Übersicht:
Bild entfernt (keine Rechte)
Um nun für alle Loks die gleiche Programmierung zu haben, habe ich mich deiner Hilfe bedient, die Lok zu überschreiben.
Damit das übersichtlicher wird, habe ich eine neue Lok angelegt "Lok-Interface". Diese Lok wird überall da eingefügt wo später dann der Austausch stattfindet.
Diese Lok benötigt keine Konfiguration, außer eine freie Adresse in einem verwendeten Protokoll! In meinem Fall hat sie im Protokoll MM die Adresse 99 bekommen.
Außerdem sind einmal alle für diesen Automatismus relevanten Ereignise eingeblendet. Das Ereignis "300 - Models" wird hierbei allerdings nicht verwendet und dient der Übersicht in der Gesamtliste.
Zusätzlich sind in den Loks enttsprechende Ablauffunktionen angelegt worden.
Damit man auch eine Funktion parallel auf anderen Loks verwenden kann, ist es leider notwendig das jede Lok ein eigenes Einstiegsereignis bekommt, und darauf verbunden wird.
Der Ausschnitt zeigt die BR 89 mit ihrer Konfiguration.
Bild entfernt (keine Rechte)
Ereignis 301:
Bild entfernt (keine Rechte)
Hier sind zwei Dinge zu sehen:
1. Es wird ein Text erzeugt welcher nur einen Zweck hat: Eine zeitliche Verschiebung von, in diesem Fall, 100 ms. Diese Verzögerung ist auch im Text eingetragen um dies von außen zu sehen.
2. Aufruf der zyklischen Schleife. Diese Schleife soll dafür sorgen das alle untergeordneten Befehle durchgehend aufgerufen, geprüft, und abgearbeitet werden.
WICHTIG:
Damit das ganze mit der parallelen Abarbeitung richtig läuft, dürfen die Prozesse nicht ineinander greifen weil sonst die Lok-Ersatze nicht richtig funktionieren, dadurch entstehen Glitches. Ich hatte z.B. den Fall das in der BR 100 die Geschwindigkeit geändert wurde, aber das Lok-Element in der BR89 geschaltet wurde.
Um das zu verhindern, ist die Schleife auf eine Pause von 2000 ms konfiguriert worden (Siehe Ereignis 302). Da die Schleife innerhalb von 100 ms abgearbeitet wird, wartet sie also nach ihrer Abarbeitung, bis 1 Sekunde vergangen ist, und startet dann erneut. Das heißt, ich kann nach 100 ms die nächste Schleife starten. Daher steht bei der BR 89 eine Verzögerung von 100 ms für den Start der Schleife drin.
Würde ich jetzt den ICE hinzufügen wollen, muss dieser dann 200 ms Verzögerung haben, die BR 01 dann 300 ms usw.
Grenzwert beachten!
Wenn ich die 20. Lok einbinde kann es zu Problemen kommen. Diese startet dann bei 1900 ms. Wenn diese dann nicht innerhalb von 100 ms fertig ist, startet aber bereits die Schleife der BR 110 wieder. Dadurch entsteht eine Überlappung und es kommt wieder zu glitches. Dort müsste dann die Schleifendauer von 1 Sekunde hochgesetzt werden, um das zu verhindern.
Ereignis 302:
Bild entfernt (keine Rechte)
Eine weitere Gegenmaßnahme gegen gelegentliches glitching ist, die Ereignisse über ein Sammelereignis aufzurufen. Es hat sich bei meinen Probelaufen gezeigt, das der Direktaufruf der Ereignisse 310 und 320 in der Schleife zu Problemen füht. Diese Probleme treten nicht auf, wenn die Schleife nur ein Ereignis aufruft, welches die Reihenfolge festlegt. Ab dem Zeitpunkt scheint dann eine Überlappung nicht mehr stattzufinden.
Zu Beachten ist dabei, durch die Schleifenpause von 2 Sekunden, kann es passieren das Signale bis zu 2 Sekunden verzögert ankommen, bzw. verarbeitet werden.
Ereignis 303:
Bild entfernt (keine Rechte)
Sammelereignis für die genauen Abläufe. Ab hier kann dann ganz gewohnt weiter programmiert werden. Theoretisch kann auch hier direkt schon etwas drin stehen oder aufgerufen werden.
Dadurch das ich zwei Fälle habe welche Auftreten können, auch gleichzeitig, habe ich hier wieder Ereignisse aufgerufen.
WICHTIG:
Passt mit euren Schaltzeiten auf!
Ich schalte bisher nur digtale Zustände, diese sind quasi sofort geändert. Wenn man in solch einer Anweisung z.B. ein Signal schaltet was 200 ms Schaltzeit in der Artikelliste hat, dann wird gewartet bis das erledigt ist. Das heißt ihr kollidiert dann mit eurer 100 ms Verzögerung vom Anfang und lauft wieder parallel mit Glitch-Gefahr.
Daher sollte man mit den Pausen-Zeiten nicht zu knauserig sein.
Ereignis 310:
Bild entfernt (keine Rechte)
Hier kommt der eigentliche Trick erst. Alles was vorweg genannt wurde, ist nur für parallele Abarbeitung entstanden.
Hier ist am Anfang die Dummy-lok "Lok-Interface" eingebunden. Diese Lok wird dann durch den Aufruf der Ablauffunktion ersetzt durch die Lok die diese Funktion aufruft. In unserem Beispiel würde dann die BR 89 stattdessen gesteuert werden.
Hier wird nur gefragt ob ich den Automatik-Modus aktiviert habe, und auch die Lok entsprechend zugewiesen habe (Lok mit drei Pfeilen, verwende ich so das diese Lok beeinflusst werden soll).
Wenn das der Fall ist, wird die Geschwindigkeit auf 60 gesetzt.
Heißt, ich kann alle Loks einmal über das Lok Symbol in der Navigation aktivieren, und mit einem Start auf einen Taster, Schalter oder ähnliches dann aktivieren (In meinem Fall das Dummy Signal 300 - Activate Trains).
Ereignis 320:
Bild entfernt (keine Rechte)
Hier ist wieder das Lok-Interface vorhanden, und dieses Mal warte ich einmal darauf das das Signal "300 - Deactivate Trains" geschaltet wird. Würde ich einfach nur auf das rote Signal von dem Taster aus 310 warten, müsste ich erst einschalten, und dann die Loks aktivieren. Dadurch fahren aber nicht alle Loks zusammen los, sondern dann wenn ich sie aktiviere, das wollte ich nicht. Daher habe einen separaten "Stopp-Taster" vorgesehen.
Wenn dieser aktiviert wird, dann wird die Lok auf Geschwindigkeit 0 gesetzt, und anschließend die Automatik auf AUS gestellt. Das hat den Hintergrund das ich das persönlich bevorzuge zu sagen, bei Start muss ich vorher einmal bewusst die Züge aktivieren. Wird wohl später entfernt.
Fazit:
Ich kann jetzt über zwei Taster alle ausgewählten Loks starten und anhalten. Außerdem kann ich mir selber aussuchen welche Lok heute Automatik fahren soll, und welche ich selber fahren möchte.
Außerdem kann ich dadurch jetzt alle Abläufe für die Loks einmal programmieren, und die Loks können alle darauf zugreifen. Dadurch ist es in Zukunft viel einfache Fehler zu finden und zu beheben und die Funktionen zu erweitern.
Dadurch erhält man die Möglichkeit auch Lok-bezogene Ereignisse zu programmieren.
Zur Übersicht empfehle ich eine Dummy-Lok mit einer Adresse in einem Format die immer frei bleibt (in meinem Fall MM 99). Außerdem ist es Hilfreich dort KEIN Bild aus zu wählen, sondern die Fragezeichen zu lassen. Diese werden in den Ereignissen mit dargestellt, und bieten eine bessere Übersicht zu eindeutig definierten Ereignissen (Wenn z.B. der ICE da drin ist, weiß ich das ist und bleibt immer der ICE) und bei übertragbaren Ereignissen (??? weil ich ja nicht definiert habe welche Exakte Lok es betrifft).
Hiermit möchte ich mich auch ganz herzlich für all eure Hilfe bedanken!
Und vielen Dank fürs Lesen.
Grüße
Steffen