Jump to content

Goetz

Mitglieder
  • Gesamte Inhalte

    4934
  • Benutzer seit

  • Letzter Besuch

Beiträge erstellt von Goetz

  1. Egal, wie viele Module du zusammensteckst und was du dazwischen noch alles einbaust - für die EV ist das eine einzige Anlage und du kannst aus der EV alles ansteuern, was sich darauf befindet.

  2. Die Variable _CurrentSpeed liefert immer die Geschwindigkeit exakt auf fünf Nachkommastellen genau. Das lässt sich auch nicht per EV auf- oder abrunden.

    Wenn die Geschwindigkeit haargenau 50 beträgt, dann wird es auch genau so (und ohne Nullen hinter dem Komma) angezeigt. Weicht der Wert minimal ab, dann hat man die Darstellung von deinem Screenshot.

  3. Vielen Dank für den Hinweis, EASY!

    Wenn ich es richtig sehe - ich habe ein wenig damit experimentiert - dann enthält _Time die Uhrzeit als String.

    Damit kann man in der EV die Uhrzeit an Textfelder übergeben.
    Aber für Berechnungen oder Vergleiche in der EV eignet sich diese Variable demnach nicht, oder doch?

  4. vor 40 Minuten schrieb aloys63:

     oder mach ich was falsch

    Nein, du machst da nichts falsch.

    Sobald die Spitze des Zuges ein Gleis berührt, wird das Ereignis für "Zug betritt ein Gleis" ausgelöst. Egal, ob vorne die Lok ist oder nicht. Für den normalen Betrieb einer Anlage ist das auch vernünftig und sinnvoll.

    Es gibt im MBS eine Bedingung "Lok/Waggon steht auf Gleis". Damit kann man beispielsweise prüfen, ob ein Gleis schon besetzt ist. Aber für deinen Zweck nützt das nichts. Das, was du gerne möchtest - nämlich die Schrift erst dann anzeigen, wenn die Lok auf dem Gleis steht - geht mit dem MBS nicht.

  5. Du musst es nicht lassen, Aloys.
    Ganz bestimmt nicht deshalb, weil ich (alleine) mich mit schlechter Rechtschreibung schwer tue.

    Ich bin nicht der Maßstab dafür, was andere tun und lassen dürfen. Wenn du deine Rechtschreibung mit etwas mehr Mühe verbessern kannst, dann wäre ich dir dafür dankbar. Wenn es nicht geht, dann ist das auch okay. 

  6. 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."

  7. vor 12 Stunden schrieb Famoguy:

    Wenn der Start der Lok von mehreren Ereignissen ausgelöst werden kann ...

    ... dann startet jedes dieser Ereignisse die selbe Lok und kann entsprechend auch alles andere auslösen, was mit dem Start dieser Lok verbunden sein soll.

    Bleibt also nur der manuelle Start als Argument ...

  8. 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.

     

  9. 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.

  10. 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.

  11. 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.

     

  12. 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.

  13. 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

  14. 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.

  15. 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.

  16. 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.

     

     

  17. 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

  18. Ein Signal selbst hat keinen Einfluss auf Züge.

    Du musst die Ereignisverwaltung (kurz: EV) nutzen, um den Zugverkehr zu regeln. Dort kannst du beispielsweise eintragen, dass bei Betreten eines bestimmten Gleises der auslösende Zug die Geschwindigkeit 0 zugewiesen bekommt, falls ein bestimmtes Signal "Halt" zeigt.

  19. 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).

     

×
×
  • Neu erstellen...