Übersicht über alle gültigen Variablen

  • Hallo Entwickler


    Ich bin nun an der Stelle angelangt, wo ich z.B. die Zugzielanzeiger mit den echten Daten und nicht Standardtexten versehen möchte. Ich habe nun in Oberlingen damit herumexperimentiert, komme aber auf keinen grünen Zweig.


    Beispiele:
    1) Wie schaff ich es, dass nur der Zugzielanzeiger auf dem gerade befahrenen Gleis die Variablen akzeptiert und anzeigt und nicht auch noch auf dem Gegengleis.
    2) Wie schaff ich es, dass der ZZA nichts anzeigt, wenn hier nicht gehalten wird.
    3) Wie entnehme ich den Zugtyp (ICE, RB etc.) aus den ersten 3 Stellen der Fahrplandatei, sodass ich nicht eine Variable bei jeder Fahrplandatei eingeben muss.


    Leider habe ich trotz intensiver Suche nirgends eine Übersicht über alle schon vorgefertigten Variablen gefunden. Hilfreich wäre etwa "Gleis", "Halt", und noch viel mehr.


    Besten Dank


    lg
    Bruno

  • Hallo Bruno,


    Wenn du im Editor auf das Fragezeichen klickst, dann auf Inhalt und dann auf Dokumentation Loksim-Editor Stand 2.9, findest du auf Seite 120ff. genau, wie das alles bein Zugzielanzeiger gemacht wird.


    Aber eine Frage dazu habe ich auch noch: Es ist zwar beschrieben, wie man sich den nächsten Halt anzeigen lassen kann aber wie man den übernächsten auch noch anzeigen lassen kann, ist mir unklar.


    Gruß, Markus

  • Hallo Markus


    Danke für den Hinweis. Doch, ich habe dieses Editor Handbuch schon versucht zu verstehen.
    Nur ein Beispiel:
    Simulation::Variable
    liest einen Wert aus der Simulation aus

    Ich möchte eben wissen, welche Werte man anstelle von "Variable" abfragen kann. Und eine solche Übersicht ist nirgends zu finden. Die Beispiele sind ebenso wenig aussagefähig, z.B.

    Wo findet sich die Variable "Mast" und was bewirkt sie?


    So bleibt man eben ratlos zurück, sorry.

  • Hallo Genosse,


    für mich sieht das nach dem Gruppeneditor aus, bei dem man selbst Variablen definieren kann. Im Streckeneditor kann man auswählen, welchen Wert die Variable haben soll. Eine Variable Mast kenne ich nicht weil ich das Objekt nicht kenne. Ich nehme eher Variablen, die Str::Ruecklicht heißen.


    Liebe Grüße


    Moritz

  • Hallo!
    - Du kannst in der Doku unter "vordefinierte Variablen" viele der Variablen die es gibt mit Beschreibung nachlesen
    - Einfach im Editor die ComboBox aufmachen - voilà, Du siehst alle Variablen die es gibt
    - Auch ein Blick in die "Dokumentation neuer und geänderter Funktionen" zahlt sich manchmal aus


    1) Nicht direkt möglich, möglich über eigene Variablen in der Fahrplandatei
    2) Über Halt("<halt>") Wahr falls der Zug an dieser Haltestelle hält
    3) Nicht möglich


    Bei Unklarheit einfach nochmal nachfragen


    lg
    Lukas

  • Hallo Lukas


    Besten Dank für deine Bemühungen. Ich stehe aber weiterhin auf dem Schlauch.


    Ich finde im Editor keine Combobox oder wie sich das Zeugs nennt. Falls du das "?" meinst, hmm, da habe ich nur die diversen Dokus zur Auswahl, die ich schon mehrfach vorwärts und rückwärts geblättert habe.


    Pt 1) ich habe zwar Variablen definiert, aber solche, die den Zug betreffen und nicht den Hp, z.B. Zugtyp=RB und RB=true, um gewisse Objekte anzeigen zu können. Ich kann hier aber nicht generell ein Gleis bei einem Hp angeben, das sollte ich eigentlich im Kursfahrplan können, wo aber keine Hps definiert sind.


    Pt 2) Probier ich mal aus.


    Ansonsten lasse ich es für eine Weile sein und behelfe mich mit dem "LastHalt" (schöner Sprachenmix ;-), was mir am meisten hilft, da ich schon verschiedene Destinationen anfahre, vor allem mit meiner Monsterstrecke Hainfurt - Jena oder Grossheringen oder Trischen und manchmal ein RB nur bis Budenheim.


    lg
    Bruno



    PS: Ich schaff es definitiv nicht, eine Bedingung (Halt) gleichzeitig mit dem Setzen eines variablen Textes (LastHalt) zu kombinieren.


    Ich gebs auf!!!

    Einmal editiert, zuletzt von wodan51 () aus folgendem Grund: neue Erkenntnisse

  • Hallo Lukas


    Ich habe nun eine Lösung für mein Problem gefunden.


    Zunächst definiere ich 2 Gruppenobjekte des ZZA, eines leer und eines mit vorgefertigten Daten für das Ziel "(DynStr(FahrplanDaten::LastHalt)" und den Zugtyp "DynStr(FahrplanVars::Zugtyp)", der manuell im Fahrplan eingetragen ist.


    Sodann definiere ich unter Streckenobjekte 3 spezielle Einträge, nur für die ZZAs:


    1) Einer ist, wenn das Gleis nicht befahren wird, kommt die leere Objektgruppe zum Einsatz.


    2) Ein Eintrag ist für ein den haltenden Zug. Da kommt die vorgefertigte Objektgruppe zum Einsatz, wobei weitere Parameter definiert werden können. Da dieser Eintrag nur für haltende Züge verwendet werden darf, habe ich diesen Eintrag mit einer Sichtbarkeitsbedingung ausstatten müssen: "FahrplanDaten::Halt("Grünau") || FahrplanDaten::Halt("Grünau.")". Da ich für die Vorwärts- und Rückwärtsfahrt zwei verschiedene Hps definiert habe, muss ich hier mit der Oder-Verknüpfung arbeiten.


    3) Einen Eintrag muss ich für die nichthaltenden Züge einrichten, wobei hier ebenfalls die leere Objektgruppe (wie bei 1) zum Einsatz kommt. Durch die Sichtbarkeitsbedingung "DynStr(FahrplanDaten::not Halt("Grünau") && FahrplanDaten::not Halt("Grünau."))" ist gewährleistet, dass nur durchfahrende Züge erfasst werden.



    Soweit, so gut. Ich hoffe, andere Streckenentwickler können von diesen Anweisungen ebenfalls Gebrauch machen. Einen einfacheren Weg habe ich momentan nicht gefunden.


    Ich habe jetzt nur noch eine Frage: Wieso muss ich im UND-Fall (Pt3) mit "DynStr" arbeiten, damit es wirkt?



    lg
    Bruno

  • 3) Einen Eintrag muss ich für die nichthaltenden Züge einrichten, wobei hier ebenfalls die leere Objektgruppe (wie bei 1) zum Einsatz kommt. Durch die Sichtbarkeitsbedingung "DynStr(FahrplanDaten::not Halt("Grünau") && FahrplanDaten::not Halt("Grünau."))" ist gewährleistet, dass nur durchfahrende Züge erfasst werden.

    Also ich glaube nicht, dass das wirklich so funktioniert ;)


    Sollte wohl not (FahrplanDaten::Halt("Grünau") or FahrplanDaten::Halt("Grünau.")) heißen?
    "DynStr" macht ja für Sichtbarkeitsbedingungen keinen Sinn


    lg
    Lukas

  • Eigentlich ist es Wurscht, ob du "not A AND not B" sagst oder "not(A OR B)"


    Das mit dem DynStr habe ich nochmals nachgelesen. Bin mir aber nicht sicher, ob ich das verstanden habe. Das kommt offenbar nur beim Anzeigen von Fonts zur Anwendung? Richtig?


    Ich habe nun eine weitere Schwierigkeit, die ich zu lösen versuche. Ich möchte nämlich am Zielbahnhof "nicht einsteigen...blabla" anzeigen lassen. Leider stosse ich da wieder auf Steine im Weg.


    Ich habe in Siegdorf 3 Anzeigen definiert, und sie auch an verschiedenen x-Punkten platziert, sodass sie sich nicht überlappen und ich ihre Anwesenheit testen kann. Um nicht über irgendwelche Logikfehler zu stolpern, habe ich bei 1) und 3) nur eine Bedingung je definiert:


    1) Siegdorf ist nicht Endbahnhof. So zeigt die Tafel den nächsten Halt und den Zielbahnhof an.
    Sichtbarkeitsbedingung: FahrplanDaten::LastHalt<>"Siegdorf Hp"


    2) Zug hält nicht hier:
    Sichtbarkeitsbedingung: not(FahrplanDaten::Halt("Siegdorf Hp") || FahrplanDaten::Halt("Siegdorf Hp."))


    3) Siegdorf ist Endbahnhof:
    Sichtbarkeitsbedingung: FahrplanDaten::LastHalt=="Siegdorf Hp"


    Das Ergebnis ist ernüchternd:


    Fall 1) zeigt die Tafeln 1) und 3) anstelle 1)
    Fall 2) zeigt die Tafeln 1), 2) und 3) anstelle 2)
    Fall 3) zeigt die Tafeln 1) und 3) anstelle 3)


    Ich bin ratlos. Irgendwie wird die Bedingung "LastHalt" nicht akzeptiert, sodass die Tafeln 1) und 3) in jedem Fall angezeigt werden.


    lg
    Bruno

  • Eigentlich ist es Wurscht, ob du "not A AND not B" sagst oder "not(A OR B)"

    Vom Ergebnis ja, von der Performance her nicht ganz. Aber egal, mir ist es eigentlich nur darum gegangen die Syntax zu korrigieren. So wie Du es geschrieben hast, funktioniert es schlichtweg nicht. Und vielleicht liest diesen Thread ja mal wer anderer der sich dann wundert...

    Das mit dem DynStr habe ich nochmals nachgelesen. Bin mir aber nicht sicher, ob ich das verstanden habe. Das kommt offenbar nur beim Anzeigen von Fonts zur Anwendung? Richtig?

    DynStr dient zur Anzeige von dynamischen Schriften, ja.

    Sichtbarkeitsbedingung: FahrplanDaten::LastHalt<>"Siegdorf Hp"

    Ein Vergleich von Strings (Zeichenketten, Wörtern) ist nicht möglich. Als Konstanten können nur ganzzahlige Werte oder Uhrzeiten verwendet werden
    Gleiches gilt dann für 3)


    2) schaut gut aus


    lg
    Lukas

  • Vom Ergebnis ja, von der Performance her nicht ganz. Aber egal, mir ist es eigentlich nur darum gegangen die Syntax zu korrigieren. So wie Du es geschrieben hast, funktioniert es schlichtweg nicht.

    Ok, um diese Argumentation abzuschliessen, sind wir uns einig, dass beide Varianten gültig sind. Meine - und auch deine - haben dasselbe Ergebnis gebracht. Deshalb verstehe ich jetzt nicht, wieso du im Nachsatz erwähnst, dass es nicht funktioniert. Wie auch immer, Schluss der Diskussion, ich habe es auf deine Variante umgeschrieben und so soll es nun gut sein.


    Da offenbar keine alphanummerischen Werte verglichen werden können, sollte man:
    a) das im Handbuch speziell erwähnen, und
    b) sich Gedanken machen, es in Version 4.3 beta integrieren zu können ^^ .


    Mittlerweile werde ich mich also recht umständlich auf ein nummerisches, manuelles Verfahren einlassen müssen, wobei ich jedem Zielort eine Nummer zuweise und in den Fahrplänen je eine Variable "Ziel" mit ebendieser Nummer vergeben muss, damit ich das Zeux auch vergleichen kann.
    Ich hoffe, es funktioniert auf diese Weise, ansonsten werde ich hier weiterhin meinen Kommentar abgeben.


    lg
    Bruno

  • Hallo Bruno,


    Ich würde mehreren ZZA als Streckenobjekt an der selben Position definieren.

    Fall Sichtbarkeit Bemerkung
    Zug fährt durch [x] Objekt nur anzeige, wenn ein Zug ....
    not FahrplanDaten::Halt("Siegdorf Hp")
    leerer ZZA
    Zug hält hier [x] Objekt nur anzeige, wenn ein Zug ...
    FahrplanDaten::Halt("Siegdorf Hp")
    AND FahrplanVars::Endstation<>4
    Gib jedem Haltepunkt eine Nummer (hier Siegdorf=4).
    Zusätzlich kannst Du noch "FahrplanVars::ZZA_4_NextHalt",
    u.s.w setzen um die benötigten Texte einzufügen

    Zug endet hier [x] Objekt nur anzeige, wenn ein Zug ...
    FahrplanDaten::Halt("Siegdorf Hp")
    AND FahrplanVars::Endstation==4
    nicht einsteigen
    Nebengleis [x] Objekt nur anzeige, wenn kein Zug ... Model Zufall oder leer


    Gruß Kurt

  • Hallo Kurt


    Danke für die Bestätigung; genauso mache ich es jetzt und es funktioniert. Da ich pro Hp zwei Definitionen habe, eine für Vorwärts- und eine für Rückwärtsfahrt sieht es dann so aus:


    FahrplanVars::Ziel<>1050 && (FahrplanDaten::Halt("Siegdorf Hp") || FahrplanDaten::Halt("Siegdorf Hp."))


    Eigentlich sind alle Fälle bis auf die Endstation mit den standardmässigen Variablen abrufbar. Leider muss ich jetzt bei allen Fahrplänen die Variable "Ziel" als Nummer eingeben. Ich habe auch schon "Zugtyp" definiert, um RB, IR etc. richtig darstellen zu können. Auch da fehlt mir der Zugriff auf den Namen der Fahrplandatei, die ich als Beispiel so definiere: "IR Hainfurt-Altenstein" oder "RB Bernheim-Neustadt" etc.


    lg
    Bruno

  • Hallo,
    ich wollte nur explizit sagen, dass ""DynStr(FahrplanDaten::not Halt("Grünau") && FahrplanDaten::not Halt("Grünau."))"" keine gültige Syntax ist - zum einen weil DynStr nicht in Sichtbarkeitsbedingungen verwendet werden kann und zum anderen weil die "not"s an falscher Stelle stehen ;)


    Im Handbuch ist erwähnt, dass Operanden ganzzahlige Werte sein dürfen. Ich weiß also nicht ganz wie wir das anders schreiben sollten. Aber wir sind für Vorschläge in der Art "Absatz x sollte besser so formuliert sein" oder "nach Absatz y könnte man folgendes einfügen" offen


    Wenn Du einen Vergleich von Zeichenketten sinnvoll finden würdest, bitte einfach einen Thread im Vorschlägeforum aufmachen.


    lg
    Lukas

  • Lukas


    Die Behandlung der Bedingungen ist nicht sehr transparent beschrieben. Es fehlen Angaben zur allgemeinen Verwendung der Syntax. Wo das "not" nun zu liegen kommt, ist nicht einfach zu eruieren. Das ist natürlich für einen Entwickler einfacher zu verstehen, weil er ja die Logik dazu selber geschrieben hat.


    Ausserdem finde ich im Editor Handbuch (v2.9.1) diese Erwähnung, dass Operanden ganzzahlig sein müssen, nirgends, auch eine Find Anweisung bringt diesen Satz nicht. "ganzzahlig" als Beispiel findet man genau einmal unter 11.1.2 (ganzzahlige Division).


    Natürlich finde ich einen Vergleich von alphanummerischen Werten sinnvoll. Und es sollte jedem Entwickler eine Ehre sein, solches unaufgefordert zu implementieren. Kompliziert kann es ja wohl nicht sein 2 Hexwerte gegeneinander zu vergleichen:
    "abc " < "abc1" ==> X'61626320' < X'61626331'. Und wenn man nur einen Substring davon vergleichen möchte, kann man die Länge des Vergleichs aus der Länge des ersten Operanden ableiten, also "ab" = "abc1", da nur die ersten zwei Stellen verglichen werden.


    lg
    Bruno

  • Hallo


    @wodan51
    Wenn deine Formel 1:1 umgesetzt werden soll dann ist das eher etwas für einen einfach gestrickten Zufallsgenerator .... :D


    Gruß chloksim, der es nicht lassen konnte ...