Jump to content

Goetz

Mitglieder
  • Gesamte Inhalte

    5984
  • Benutzer seit

  • Letzter Besuch

Alle erstellten Inhalte von Goetz

  1. Ne, du hattest im Kontakt Stop0003 die Variable "signal" falsch benannt. Der hat stattdessen ein "o_signal" Das Schlagwort "Stop" war kein Hindernis. Der Kontakt wurde ja trotzdem erkannt und die EV hat reagiert. Um Groß/klein zu korrigieren, mach einen Zwischenschritt: Lösch einen Buchstaben. Oder füge einen hinzu. Und Schlagworte sowie Variablennamen immer aus der Auswahlliste nehmen! Dann sind Schreibfehler ausgeschlossen.
  2. Die habe ich schon "studiert"
  3. Kannst du machen. Aber ich denke, es wäre ausreichend die Suche nur jeweils einmal anzustoßen, wenn sich hinter dem Einfahrsignal etwas ändert. Wenn also ein dahinterliegender Abschnitt von jemandem verlassen wird. Denn vorher kann nichts frei werden. (Ausgenommen, du schmeißt händisch Züge runter.)
  4. Soweit, so gut, Brummi. Den Teil kannst du bei bigrala auch als "erledigt" betrachten. Aber wenn ein Zug nicht einfahren durfte, dann muss der nächste Versuch durch die Ausfahrt eines anderen Zuges angestoßen werden. Und in diesem Augenblick will bigrala ganz vernünftig prüfen, welche Art Zug am Eingang wartet. Weil der ausfahrende Zug nicht zwingend das Gleis freigibt, auf welches der einfahrende Zug wartet.
  5. Als Bedingung wählst du Und dann gibst du das Schlagwort einfach als Namen der Variablen an, die existieren soll Hier "einmal über Bande gespielt", weil das Schlagwort in dem Zug steht, den du im Einfahrsignal hinterlegt hast.
  6. Ich hab's getestet (und gestaunt!) Eigenschaften, Schlagworte und Variablen werden - wie Andy sagt - mit gespeichert, wenn man einen Block in "eigene Modelle" speichert. Und Bezüge innerhalb des Blocks (= Moduls) ebenfalls.
  7. Das Wichtigste hat Timba alles schon exzellent beantwortet. Deshalb habe ich nur noch eine Anmerkung hierzu; Wenn du dieses eine Gleis nicht mit einem Namen versiehst, der es eindeutig identifiziert, dann musst du es trotzdem irgendwie deinem Code zuweisen. Für deine eigene Anlage triffst du diese Zuweisung, indem du das Gleis entweder direkt oder in einer Auswahlliste anklickst. Damit ist es eindeutig benannt, auch wenn der Name dir diese Eindeutigkeit nicht zeigt. Fertig Willst du einen generischen Code schreiben, dann musst du irgendwelche Faktoren haben, anhand derer du das richtige Gleis erkennen kannst. Diese Merkmale können alles mögliche sein: Eine Objektvariable, ein Schlagwort oder eine andere Eigenschaft (Position, Drehung ...) die du per Skript prüfen kannst. Mit diesem Merkmal kannst du zu Beginn alle Gleise abklappern und Objekte, welche deine Kriterien erfüllen, in eine Liste übertragen. Diese Liste wird die Objektadressen enthalten, nicht die Objektnamen. Jetzt hast du auf einer beliebigen Anlage die Gleise identifiziert, für die deine Aktion ausgeführt werden soll.
  8. Nein, weder noch. Gleis ist nur eine Variable. Entscheidend ist, was du an diese Variable übergibst. In meinem Beispiel sind das die Objekte aus der Liste t. local t = {$("Gleis 1"), $("Gleis 2"), $("Gleis 3")} for i, Gleis in ipairs(t) do if #layout:getVehiclesOnTrack(Gleis) > 0 then Gleis.variables["GBS"].state = 2 else Gleis.variables["GBS"].state = 0 end end
  9. Unter dem Plus in der EV findest du die Möglichkeit, ein generisches Skript anzulegen, welches einmal beim Start der Anlage ausgeführt wird. Alternativ kannst du unter "Ereignis" ein "benutzerdefiniertes Ereignis" anlegen, welches du dann z.B: auf Knopfdruck starten kannst. P.S.: Kann ich dich dazu animieren, Lua korrekt (also nicht in Versalien) zu schreiben?
  10. Namen spielen überhaupt keine Rolle wenn du (in Variablen, Listen etc.) Objekte speicherst. Ein Objekt wird dir zwar (zur Identifizierung) mit seinem Namen angezeigt. Aber gespeichert wird die Objekt-ID. Du erkennst es daran, dass sich Namensänderungen am Objekt selber sofort auch in deiner EV widerspiegeln. Die Objekt-ID wird dir nicht angezeigt. Aber das Objekt wird auf der Anlage durch Rahmen und Gismo hervorgehoben. Die Schreibweise mit dem $-Zeichen vorweg ist die Objektreferenz in Lua Schreibweise. Lua selbst kennt diese Schreibweise natürlich nicht. Aber Lua ist nur der Übermittler. Und wenn du nur das $-Zeichen schreibst und dann ein Objekt aus der Liste auswählst, dann steht (versteckt) im Code auch die richtige ID zum Objekt. Für wiederholte Aktionen gibt es den Timer. Der Ablauf eines Timers wird als Ereignis gewertet. Und ein Timer kann sich selbst neu starten. Das entspricht in etwa der EEPMain(), ist aber vielseitiger. Erstens bestimmst du selbst den Takt. Zweitens kannst du mehrere Timer parallel betreiben. Drittens kann jeder dieser Timer individuell gestartet und gestoppt werden. Und viertens kann man einen gestoppten Timer zu einem späteren Zeitpunkt wieder starten. Ein Beispiel findest du in meiner Anlage BremsProbe 02. Da frage ich mittels Timer im Abstand von 2 Sekunden nach, ob der Zug schon steht. Wenn die Bedingung erfüllt ist, dann gebe ich die Position der Lok aus und halte den Timer an. Und die Anlage enthält noch weitere nützliche Tricks, wie die Übertragung von Texten an Beschriftungsfelder. Ein Gleis ist eine Weiche, wenn die Eigenschaft "Weichenstellung" existiert. Die Existenz einer Variable oder Eigenschaft kannst du als Bedingung angeben. Weichen sperren kannst du nicht. Aber du kannst das Aufschneiden verhindern. Und auf ein Umstellen der Weiche kannst du reagieren (und z.B. die Weiche bei Nichterfüllung deiner Bedingungen wieder zurück schalten.)
  11. Hier ist eine kleine Beispielanlage zum Thema: Besetzt Abfrage Demo.mbp Die eigentliche Besetzt-Prüfung findet in einem benutzerdefinierten Ereignis statt. Das ist ein Ereignis, welches durch eine Aktion in der EV ausgelöst wird und nicht durch ein Ereignis auf der Anlage. Der Vorteil besteht darin, dass drei verschiedene Ereignisse auf der Anlage dieselbe Aktion starten können. In meinem Fall sind das ein Klick auf den roten Knopf das Betreten eines bunten Gleises das Verlassen eines bunten Gleises
  12. Dazu sind vielleicht folgende Hinweise nützlich: Du kannst in Objekten auch Listen und Tabellen speichern, nicht nur Variablen. Wenn du mehrere Modelle markiert hast, dann kannst du diese Auswahl klassisch mit Strg-C kopieren und beim Erstellen einer Liste unter "bearbeiten" mit einem Klick auf das Insert Icon oder mit Strg-V einfügen. Mit einem Doppelklick auf ein Gleis bekommst du automatisch alle angeschlossenen Gleise bis zu den nächsten Knotenpunkten (Weichen, Endgleise) als eine Gruppenauswahl. In Summe heißt das: Doppelklick aufs Gleis, Strg-C und dann als Liste an relevanter Stelle einfügen, damit du im Bedarfsfall flott in einer Wiederholung alle Gleise auf "besetzt" prüfen kannst.
  13. Sehr schön finde ich, dass du die Verzögerung anpasst, falls bei der gegebenen Verzögerung der Bremsweg nicht ausreichen würde.
  14. @Henry Das liegt an den ganzen übrigen Ereignissen in Thomas Anlage. Die musst du bitte alle deaktivieren, mit Ausnahme des neuen Zug abbremsen2
  15. Funktioniert prima. Und Relikte vom Original zeigen wirklich plakativ, wie viel eleganter man solche Aufgaben jetzt angehen kann.
  16. kannst du auch. Nämlich so, wie ich in meinem Beispiel die Position auslese, an welcher der Zug zum Stehen kam. Mit $(Object).transformation.position.x etc. Für deine print() Ausgaben hast du das "Ereignisprotokoll". Dafür ist das Icon rechts neben dem für die EV. Das Protokoll kann auch Objekt- und Modul-Variablen, Timer etc. anzeigen. Für den Faktor 2 beim Bremsweg habe ich auch (noch) keine geometrische Erklärung. Vielleicht steckt irgendwo in den Zusammenhängen ein a² + 2ab + b²? Aber das ist einfach nur ins Blaue hinein geraten und ohne irgendwelche Erkenntnisse dahinter..
  17. Hier ist mein kleines Beispiel: BremsProbe 02.mbp Der angepeilte Haltepunkt ist durch eine Rufsäule (gegenüber vom Stellwerk) markiert. Das Vorsignal dient als Auslöser. Hier wird anhand der Geschwindigkeit und Bremskraft ermittelt, wann der Zug gestoppt werden muss. Das Hauptsignal schickt den Zug wieder auf die Reise. Dabei bekommt er eine zufällige Geschwindigkeit zwischen 80 und 300 km/h und eine zufällige Bremskraft zwischen 2 und 45 m/s² Der Abstand zwischen Vor- und Hauptsignal beträgt 2 Kilometer! (Das reicht knapp bei 300 km/h und 2 m/s² Verzögerung) Ich habe ein paar Kameras aufgestellt, mit denen sich das Geschehen beobachten lässt. Kamera 4 zeigt die Telemetriedaten jeder Runde Die Genauigkeit, mit der ein Zug in diesem Szenario den Haltepunkt trifft, finde ich bemerkenswert.
  18. Ja - du kannst sie in der Objektliste als Filterkriterium benutzen
  19. Ich experimentiere auch gerade damit und stelle fest, dass ich das Ergebnis von Speed * Speed / Decel halbieren muss, um den tatsächlichen Bremsweg zu erhalten. (Maßstab ist auch bei mir 1:1 um die Sache nicht unnötig kompliziert zu machen) Alle Achtung übrigens, Thomas, wie schnell du die Sache mit dem "deferred call" durchschaut hast.
  20. Du kannst doch Erics Methode ganz leicht umkehren, Thomas. Auf der einen Seite hast du die Geschwindigkeit. Also km/h = 3.6 * m / s Auf der anderen Seite hast du die Verzögerung. Also m / s² Damit kannst du bei gegebener Entfernung die Verzögerung ausrechnen. Oder bei gegebener Verzögerung und Entfernung die Dauer. 1 Meter je Sekunde sind 3.6 Kilometer je Stunde (= 60 Minuten mal 60 Sekunden) Damit ist km/h geteilt durch 3.6 = m/s g sei die gefahrene Geschwindigkeit umgeformt in m/s, also s = km / h / 3.6 v sei die Verzögerung d sei die Entfernung bis zum Haltpunkt mit g² / v bekommst du zur gefahrenen Geschwindigkeit den Bremsweg in Metern. Denn bei den Einheiten kürzen sich zwei s und ein m weg. Bleibt ein m übrig. Wenn du den Bremsweg für eine gegebene Geschwindigkeit kennst und auch den Abstand zum Haltpunkt, dann ist die Differenz der beiden der Weg, den du noch mit unveränderter Geschwindigkeit zurücklegen musst. Und wie lange du für den Weg benötigst, errechnet sich aus deiner (umgeformten) Geschwindigkeit g Also: d - (g²/v) ist die Reststrecke vor dem Bremspunkt. Ich nenne sie r Dann ist r / g die Zeit (in Sekunden) die du abwarten musst bevor du bremst. Je nachdem, wie du deinen Bremsweg ausmisst, musst du noch den Maßstab der Anlage (z.B. 1:87) in die Berechnung einfließen lassen. Also zuerst aus der gemessenen Länge des Abstands bis zum Haltepunkt die maßstabsgetreuen Meter formen. Oder gleich den passenden Zollstock verwenden und maßstabsgetreue Meter ausmessen.
  21. Ja und ja. Beispiel und Erklärung folgen, wenn ich wieder am PC sitze. vorweg. Die Bremskraft ist in Meter je Sekunde zum Quadrat angegeben. Damit kannst du die richtige Bremskraft für jede gegebene Geschwindigkeit und Entfernung zum Haltepunkt ausrechnen. Persönlich finde ich es mit zwei Bremspunkten schöner und realistischer. Man bremst ab dem ersten Punkt so, dass man bei jeder Geschwindigkeit ein wenig vor dem zweiten Punkt eine Annäherungsgeschwindigkeit von z.B. 40 km/h erreicht. Und dann peilst du ab dem zweiten Punkt mit fester Bremskraft genau den Haltepunkt an. Den Maßstab musst du nur berücksichtigen, wenn du eine allgemeine Formel aufstellen willst und die realen Abstände für die Berechnung der Bremskraft heran ziehst. Ansonsten genügt ein empirisch ermittelter Faktor für die Distanz.
  22. Goetz

    DQ4 - Der Film

    Köstlicher Humor! "Die Befreiung der Realität von der Wirklichkeit."
  23. Klasse, Aloys
  24. Ja, das darfst du tun. Das hat keine negativen Auswirkungen. Ich wollte gerne nur ein Objekt dafür verwenden, weil ich dann nur ein Objekt ändern muss, wenn ich neue Ideen ausprobieren will ich zeigen wollte, wie man bei diesem (komplizierteren) Weg an die benötigten Daten dran kommt. Ich benutze den kleinen Schattenbahnhof ja eigentlich nur, um die verschiedenen Methoden vorzustellen, die man in der EV anwenden kann. Pick dir davon das raus, was dir gefällt. Das Einzige, was hängen bleiben kann, sind Werte in deinen Variablen. Und die kannst du leicht überprüfen, wenn dir etwas komisch vorkommt. Und beim Wechsel von einer Anlage zur anderen bleibt ganz bestimmt nichts hängen.
  25. Er muss im Auslöser sein. Der Kern meiner EV ist ja, dass eine einzige Definition für alle Ausfahrsignale funktioniert. Es gibt aber individuelle Unterschiede, je nachdem, welches Signal gerade das Ereignis auslöst. Also möchtest du über diesen Auslöser an die individuellen Unterschiede kommen. Zum Beispiel die individuellen Anzeigen im Pult. Und das erreichst du, indem du diese individuellen Dinge in den auslösenden Objekten speicherst. du schreibst also ins Signal: "zu dir gehört dieses Gleis und jene Besetztanzeige" Die Definition für das Einfahrsignal habe ich von den Ausfahrsignalen getrennt, weil ich bei der Einfahrt andere Faktoren beachten muss als bei der Ausfahrt. Ich muss zum Beispiel bei der Einfahrt prüfen, ob im Schattenbahnhof noch mindestens ein Platz frei ist. Aloys verwendet Flügelsignale. Bei denen gibt es noch keinen optischen Unterschied zwischen Ein- und Ausfahrsignalen. Der kam erst mit den Lichtsignalen.
×
×
  • Neu erstellen...