Jump to content

Goetz

Mitglieder
  • Gesamte Inhalte

    6150
  • Benutzer seit

  • Letzter Besuch

Alle erstellten Inhalte von Goetz

  1. Hallo @guenter.strickmann, Nun weißt du, dass du die Videos zumindest in diesem Punkt missverstanden hast. Eine Fahrstraße erkennt, ob sie durch eine andere, aktive Fahrstraße blockiert ist. Und sie erkennt selbständig, wenn ein zuvor blockierter Weg frei wurde. Aber mehr nicht! Viele Grüße Götz
  2. Du hast noch nicht verstanden, wann du welche Fahrstraße aktivieren musst und warum. Du musst lernen, verschiedene Situationen zu unterscheiden. Deine Art der Aktivierung funktioniert nur für einfache Blockstrecken. Also für die Abschnitte, in denen Gleise weder zusammengeführt, noch aufgeteilt werden. Hier hast du ein Beispiel für den Beginn einer einfachen Blockstrecke: Zwischen diesem und dem folgenden Signal liegen keine Weichen. Da kann man einfach jedes Mal, wenn das Signal auf Halt geht fordern, dass dieser Abschnitt bei nächster Gelegenheit wieder aktiviert werden soll. Denn das einzig mögliche Hindernis ist der vorausfahrende Zug, aber keiner, der von links oder rechts kommen könnte. Aber wenn zwei Wege zusammenlaufen, dann geht diese Methode nicht. Dann kann nämlich das hier passieren: Als der letzte Zug das Signal 6 passiert hatte, wurden beide Wege gleichzeitig frei. Der von Signal 11 nach Signal 6 Und der von Signal 5 nach Signal 6. Und Fahrstraßen wissen nur, ob ein Weg frei ist. Sie wissen nicht, ob der Weg gerade benötigt wird. Die Fahrtstraße, welche im Bild aktiviert wurde, ist eine zufällige Wahl. Signal 11 und Signal 5 hatten sozusagen beide eine faire Chance. Eine Fahrstraße kommt der anderen zuvor. Und damit ist die andere gesperrt, weil sie nun durch die erste Wahl blockiert ist. Da kein Zug den Weg von Signal 11 zu Signal 6 durchfährt, wird die Fahrtstraße auch nie aufgehoben. Du musst also an solchen Stellen anders vorgehen. Diese beiden Fahrstraßen (ab 11 und ab 5) darfst du nicht sofort wieder aktivieren, wenn sie frei wurden. Du musst sie dann aktivieren, wenn sie benötigt werden. Wenn also ein Zug in den Abschnitt vor Signal 11 bzw. Signal 5 einfährt. Deine Methode, immer den folgenden Abschnitt freizugeben, wenn ein Signal umschaltet, kann funktionieren, wenn du darauf achtest die Aktion nur dann auszuführen, wenn das Signal auf Halt schaltet. Denn das ist der Indikator dafür, dass gerade ein Zug am Signal vorbei fuhr. Und der will dann auch in den folgenden Abschnitt einfahren. Beispiel: Strickmann Test Alternative.mbp Viele Grüße Götz
  3. In diesem Video kannst du den Mechanismus besser durchschauen:
  4. Die ist klasse. Die Form der Bodenplatte passt perfekt zum Zweck. Und es macht Spaß, sich umzuschauen. Dabei sind mir dann diese Garagen aufgefallen, die selbst Zweiradfahrern etwas Geschick abverlangen.
  5. Dahinter steckt das Element, welches die Wiederholungsschleife aus der Liste pickt. Eine Liste wird in der Wiederholung abgearbeitet. Element für Element. Jedes Element bekommt dann temporär den Namen, den du selbst vergibst. Standard ist Wdh. Hier habe ich Fahrstraße oder Ziele gewählt. Das vorangestellte @-Zeichen siehst du nur in der grafischen EV. Es soll dich daran erinnern, dass diese temporäre Variable das Element aus der Wiederholung enthält.
  6. Ich dachte, das hätte ich (mit dem Screenshot und der roten Unterstreichung darin) schon getan. Halte im Skriptfenster die Strg-Taste gedrückt und drücke dann auf die Leertaste.
  7. Hallo Gunther, Die Position eines Objekts gehört zur Eigenschaft "transformation" In Lua sieht die Befehlszeile so aus: $("Kamera").transformation.position = {x = -50, y = 20, z = 10} Das heißt, du musst eine Tabelle übergeben, welche die drei Werte für die x, y und z Position enthält. Beachte bitte, dass die Bezeichner x, y und z Kleinbuchstaben sein müssen! Viele Grüße Götz
  8. Damit wartest du besser, bis der "Klick" da war. Du musst bitte erst das einfache in allen Einzelheiten verstehen, bevor du die Sache komplizierter machst. Sonst lernst du es nicht.
  9. Gleise mit Bettung belasten den Rechner weniger. Die Form des Modells ist einfacher, weil nicht jede Schwelle extra ausgeformt ist.
  10. Das hängt vom Aufbau der Kreuzung ab, Walter. Wenn es sich um eine DKW handelt, dann ist auch der kreuzende Teil (durch die verriegelte Stellung der DKW) mit abgesichert. Eine kreuzende aktive Fahrstraße wird erkannt. Rollmaterial in der Konfliktzone ebenfalls. Wenn es sich bei der Kreuzung um ein einzelnes Objekt mit zwei kreuzenden Gleisen (ohne Weichenfunktion) handelt, dann wird eine kreuzende aktive Fahrstraße ebenfalls erkannt. Aber Rollmaterial im kreuzenden Gleis wird nicht bemerkt. Wenn du hingegen nur zwei Gleise überkreuz verlegst, dann kann das System eventuelle Konflikte nicht selbständig erkennen.
  11. Hallo Leihe, unter dieser Content-ID findest du meinen Alternativvorschlag zu deiner Fahrstraßenschule: FABBABBD-C29E-402A-B337-674B8AB5572F Ich habe ... die blauen Kontakte alle entfernt die Signalkontakte weiter vorgezogen (in etwa dorthin, wo zuvor die blauen Kontakte saßen) in den Kehrschleifen anstelle der Kontakte je ein weiteres Signal eingesetzt. in allen Signalen die Fahrstraße, welche dort beginnt, in einer Variablen namens "FS" gespeichert Damit ist die EV jetzt auf einen einzelnen, sehr simplen Eintrag reduziert: Wenn irgendein Kontakt betreten wird, dann prüfe, ob in diesem Kontakt eine Variable namens "FS" existiert. Falls ja, dann warte 5 Sekunden und aktiviere dann die Fahrstraße, welche du in der Variablen findest. Das reicht, um sechs (und mehr) Züge ständig fahren zu lassen. Schau mal bitte, ob dir das zu einem besseren Verständnis hilft. Viele Grüße Götz
  12. grundsätzlich schon. Aber den Entwurf finde ich nur, wenn du mir bitte die Content-ID dieser Anlage mitteilst. (Das ist das besondere an Entwürfen: Sie tauchen nicht in der Übersicht veröffentlichter Anlagen auf.)
  13. Hallo Walter, im Schleifenkopf (= der Zeile mit dem for ... do) werden nacheinander alle Elemente aus der Liste einzeln entnommen und an eine temporäre Variable (mit Namen Wdh) übergeben. Im nachfolgenden Block werden dann eine oder mehrere Aktionen auf dieses Element angewandt, welches du aus der Liste entnommen und an die temporäre Variable übergeben hast. (Das ist keine Lua Spezialität. Das funktioniert in allen Programmiersprachen gleich.) Wenn die Behandlung des Elements erledigt ist, kehrt die Wiederholung an den Anfang zurück, entnimmt der Liste das nächste Objekt, übergibt es an die temporäre Variable und so weiter ... Bis alle Elemente der Liste behandelt wurden. Hier ein ganz einfaches Beispiel, welches das Prinzip besser verdeutlicht: Beatles = {"John", "Paul", "George", "Ringo"} -- Liste for index, wert in ipairs(Beatles) do -- für jedes Element der Liste print(wert) -- schreib das Wort ins Ausgabefenster end Auf dieser Seite kannst du solche kleinen Experimente bequem testen: Lua: demo Viele Grüße Götz
  14. Das erklärt leider nicht deine umständliche Herangehensweise. Weder die Anzahl der Züge, noch die Gleislängen. Wie gesagt: Wenn du mir deine Beispielanlage zur Verfügung stellst, zeige ich dir gerne wie es geht.
  15. Folgenden Fehler habe ich in meinem Beispiel entdeckt: Die Zeile 3 des Skripts "Zielwechsel" muss lauten: local Anzeigen = {} Ich hatte den Namen mehrfach geändert (weil ich mich nicht entscheiden konnte). Zum Schluss hatte ich dann eine Anpassung in Zeile 3 vergessen. Sorry. Ich habe die Beispielanlage aus dem vorherigen Posting korrigiert und ausgetauscht.
  16. Goetz

    Menü Ebenen

    Die Anzeige der Gleisnummern/-namen in der Darstellung "technische Zeichnung":
  17. Probier mal bitte diese Alternative aus: Texttestanlage Alternativvorschlag.mbp korrigiert! Anders als im obigen Beispiel lege ich hier zunächst eine Liste der Textfelder an, die beschriftet werden sollen. Damit entfällt die Prüfung, ob ein Feld überhaupt existiert. Denn die erste Schleife fügt in dem Fall einfach ein nil in die Tabelle ein. Also gar nichts. In einer zweiten Wiederholung weise ich dann allen Feldern aus dieser Liste den Text zu. local t = layout:getVehicleGroup(vehicle) local Felder = {} local Ziel = "Hauptbahnhof" if contact == $("GK 01") then Ziel = "Universität" end for i, Zugteil in ipairs(t) do table.insert(Anzeigen, Zugteil.labels["Zielbahnhof vorn"]) table.insert(Anzeigen, Zugteil.labels["Zielbahnhof Seite"]) table.insert(Anzeigen, Zugteil.labels["Zielbahnhof hinten"]) end for i, Textfeld in ipairs(Anzeigen) do Textfeld.text = Ziel end Dieser Code ist für beide Kontakte (Mehrfachauswahl!) geeignet, da im Code selbst unterschieden wird, welcher Kontakt ausgelöst wurde und welches Ziel deshalb angezeigt werden soll. (Noch schöner wäre es, das jeweilige Fahrziel in einer Objektvariable des Kontakts bereitzuhalten.) Beim Türöffner Code habe ich ebenfalls die Prüfungen entfernt, ob die jeweilige Tür existiert. Auch hier gilt: Was es nicht gibt, wird nicht in die Tabelle eingefügt. Viel Spaß beim Studium der Anlage Götz
  18. Hallo Walter, leider können wir das Verhalten nicht beobachten, denn im Katalog sind deine Straßenbahnmodelle noch in der Form ohne variable Beschriftung. Aber ich kann dem Skript auch so ansehen, warum da einiges schief geht: Du änderst hier die Beschriftung an beiden Zügen. Und die Elemente aus der Wiederholung ignorierst du einfach. Weil die Wiederholung für alle Zugteile durchgeführt wird, änderst du hier die Beschriftung auf beiden Zügen dreimal! Eigentlich willst du die Beschriftung aber nur auf den Fahrzeugen ändern, die du aus der Wiederholung bekommst. Dazu müsstest du bei Beschriftung für das Zielobjekt "Wiederholung" in der Auswahl finden. Und das gibt es für Beschriftungen noch nicht. ( @Neo?) Aber im Lua Code kannst du es verwenden: local t = layout:getVehicleGroup(vehicle) for i, Wdh in ipairs(t) do Wdh.labels["Zielbahnhof vorn"].text = "Hauptbahnhof" Wdh.labels["Zielbahnhof Seite"].text = "Hauptbahnhof" Wdh.labels["Zielbahnhof hinten"].text = "Hauptbahnhof" end Beachte die Variable Wdh anstelle der Objektangabe. Sie enthält das Fahrzeug, welches dir die Wiederholung aus dem Zugverband "rausgfischt". Eins nach dem anderen, bis alle Fahrzeuge behandelt wurden. Wdh (für Wiederholung) ist nur ein Namensvorschlag vom Studio Du kannst auch einen anderen Namen wählen: local t = layout:getVehicleGroup(vehicle) for i, Zugteil in ipairs(t) do Zugteil.labels["Zielbahnhof vorn"].text = "Hauptbahnhof" Zugteil.labels["Zielbahnhof Seite"].text = "Hauptbahnhof" Zugteil.labels["Zielbahnhof hinten"].text = "Hauptbahnhof" end Beachte dabei, dass du in der Zeile, die mit for beginnt, denselben Variablennamen wählen musst. Der gezeigte Code ist noch unvollständig. Er versucht jetzt in jedem Zugteil alle drei Beschriftungen zu ändern, ohne Rücksicht darauf, ob es die jeweiligen Felder überhaupt gibt. Das führt bei geöffnetem Protokollfenster zu einer Fehlermeldung und zum Abbruch. Denn das vordere Fahrzeug hat kein Textfeld "Zielbahnhof hinten". Du wirst also für jedes Feld prüfen müssen, ob es überhaupt existiert: local t = layout:getVehicleGroup(vehicle) for i, Zugteil in ipairs(t) do if Zugteil.labels["Zielbahnhof vorn"] then Zugteil.labels["Zielbahnhof vorn"].text = "Hauptbahnhof" end if Zugteil.labels["Zielbahnhof Seite"] then Zugteil.labels["Zielbahnhof Seite"].text = "Hauptbahnhof" end if Zugteil.labels["Zielbahnhof hinten"] then Zugteil.labels["Zielbahnhof hinten"].text = "Hauptbahnhof" end end Bei der Türsteuerung auf derselben Anlage benutzt du übrigens schon die Prinzipien, die ich hier vorgeschlagen habe. Aber das ist dir vermutlich gar nicht bewusst?
  19. Nein, ein Modell aus dem Sortiment des Studios kannst du nicht verändern. Aber die Modelle sind kostenlose Beigaben von engagierten Usern. Du kannst also den Erbauer eines Modells ansprechen und fragen, ob er dir sein Objekt für Umbauten zur Verfügung stellt. Und du kannst eigene Modellkreationen ins Studio aufnehmen.
  20. Per utilizzare il software senza connessione a Internet, scaricare il catalogo dei modelli sul proprio laptop. Ho contrassegnato il pulsante per questo nell'immagine con un cerchio rosso: [google translate] Um die Software ohne Internetverbindung zu benutzen, musst du bitte den Modellkatalog auf deinen Laptop herunterladen. Ich habe den Knopf dafür im Bild mit einem roten Kreis markiert:
  21. Ja, auf jeden Fall. Leihe. Du gehst es zu umständlich an. Und wozu dient jetzt die Wiederholung über eine Liste mit nur einem Element? Innerhalb dieser Schleife benutzt du das Element aus der Wiederholung überhaupt nicht. Wenn du die Testanlage zur Verfügung stellst (= veröffentlichst), kann ich dir ein Beispiel dazu entwerfen. Aus deiner Bildersammlung alleine kann ich nicht alle benötigten Informationen entnehmen. Viele Grüße Götz
  22. Hallo @Leihe, dein Fehler steckt hier: Wenn die Fahrstraße aktiv ist, dann ist sie niemals frei und kann auch nicht aktiviert werden. Deine innere Bedingung wird niemals erfüllt. Denn wenn sie erfüllbar ist, dann wird die äußere Bedingung nicht erfüllt. Und somit die innere Bedingung gar nicht geprüft. Viele Grüße Götz
  23. Du kennst Objektvariablen! Das sind diese hier (im Kontextmenü zum Objekt): Und wie du sie verwendest, weißt du auch.
  24. Aaaahhhh - das ist ein ganz anderer Fall. Du willst in einem Rutsch mehrere Fahrzeuge in einem Verbund ansprechen. Das geht so: local t = layout:getVehicleGroup(vehicle) -- vehicle ist das auslösende Fahrzeug im Verbund for i, Wdh in ipairs(t) do -- t ist die oben erzeugte Liste und enthält alle Zugteile Wdh.labels["Zielbahnhof vorn"].text = "Hauptbahnhof" end Erläuterung: Wenn ein Zug einen Kontakt betritt (oder verlässt), dann ist immer genau ein Fahrzeug im Verbund der "Repräsentant" dieses Zuges. Dieses Fahrzeug muss nicht zwingend das Fahrzeug sein, welches den Kontakt berührt hat. Man möchte ja zum Beispiel erreichen, dass derselbe Zug einen Kontakt sowohl betreten als auch verlassen kann. Deshalb muss das Referenzfahrzeug immer dasselbe bleiben, auch wenn der Zuganfang den Kontakt betritt, aber das Zugende ihn verlässt. In aller Regel ist das angetriebene Fahrzeug im Verbund der Ansprechpartner. Der "Auslöser".
  25. Nein, du musst in der EV das auslösende Fahrzeug ansprechen. vehicle.labels["Zielbahnhof vorn"].text = "Hauptbahnhof"
×
×
  • Neu erstellen...