Jump to content

fortlaufende Gleisnummern


fzonk

Empfohlene Beiträge

Hallo an Alle,

weiß zufällig jemand einen Trick wie man jedem Gleis einen eigenen Namen geben kann, ohne jedes Gleis einzeln per Hand (und Tastatur) zu ändern. Der Hintergrund ist dass ich sehr gern mit Objektvariablen und der Trigger Funktion arbeite, dies funktioniert aber nur wenn jedes Objekt einen einzigartigen Namen hat.

Ich arbeite gerade an einer sehr großen Anlage und es ist extrem Zeitaufwendig bei jedem Objekt den Namen per Hand zu ändern. Zum hinterlegen der Objektvariablen nutze ich zum Beispiel eine „Programmierlok“ diese setzt automatisch beim betreten der Gleise die gewünschten Variablen. Da ich nur noch mit Zahlen bei den Werten der Objektvariablen arbeite, kann ich auch in der EV hinterlegen das die Programmierlok vorlaufende Variablenwerte setzt (bei einem Projekt von @BahnLand abgeschaut und für eine sehr gute Lösung empfunden (y)). Jetzt wäre es auch schön wenn ich eine Lok über die Gleise fahren lassen könnte und diese automatisch die Namen der Gleise in fortlaufende Nummern ändert.

Vielleicht gibt es momentan noch keine Lösung dafür und es wäre eine Anregung für @Neo bei zukünftigen Versionen.

Gruß Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Frank

Das wär gar nicht so schlecht bei grossen Anlagen .

Wenn Du mit Variablen arbeiten kannst , dürfte es doch kein Problem sein eine Gleiszählung . Den man mit einen <wert +1> addieren und dem Gleis zuteilt .

Das ist nur eine Theorie von mir .                  Ermitteln - Auswerten - Zuordnen 

Vorstellung :

Erstes Gleis eine Nummer geben ( zB. Nummer "1" ) , mit Hilfe einer Lok jedes Gleis abfragen und den Wert um 1 erhöhen , danach zuteilen .

Sollte auch dann dauerhaft gelten .

Ob das mit der EV jetzt schon mögich ist kann ich nicht sagen - muss man versuchen .

 

Leider kann ich hierzu keine Beispiele geben !

Viele Grüße

H:xnS

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Brummi,

ja mit dem Gleis-Setzt-Tools kann man jedem Gleis ganz einfach eine eigene Nummer / Bezeichnung geben, aber mein Gedanke / Wunsch ist da wohl etwas spezieller, denn ich vergebe die Nummern meist mit einer gewissen Logik, damit ich zum einen die Gleise schneller wiederfinde und bei der Zuweisung der Objektvariablen diese leichter setzten kann. Dabei ist die Grundlage dass es eine logische Wiederholung gibt. Soweit ich es sehe verteilt zwar das Tool einzigartige Nummer, aber verteilt die „wahllos“, was mir nicht wirklich hilft.

image.thumb.jpeg.a97c97383cf126991d8c5dec46b2730e.jpeg

Als Beispiel habe ich ein Teil der Beispielanlage von der Schützenkapelle. Diese besteht aus 5 parallelverlaufenden Kreisen. Auf der rechten Seite des Bildes sieht man den Ansatz wie ich die Gleisnamen (Nummern) verteilt habe. Die Einerstelle steht für den Ring, die Zehner- und Hunderterstelle ist die fortlaufende Nummerierung und die Tausenderstelle ist nur die „Projektnummer“ (die sicherstellt das alle Gleise in gewünschter Numerischer Aufzählung wiedergegeben wird).

Jetzt wäre es schön wenn sich diese Nummernverteilung automatisch fortsetzen lässt. Bei dem setzten der Objektvariablen in den Gleisen kann ich jetzt schon eine Lok nehmen und über Variablen setzten, beim betreten eines Gleises, die gewünschte Zahl hinterlegen und dabei mit einstellen das diese sich beim betreten des nächsten Gleises automatisch um +10 erhöht. Soweit ich das sehe kann das Gleis-Setzt-Tools dies leider nicht und bringt mich damit nicht weiter.

Vielleicht übersehe ich auch nur etwas, dann helft mir bitte auf die Sprünge.

Gruß Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Frank,

in wie weit kann das Studio dich dabei unterstützen, wenn du allen Gleisen einen Namen nach einem ganz bestimmten Namensschema zuteilst? Das Studio kennt ja deine Logik mit den Ringen, Zehner- und Hunderterstellen nicht.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @Neo,

Wie schon geschrieben kann ich die (meine) Logik in Objektvariablen hinterlegen, das Gegenstück wäre quasi wenn es einen Befehl geben würde der den Gleisnamen ändern würde. Die einfachste Möglichkeit wäre in der EV bei Aktionen den Befehl „Namen setzen“ einzubauen, ähnlich wie „Beschriftung setzen“ nur dass es sich eben der Name des Objektes ändert. Vielleicht auch über „Variable setzen“, in Sinne von Trigger2._Nameändern.

Mir ist bewusst dass meine Idee sehr speziell ist und für die eigentliche Steuerung mit der EV nicht viel zu tun hat. Es wäre aber ein sehr hilfreiches Tool um schneller jedem Gleis einen eigenen Namen mit entsprechender Logik zu vergeben.

Um ein Beispiel zu bringen an welcher Stelle dies sehr Hilfreich wäre:

image.thumb.jpeg.1cc0e14471d03375d2aca8fb931e378e.jpeg

Dieser Schattenbahnhof verwaltet mehr als 50 Züge. Jeder Zug wird nach Länge sortiert, auf einem freien Gleis abgestellt und nach Zufall wieder gestartet. Für die komplette Steuerung habe ich nur 16 EV Ereignisse geschrieben. Alles andere ist in Objektvariablen hinterlegt, diese habe ich über eine „Programmierlok“ in den Gleisen hinterlegt. Nur war es eben sehr zeitaufwändig die Gleise vorher alle mit einer einzigartigen Nummer zu versehen, die Beschriftungslogik folgt dabei immer demselben Schema. In diesem Fall gibt es neunstellige Zahlen, wo jede Position in der Zahl eine bestimmte Bedeutung hat. Dies benötige ich für die Trigger Funktion, somit kann ich ein EV-Ereignis auf alle Abstellgleise anwenden.

Gruß Frank

P.S.: ein kleines sinnvolles Beispiel: ein Zug betritt ein Gleis, dabei soll das nächste Gleis überprüft werden ob es frei ist, wenn es belegt ist soll der Zug gestoppt werden. Über die Trigger-Funktion und fortlaufenden Nummern kann man dann einfach als Ereignis „Trigger2._Name“ „+1“ hinterlegen.

Bearbeitet von fzonk
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Frank,

so recht verstehe ich immer noch nicht, wie dir das Studio in deinem Fall helfen kann. Du hast eine Vielzahl von Gleisen, die sich alle unterschiedlich verhalten sollen. Dieses Verhalten steuerst du über Objektvariablen. Was hat das jetzt mit den Namen zu tun? Geht es dir am Ende nur darum, das angrenzende Gleis zu finden?

Grundsätzlich konzentriert sich die neue EV der nächsten Version V5 eher auf explizite Mechanismen, weg von den Objektnamen hinzu konkreten Objekteigenschaften oder eben auch Funktionen wie "Finde das angrenzende Gleis". Im Idealfall sollte Logik in Zukunft unabhängig von Namen definiert werden, sodass auch weiterhin Objekte doppelte Bezeichner besitzen können (bzw. diese auch geändert werden können, ohne die EV anpassen zu müssen).

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Frank,
solche Dinge müssen wir vertagen, bis Indizes verfügbar sind.
Ich habe jetzt etliche Kopfstände gemacht, um bei mir das Hüpfen der Züge zu vermeiden, dass da herrührt, dass die EV wirklich was zu tun hat. Nichts hilft wirklich.
Allgemein gültige Algorithmen sind immer langsamer als speziell angepaßte.
Auf der anderen Seite passieren so Merkwürdigkeiten wie das verdrehte Krokodil, wenn am Anfang der Demo die Texturen noch nicht gecachet sind und eine neue Kameraeinstellung gerade mal ein größeres Paket Texturen braucht.
Also: die EV kann die Grafik killen - und umgekehrt.
Diese EV ist für bislang 'normale' Szenarien gemacht. Wir zwei sprengen diesen Rahmen wohl etwas und dürfen uns dann nicht wundern.
Aber es ist ja Land in Sicht.

Mit Namensersetzungen wird es aber so oder so nicht einfach. Eine Unterstützung durch das MBS mit automatischer Durchnumerierung wäre schon schön.
Aber das ist dann der erste Schritt. Damit die Objekte dann so Namen bekommen, wie Du sie z.B. haben möchtest, müßte ein anderer mächtiger, vielleicht externer, Ersetzer her.
Vielleicht eine Zusatzfunktion in der EV, mit der eindeutige Namen ersetzt werden dürfen.
Gegenwärtig ist es ja auch so, dass eine Namensersetzung überall dort einen Effekt hat, wo auf die Variablen letztlich über einen Link zugegriffen wird.
Aber wehe, Du hast den Namen schon als Wert in Objektvariablen hinterlegt. Da kann MBS nicht mehr unterscheiden, ob sich das auf einen Variablennamen bezieht, oder ob es nur ein einfacher Text ist. Und wehe dem, es kämen noch Stringfunktionen hinzu.

Neo postet gerade... Ich schick das mal ab ohne es gelesen zu haben, sonst ist's vielleicht im Eimer.

Grüße
  Andy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @Neo

vor 39 Minuten schrieb Neo:

Geht es dir am Ende nur darum, das angrenzende Gleis zu finden?

Ja meist handelt es sich in der Tat um das angrenzende Gleis. Gerade bei eingleisigen Strecken die von beiden Seiten befahren werden, ist als Überprüfung, ob ein Befehl ausgelöst werden soll, es sinnvoll die Belegung des vorherigen Gleises zu prüfen. Bisher war es am einfachsten für mich die Gleise fortlaufend zu Nummerieren und dann das zu überprüfende als Objektvariable zu hinterlegen. Ich werde mich einfach mal in Geduld üben und gespannt auf V5 warten. Die neue Version scheint viele gute Neuerungen mit sich zu bringen.

 

vor 38 Minuten schrieb Andy:

Gegenwärtig ist es ja auch so, dass eine Namensersetzung überall dort einen Effekt hat, wo auf die Variablen letztlich über einen Link zugegriffen wird.
Aber wehe, Du hast den Namen schon als Wert in Objektvariablen hinterlegt.

Oh wie gut kann ich nachvollziehen was du gerade meinst und genau bei den Verlinkungen über Objektvariablen ist es sehr hilfreich wenn man nicht erst jedes Gleis umbenennen muss. Aber es scheint ja Licht am Ende des Tunnels zu geben.

 

vor 18 Minuten schrieb BahnLand:

bei de rREchnung mit solch großen Zahlen ist große Vorsicht geboten! Schau Dir diesbezüglich bitte diese Beitragsfolge an!

Viele Grüße

Danke für den Hinweis, ich habe das Thema damals schon sehr aufmerksam verfolgt. Für Berechnungen mit Objektvariablen nutze ich viel kleinere Zahlen und zur Überprüfung arbeite ich oft mit > (größer als) und < (kleiner als), damit umgehe ich, wo es Möglich ist, die exakte Ergebnisprüfung und kann mit kleinen Abweichungen ohne Probleme weiter arbeiten.

Gruß Frank

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo fzonk

Ich kann Dir das aus meiner Erfahrung mitteilen. Wenn Du jeden Artikel, in Deinem Fall einige Gleise oder sonst irgend ein Artikel aus dem Katalog nummerien möchtest dann kannst Du das auch folgenderweise machen. h.w.stein-info hat es schon so ähnlich beschrieben. Gib dem Namen des Artikels oder der Nummer des Artikels ein Bindestrich, (Minuszeichen) dazu und eine fortlaufende, aufsteigende Nummer.

Auf diese Weise, recht einfach, kannst Du dein Problem lösen.

Das Programm erkennt und akzeptiert diese eingegebene Nummer. So hast Du für jedes Gleis eine indviduelle Nummer die es dann zweimal oder auch mehrmals dann nicht mehr gibt.

Zu Deiner Info: Im Hintergrund behandelt das Programm sämtliche Artikel, das heißt Namen,Gleise und selbst Nummern usw mit einer indviduelen Nummer. Nur sieht man das nicht.

Eine fortlaufende, automatische Nummerierung bei größeren Anlagen wäre der nächste Schritt so wie Du es oben schon vorgeschlagen hast. So was nenne ich einen numerischen, automatischen Zyklus.

 

MfG

Morsdorf

Individuelle Artikelbezeichnung und Nummerierung.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @Morsdorf

Erst einmal vielen Dank für deine Vorschläge. Die rein nummerische Bezeichnung hat für mich den Vorteil dass ich die EV Berechnungen damit anstellen lassen kann, dies funktioniert nicht sobald ein Bindestrich, Sonderzeichen oder Buchstabe mit in dem Name sind.

vor 10 Stunden schrieb Morsdorf:

Zu Deiner Info: Im Hintergrund behandelt das Programm sämtliche Artikel, das heißt Namen,Gleise und selbst Nummern usw mit einer indviduelen Nummer. Nur sieht man das nicht.

Dies stimmt nur zum Teil. Grundlegend hast du recht. Theoretisch können alle Bauteile erst einmal denselben Namen haben und man kann sie so über die EV mit „einfachen“ Steuerbefehlen ansteuern. Ein Problem wird es wenn du mit Objektvariablen und der der Trigger Funktion arbeitest, in diesem Fall kann die EV dies nur verarbeiten wenn die Objekte einen einzigartigen Namen haben, unabhängig davon ob er nur aus Zahlen oder Buchstaben besteht. Wenn zwei oder mehr Objekte denselben Namen haben, die über die Trigger Funktion angesteuert werden passier gar nichts, da die EV (Stand V4) dies dann nicht weiter verarbeiten kann.

Gruß Frank

Bearbeitet von fzonk
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo zusammen.

Das was sich fzonk vorstellt ist genauso wie bei einer Excell-Tabelle in der eine Spalte mit einem aufteigenden Wert gefüllt wird. Man gibt einen gewünschten Wert in einer Zelle an, markiert die weiteren Zellen die gefüllt werden sollen und gibt dann noch einen Zählwert ein um wieviel der Startwert erhöht werden soll.

Dafür müsste für das MBS ein Plug-In programmiert werden das folgende Dinge erfüllt. Das erste markierte Gleis ist der Startpunkt. Nun erfasst das Plug-In die Gleise die nachfolgend selektiert werden und legt damit auch die Richtung der neuen Bezeichnung fest. Dann noch die Gleisbezeichnung eingeben z.B. "1011" und dann noch den Zähler eingeben um wieveil das Ganze erhöht werden soll, z.B. "10". Und dann ab die Lutzi und die selektierten Gleise werden fortlaufen der neuen Bezeichnung (Nummerierung) beschrieben.

Und jetzt kommt das große Problem !!!
Leider kann ich so etwas praktisch nicht umsetzen. Doch für einen versierten Programmierer dürfte das nur ein Lächeln hervor rufen, wenn nicht nur ein kleines Hüsteln.

Schönes Festtage und einen guten Rutsch wünscht der

Stephan

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,
  *räusper'

Weihnachtsgeschenk für Frank - hat er sich verdient!

Gruß
  Andy

 

mbsren.zip

p.s.: Frank, wenn Du da so einen großen Block mit gleichen Namen hast, (aber nur innerhalb dieses Blocks), dann lasse das Programm
zweimal drüberlaufen. Beim ersten Mal wird er zwar wahllos diese Namen ersetzen, aber immerhin haben dann alle einen anderen Namen.
Beim zweiten Mal wird er dann die Richtigen ersetzen. Nimmst halt für beide Läufe unterschiedliche Startwerte. Geht übrigens nur mit Zahlen
und macht auch keine führenden Nullen!

pps: bei Deinen fünf Spuren oben, mußt Du das Programm natürlich auch fünfmal mit anderen Startwerten starten. Es kann jederzeit in einer MBS-Sitzung gestartet und beendet werden.

Bearbeitet von Andy
pps
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Andy,

vielen Dank für deine Mühe. Ich habe es probiert zu testen, jedoch ohne Erfolg. Die Anwendung habe ich zum Laufen gebracht. Aber schau dir einfache den Screenshot an, meines Erachtens habe ich es soweit richtig gestartet.

image.thumb.jpeg.29b3272a41a9a3a9267f6626650ed024.jpeg

Ich habe dann eine Lok den Kreis abfahren lassen (mehrfach) aber geändert hat sich nichts.

Gruß Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du hast da alles absolut richtig gemacht, die Release-Version macht einfach nix, die Debug-Version läuft. Weiß der Himmel.
Habe die Debug-Version angehängt mit kleinen Modifikationen:
Gibst Du keine Parameter mit auf den Weg, fragt er danach.
Du kannst jetzt auch Deine Lok anhalten, auf die Konsole gehen, eine Taste drücken und neue Werte eingeben.

Gruß
  Andy

mbsren.zip

Edit: Okay, wenn die Probleme mit der Redistributable macht, versuche diese mal. Die ist mit dem VC 2017 erstellt und läuft auch als Release.

mbsren_vc2017.zip

Bearbeitet von Andy
edit: neue Version
Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...