Jump to content

Empfohlene Beiträge

Geschrieben

Hallo,

ich bin ganz neu und habe folgende Frage: Ich habe eine kleine Abstellanlage mit 3 Gleisen (51-53). Darauf stelle ich verschiedene Loks ab. Wenn ich am nächsten Tag das Programm wieder öffne, will ich wissen, welche Lok z.B. auf Gleis 51 steht, damit ich sie zum weiteren Verlauf bewegen kann.

1. Welche Lok steht auf dem Gleis?

2. Wenn ich sie starte, ist es besser vorwärts oder rückwärts, oder wie weiß ich in welche Richtung sie fahren will?

Wenn ich einfach nur sage, setze die Geschwindigkeit auf 0, dann erhalte ich folgende Fehlermeldung: 'Attempt to index a nil value' - womit er ja Recht hat, denn ich habe keine Lok angegeben, da ich den Namen der Lok nicht kenne.

Mit dem blauen Taster kann ich die Lok weiter fahren von einem Gleiskontakt zum anderen, aber alle weitere Optionen schmeissen die Fehlermeldung raus.

Aussenrum baue ich mir eine repeat/until oder while Schleife, mit der ich die Loks auf Grund von einer Zufallsvariable abrufe, deshalb ist lua vermutlich die bessere Lösung.

 

 

 

t01.mbp

Geschrieben (bearbeitet)

Hallo @Mobb, so ganz ist mir nicht klar, was du vorhast, aber hier mal ein paar Denkanstöße:

vor 1 Stunde schrieb Mobb:

will ich wissen, welche Lok z.B. auf Gleis 51 steht, damit ich sie zum weiteren Verlauf bewegen kann.

starte einfach die Lok, die auf dem Gleis 51 steht.

vor 1 Stunde schrieb Mobb:

Wenn ich sie starte, ist es besser vorwärts oder rückwärts, oder wie weiß ich in welche Richtung sie fahren will?

Setze die Geschwindigkeit relativ zur Fahrtrichtung.

vor 1 Stunde schrieb Mobb:

Aussenrum baue ich mir eine repeat/until oder while Schleife, mit der ich die Loks auf Grund

eins nach dem anderen erstmal 1 und 2 lösen.

 

vor 1 Stunde schrieb Mobb:

deshalb ist lua vermutlich die bessere Lösung.

Nein, das geht auch mit der grafischen EV.

Du hast beim Gleiskontakt 53 2 Kontakte übereinander liegen.

LG Ronald

Bearbeitet von RoniHB
Geschrieben

Hallo Mobb,

vor 2 Stunden schrieb Mobb:

ich habe keine Lok angegeben, da ich den Namen der Lok nicht kenne.

Du nicht, aber die EV kennt ihn.

An jedem Ereignis, auf das du in der EV reagierst, ist jemand beteiligt.
Wenn ein Fahrzeug einen Gleiskontakt betritt, dann gibt es in diesem Ereignis zwei beteiligte Objekte.

Diese kannst du als "Auslöser" ansprechen:

dieLokkennen.thumb.jpg.a85d837c77c877fbbfb1b38a13c918b8.jpg

Wenn es wie in diesem Fall mehrere Auslöser gibt, dann findest du dort, wo jetzt [Leer] steht, eine Auswahlliste.
Hier musst du den gewünschten Auslöser wählen. Im Beispiel wäre das dann "Fahrzeug".

Viele Grüße
Götz 

Geschrieben

Hi RoniHB

bei einer automatichen Steuerung nach dem Starten von 3d-mbs weiß ich ja nicht, welche Lok dort steht, denn ich will ja einen Automatik-Betrieb für diese Sache ablaufen lassen. Und falls ich mal eine andere Lok drauf stelle, soll sie automatisch erkannt werden und eben anders herum fahren.

Jetzt probiere ich die ganze Zeit rum auch mit Fahrtrichtungswechsel und verschiedenen Ausgaben, aber die Fahrtrichtung wird nicht gewechselt.

Übrigens: Goetz:

Falls ich das Teil so angebe, wie beschrieben, erhalte ich folgende Fehlermeldung: 'Unknown method or property name drivingDirection' - funktioniert also auch nicht.

Wa mache ich falsch?

t01.thumb.jpg.bc15024808ae916fd865c88bbe2b2f2d.jpg

t01.mbp

Geschrieben
vor 1 Minute schrieb Mobb:

Wa mache ich falsch?

Du hast nach "Auslöser" nicht in der Auswahlliste auf Fahrzeug umgeschaltet.

AuslserFahrzeug.jpg.8379f3e4e4ffc5e0b887f488d5b67f21.jpg
Der Gleiskontakt hat keine Fahrtrichtung, sondern das Fahrzeug.
Da beide Objekte Auslöser des Ereignisses "Fahrzeug betritt Gleiskontakt" sind, musst du spezifizieren, welches der Objekte du ansprechen willst.

Geschrieben

@Goetz

Ich habe noch einige Fragen, aber die ersten:

Wie wird die Auswahl des Gleises in z.B. einem Textfeld angezeigt? Und was muss ich dazu alles machen?

Und was ist der Unterschied zwischen einer Objekt- und Modul-Variable? Sind beide globale Variablen?

Viele Grüße

Geschrieben
vor 37 Minuten schrieb Mobb:

Wie wird die Auswahl des Gleises in z.B. einem Textfeld angezeigt?

Der Name des Gleises ist eine Eigenschaft des Objekts.
Du kannst dem Textfeld dieses Objekteigenschaft als Inhalt zuweisen:

EigenschaftName.jpg.d394c3441b460ab18843eed1972b19e1.jpg

 

vor 41 Minuten schrieb Mobb:

Sind beide globale Variablen?

Ja, beide sind global.
Die Modulvariable legst du im Ereignismodul an, die Objektvariable in einem Objekt.
Das macht nur organisatorisch einen Unterschied.

Wenn Objekte sich individuelle Werte unter demselben Namen merken sollen, dann ist es praktischer diese Werte im Objekt mitzuführen.
Geht es um allgemeine Werte, dann sind sie im Ereignismodul besser aufgehoben.

Die Ordner in der linken Spalte des EV Fensters werden als Module bezeichnet.

Viele Grüße
Götz

  • 3 Wochen später...
Geschrieben

@Goetz

Hallo, ich bin es mal wieder. Danke für Deine Hilfe bzgl der Rangierfahrten - ich habe sie mal 'Fahrt aus Wartegleis und zurück' benannt. Das funktioniert alles, auch wenn ich die Zufallszahl nun anders ermittle.

Mein nächstes Problem ist Folgendes:
Ich habe zwei Wagen auf Gleis 1 stehen - dort wo die vielen Gleiskontakte sind
Bei einmaligem Betätigen des roten Tasters soll eine der drei Loks kommen, die beiden Wagen ankuppeln und eine Runde drehen.
    Warum bremst die Lok vor Kontakt 5x?
Am Signal S3 wird der Inhalt von 'AktGleis' in 'LetztesGleis' kopiert und erneut eine neue Zufallszahl generiert, deren Inhalt in 'AktGleis' gespeichert wird.
Nun stelle ich es mir so  vor:
  Sind 'AktGleis' und 'LetztesGleis' gleich und der Schalter noch auf 'an', so fährt der Zug eine weitere Runde
  Sind die beiden Variablen unterschiedlich, so fährt der Zug auf Gleis 1, kuppelt ab und die neue Lok kuppelt an und fährt dann die Runde
Und das Ganze so lange, wie der rote Taster auf an steht. Stelle ich den roten Taster auf aus, wird die Runde beendet, Lok kuppelt ab und fährt in ihr Gleis
Auf dem Ring fährt der Zug - das ist okay
Ich habe noch ein paar Ausgaben eingebaut zum Prüfen.
Meiner Meinung nach wäre eine 'while'- bzw. 'until'-Schleife ideal für die Lösung

1. Kann ich das auch mit weniger Kontakten lösen?
2. Wie kann ich eine Funktion von verschiedenen Stellen aus aufrufen, z.B. Generieren der Zufallszahl?
3. Manches Mal kann ich eine Fahrstraße nicht schalten und weiß nicht warum?
4. Wenn ich in der EV ein Script anlege an oberster Stelle - wie kann ich darauf zugriefen - oder geht das alles anders?
5. Ein Handbuch gibt es nicht für das Programm?

Danke für die Antwort

 

t07.mbp

Geschrieben
vor 1 Stunde schrieb Mobb:

Meiner Meinung nach wäre eine 'while'- bzw. 'until'-Schleife ideal für die Lösung

Bevor ich mich mit deiner Anlage auseinandersetze ...

While und Until Schleifen eignen sich nur für Programme, die eigenständig und unabhängig laufen. Weil ein Programm in der Schleife verbleibt, bis die Bedingung erfüllt ist.

Die EV soll Teilaufgaben erledigen, während der ganze Verkehr weiterläuft. Verkehr, der parallel vielleicht auch noch die Erledigung andere Teilaufgaben erfordert. Deshalb ist das für eine Steuerungslogik (wie sie hier benötigt wird) kein guter Ansatz.

 

vor 1 Stunde schrieb Mobb:

Ein Handbuch gibt es nicht für das Programm?

Doch. Es nennt sich Wiki und du findest es oben in der Kopfzeile, gleich rechts neben "Forum"

Viele Grüße
Götz

Geschrieben (bearbeitet)
vor 2 Stunden schrieb Mobb:

Warum bremst die Lok vor Kontakt 5x?

Weil in den Eigenschaften des Kontakts 5x "Abbremsen auf 0 km/h" aktiviert ist.
Außerdem hält die Lok vorher schon am Signal S1, weil dort für die Stellung Hp00 beide Fahrtrichtungen aktiviert sind.

Wenn ich die Lok dann händisch weiterschicke und sie am Kontakt 5x ankommt, stoppt sie und fährt in umgekehrter Richtung wieder los. Sie koppelt nicht an den Waggons an. So weit kommt sie gar nicht.

Nachdem ich diese beiden Punkte korrigiert habe, ändert die Lok am Kontakt 5x abrupt ihre Richtung und fährt gleich zurück ins Wartegleis. Angekuppelt wird auch jetzt noch nicht. 

Ich habe mich noch nicht mit deiner ganzen EV auseinandergesetzt. Aber folgender Punkt fiel mir da auf:

MissverstndnisbeidenBedingung.jpg.1356f285ba92e35e372b44f1c5d07275.jpg

Wenn du zwei Bedingungen mit einem oder verknüpfst, dann reicht die Erfüllung einer der beiden Bedingungen, damit das Ergebnis wahr ist.

Das bedeutet für das untere Feld (= nicht erfüllt), dass weder die eine, noch die andere Bedingung erfüllt ist.
Der Schalter steht auf true und beide Variablen enthalten dasselbe Gleis.

Das ist genau der Zustand, den du direkt darunter noch einmal prüfst.

 

vor 2 Stunden schrieb Mobb:

Kann ich das auch mit weniger Kontakten lösen?

Sehr wahrscheinlich, ja.

 

vor 2 Stunden schrieb Mobb:

Wie kann ich eine Funktion von verschiedenen Stellen aus aufrufen

Für diesen Zweck gibt es das "benutzerdefinierte Ereignis". Das ist im Grunde eine Funktion, die du an beliebiger anderer Stelle aufrufen kannst.

 

vor 2 Stunden schrieb Mobb:

Manches Mal kann ich eine Fahrstraße nicht schalten und weiß nicht warum?

Fahrstraßen lassen sich nicht aktivieren, wenn sie entweder mit einer anderen aktiven Fahrstraße im Konflikt stehen oder wenn sich irgendwo auf dem Weg Rollmaterial befindet. "Manches Mal" ist als Beschreibung zu dürftig um zu erkennen, was genau in deinem Fall der Grund ist. Du musst bitte genauer beobachten, welche Fahrstraße es ist und wie die aktuelle Konstellation auf der Anlage zu diesem Zeitpunkt aussieht.

 

vor 2 Stunden schrieb Mobb:

Wenn ich in der EV ein Script anlege an oberster Stelle - wie kann ich darauf zugriefen

Du kannst in diesem Skript Funktionen anlegen, die du an anderer Stelle in der EV (wiederum in Lua) ausführst.
Oder du nimmst stattdessen das erwähnte benutzerdefinierte Ereignis. Das lässt sich auch in der grafischen EV auslösen.

Viele Grüße
Götz

P.S.: Ich würde mich freuen, wenn du mich nicht wieder 3 Wochen auf eine Reaktion warten lässt.

Bearbeitet von Goetz
Geschrieben

@Goetz

Danke für die Antworten. Ich bin erst heute dazu gekommen ind probiere weiter. Ich bin echt froh und dankbar, so einen kompetenten Helfer zu haben. Dir erstmal guten Rutsch und ich versuche, so schnell wie möglich weiterzumachen.

 

Geschrieben
vor 32 Minuten schrieb Mobb:

ich versuche, so schnell wie möglich weiterzumachen.

Sorry Mobb, so war das nicht gemeint.

Ich tu mich nur schwer mit Menschen, die sich erst dann wieder melden, wenn sie eine neue Frage haben. Weil mir dann bis zu dem Tag die Rückmeldung fehlt, ob die letzte Antwort hilfreich war oder nicht. 

Viele Grüße
Götz

Geschrieben

@Goetz

Hallo, ich bin es mal wieder.
Danke für Deine Hilfe
Die beiden funktionieren nach der Änderung - sorry, dass ich das nicht selbst gesehen habe - aber da merkt man die Kenntnis und Erfahrung
Weil in den Eigenschaften des Kontakts 5x "Abbremsen auf 0 km/h" aktiviert ist.
Außerdem hält die Lok vorher schon am Signal S1, weil dort für die Stellung Hp00 beide Fahrtrichtungen aktiviert sind.

Ich habe eine Funktion 'Zufallszahl' geschrieben, die ich aufrufen kann und sie funktioniert auch bei der blauen Taste.

Weitere Fragen:
1. Mein nächstes Problem ist, falls ich die rote Taste betätige dass, wenn eine Lok aus dem 'Depot' herausfährt, sie bis zum Kontakt '5x' kommt und dann zurückfahren will? Warum? Denn die Variable 'LokAusWartegleisUndZurueck' steht auf 'false' und so sollte meiner Meinung nach beim Kontakt '5x' der else-Zweig zum Zug kommen. Die Ausgabe stimmt, aber die Lok fährt trotzdem zurück. Dann fährt die Lok bis zum Signal 'S1'.
 Was mache ich da falsch? (t11_problem1.jpg)
Denn eigentlich sollte die Lok die Wagen ankuppeln und dann losfahren.
Also wie komme ich über den '5x' drüber?

2. Falls ich dann über den '5x' drüber bin, wie schaffe ich es, dass egal welche Lok - welcher Länge auch immer - die Wagen ankuppelt und losfährt?

Mit dem 'S3' Signal-Kontakt beschäftige ich mich wieder, wenn das Ankuppeln und Losfahren funtioniert.

Danke für die Antwort
--------------------------------------------

 

t11_problem1.jpg

t11.mbp

Geschrieben
vor 13 Minuten schrieb Mobb:

Die Ausgabe stimmt, aber die Lok fährt trotzdem zurück.

Das tut sie, weil du ihr eine positive Geschwindigkeit zuweist und die Lok zum Signal S1 hin ausgerichtet ist.

RelativzurFahrtrichtung.thumb.jpg.3caa1e4adfeb39de779938a65d9ad2e0.jpg

Wenn du die Option "Relativ zur Fahrtrichtung" aktivierst, behält eine Lok ihre letzte Fahrtrichtung bei, wenn du einen positiven Wert einträgst.
Ein negativer Wert würde die Fahrtrichtung umkehren. 

Das erspart dir die Prüfung, ob du für die Fortsetzung der Fahrt eine positive oder negative Geschwindigkeit bräuchtest. 

 

Geschrieben (bearbeitet)
vor 47 Minuten schrieb Mobb:

Falls ich dann über den '5x' drüber bin, wie schaffe ich es, dass egal welche Lok - welcher Länge auch immer - die Wagen ankuppelt und losfährt?

Da würde ich folgenden Weg empfehlen:

Schmeiß beim Kontakt 5m alles raus, was die Lok beeinflusst!
Die Lok stoppt selbständig, sobald sie die Waggons berührt.

In der EV kannst du auf das Ereignis "Zug/Fahrzeug stoppt" reagieren.
Damit das nur für die Rangierfahrt (einer beliebigen Lok!) gilt, gib im Ereignis ein, dass es für alle Loks mit einem Schlagwort (z.B. "Ankuppeln") gelten soll.
Dieses Schlagwort kannst du der Lok im Ereignis "Gleiskontakt 5x wird betreten" (wie eine erweiterte Variable) zuweisen.

Im Ereignis musst du nur sagen, dass die auslösende Lok mit negativer Geschwindigkeit relativ zur letzten Fahrtrichtung losfahren soll.
Und dann natürlich das Schlagwort aus dieser Lok löschen, damit beim nächsten Stopp nichts ungewolltes passiert.

In dieser Anlage habe ich die vorgeschlagenen Änderungen vorgenommen:

t11 Korrekturen.mbp

Bearbeitet von Goetz
Anlage angehängt
Geschrieben

@Goetz

 

Hallo,
das mit dem Haken bei 'Relativ zur Fahrtrichtung' funktioniert

Den Kontakt '5m' habe ich mal in die Wiese gesetzt, der kann nichts mehr falsch machen.
In '5x' habe ich eine erweiterte Variable gesetzt, unter Schlagwörter/Variablen bei der Lok sieht es für mich so aus, als wäre das Schlagwort 'Ankuppeln' gesetzt.
Das Ereignis 'Zug/Fahrzeug stoppt' funktioniert aber nicht wie gewünscht, da passiert nämlich nichts. Das sollte ja auch funktionieren, wenn die Lok händisch gefahren wird.

Danke für die Antwort
--------------------------------------------

 

Geschrieben
vor 5 Minuten schrieb Mobb:

Das Ereignis 'Zug/Fahrzeug stoppt' funktioniert aber nicht wie gewünscht, da passiert nämlich nichts.

... die Ursache dafür kann ich leider nicht erkennen, solange du mir das Ereignis nicht zeigst.   9_9

Geschrieben

So muss die Zuweisung des Schlagwortes aussehen:

SchlagwortZuweisung.jpg.76af43eac12adc9385268bc262cbeac2.jpg

 

und so das Ereignis, welches auf eine Lok mit diesem Schlagwort reagiert sobald diese stoppt:

ZugmitSchlagwortstoppt.jpg.a26800ca9c9d9c165f21babb2973a189.jpg

Die Verzögerung ist nicht erforderlich. Ich fand es nur ansehnlicher, wenn die Lok nicht sofort wieder anfährt.

Das Ereignis wird auch dann ausgelöst, wenn du die Lok selber bewegst, indem du z.B. den Tacho regelst. 

Wenn du die Lok händisch auf dem Gleis schiebst, wird das nicht als Fahrt angesehen und somit gibt es dann auch kein Ereignis "Lok stoppt". Aber das wirst du sicher nicht mit "händisch fahren" gemeint haben.
 

Geschrieben

@Goetz

Hallo,
das mit dem Schlagwort habe ich korrigiert. Jedoch kommt es mir so vor, dass das Teil 'Zug/Fahrzeug stoppt' überhaupt nicht ausgeführt wird, denn meine Ausgabe erscheint nicht.

Danke für die Antwort

t11.mbp

Geschrieben
vor 25 Minuten schrieb Mobb:

Jedoch kommt es mir so vor, dass das Teil 'Zug/Fahrzeug stoppt' überhaupt nicht ausgeführt wird

Der Grund scheint mir zu sein, dass deine Lok (von früheren Versuchen?) noch eine Variable "Ankuppeln" hat, die ein Boolean (wahr/falsch) enthält.
Deshalb scheitert die Zuweisung eines Schlagwortes mit demselben Namen.
Wenn du die falsche Variable aus der Lok löscht, sollte es funktionieren.

Geschrieben

@Goetz

Hallo,

ich habe die Variable rausgelöscht - aber es funktioniert noch nicht. Ich denke, wie lassen es für heute. Ich wünsche Dir einen schönen Abend und falls Du noch eine Idee hast, so melde Dich bitte.

Danke

t11.mbp

Geschrieben
vor 16 Minuten schrieb Mobb:

falls Du noch eine Idee hast, so melde Dich bitte.

Das mach ich gerne, Mobb.

Erstens hat das Schlagwort im Modul Ereignisse nichts verloren!

Modulvariable.jpg.36b6ed83a343ba8217908b57b83821a8.jpg

 

Und zweitens musst du bei der Lok den Namen der Variablen als Text angeben
und nicht versuchen, ihn aus einer Modulvariablen zu holen, die gar keinen Inhalt hat (weil sie selbst als Schlagwort deklariert ist).

TextalsVariablenname.jpg.a4df19b639cdbb84d4b720c26f554d13.jpg

(Die Fettschrift in meiner Erklärung soll bitte nur der Hervorhebung dienen.)

Viele Grüße
Götz

 

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