Jump to content

Grundlagen zu Variablen


schlagerfuzzi1

Recommended Posts

hallo goetz, wenn du das als humor betrachtest, muß ich dich und feuerfighter, (mit der netten geschichte)...aufklären und euch leider entäuschen, den das was ihr gesehen habt,ist mir komplett ohne scherz, selber passiert ist....diese geschichte entspricht zu 100% meinen Ereignis...das ich selber mit und durchgemacht habe incl....allen zahlen....entspricht das der vollen und ehrlichen durchgemachten zeit...und der reinen Wahrheit !!!....ich habe aus lauter frust,>:( nur diese anlage gebaut.....................ABER DADURCH HABE ICH JETZT DEN VOLLEN DURCHBLICK MIT VARIABLEN BEKOMMEN  .:D:D.......man hat den Vorteil hier im MBS, dass man ordentlich Dampf ablassen kann:D:D(y)....DANKE AN NEO(y).....gruß schlagerfuzzi

Link to comment
Share on other sites

Hallo  goetz kanst du noch andere beispile mit der variabel so erklären da man die Geschwindigkeit der loks anzeigen lassen kann konnte mann die dan zum anhalten bringen wen eine angegebene Geschwindigkeit überschritten wird dan konnte man doch eine radakontrolle machen wo die Autos von der Polizei gestopt wiert weil si zu schnel sind das mit dem ovahl was du hir geschriben hast habe ich auch hinbekommen wäre suber wen du nach mehr davon machs was man alles machen kann  durch deine Erklärung ferstehe ich das auch

Link to comment
Share on other sites

Hallo Aloys,
hier ist ein Vorschlag, der zwei Ereignisse nutzt.

  1. Im ersten Ereignis wird die aktuelle Geschwindigkeit in einer Variablen zwischengespeichert.
  2. Im zweiten Ereignis wird gprüft, ob die Geschwindigkeit über einem bestimmten Wert liegt oder nicht und dann entsprechend reagiert.

 

  1. Bau ein Oval
  2. Such dir ein Gleis aus, welches bei Betreten ein Ereignis auslöst. 
  3. Setz ein Beschriftungsfeld daneben 
  • Ereignis: Zug betritt Gleis
  • Lok: alle Loks
  • Gleis: Das welches du ausgesucht hast
      
  • Aktion: Variable setzen
  • Variable: Geschwindigkeit
  • Wert: $_Trigger1._CurrentSpeed

 

  • Ereignis: Variable wird gesetzt
  • Variable: Geschwindigkeit
  • Wert: >0
     
  • Bedingung: Wert der Variablen
  • Variable: Geschwindigkeit
  • Wert: >150
     
  • Aktion wenn Bedingung erfüllt: Beschriftung setzen
  • Beschriftung: Beschriftung
  • Text: zu schnell
     
  • Aktion wenn Bedingung NICHT erfüllt: Beschriftung setzen
  • Beschriftung: Beschriftung
  • Text: alles bestens

 

Die unterschiedlichen Textausgaben sind natürlich nur ein Beispiel. Ebenso gut könntest du anhand der Variablen eine Weiche stellen und so beispielsweise zu schnelle Autos aus dem Verkehr ziehen. Oder einen Blitzer auslösen (falls es sowas als Modell im MBS gibt).

 

Link to comment
Share on other sites

Hallo goetz köntest du hir oder bei wiki ein treht mit solchen einfachen Anleitungen Und beispilen mit variabelen die hir möglich sind

(trigge opjegte schalten usw.) machen wäre für Anfänger super um zu lernen danke noch mahl für die anderen beispile

Edited by aloys63
Link to comment
Share on other sites

Hallo Kann ich nur einen Text in der Beschriftung machen wollte auf eine Beschriftung mehrere züge anzeigen lassen wie eine liste ist das möglich und warum werden wagongs und loks die geschoben werden nicht erkant Noch ein vorschlagt neo könnte man in der ev bei variabel setzen die mit Trigger speichern damit man diese nich selber schreiben muß wileicht so wen man variabel setzen auswählt auf den Pfeil neben Name klekken und es erscheint liste mit Trigger Name/spiht und die anderen wo Trigger vor mus

Link to comment
Share on other sites

Der zweigleisige Bahnübergang - Schritt für Schritt

In den nächsten Beiträgen möchte ich Schritt für Schritt und ausreichend bebildert erklären, wie man einen zweigleisigen Bahnübergang mit fester Fahrtrichtung für beide Gleise per Ereignisverwaltung steuern kann.

Die passende Anlage dazu, komplett mit markierten und eindeutig benannten Gleisen, befindet sich im Anhang dieses Postings. Sie muss lediglich entsprechend der Anleitung mit einer Ereignisverwaltung versehen werden.

Um den Zweck der verschiedenen Einträge in der EV verständlich zu machen, beginne ich mit einer sehr einfachen Steuerung, die aber fehlerhaft arbeitet und in weiteren Schritten entsprechend korrigiert werden muss. Denn meines Erachtens genügt es nicht, eine "perfekte" Lösung anzubieten. Ich finde es genauso wichtig, dass man Erfahrungen mit Lösungswegen sammelt, die letztlich nicht zum Ziel führen.

Das Tutorial beginnt mit dem nächsten Posting.

BUe Tutorial.mbp

Link to comment
Share on other sites

hallo goetz.....schlagerfuzzi ist dabei:D...danke schon mal für die Infos....man (y) lernt nie aus:D:D, habe zwar schon einige Erfahrungen gemacht, aber man will ja immer dazu lernen.....dank deiner großartigen hilfe bin ich jetzt schööön vorwärts gekommen...@ aloys63...ich habe selber schon einiges ausprobiert, was goetz mir beigebracht hat....gruß schlagerfuzzi 

Link to comment
Share on other sites

Schritt 1 - Schranken öffnen

Im ersten Schritt soll der Personenzug die Schranken öffnen, sobald er den Bahnübergang passiert hat. Das ist dann der Fall, wenn der Zug das grüne Gleis im äußeren Ring verlässt.

56ccbfc37f354_BUeTutorial01.thumb.JPG.92

Es ist ratsam alle Ereignisse, die den Bahnübergang (kurz: BÜ oder BUe) betreffen, in einem Ordner zusammenzufassen. So behält man später einen besseren Überblick, wenn die Ereignisverwaltung (kurz: EV) mehr steuert  als nur einen BÜ.

56ccbfc424dde_BUeTutorial02.JPG.75192b76

Jetzt kann man die zugehörigen Ereignisse in diesem Ordner erstellen:

56ccbfc4a8b55_BUeTutorial03.JPG.1e5871ca

Der erste Eintrag in der EV legt fest, was passiert wenn der Zug das grüne Gleis verlässt:

56ccbfc551c05_BUeTutorial04.JPG.f410d0aa

Beide Schranken sollen in diesem Fall geöffnet werden. Das erreicht man, indem man die im Modell enthaltene Animation startet:

56ccbfc6c392f_BUeTutorial05.thumb.jpg.ae

Damit die Schlagbäume hoch gehen, muss die Animation rückwärts ablaufen:

56ccbfc73d490_BUeTutorial06.jpg.4bf9dd2a

Für die Startposition muss "Aktuell" gewählt werden. Denn sonst läuft die gesamte Animation bei einer schon geöffneten Schranke ein zweites Mal ab. (Für das Schließen der Schranken gilt später das selbe!)

Weil die beiden Schlagbäume zwei unabhängige Modelle sind, muss das Ereignis zwei Animationen starten. Eine für jede Schranke:

56ccbfc7979e0_BUeTutorial07.jpg.efc7d79b

Setzt man den Personenzug jetzt in Bewegung, dann öffnen sich beide Schranken, sobald er das grüne Gleis hinter sich gelassen hat.

 

 

Edited by Goetz
Korrektur in der Erklärung zur Startposition "Aktuell"
Link to comment
Share on other sites

Schritt 2 - Schranken schließen

Jetzt soll der Personenzug die Schranken schließen, bevor er den Bahnübergang passiert. Und zwar früh genug damit die Schranken geschlossen sind, bevor der Zug den BÜ erreicht.

Das rot markierte Gleis liegt weit genug entfernt um als Auslöser zu dienen, wenn die Geschwindigkeit des Zuges nicht mehr als 350 mm/sec beträgt. Bei 200 mm/sec sieht es noch besser aus. Das soll für dieses Beispiel genügen.

56ccbfc81fffb_BUeTutorial08.thumb.JPG.8c

Das Prinzip ist nahezu identisch wie beim Öffnen der Schranken. Aber das Ereignis ist jetzt "Zug betritt Gleis". Das Gleis ist 2200 (außen rot). Und die beiden Animationen müssen vorwärts ablaufen:

56ccbfc87c4f9_BUeTutorial09.jpg.0174438e

Damit sollte der Personenzug Runde für Runde die Schranken korrekt schließen und öffnen.

Edited by Goetz
Link to comment
Share on other sites

Schritt 3 - Ereignisse für den Güterzug kopieren

Für den Güterzug kann man jetzt zwei weitere Einträge in der EV vornehmen. Und da sie nahezu identisch mit den Einträgen für den Personenzug sind,  kann man sich viel Arbeit ersparen indem man die beiden vorhandenen Einträge kopiert.

56ccc36e2f5ea_BUeTutorial10.jpg.52c0dbb1

Anschließend kann man diese Einträge umbenennen 

56ccc36ed7d5b_BUeTutorial11.jpg.4946fe18

und die passenden Gleise als Auslöser wählen.

56ccc36f47cb1_BUeTutorial12.jpg.8c28abba

Jetzt schließt und öffnet auch der Güterzug bei jeder Runde korrekt die Schranken.

Link to comment
Share on other sites

Schritt 4 - Variable einrichten

Aber wenn beide Züge gleichzeitig ihre Runden drehen, dann geht die Sache manchmal schief. Dann nämlich, wenn ein Zug die Schranken öffnet, nachdem der andere Zug schon das Gleis zum Schließen der Schranken überfahren hat:

56ccc3f75b702_BUeTutorial13.thumb.JPG.36

Der Güterzug hat das rote Gleis schon überfahren. Der Personenzug verlässt gleich das grüne Gleis. Und dann öffnen sich die Schranken, obwohl der Güterzug den BÜ noch passieren muss. Er kann die Schranken aber nicht erneut schließen, weil er den Punkt für diese Aktion schon hinter sich hat.

 

Unser Prinzip, welches für jeden einzelnen Zug perfekt funktioniert, reicht also offensichtlich nicht mehr, wenn beide Züge gleichzeitig unterwegs sind. 

Um diese Aufgabe zu lösen muss man zählen, wie viele Züge den BÜ passieren sollen und wie viele Züge ihn schon passiert haben. Und für diesen Zweck sind Variablen perfekt geeignet. Denn man kann das, was in einer Variable steht, ändern. Also beispielsweise eine Zahl rauf und runter zählen.

Eine Variable kann man einfach in der EV erzeugen, indem man ihr dort einen Namen gibt und einen Wert zuweist. Man kann die Variable aber auch  einem bestimmten Modell zuordnen. Das kann ganz nützlich sein, um später bei vielen Variablen eine besseren Überblick zu behalten. Und bei Rollmaterial ist es besonders nützlich, weil es auf diese Weise immer seine Variablen mit dabei hat.

Im konkreten Beispiel ist es nicht nötig und auch nicht von besonderem Vorteil, die Variable in einem Modell anzulegen. Ich will es trotzdem tun, um bei dieser Gelegenheit zu zeigen, wie das funktioniert.

 

Neben dem Bahnübergang steht ein kleines Häuschen für den Schrankenwärter. Und das bietet sich doch geradezu dafür an, dort aufzuschreiben wie viele Züge den BÜ passieren wollen bzw. passiert haben.

Wählt man das Modell aus, so kann man in den Eigenschaften unten rechts eine Liste öffnen.

(zum Auswählen bitte auf das Dach des Häuschens klicken. Auf der Wand befindet sich ein unsichtbares Textfeld)

56ccc3f873d88_BUeTutorial15.thumb.jpg.14

Diese Liste ist zunächst leer. 

Hier legt man jetzt eine Variable an, gibt ihr einen Namen (im Beispiel: Zahl) und einen Wert (im Beispiel: 0). Anschließend kann man den Wert in dieser Variablen durch Ereignisse ändern und solche Änderungen wiederum als Ereignis auswerten, das weitere Aktionen auslösen soll.

 

In der EV kann man jederzeit prüfen, welche Variablen es gibt und welchen Wert diese Variablen aktuell speichern.

56ccc3f8e426e_BUeTutorial16.jpg.c9023050

Das ist nützlich wenn man prüfen möchte, ob beispielsweise richtig gezählt wird. Außerdem kann jeder Eintrag mit einem Doppelklick geöffnet und geändert werden, falls mal etwas durcheinander geraten sein sollte.

56ccc3f951ab3_BUeTutorial17.jpg.3656a016

Link to comment
Share on other sites

Schritt 5 - ankommende Züge zählen

Um jetzt zu zählen, wie viele Züge den BÜ passieren werden, muss den beiden Ereignissen "BUe schließen außen" und "BUe schließen innen" eine weitere Aktion hinzugefügt werden.

 

Die Aktion heißt: "Variable setzen".

56ccc504f3040_BUeTutorial18.jpg.c32b46df

Die Variable heißt "Schrankenwärter.Zahl" und kann aus der Liste ausgewählt werden.

Der Wert ist "+1", wobei das Plus dafür sorgt, dass zum aktuellen Wert 1 addiert wird.

56ccc505a003a_BUeTutorial19.jpg.bf3e5b48

Falls der Wert vorher 0 war, dann ist er nach Auslösung des Ereignisses 1

War der Wert vorher 1, dann ist er jetzt 2

 

Mit jedem Zug, der über eins der beiden roten Gleise fährt, wird die Zahl also um 1 größer.

Link to comment
Share on other sites

Schritt 6 - durchgefahrene Züge zählen

Wenn ein Zug ein grünes Gleis verlässt, dann muss die Variable wieder 1 runter gezählt werden. Und mehr darf nicht passieren. Die grünen Gleise dürfen den BÜ jetzt nicht mehr automatisch öffnen. Deshalb müssen zunächst die beiden Animationen aus den Ereignissen "BUe verlassen außen" und "BUe verlassen innen" gelöscht werden:

 

56ccc55a2d544_BUeTutorial20.jpg.d05b1e2b

Und dann trägt man in beiden Ereignissen jeweils nur eine Aktion ein

Variable setzen
Name: "Schrankenwärter.Zahl"
Wert "-1"

Durch das Minus wird die Zahl um 1 verringert, wenn ein Zug den Bahnübergang verlässt.

 

Link to comment
Share on other sites

Schritt 7 - Schranken öffnen

Jetzt fehlt nur noch das Ereignis, welches die Schranken öffnet.

Dafür wird ein neues, fünftes Ereignis benötigt. Und dieses Ereignis ist vom Typ "Variable wird gesetzt".

56ccc5f78f1b5_BUeTutorial21.jpg.506fe1df

Dieses Ereignis soll genau dann eintreten, wenn der Wert der Variablen sich auf 0 ändert.

56ccc5f852135_BUeTutorial22.jpg.f447fc11

Wenn dieser Fall eintritt, dann haben alle Züge den Bahnübergang verlassen. Also können die Schranken jetzt geöffnet werden.

Die Aktionen dafür sind genau die selben, die wir vorher in der Ereignissen "BUe verlassen außen" und "BUe verlassen innen" gelöscht haben.

56ccc5f8dacb5_BUeTutorial23.jpg.72213638

Aber jetzt werden diese Aktionen nur noch dann ausgeführt, wenn alle Züge, die schon ein rotes Gleis überfahren hatten, den BÜ auch wieder verlassen haben.

Ist erst ein Zug durch den BÜ hindurch, aber der andere noch auf dem Weg dorthin, dann bleiben die Schranken geschlossen weil die Variable noch nicht den Wert 0 hat.

56ccc5f9ca137_BUeTutorial24.thumb.jpg.89

Je nachdem, wo sich die beiden Züge während der Erstellung der EV befanden, hat die Variable vielleicht den falschen Anfangswert. Deshalb wartet man am besten einen Moment ab, in dem beide Züge den BÜ passiert haben, öffnet dann die EV oder die Variablenliste des Schrankenwärterhäuschens und setzt jetzt den Wert der Variablen auf 0. Anschließend sollte der Bahnübergang korrekt funktionieren.

Link to comment
Share on other sites

Schritt 8 - Züge frühzeitig anmelden.

Damit ist der BÜ gesichert.

 

Aber wirklich befriedigend ist das noch nicht. Denn in ungünstigen Fällen kann es vorkommen, dass ein Zug den BÜ öffnet und der nächste ihn gleich darauf wieder schließt.

56ccc6f02b350_BUeTutorial25.thumb.jpg.8c

Es wäre deshalb sinnvoll einen Zug schon dann beim Schrankenwärter anzumelden, wenn sich das Öffnen der Schranken nicht mehr lohnt. Diese Stellen sind in der Übungsanlage mit gelben Gleisen markiert.

 

Zwei weitere Ereignisse sind nötig:

"BUe Anmeldung außen" und "BUe Anmeldung innen"

56ccc6f0e4c48_BUeTutorial27.jpg.ab0f291b

Das Ereignis ist jeweils "Zug betritt ein Gleis".

Das Gleis ist "2200 außen gelb" bzw. das Gleis "2200 innen gelb"

56ccc6f16d236_BUeTutorial33.jpg.5955aeb5

Und die Aktion ist 

Variable setzen
Name: Schrankenwärter.Zahl
Wert: +1

56ccc6f1d1395_BUeTutorial34.jpg.4b6e7641

Weil jetzt die ankommenden Züge schon bei den gelben Gleisen gezählt werden, muss die Aktion "Variable setzen" aus den Ereignissen für die roten Gleise "BUe schließen außen"  und "BUe schließen innen" wieder gelöscht werden.

56ccc6f246124_BUeTutorial35.jpg.bd525218

Wenn alles stimmt, dann öffnet der BUe jetzt nur noch dann, wenn er wenigstens für 7 bis 10 Sekunden (je nach Zuggeschwindigkeit) geöffnet bleiben kann.

Edited by Goetz
Link to comment
Share on other sites

Schritt 9 - Variable am Schrankenwärterhäuschen anzeigen

Wenn man genauer beobachten möchte, wie sich im Betrieb die Variable ständig ändert, dann kann man sie in einem Textfeld ausgeben. Für diesen Zweck ist in der Übungsanlage schon ein passendes Textfeld eingebaut. Es hat den Namen "Anzahl", sitzt genau auf der Wand des Schrankenwärterhäuschens, besitzt einen durchsichtigen Hintergrund und eine weiße Schriftfarbe. Weil es aktuell keinen Text enthält, ist es nicht zu sehen.

 

Um die Variable in diesem Textfeld anzuzeigen, muss das Ereignis "BUe öffnen" geändert und erweitert werden.

Als erstes muss das Ereignis jetzt bei jedem Wert reagieren und nicht nur dann, wenn der Wert 0 ist. Dafür trägt man beim Ereignis als Wert statt der 0 den Namen der Variablen mit vorangestelltem Dollar Zeichen ein. Also

Wert: $Schrankenwärter.Zahl

(hier muss der Name der Variablen von Hand geschrieben werden. Bitte die genaue Schreibweise beachten! Vor dem Namen steht ein Dollarzeichen. Und zwischen den beiden Worten steht ein Punkt, aber kein Leerzeichen.)

56ccc813f131d_BUeTutorial28.jpg.817255ed

Das Dollar Zeichen bedeutet für die EV, dass sie nicht das Wort als Wert benutzen soll, sondern den Wert, der in der Variablen dieses Namens gespeichert ist.

Im speziellen Fall bedeutet es, dass die EV immer reagiert, wenn sich der Wert der Variablen ändert. Egal, welchen Wert sie dann gerade bekommt. Die Methode ist ein bisschen "von hinten durch die Brust ins Auge" und deshalb nicht so leicht zu verstehen wie alles bisherige. Aber sie funktioniert sehr gut.

Die EV reagiert jetzt also immer, wenn sich die Variable ändert. Das ist gut für die Textausgabe. Aber die Schranken dürfen sich trotzdem nur öffnen, wenn der Wert der Variablen 0 ist.

Also braucht das Ereignis jetzt eine Bedingung:

56ccc814660a0_BUeTutorial29.jpg.fa9abe65

Bedingung: Variable besitzt den Wert
Name: "Schrankenwärter.Zahl"
Wert: "0"

Das Öffnen der Schranken haben wir zuvor schon für den Fall "Bedingungen sind erfüllt" eingetragen. Daran muss nichts geändert werden. Für diesen Fall kommt nur noch eine Aktion hinzu:

56ccc814d6562_BUeTutorial30.jpg.71d253c9

Spezifische Objektaktionen: Beschriftung setzen
Beschriftung: "Anzahl"
Text: "$Schrankenwärter.Zahl"

Anschließend muss man festlegen, was passieren soll, wenn die Bedingungen NICHT erfüllt sind:

56ccc8154b2e0_BUeTutorial31.jpg.203ceb5c

In diesem Fall soll nur der neue Wert der Variablen an das Textfeld übertragen werden. Sonst nichts.

56ccc815cf03a_BUeTutorial32.jpg.1aac048c

Spezifische Objektaktionen: Beschriftung setzen
Beschriftung: "Anzahl"
Text: "$Schrankenwärter.Zahl"

Jetzt wird der aktuelle Wert der Variablen bei jeder Veränderung an das Textfeld übertragen. Egal, ob der Wert 0 ist oder nicht.

56ccc813771f5_BUeTutorial26.thumb.jpg.2c

 

Und damit ist das Ende des Tutorials erreicht. Ich wünsche mir, dass ich damit manchen Nutzern des 3D-Modellbahn Studios zu einem besseren Verständnis der Ereignisverwaltung verhelfen konnte.

 

Viel Spaß beim Nachbauen.

Und wer nicht nur abschreibt, sondern dabei auch mitdenkt und versteht, was er tut, der kann sich anschließend viele andere Aufgaben ausdenken und selbständig lösen.

 

Link to comment
Share on other sites

Ich möchte mich auch noch mahl bedanken hätte meine deutsch Lehrein so fihl gedult gehabt  :D aber noch mahl die frage warum werden hagongs nicht bei $_Trigger1.Name nicht erkand und Lochs die nicht selberfahren sondern geschoben werden und kann immer nur ein Name auf dem Texst fehlt angezeigt werden und nicht zwei oder drei?

Edited by aloys63
Link to comment
Share on other sites

Ein Textfeld kann nur einen Text anzeigen (wenn dieser Text durch die EV erstellt wird)
Für mehrere Texte (z.B. mehrere Zugnamen) musst du mehrere Textfelder unter- oder nebeneinander setzen.

In Zugverbänden wird nur die Lok erkannt, welche eine andere Geschwindigkeit als 0 hat (und somit den Zug bewegt), weil man sonst eine lange Liste an Namen ausgeben müsste. Nämlich jede Lok und jeden Waggon im Zugverband. Oder man bekäme ständig Meldungen. Nämlich für jeden Waggon im Zug eine, sobald dieser das Gleis betritt. Beides wäre in den meisten Fällen nur hinderlich. Denn meistens will man den ganzen Zug beeinflussen. Und das geht am besten, wenn man im Zug nur einen einzigen Ansprechpartner hat.

Was deine Deutschlehrerin betrifft: Ich wäre auch froh, wenn sie mehr Geduld mit dir gehabt hätte. Dann wäre es nicht so mühselig deine Texte zu lesen. Ich muss mich wirklich überwinden dir zu antworten, ohne dir deine schlechte Rechtschreibung übel zu nehmen. Denn manchmal denke ich dann so etwas wie: "Ich habe mir 10 Stunden Mühe mit meinem Tutorial gegeben. Ich habe jeden Satz immer wieder geändert bis ich mir sicher war, dass er wirklich verständlich ist. Und Aloys gibt sich nicht einmal 5 Minuten Mühe bei seinen Antworten beziehungsweise seinen Fragen."

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...