Spurwechsel Posted May 21 Posted May 21 Moin zusammen, ich habe mal wieder ein Problem und komme trotz Forumsbeiträge nicht weiter. Bei der Fülle der Informationen habe ich eventuell den entsprechenden Tipp/Beitrag auch übersehen. Ich möchte bei meinen Bahnhöfen die Geschwindigkeit nach Verlassen des Bahnhofs schlagwortgesteuert einstellen. Die Geschwindigkeit der Ausfahrsignale sind alle wie folgt eingestellt: Hp0 = verzögern auf 0 km/h, Hp1 = beschleunigen auf 80 km/h, Hp2 = verzögern auf 40 km/h und beschleunigen auf 40 km/h. Jetzt zum Problem: Nach dem Verlassen des Bahnhofbereiches (bzw. eines Blocksignals auf der Strecke) soll die durch die Signale vorgegebene Geschwindigkeit geändert werden. So lange der gesamte Zug das Signal nicht passiert hat ist diese Änderung nur teilweise möglich. Beispielsweise soll der vor dem Signal 2_1 stehende Zug nach Betätigung auf Hp1 zuerst auf 80 km/h beschleunigt werden und kurze Zeit später auf 160 km/h beschleunigen (Schaltkontakt Signal 2_1). Das funktioniert leider nicht und der Zug fährt konstant mit 80 km/h weiter. Ähnlich verhält es sich auch bei Hp2 mit 40 km/h. Bei einer anderen Situation gibt es unterschiedliches Verhalten. Kommt ein Zug mit 160 km/h zum auf Hp1 stehenden Signal, so wird er korrekt ungebremst am Signal vorbeifahren. Steht das Signal auf Hp2, so wird der Zug korrekt auf 40 km/h abgebremst und nach dem Passieren des Signals korrekt auf 160 km/h beschleunigt. Ich verstehe nicht, warum bei einem zuvor stehenden Zug die Endgeschwindigkeit nicht erreicht wird. Der Schaltkontakt hat scheinbar keinen Einfluss. Es macht auch keinen Unterschied, ob ich mit einem Gleiskontakt oder mit einem Schaltkontakt die Endgeschwindigkeit (v_max) einstelle (siehe Kontakte Signal 1_x). Nachdem ich jetzt mehrere Tage keine Lösung gefunden habe, wende ich mich jetzt an die Spezialisten hier im Forum. Ach ja, der Aufwand in der EV soll klein wie möglich sein, da es bei meiner großen Anlage über 100 Signale betrifft. Mit LUA kenne ich mich leider noch nicht aus. Liebe Grüße Spurwechsel Signaltestanlage_5.mbp
Eggu Posted May 22 Posted May 22 Eine erste kurze Analyse: Zug wartet bei Hp0/Signal 2_1, schalten auf HP1: beschleunigen auf 80 (gem. Signal-Wert), Zug erreicht Schalkontakt (die 80 ist noch nicht erreicht!), Geschwindigkeit zuckt kurz auf 160, da er aber auch noch auf dem Signal-Kontakt steht, und er die 80 noch NICHT erreicht hat, bekommt das nun wieder Prio und er beschleunigt weiter bis auf 80. Stelle ich zB beim Signal 20 statt 80 ein, so hat der Zug beim Erreichen des Schaltkontakts die 20 schon erreicht, und die 160 wird voll wirksam. Gruß Eggu
Spurwechsel Posted May 22 Author Posted May 22 Moin @Eggu, vielen Dank für den Tipp. Problem gelöst. Ich hatte gehofft, dass die neue Geschwindigkeit (160) einfach den alten Wert (80) überschreibt. Da bei mir alle Bahnantriebe den gleichen Beschleunigungswert haben, muss ich die unterschiedlichen Beschleunigungsstrecken glücklicherweise nicht berücksichtigen. Lieben Gruß Spurwechsel
Eggu Posted May 22 Posted May 22 vor 11 Stunden schrieb Spurwechsel: Ach ja, der Aufwand in der EV soll klein wie möglich sein, da es bei meiner großen Anlage über 100 Signale betrifft Noch ein Tipp zum Aufwand: Ich versuche inzwischen zu vermeiden, für jeden Kontakt und/oder jedes Signal einen eignen Eintrag in der EV zu erzeugen, da ja meistens "ähnliche" Aktionen durchgeführt werden sollen. Meistens gelingt es, mit einigen Schlagworten Gruppen von Signalen/Kontakten zu unterscheiden, und dann nur pro Schlagwort ein Event zu formulieren. Spezifische Unterschiede kann man auch weiterhin berücksichtigen, indem man in dem Signal/Kontakt Objekt-Variablen (so genannte Parameter) anlegt, und diese dann im Event verwendet (gemäß dem Schema Auslöser.Parameter). Deine v_max Variable ist ja zB solch ein Parameter, diesen fragst du in einer Bedingungskette ab, und setzt dann entsprechend die Lok-Geschwindigkeit. Ich würde es vorziehen, einfach nur die Existenz dieser Variablen abzufragen, und wenn vorhanden, die Lokgeschwindigkeit direkt auf diesen Variablenwert zu setzten. Dann müsstest du im Event auch nichts ändern, falls 'mal weitere v_max-Werte hinzu kommen. Aber das ist letztendlich eine Frage des persönlichen Stils und Geschmack. Gruß Eggu
Spurwechsel Posted May 22 Author Posted May 22 (edited) vor 13 Minuten schrieb Eggu: Ich würde es vorziehen, einfach nur die Existenz dieser Variablen abzufragen, und wenn vorhanden, die Lokgeschwindigkeit direkt auf diesen Variablenwert zu setzten. Dann müsstest du im Event auch nichts ändern, falls 'mal weitere v_max-Werte hinzu kommen. Moin Eggu, würde ich gerne machen. Gewusst wie. Und da fehlt mir das Wissen. Wo kann ich das nachschlagen/-lesen? Das Forum ist groß. Gibt es Beispiele? Lieben Gruß Spurwechsel Edited May 22 by Spurwechsel Frage nach Beispielen eingefügt
Roter Brummer Posted May 22 Posted May 22 Hallo @Spurwechsel, du müsstest einfach allen betroffenen Signalen ein gemeinsames Schlagwort verpassen. Wie dieses Schlagwort heißt, spielt keine Rolle. Dann legst du ein Ereignis beim Verlassen eines Gleiskontakts mit diesem Schlagwort an. Dort kannst du dem auslösenden Fahrzeug entweder eine fest definierte Geschwindigkeit zuweisen oder die Geschwindigkeit aus einer Variablen innerhalb des auslösenden Fahrzeugs. Es sind dann keine zusätzlichen Gleiskontakte nötig. HG Brummi
Phrontistes Posted May 22 Posted May 22 Hallo @Spurwechsel, nur weil es mir auffiel - das geht auch einfacher: Beste Grüße Phrontistes
Eggu Posted May 22 Posted May 22 vor 37 Minuten schrieb Phrontistes: nur weil es mir auffiel - das geht auch einfacher: ... das hatte ich in meinem "Tipp" gemeint und beschrieben, aber danke für die direkte Veranschaulichung mit Lösung. Aber ich würde zumindest die Existenz dieser Objekt-Variablen (v_max) abfragen und einen Default-Zweig einführen (entweder dann gar nichts tun oder default-Geschwindigkeit setzen). Gruß Eggu
Phrontistes Posted May 22 Posted May 22 vor einer Stunde schrieb Eggu: Aber ich würde zumindenst die Existenz dieser Objekt-Variablen (v_max) abfragen Logo, das mache ich in meinen EVen immer nachdem die Kastratensprache Lua es noch nicht einmal verlangt, dass man Variablen deklariert bevor man sie benutzt. Aber hier wollte ich nur ergebnisgleich (aber kürzer) umformulieren, was ich vorgefunden habe, weil ich es nicht sehen konnte, wie sich @Spurwechsel mit 3 if-Bedingungen und sechs festen Werten einen abbricht, obwohl es mit einem Einzeiler (und ohne feste Werte) genauso geht. Und ganz nebenbei spreche ich das Fahrzeug und nicht den Gleiskontakt an, weil mir das intuitiver erscheint - auch wenn es eigentlich egal ist. Beste Grüße Phrontistes
Roter Brummer Posted May 22 Posted May 22 vor 3 Stunden schrieb Eggu: Aber ich würde zumindest die Existenz dieser Objekt-Variablen (v_max) abfragen und einen Default-Zweig einführen (entweder dann gar nichts tun oder default-Geschwindigkeit setzen). vor 1 Stunde schrieb Phrontistes: Logo, das mache ich in meinen EVen immer Das ist meiner Meinung nach nicht nötig, denn wenn die Variable nicht existiert, wird das Ereignis auch nicht ausgelöst. In dem Fall ist die am Signal eingestellte Geschwindigkeit automatisch der Default-Wert, oder um es ohne denglisch zu sagen, der vor-eingestellte Wert. So soll es ja eigentlich auch sein. HG Brummi
Goetz Posted May 22 Posted May 22 vor 1 Minute schrieb Roter Brummer: wenn die Variable nicht existiert, wird das Ereignis auch nicht ausgelöst Sorry Brummi, aber da irrst du dich. Du vertauscht da gedanklich das Schlagwort mit der Objektvariablen für die Maximalgeschwindigkeit. Wenn letztere nicht existiert, bekommt das Fahrzeug die Geschwindigkeit 0 zugewiesen. Viele Grüße Götz
Roter Brummer Posted May 22 Posted May 22 Stimmt. Asche über mein Haupt. Und als Strafarbeit 100 mal schreiben: "Ich stelle nie mehr Behauptungen auf, ohne diese vorher überprüft zu haben." HG Brummi
Phrontistes Posted May 22 Posted May 22 vor 2 Stunden schrieb Phrontistes: auch wenn es eigentlich egal ist Der interne Aufwand unterscheidet sich aber bei den beiden logisch gleichwertigen Varianten, also Den Unterschied sieht man in der Übersetzung. Während das Fahrzeug (erste Variante) direkt zur Verfügung steht local v = vehicle if v:hasEngine() then v.engine.active = true v.targetSpeedAbs = vehicle.variables["v_max"] end muss es erst mal in einer Schleife ermittelt werden wenn man den Gleiskontakt (zweite Variante) nimmt: local vehicles = layout:getVehiclesOn(contact) for _, vehicle in pairs(vehicles) do if vehicle:hasEngine() then vehicle.engine.active = true vehicle.targetSpeedAbs = vehicle.variables["v_max"] end end Also besser auch aus diesem Grund das Fahrzeug ansprechen.
Spurwechsel Posted May 22 Author Posted May 22 Moin zusammen und vielen Dank für die vielen Tipps. Das Programm nach dem ersten Tipp von Eggu funktionierte schon prächtig. Der zweite Tipp von Roter Brummer verringert die Anzahl der Einträge in der EV enorm. Außerdem beschleunigen die Züge unabhängig von der Länge erst sobald der Bahnhofsbereich verlassen wird (ist nicht ganz präzise, aber damit kann ich gut leben). Dank auch an Phrontistes und Götz für die zusätzliche Tipps. Das Problem, dass ein Fahrzeug anhält wenn es kein Schlagwort für die Geschwindigkeit hat konnte ich leider nicht lösen. Wenn die Lösung zu viele EV-Einträge oder LUA benötigt, werde ich alle Fahrzeuge mit einem entsprechenden Schlagwort versehen (die meisten Fahrzeuge haben aber eh schon ein Geschwindigkeitsschlagwort). Anbei meine Testanlage für ggf. weitere Kommentare und Tipps. Liebe Grüße Spurwechsel Signaltestanlage nach Roter Brummer.mbp
Atrus Posted May 22 Posted May 22 vor 4 Stunden schrieb Eggu: ... das hatte ich in meinem "Tipp" gemeint und beschrieben, aber danke für die direkte Veranschaulichung mit Lösung. Aber ich würde zumindest die Existenz dieser Objekt-Variablen (v_max) abfragen und einen Default-Zweig einführen (entweder dann gar nichts tun oder default-Geschwindigkeit setzen). Gruß Eggu Hallo zusammen und Gruß an@Eggu sorry wenn ich mich da jetzt auch noch dazu melde aber das ist ein perfektes Beispiel für meinen Zugang zur Vermeidung von solchen Konflikten. Also ich nenne das für mich ab jetzt "Dual-Security". Also eine Zwei Faktor Abfrage. Klingt am Anfang vielleicht etwas übertrieben, steigert aber das Benutzen von Variablen enorm finde ich. Also z.B. beim Betreten eines Kontaktes frage ich ab, ob die Variable, die in der Lok hinterlegt ist, einen gewissen Wert besitzt. Um aber möglichen Konflikten aus dem Weg zu gehen, gibt es immer noch eine zweite Abfrage über den Zustand einer anderen Variable. Also z.B. den Lade Status eines bestimmten Wagons, der im Zusammenhang mit dem jeweiligen Ereignis relevant ist. In diesem Fall "Empty" Und nur wenn diese beiden Faktoren zutreffen, wird das Ereignis ausgeführt. Da die möglichen Zustände der jeweiligen Variablen aber ein enormes Potential an Varianten haben können wie z. B. "Leer" "Benzin" "Holz" "Rangieren" "Lokfahrt" und viele mehr, dürfen sich die, pro Ereignis halt nur nicht "dual" überschneiden, dann ist alles gut. Ich habe da im Laufe der Jahre und natürlich mit Hilfe des Forums so ziemlich alles mögliche ausprobiert aber das ist für mich am Einfachsten. Die enorme Anzahl an möglichen Bedingungen haben mich am Anfang sehr verwirrt. Aber bei der Einschränkung auf zwei Faktoren finde ich das voll simple. Ist gerade für den Rangierbereich oder einfach für Weichen oder Signale die vom selben Zug oder Lok mehrmals befahren werden ideal. Auch beim Auslösen unterschiedlicher Fahrstraßen, die aber im gleichen Signal hinterlegt sind usw. Das ist vielen von euch sicher schon seit Langem klar aber ich habe das erst so eben wirklich kapiert. Und vielleicht hilft es ja manchen, die erst neu bei uns sind. In diesem Sinne, weiterhin viel Spaß im MBS, I'm loving it... LG Atrus
Atrus Posted May 22 Posted May 22 Noch ein weiteres Beispiel dazu wäre, das mit "Dual-Faktor"ein und das selbe Signal sechs Mal betreten wird... Dieses Signal aber nur vier mögliche Fahrstraßen hinterlegt hat... Es werden hier also die selben Fahrstraßen sogar mehrmals ausgelöst, die aber am Ende verschiedene Ziele erreichen. Nur mit jeweils unterschiedlichem "Dual-Faktor". Ohne Konflikte. Ist wirklich nicht schwer. Nur so als Beispiel. Noch einmal LG Atrus
Goetz Posted May 22 Posted May 22 (edited) vor 1 Stunde schrieb Spurwechsel: Das Problem, dass ein Fahrzeug anhält wenn es kein Schlagwort keine Variable für die Geschwindigkeit hat konnte ich leider nicht lösen. Da kann ich dir helfen: Viele Grüße Götz Edited May 22 by Goetz
Spurwechsel Posted May 22 Author Posted May 22 Moin Götz, fantastisch, es funktioniert prima. Auch wenn es sehr unwahrscheinlich ist, was passiert wenn zwei Züge gleichzeitig einen Signalkontakt verlassen? Lieben Gruß und vielen Dank Spurwechsel P.S. "Gefällt mir - Haken" gibt es erst später. Ich hatte wohl zu viele Häkchen gesetzt. Signaltestanlage Fahrzeug ohne Schlagwort Defaulteinstellung.mbp
Eggu Posted May 22 Posted May 22 vor 11 Minuten schrieb Spurwechsel: was passiert wenn zwei Züge gleichzeitig einen Signalkontakt verlassen? .. dann wird für jeden Zug (bzw. für jeden ausgelösten Event) eine eigene Instanz dieses Events ausgeführt, das ist kein Problem. Gruß Eggu
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now