Jump to content

ElFerrocarrilero

Mitglieder
  • Gesamte Inhalte

    25
  • Benutzer seit

Letzte Besucher des Profils

Der "Letzte Profil-Besucher"-Block ist deaktiviert und wird anderen Benutzern nicht angezeigt.

  1. Hallo Alle, Mysterien für Einsteiger, Folge ca. 3: (MBS Version 8.2.2.0) Ziel: ein Zug soll stoppen, seine Fahrtrichtung umkehren, zunächst aber noch stehen bleiben Manuell alles ganz einfach: Im Kontroll-Widget für die Lok den Zug stoppen, dann auf den "Richtungswechsel"-Knopf klicken. Die Anzeige im Widget (Dreiecks-Pfeil) springt entsprechend um. Dann (irgendwann) manuell "Gas geben" --> Zug fährt rückwärts ab. Wie erwartet. Nicht wie erwartet die folgende Variante: Es gibt einen Gleiskontakt und ein Skript, die dasselbe bewirken sollen. --[[ getestet in Version 8.2.2.0 --]] vehicle = $("BR 89.0") -- Achtung: Name hier festverdrahtet (der Einfachheit halber) print(">>>>>> Richtung vorher: " .. tostring(vehicle.drivingDirection)) --> 1 dir = vehicle.drivingDirection vehicle.targetSpeed = 0 vehicle.drivingDirection = (-1)*dir print(">>>>>> Richtung nachher: " .. tostring(vehicle.drivingDirection)) --> -1 -- vehicle.targetSpeed = -3 -- (Zahl ist beliebig) -- vorige Zeile auskommentiert: Skript funktioniert für einzelne Loks, aber nicht für Züge -- Zeile aktiviert: funktioniert auch für Züge (die dann aber logischerweise nicht stehen bleiben) Für eine einzelne Lok klappt das auch. Sobald die Lok aber auch nur einen Waggon zieht, funktioniert es nicht mehr: Der Zug stoppt. OK. Die Eigenschaft "drivingDirection" springt von +1 auf -1 (s. Ereignisprotokoll). Auch OK. Aber die Anzeige im Kontroll-Widget springt nicht um. Und wenn man dann manuell "Gas gibt", fährt der Zug vorwärts in der alten Richtung weiter. Bonus-Mysterium: Setzt man aber im Skript nach der Richtungsumkehr noch eine negative targetSpeed ungleich 0 (s. drittletzte Zeile im Skript), dann funktioniert wieder alles wie erwartet*: Zug stoppt. Richtungsanzeige springt um. Zug fährt rückwärts ab (mit der neuen negativen targetSpeed) Er soll aber erstmal stehenbleiben! Nur klappt das nicht mit targetSpeed 0 (ausser für einzelne Loks, s.o.). Was übersehe ich diesmal? Mikro-"Anlage" zum Ausprobieren anbei. Danke für alle Tips. Cheers, El Ferrocarrilero * ...und mit dieser targetSpeed- Anweisung kann man sich auch die ganze Richtungsumkehr-Logik im Skript sparen. Aber "-0" funktioniert nicht Demo_Richtungsumkehr_Zug.mbp
  2. Hallo Wolfgang, danke für den Tip! Ich weiß von dieser Test-Möglichkeit und werde sicher auch irgendwann davon Gebrauch machen*, aber lieber erst, wenn ich mit der v8 etwas besser vertraut bin und dann auch die Neuerungen in v9 besser einschätzen und würdigen kann . In der Tat. Siehe auch "If it ain't broken, don't fix it." Erfahrung aus Jahrzehnten des Kampfes mit dem Komputer... Beste Grüße, Martin * schon um den Update-Preis zu erfahren, den es wohl gibt; der wird anscheinend vorher nicht verraten (jedenfalls nicht beim Wechsel von v8 auf v8.5)
  3. Hallo Wolfgang, vielen Dank für die schnelle Antwort und den Link! Leider kann diese Anlage (v.8.5.2) unter v.8.2. nicht geladen werden; es erscheint ein Prompt, man möge updaten*. Die PDF-Dokumente tuns aber bestens auch für v.8.2! (Ich hoffe nur, es werden im Tutorial nicht zu viele neue Features von v.8.5 oder 9 verwendet; aber zunächst gehts ja auch erstmal nur um die Grundzüge.) Und es ist wirklich sehr nützlich, alle Aspekte einer Anlage, vom Gleisplan bis zur Vegetation, mal in einem Tutorial versammelt kennenlernen zu können. Cheers, Martin * Irgendwann werde ich das sicher auch tun. Aber v.8 läuft auf meinem jetzigen System sehr gut, und ich möchte deshalb erstmal nicht die sicherlich höheren Ressourcen-Anforderungen einer neueren Version riskieren. Abgesehen davon, dass man ja dann gleich noch mehr Features lernen müsste.
  4. Hallo, spät, aber nicht zu spät, habe ich dieses hervorragende Tutorial von Wolfgang (@prinz) zum "Anlagennachbau nach Herstellerplan" entdeckt. Ganz genau das, was der Einsteiger braucht, um mal einen besseren Überblick zu bekommen und statt einzelner MBS-Bäume und Lua-Sträucher den ganzen Anlagen-Wald zu sehen. Großen Respekt und Dank an den Verfasser für diese umfassende und gründliche Dokumentation! (wie alle Entwickler wissen, immer das mühseligste und daher gern "vergessene" Geschäft...). Kleines Randproblem: Die im Tutorial Teil 1 und hier im Forum erwähnten Anlagen werden bei mir im Online-Kartalog weder unter der ID noch unter ihrem (vermuteten) Titel noch unter dem Namen "prinz" gefunden; es geht um: 741AF992-2B29-48ED-B6B8-6C416AF9A1EC "Basissteuerungen" / "Steuerung der Standardthemen" EF05FEDD-DAAD-4B46-8911-166B97B13408 Stand zu verschiedenen Zeiten, ab dem 27.2.2024, und später dann fertige Anlage Hier im Forum-Thread erwähnt niemand ein solches Problem -- suche ich da falsch, oder ist das vielleicht eine Versions-Sache (ich habe MBS v.8.2.2)? (Andere Anlagen von prinz kann ich sehen.) Danke für alle Tips! Cheers, El Ferrocarrilero
  5. Hier zur Ergänzung (und für nachfolgende Generationen, die diesen Thread studieren) noch eine Mikro-"Anlage" (es gibt nicht mal Schienen!), welche die Umsetzung von Götz' Hinweisen demonstriert. Einzelheiten stehen in der "Anlagen"-Beschreibung. Cheers, El Ferrocarrilero Demo_zentrale_Funktionen.mbp
  6. Genau. Als Sprache einfach aussehen und einfach sein ist nicht dasselbe... ("Simple: Everything is a table! Except where it isn't.")
  7. Hallo Götz, aha! Wieder was gelernt; den "benutzerdefinierten Ereignissen" war ich bisher eher aus dem Wege gegangen, werde sie mir aber nun mit Interesse genauer ansehen. Das ist (vor allem am Anfang) immer etwas das Problem: man weiß oft nicht so recht, soll man bei der "allgemeinen" Lua-Sprache weitersuchen* oder geht es um etwas MBS-Spezifisches. Vielen Dank für die schnelle und hilfreiche Antwort! Cheers, El Ferrocarrillero * wo ich z.B. nun lernen konnte/musste/durfte , dass der # Operator mit nicht-numerisch indiziertenTabellen nicht funktioniert...
  8. Greetings, Um eine Funktion für mehrere Ereignisse benutzen zu können, habe ich versucht, sie in einer Tabelle unterzubringen, die dann zu einer Ereignis-Variablen gemacht wird. Das gelingt aber nicht, siehe Demo-Code mit Kommentaren. Geht das wirklich nicht, oder übersehe ich da was? Danke für alle Tips. Cheers, El Ferrocarrilero --[[ Funktionen als Tabellen-Elemente *in einer Ereignis-Variablen* ? (als auslösendes Ereignis dient Betätigung eines Schalters) --]] tb = { eins = 111, zwei = 222, doSomething = function(etwas) print("Funktion tb.doSomething: " .. tostring(etwas)) end, drei = 333 } n = 0 for _ in pairs(tb) do n = n + 1 end -- (Anscheinend die einzige Art, die Länge einer Tabelle mit nicht-numerischen Indices -- zu bestimmen; #tb funktioniert _nicht_ (learned it the hard way...:-/ ) print(">>>> Einträge in lokaler Tabelle tb: " .. tostring(n)) --> 4 OK print(tb.doSomething("Hallo!")) --> Funktion tb.doSomething: Hallo! OK -- mit einer Tabelle direkt im Skript geht es also. So weit, so gut. -- nun die Tabelle mit enthaltener Funktion zu Ereignis-Variabler machen: -- (geht wohl nicht in der grafischen EV. I think. -- Dort z.B. als "Text (mehrzeilig)" eingegebene Funktion funktioniert (logischerweise) nicht.) $("Ereignisse").variables.tbNEU = tb --> Module-Var. wird gesetzt --> Ereignisse, "tbNEU", {3 Elemente} -- sollten 4 Elemente sein, aber Inspektion in der EV zeigt, dass die Funktion fehlt n2 = 0 for _ in pairs($("Ereignisse").variables.tbNEU) do n2 = n2 + 1 end print(">>>>> Einträge in Ereignis-Variable (Tabelle) tbNEU: " .. n2) --> 3 korrekt, weil die Funktion fehlt z = $("Ereignisse").variables.tbNEU.drei print("tbNEU.drei: " .. z) --> tbNEU.drei: 333 OK, "normale" Einträge tuns also... -- ... die Funktion aber nicht: out = $("Ereignisse").variables.tbNEU.doSomething("Huhu!") --> Skriptfehler: attempt to call a nil value (field 'doSomething') -- (traurig aber logisch, da Funktion gar nicht in die Ereignis-Var. übernommen wurde) print(out) -- Sorry, Dave, I can't do that...
  9. Vielen Dank an @Goetz für die ausführliche und hilfreiche Erläuterung! Eine wichtige Information; mich hat etwas die Vorstellung beunruhigt, es gebe da womöglich wer weiß wieviele andere, die sehr nützlich wären, wenn man nur von ihnen wüsste. (Jedem Programmierer bekanntes Problem, besonders auf neuem Gebiet: Man programmiert mühsam und garantiert "nicht-performant" um ein Problem herum, das sich mit Hilfe eines dieser leider noch unbekannten Elemente ganz leicht lösen ließe. ) Aha! Genau das war der Stolperstein für mich. Da war mir was bei der Info-Jagd durch die Lappen gegangen. Zwar hatte ich die Lektion von neulich nicht vergessen und es auch hier mit Strg+Leertaste probiert, war dabei aber dem (falschen) Eindruck erlegen, dass die dann erscheinende Liste immer dieselbe ist, indem sie alle nur denkbaren MBS-Lua-Elemente (Eigenschaften, Funktionen, Variablen usw, plus Lua-Schlüsselwörter) auflistet. Beim neuerlichen Versuch, aufgrund der Hinweise hier, sehe ich jetzt aber, dass das nicht stimmt: die Liste ist in der Tat spezifisch für das jeweilige Ereignis, und die Ereignis-Parameter ganz am Anfang enthalten auch die jeweils speziellen Namen, die ich da also auch ohne "Vorkenntnisse" finden kann. Prima, alles klar, nochmals vielen Dank für alle Antworten, und schönes Wochenende! Cheers, El Ferrocarrilero
  10. Vielen Dank @Phrontistes für die schnellen Antworten! (Die Beispielanlage läuft bei mir allerdings nicht; ich werde ermuntert MBS upzudaten. Vermutlich ist die Anlage für v.9, während ich noch v.8 habe.) Abgesehen davon war die Zielrichtung meiner Frage aber auch ein bisschen anders: Ich kann mittlerweile track, oldTrack und newTrack erfolgreich verwenden. Und hatte mir auch schon zusammengereimt, dass im Ereignis-Protokoll die Werte von oldTrack und newTrack auftauchen. Was mich aber darüber hinaus interessiert ist die Frage, ob/wo diese Dinge dokumentiert sind? Also zum einen, dass es so etwas wie controller oder oldTrack etc. überhaupt gibt, und zum anderen, welche Eigenschaften diese Objekte haben. XYZ.name funktioniert vermutlich immer, XYZ.state vielleicht ja auch, aber oldTrack.crane vermutlich nicht (oder?). So etwas kann ich (als Einsteiger) derzeit nur durch Studium von anderen Anlagen (oft sehr schön. aber für mich noch zu kompliziert) herausfinden, oder durch Versuch & Irrtum -- falls ich zumindest den Namen des betreffenden Objekts/Ereignisparameters schon kenne. Außer track, oldTrack, newTrack und controller gibt es aber sicher noch viele andere. Cheers, El Ferrocarrilero
  11. Hallo, eine allgemeine (Einsteiger-)Verständnisfrage zu Lua-Skripten im MBS: [Kurzfassung: Vielleicht läuft die Frage einfach nur darauf hinaus, was genau "Ereignisparameter" sind, und wo man sich darüber informieren kann? ] In der grafischen Oberfläche für die Ereignisverwaltung (EV) kann ein Ereignistyp (z.B. "Zug betritt ein Gleis") und ein "Auslöser" (z.B. "Gleis_42") festgelegt werden. Im Skript-Editor lässt sich dann Lua-Code für dieses Ereignis schreiben. Aber dieser Code betrifft dann (natürlich) nur, was "im Innern" des Ereignisses vorgehen soll. Es muss aber ja einen Rahmen / eine Umgebung geben, in der das alles abläuft (z.B. so etwas wie ein "EventListener" für Gleis_42, der aufpasst ob dieses Gleis betreten wird). Wie kann man sich diesen "Rahmen" ansehen (nicht ändern!)? Über reine Neugier hinaus ist das auch eine praktische Frage: Man kann z.B ein Objekt* track verwenden, das auf das Gleis zeigt, welches durch ein Fahrzeug betreten wird, z.B. bei print(track.name). Dieses Objekt brauche ich in meinem Lua-Skript nicht zu definieren, das ist offenbar schon in der Umgebung erfolgt. Durch Zufall** habe ich dann im Lua-Code einer alten Anlage von BahnLand noch Objekte namens oldTrack und newTrack gefunden, und (für mich) überraschenderweise konnte ich die im eigenen Skript verwenden, ohne sie erst definieren oder mit Parametern versehen zu müssen.* Vermutlich gibt es da, wo die herkommen, auch noch andere nützliche Dinge? In einer Anlage von Goetz fand ich z.B. controller, was auch interessant aussieht, aber ist es wie track ein in der Umgebung definiertes Objekt, das ich ohne Weiteres benutzen kann, oder kommt es nur in speziell dieser Anlage vor? Wo könnte man sich über diese "Umgebung" informieren? Gibt es eine Art Programmierschnittstelle (API) oder Ähnliches für MBS-Lua? oldTrack und newTrack beispielsweise konnte ich bisher weder in der MBS-Hilfe, noch im Wiki, noch in den Foren finden**. (Das Objekt track wird in der Hilfe zwar in verschiedenen Beispielen verwendet, aber nicht selbst dokumentiert.) Oder geht diese Frage womöglich am gesamten Konzept von MBS-Lua-Skripten vorbei? Cheers, El Ferrocarrilero * "Objekt" hier immer in ganz allgemeiner Bedeutung, wie auch immer die betreffende "entity" (Wesenheit?) in Lua heißt ("property", "function", usw.). ** Wenn man im Editor "ol" schreibt, erscheint allerdings in der Tat ein Popup das "oldTrack" als "Ereignisparameter" anbietet. Nur muss man dazu den Namen natürlich schon kennen. Für Info über Eigenschaften und Methoden kann man dann "oldTrack." bzw "oldTrack:" tippen, aber die dann erscheinenden Listen umfassen wohl immer alle bestehenden Eigenschaften und Methoden, nicht nur die, welche für dieses spezielle Objekt auch wirklich "Sinn machen". Oder?
  12. Gute Tips, danke @gmd! Wahrscheinlich nicht... (Ich hab selber mal auf eigenem PC mit AI Modellen experimentiert, für Bilderkennung. Ergebnis unter anderem: wenn man in einem Bild mit 1024 Pixeln ein (1) Pixel an der "richtigen" Stelle ändert, wird ein vorher korrekt erkanntes Schiff nun als Flugzeug angesprochen... Passiert nicht immer, aber kann immer passieren. Bei den neueren Large Language Models (LLMs) gibt es noch viel schönere Beispiele (runter scrollen zu "Fake it until, well, just keep faking it")... Zurück zum Topic: unten angehängt ist nun auch noch die englische Version. Cheers, El Ferrocarrilero Lua_English_Toc_alternativ.zip
  13. Schönes Layout! Ich hatte etwas Ähnliches in Angriff genommen, das hätte aber weitere zwei bis drei Monate gebraucht bis zu einem halbwegs präsentablen Ergebnis... Statt dessen hab ich mir die Freiheit genommen (kühn das Einverständnis von @gmd voraussetzend* ) das Inhaltsverzeichnis seiner HTML-Seite (deutsche Version) wieder "side-by-side" mit den Beschreibungstexten zu positionieren, so dass es also nun wieder jederzeit sichtbar ist. Das Original-Layout hat das auch gut vertragen. * @Adminfalls nicht einverstanden, bitte die ZIP-Datei gleich wieder unzugänglich machen... Ausserdem einige kleinere kosmetische Änderungen (Farbe und Fontgröße); ist natürlich Geschmackssache und lässt sich auch bei Nicht-Gefallen/Nicht-Einverständnis leicht wieder rückgängig machen (der Original-Code ist noch im File enthalten, nur auskommentiert.) Was hier nicht geht, ist das Ein- und Ausblenden der Unterkapitel ("items") zu jeder Haupt-"Category", weil diese items hier keine Linkadresse enthalten. Ist vielleicht aber auch ohnehin Overkill, da man sich innerhalb der Kategorien eigentlich leicht zurechtfindet. Dann noch eine Frage aus reiner technischer Neugier: Wie wurde die ursprüngliche Kombination aus XML + XSLT denn zu HTML konvertiert? Wieder via Word, also mit dem workflow XML+XSLT ---> importieren nach Word, Inhaltsverzeichnis erstellen ---> exportieren nach HTML. Oder geht das auch anders? Die XML+XSLT-Kombination lässt sich zwar auch direkt in den (meisten) Browsern darstellen, aber eine Methode (außer der obigen), daraus eine echte HTML-Seite zu generieren, habe ich bisher nirgends gefunden. Cheers, El Ferrocarrilero Lua_Deutsch_Toc_alternativ.zip
  14. Danke für den Tip, leider habe ich nur LibreOffice. Der LO Writer erlaubt wahrscheinlich Entsprechendes (LO-Dokumente verwenden intern selber XML), man muss aber anscheinend erstmal eigenhändig XSLT-"Filter" bauen für die Übersetzung zu und von den jeweiligen LO-Stilen; also ein weiteres faszinierendes Bastelprojekt. The Quest widens... Praktisch vielleicht wichtigerer Punkt: Wäre es nicht besser, das Dokument (wenn es denn mal fertig werden sollte) direkt als Webseite online zur Verfügung zu stellen? Das würde sicherstellen, dass die Benutzer, die sich dafür interessieren, immer die aktuelle Version sehen; bei einem herunterladbaren PDF müssten sie sich selber drum kümmern (was sie erfahrungsgemäß aber oft nicht tun ). Und die Webseite könnte dann ja jeder immer noch selber als PDF "ausdrucken". Cheers, El Ferrocarrilero
  15. Dazu ein Hinweis zur Warnung (um Anderen Zeit zu sparen): Ich bastle (als XSLT-Newbie) sei zwei Tagen an einem XSLT-Stylesheet, das sich direkt auf die Original-XML-Dateien anwenden lässt (und vor allem auch die "Beschreibungen" besser formatieren kann). Das Problem sind die HTML-Tags dieser Beschreibungen (in CDATA-Wrapper), die im Brauser standardmäßig nicht interpretiert werden. Bisher also noch kein Erfolg. Abgesehen von dem CDATA-Wrapper (der wohl entfernt werden muss(?)) ließe sich das Problem an sich relativ leicht mit einem XSLT-Konstrukt (disable-output-escaping="yes") lösen. Jedoch gibt es eine Falle, vor der dieser Hinweis warnen soll: Firefox (und andere "Gecko"-basierte Brauser) unterstützen dieses Konstrukt nicht (aus Prinzip, kein Bug! 23 Jahre(!) alte Diskussion hier). Da der FF (den ich normalerweise ausschließlich benutze) aber keinen Hinweis darauf gibt, sondern die HTML-Tags einfach nur als Text darstellt, kann man dann sehr viel Zeit auf die Suche nach dem (nicht existenten) Fehler seines Stylesheets ver(sch)wenden. Bis man dann widerwillig mal den MS Edge probiert, und da geht es dann... Alle möglichen Work-arounds für den FF haben bisher auch nicht geholfen. The Quest continues... Cheers, El Ferrocarrilero
×
×
  • Neu erstellen...