Jump to content

Goetz

Mitglieder
  • Gesamte Inhalte

    5797
  • Benutzer seit

  • Letzter Besuch

Alle erstellten Inhalte von Goetz

  1. Hello Ger Klunder, I'll do my best to continue the explanation and include the explanation you asked for. Currently, my second monitor is out of order and I need two for any Twitch broadcast. Thank you very much for your kind words regarding my video. Goetz
  2. Hallo @maxwei tut mir leid, wenn ich unhöflich und klugscheißend gewirkt habe. lg Götz
  3. Der Teil des Videos läuft ziemlich sicher mit überhöhter Geschwindigkeit. Denn die Auffahrt auf die Drehscheibe sowie auch die Abfahrt sind genauso wie die Drehbewegung zu schnell. Es fehlt eine wirklich gute Referenz. Aber wenn du dir anschaust, wie zackig der Lokführer vor der Abfahrt das Seitenfenster öffnet, dann ahnst du zumindest dass das nicht Echtzeit ist.
  4. Ja, durchaus. Eine Weiche hat zwei Fahrspuren, von denen jeweils nur eine aktiv ist. So kann es sein, dass der Kontakt nur bei einer von zwei Weichenstellungen aktiviert wird. Nämlich dann, wenn die aktive Fahrspur genau die ist, an die auch das Signal angedockt wurde. Aber das gehört auch eigentlich nicht so dicht aneinander. Und vor allem gehören Signale nicht hinter Weichen. Denn die Weichen müssen durch das Signal gedeckt werden. Eine Weiche darf nur umgeschaltet werden, wenn das davor liegende Signal "Halt" zeigt.
  5. Orientrot ist die amtliche Bezeichnung. Zur Unterscheidung von Verkehrsrot - einem ganz anderen Rot, das man ebenfalls (auch) bei Dieselloks findet.
  6. Dass ein Signal zugleich als Gleiskontakt fungiert. Wenn dieser (unsichtbare) Kontakt überfahren wird, dann ist das triggernde Objekt das zugehörige Signal. Damit kannst du direkt dieses Signal als Auslöser ansprechen.
  7. ... würde ich das Signal einmal etwas weg ziehen und wieder ran schieben. Damit es sicher am Gleis andockt. Durch den Tausch alleine ist nicht garantiert, dass es eine Verbindung herstellt. Dem Bild kann man so leider nicht ansehen, ob das Signal eine Verbindung hat oder nicht. Und deine Aussage, dass alles richtig geschrieben ist, können wir dir auch nur glauben. Überprüfen können wir nicht, ob du vielleicht einen Schreibfehler übersehen hast. Mehr Hilfe als "Stochern im Nebel" kann man dir so leider nicht angedeihen lassen.
  8. Es ist wie bei einer Band, @schlagerfuzzi1 Es genügt nicht, wenn der Einzelne sich Mühe gibt und ja auch ganz nette Töne zustande bringt. Musik wird es erst, wenn alle einen gemeinsamen Stil anstreben. Wenn alle im selben "Maßstab" spielen. Wenn das Solo des Cello-Spielers durch die Tür des Percussionisten passt (weil der den nötigen Platz gelassen hat.) Und ein Zuhörer muss nicht selbst Geige spielen können um zu hören, dass ein anderer nicht mit dem Rest des Orchesters harmoniert. Das klingt nicht gut muss kein Gemecker sein. Manchmal ist es auch berechtigte Kritik. Meistens sogar. Und überwiegend ist die Kritik in diesem Forum auch noch konstruktiv. Denn sie kommt oftmals von denjenigen, die selbst etwas von der Materie verstehen.
  9. Zu HaNNoveraNers richtigem Vorschlag liefere ich die Begründung nach. Mit function Laenge() legst du eine Funktion an. Du müsstest also dein benutzerdefiniertes Ereignis aufrufen, um die Funktion zu erzeugen. Du willst sie aber benutzen. Also musst du sie vorher erzeugt haben. Und dafür ist das Skript, welches du gleich oben in der EV über das + erstellst. Dieses Skript wird während des Anlagenstarts einmal ausgeführt. Das ist der richtige Zeitpunkt, um eine Funktion zu erstellen.
  10. Du erstellst eine Funktion mit dem Schlüsselwort function. Und du benutzt sie, indem du ihren Namen samt den Klammern dahinter schreibst function benutzMich() -- Funktionsdefinition print("Ich werde benutzt") end benutzMich() -- Funktionsaufruf Aber jedes Ereignis, dass du mit einem Lua Skript versiehst, ist ein Funktionsaufruf. Und alles, was du in dieses Skript schreibst, bildet deine Funktionsdefinition. Ich verstehe noch nicht, was dir fehlt. Ja, das geht. $("Objektname").variables["meinVariablenname"] Aber genau das hast du in deinem Skript schon verwendet. Meinst du mit "per Programm" etwas anderes als die EV im MBS?
  11. Hello @Curt84328 Picking up from Timba's suggestion, I'd like to show you my approach, which is very similar: For each destination, I store a list of tables. Each table holds one switch and it's setting. Except for the nametags "switch point" and "setting", this is exactly like Timba's first line of code. And the EV representation of his little script looks like this: That's all - one single, simple entry covering all possible destinations. I recorded a short video, explaining how it works: and here's the layout from that video: route setting via table.mbp
  12. ... erstmal nicht. Die verkomplizieren die Geschichte erheblich.
  13. That would be a variable or property. Separated by a single colon. The double colon is needed for a function or method. It includes the object (= what's in front of the colon) as the first argument.
  14. Du kannst Autos auch "beamen", weil du ihnen Positionswerte zuweisen kannst. Um die neue Straße genau zu treffen, setz einen Kontakt drauf. Dessen Positionsdaten überträgst du dann ans Fahrzeug. Virtuelle Depots funktionieren nach dem selben Prinzip: unsichtbar machen in Liste aufnehmen in Anlagenecke deponieren. (Darf alles ineinander gestapelt werden) Und dann zum passenden Zeitpunkt dort wieder sichtbar werden lassen, wo dein "Ausfahrt"-Kontakt sitzt. Bei Gelegenheit kann ich 'ne Demo basteln, wenn Bedarf ist.
  15. Kannst du es an anderer Stelle flach bauen und dann als Gruppe dorthin verfrachten, wo du es benötigst?
  16. Ich auch. Den Trick kannte ich auch noch nicht. Wenn das "die anderen" wüssten ... hihi
  17. Meine Vermutung ist, dass du den Youtube Link an unterschiedlichen Stellen kopiert hast. Je nachdem, wo du ihn hernimmst, hast du entweder die youtu.be oder die youtube.com Adresse bekommen. Fällt nicht auf, wenn man nicht darauf achtet. (sorry für die Themenabweichung)
  18. Das liegt erstens an der Schreibweise der Adresse - youtu.be wird nicht eingebettet. und zweitens kann man als Ersteller eines Videos das Einbetten erlauben/verweigern.
  19. Ich bin felsenfest überzeugt: Wer auf so kreative Weise einen Vogel dazu bringen kann mit den Flügeln zu schlagen wie du, Koriander, der kann auch einen solchen Vogel in Blender bauen und richtig animieren.
  20. Okay. In Lua kann ein Tabellenfeld entweder durch eine Nummer oder durch einen Namen identifiziert sein. Beides schreibt man in eckige Klammern. Eine Zahl ist in diesem Fall eindeutig erkennbar. Aber Namen muss Lua von Variablen unterscheiden können. Deshalb muss man Namen als String angeben. Weißt du, was ein String ist? Tabelle ["x"] ist das Feld mit Namen x in der Tabelle. Tabelle[x] sucht nach einer Variablen namens x um ihren Inhalt (Zahl oder String) als Bezeichner für das Feld zu verwenden for x = 1, 10 do print(Tabelle[x]) end gibt nacheinander alle Felder der Tabelle von 1 bis 10 aus. Der Bezeichner hinter einem Punkt ist eine alternative, vereinfachte Schreibweise. Tabelle.x bedeutet also dasselbe wie Tabelle["x"] Die vereinfachte Schreibweise erlaubt keine Sonderzeichen, Leerzeichen, Satzzeichen etc. im Namen. Und (wichtiger noch!) sie erlaubt keine Variablen, welche die Bezeichner enthalten. Deshalb gibt es in Lua beide Schreibweisen. Bitte frag, wenn dir solche Dinge unklar sind. Man kann sich unmöglich alles merken. Erst recht nicht, wenn einem die Zusammenhänge fehlen. Programmiersprachen kann man nur lernen, indem man ihre Mechanismen versteht.
  21. Wenn man sie zur Verfügung hat. Hast du da eine gute Quelle parat?
  22. Hast du denn nur mit Freude festgestellt, dass es funktioniert? Oder hast du auch verstanden, warum es so (und nur so) funktioniert?
  23. x ist ein Bezeichner und somit ein String. Außerdem ist es ein kleines x Diese beiden Schreibweisen funktionieren: local l = $("Gleis01").size["x"] local l = $("Gleis01").size.x
  24. Dann nimm doch auch gleich diese "Objektsuche per Namen" aus den einzelnen Ereignissen. Das ist doch Unsinn die immer wieder neu anzustoßen, wenn sie sich nie ändert. Geh im Basisskript hin und such beim Start einmal zu jedem STOP Kontakt das zugehörige Signal (per Namen) . Das gefundene Objekt speicherst du in einer Variablen im Kontakt. Dann kannst du im Betrieb direkt auf diese Variable zugreifen.
  25. So viel kann ich bislang (nach einem ersten ernsthaften Probelauf) sagen: Zweimal ist der Betrieb aus dem Ruder gelaufen und in beiden Fällen war der Grund identisch. Im Signal FSSig0010 war der benötigte Eintrag für den Zug leer. Ich habe die Testläufe im Video aufgezeichnet und dabei das Ereignsprotokoll neben der Anlage geöffnet. So konnte ich die Fehlermeldung sehen, dass beim verzögerten Aufruf von "Ein Signal mit Schlagwort BREMSSIGNAL schaltet" in Zeile 7 des Skripts ein leerer Index das Problem verursacht hat. Im Protokoll sah ich, dass Signal 10 das angesprochene Signal war. Beim zweiten Testlauf habe ich daher die Variablen von Signal 10 anzeigen lassen. Es dauerte diesmal wesentlich länger, bis derselbe Fehler auftrat. Aber der Fehler war dann identisch. Es gibt offenbar eine Konstellation, in der der Zugname im Signal 10 vorzeitig gelöscht wird. Ob ich mittels Aufzeichnung herausfinde, was genau diese Konstellation ist, muss ich schauen. Generell sind solche Aufzeichnungen sehr hilfreich, weil man so ein "was bisher geschah" verfügbar hat. (Aber da sage ich dir nichts Neues ) Anlagen schalten im Fehlerfall übrigens nur dann auf Pause, wenn das Ereignisprotokoll sichtbar ist. Andernfalls geht der Betrieb weiter, aber vermutlich unter falschen Bedingungen, weil der Rest des Fehler-verursachenden Skripts nicht mehr ausgeführt wurde. Ohne Ereignisprotokoll sieht man also möglicherweise nicht den eigentlichen Fehler, sondern Spätfolgen an anderer Stelle.
×
×
  • Neu erstellen...