LED Matrix New

  • Konfiguration der LED Matrix. Unter anderem Wechselziele, Unterschiedliche Ziele an Front und Seite, Invertierungen von einzelnen Teilen oder der ganzen Anzeige und sogar komplett freie Positionierung von Elementen.

    1 Einleitung

    Hallo! Du hast Dich sicher hierher verirrt, weil Du wissen möchtest, wie Du die LED Matrix konfigurieren kannst.


    Vielleicht bist Du auch zufällig hier und neugierig, worum es hier geht?

    Dieser Artikel beschreibt die Konfigurationsmöglichkeiten einer LED Matrix, die nicht im Standard-Content, sondern unter folgenden Links im Steam Workshop erhältlich ist.

    Das besondere an dieser Matrix ist, dass sie relativ frei konfigurierbar ist.

    Sie kann unter anderem Wechselziele, Unterschiedliche Ziele an Front und Seite, Invertierungen von einzelnen Teilen oder der ganzen Anzeige und sogar komplett freie Positionierung von Elementen (Strings, etc.) - zumindest, wenn Du mutig genug bist, Dich damit auseinanderzusetzen ;-)


    Diese Anleitung wird nach und nach um die Funktionen erweitert, die möglich sind.

    2 Kurzanleitung

    2.1 Spezielle FIS und was da passiert

    Die Matrix verwendet spezielle FIS Dateien. Die Klasse ist "LED_BERLIN".

    Darin kann man haufenweise Sachen konfigurieren. Im folgenden gibt es aber erstmal nur einen kleinen Einblick.


    Allein das Anlegen einer speziellen FIS verändert die Funktion der Matrix. Selbst wenn diese keinen Inhalt hat, gibt es bei der weißen Anzeige einen anderen Startprozess und die Formatierung ist in ein paar Details anders.

    2.2 Lektion 1: Einfache Zielkonfigurationen :-D

    Bevor es an die vielen anderen Optionen geht, soll hier erstmal das beschreiben werden, was sicherlich die meisten interessiert: Einfache Anpassungen von Zielen, Anlegen von Wechselzielen, etc.


    Die Information, wie ein Ziel dargestellt werden soll, wird als XML in den Zusatz-Strings des Ziels eingetragen und hat immer dieselbe folgende Struktur:


    2.2.1 Wurzelelement und Typ

    <terminus> ist das Wurzelelement. Das steht da immer. Das muss da immer stehen, sonst funktioniert das Ganze nicht.

    <simple> gibt an, dass das hier eine einfache Zieldefinition ist. Es gibt auch komplexe, aber dazu dann zu einer anderen Zeit an einer anderen Stelle mehr.

    2.2.2 Panel

    Im <simple> Element gibt es ein oder mehrere <panel> Elemente. Damit werden die in dem Fahrzeug verbauten Anzeigen in der Reihenfolge der Modul Slots konfiguriert. Das letzte <panel> Element wird auf alle übrigen Anzeigen angewandt. Man kann hiermit also auf der Frontanzeige was anderes anzeigen lassen, als auf den restlichen Anzeigen.

    2.2.3 Content

    Das <content> Element ist genau ein Inhalt einer Anzeige.

    Hier werden ein oder zwei Strings definiert. Diese überschreiben die Strings aus der Basis-FIS. Sie haben einen Wert (der String selbst) und können auch invertiert werden:


    Code
    1. <string1>
    2. <value>Musterhausen</value>
    3. </string1>
    4. <string2>
    5. <value>via Bahnhof</value>
    6. <inverted>true</inverted>
    7. </string2>


    Wichtig: Es gibt kein Fallback auf die Basis Strings.

    Inverted kann "true" oder "false" sein. Der Standardwert ist "false".


    Außerdem kann ein gesamter Anzeigenbereich invertiert werden:


    Code
    1. <inverted>full</inverted>


    Mögiche Angaben sind hier "line", "terminus", "full" und "none". Der Standardwert ist "none". Die sind selbsterklärend, oder?


    Es ist auch möglich, einen der beiden Strings etwas kleiner als den anderen darzustellen. das geht mit


    Code
    1. <smallerstring>1</smallerstring>


    Der Wert ist "1" oder "2" und gibt den String an, der kleiner sein soll.


    Uuuund dann gibt es noch:


    Code
    1. <time>2</time>


    Falls es mehrere <content> Elemente gibt, wird nämlich zwischen diesen durchgewechselt. Mit dieser Zeit wird angegeben, wie lange der aktuelle Content zu sehen sein soll, bevor zum nächsten gewechselt wird.

    Die Angabe erfolgt in Sekunden. Der Standardwert und gleichzeitig das Minimum ist "1".

    2.2.4 Beispiele

    1. Ich will nur die Strings überschreiben.


    2. Ich will vorne was anderes stehen haben, als an der Seite*.


    3. Ich will ein Wechselziel haben.


    4. Ich will, dass die erste Zeile kleiner ist, als die zweite.


    5. Ich will die ganze Anzeige invertieren.


    6. Ich will, dass die zweite Zeile invertiert ist.

    3 Spezielle FIS Klasse

    Um die Anzeigen zu konfigurieren, muss eine spezielle FIS der Klasse "LED_BERLIN" angelegt werden.


    Einige Module laden zusätzlich zu dieser eine weitere spezielle FIS, deren Klasse einen Namenszusatz hat. Das wird im Modulnamen und in der Beschreibung der entsprechenden Module erwähnt.


    Aktuell handelt es sich z.B. um die beiden Berliner Varianten der weißen Matrix mit den Zusätzen "_2014" und "_2018". Diese laden also neben der speziellen FIS "LED_BERLIN" auch noch die "LED_BERLIN_2014" bzw. "LED_BERLIN_2018".


    Die speziellen FIS ergänzen sich. Es ist also möglich einzelne Ziele oder Einstellungen der Anzeige speziell für eines der beiden Module zu variieren, ohne die komplette spezielle FIS kopieren zu müssen.

    4 Zusatzstrings der FIS-Gruppe

    Die Zusatzstrings der FIS (oben rechts eingetragen, siehe auch hier) konfigurieren hauptsächlich das Verhalten der Anzeige.

    Abgesehen von ein paar Abweichungen, folgen sie dem INI-Format. Es gibt also Sektionen, die verschiedene Schlüssel und deren Werte gruppieren. Dabei entspricht eine Sektion meistens einem Konfigurationselement und die zugehörigen Schlüssel sind die Parameter dazu.


    Wenn ein Modul eine zusätzliche spezielle FIS lädt, dann werden zuerst die Zusatzstrings dieser zusätzlichen speziellen FIS (z.B. LED_BERLIN_2014) eingelesen und direkt danach die der normalen speziellen FIS (LED_BERLIN). Wenn man sich beide spezielle FIS als eine vorstellt, stehen die Definitionen aus der zusätzlichen FIS oberhalb von denen aus der normalen speziellen FIS.


    Es zählt immer der Wert des zuerst eingelesenen Parameters. Bei Sektionen, die auf bestimmte Bedingungen angewendet werden, zählt ebenfalls das erste Vorkommen, das zu den dort definierten Bedingungen passt.

    Dadurch lassen sich Einstellungen, die in der normalen speziellen FIS definiert wurden, in einer zusätzlichen speziellen FIS überschreiben. Ausnahme ist die Sektion [local], da diese Einstellungen enthält, die nur auf die aktuelle spezielle FIS zutreffen.


    Im folgenden sind die Sektionen und Parameter aufgeführt, die möglich sind.


    (Die Liste ist noch nicht vollständig und wird stetig erweitert)

    4.1 Globale und lokale Einstellungen

    4.1.1 Globale Parameter

    Sektion [settings]


    Hier werden globale Einstellungen vorgenommen. In einer speziellen Zusatz-FIS (z.B. LED_BERLIN_2014) können die Einstellungen der speziellen FIS (LED_BERLIN) überschrieben werden.

    Die Sektion kann zwar mehrfach definiert werden, es zählt aber immer nur der erste Wert, der eingelesen wird.


    special_chars Hiermit kann die Verwendung der in der Basis-FIS definierten Sonderzeichen deaktiviert werden.

    true - Die Basis-FIS Sonderzeichen werden benutzt (Standardwert, wenn der Parameter weggelassen wird).
    false - Es werden keine Standardsonderzeichen benutzt.
    count_is_id Diese Einstellung beeinflusst die Art, wie die im Fahrzeug eingesetzten Anzeigen durchgezählt werden. Mehr dazu an der Stelle, wo es wichtig wird (folgt später ;-))

    true - Die verbauten Module werden unabhängig von ihren Eigenschaften durchnummeriert. Das bedeutet, dass die interne Nummerierung der beim Startprozess angezeigten Adresse entspricht.
    false - Bei der internen Nummerierung wird die Größe der Anzeige beachtet (Standardwert, wenn der Parameter weggelassen wird).
    auto_format Wenn es zu einem Ziel keine komplexe Konfiguration gibt, kann dieses automatisch nach bestimmten Regeln formatiert werden. Diese Funktion wird mit diesem Parameter aktiviert. Der Standardwert, wenn der Parameter weggelassen wird, ist false.

    Die Regeln, nach denen die automatisch Formatierung handeln soll, müssen durch die Sektionen [auto_format:regex] und [auto_format:rule] separat definiert werden. Es gibt keine Standardregeln. Das heißt, dass dieser Parameter nur wirksam wird, wenn auch Regeln definiert werden.

    4.1.2 Lokale Parameter

    Sektion [local]


    Die Einstellungen in dieser Sektion beziehen sich ausschließlich auf die aktuelle FIS. Das heißt, was in der LED_BERLIN definiert wird, gilt nur für LED_BERLIN und was in LED_BERLIN_2014 definiert wird, gilt nur für LED_BERLIN_2014.


    complex_fallback Bei einer komplexen Zielkonfiguration werden spezifische Anzeigen definiert. Ist eine Anzeige in der Konfiguration nicht enthalten, kann diese entweder leer bleiben oder auf die Basis-FIS-Strings zurückgreifen. Dieses Verhalten wird durch diesen Parameter festgelegt.

    true - Die Anzeige greift auf die Basis-Strings zurück.
    false - Die Anzeige bleibt leer. (Standardwert, wenn der Parameter weggelassen wird).
    complex_auto_format Dieser Parameter kommt nur zum Tragen, wenn complex_fallback auf true gesetzt ist.
    Er definiert, ob bei einem Fallback auf die Basis-Strings die automatische Formatierung verwendet werden soll, sofern diese über den globalen Parameter "auto_format" aktiviert wurde.

    true - Die automatische Formatierung wird verwendet (auto_format muss ebenfalls true sein).
    false - Sie wird nicht verwendet (Standardwert, wenn der Parameter weggelassen wird).

    4.1.3 Beispiel

    Code
    1. [settings]
    2. count_is_id = true
    3. auto_format = true
    4. special_chars = false
    5. [local]
    6. complex_fallback = true
    7. complex_auto_format = false

    4.2 Regeln zur automatischen Formatierung von Basis-FIS-Strings

    4.2.1 Ersetzen von Strings/Reguläre Ausdrücke

    Sektion [auto_format:regex]


    Es können beliebig viele reguläre Ausdrücke und Substitutionen angegeben werden, die auf die Strings der Basis-FIS angewendet werden. Für jeden regulären Ausdruck muss eine dieser Sektionen mit beiden Parametern angegeben werden. Die Parameter sind:

    pattern Der reguläre Ausdruck.
    replace Die Substitution.

    4.2.2 Erweiterte Formatierung

    Sektion [auto_format:rule]


    Diese Sektion ist etwas komplizierter. Es wird wieder für jede Regel eine Sektion angelegt. Dieses Mal ist die Reihenfolge sehr wichtig, weil es Bedingungen gibt, die sich auf andere Regeln beziehen.

    string1_pattern, string2_pattern Ein regulärer Ausdruck mit dem der String verglichen wird. Das Weglassen dieses Parameters ist immer ein Treffer.
    string1_replace, string2_replace Eine zum regulären Ausdruck passende Substitution. Hiermit wird der String entsprechend verändert oder ersetzt. Das passiert, bevor alle anderen Anweisungen aus dieser Regel angewendet werden.
    if_no_prev_match Die Regel wird angewendet, wenn vorher keine andere Regel angewendet wurde.
    break Nach dieser Regel wird keine weitere Regel mehr angewendet.
    cat_strings true - string1 und string2 werden zu einem zusammengefügt (cat = Kurzform von concatenate).
    false - Standardwert. Die Strings werden nicht zusammengefügt.
    cat_if_enough_space Der Parameter erfordert "cat_strings = true".
    true - "cat_strings" wird nur ausgeführt, wenn die Anzeige breit genug ist, um den neuen String darzustellen.
    false - "cat_strings" wird immer ausgeführt (Standardwert).
    cat_with_space Der Parameter erfordert "cat_strings = true".
    true - Beim Zusammenfügen der Strings wird zwischen diesen ein Leerzeichen gelassen.
    false - Die Strings werden ohne Leerzeichen zusammengefügt (Standardwert).
    smallerstring Dieser Paramater definiert, dass einer der beiden Strings kleiner dargestellt wird, als der andere.
    1 - Der erste String wird kleiner dargestellt.
    2 - Der zweite String wird kleiner dargestellt.
    Der Standardwert, wenn der Parameter weggelassen wird, ist 0.

    to be continued ...

    4.2.3 Beispiel

    4.3 Modifikation von Liniennummern

    Sektion [linemod]


    Diese kann mehrfach vorkommen. Hier können Modifikationen auf Liniennummern angewendet werden. Man kann es auch als Sonderzeichen ohne Sonderzeichencode bezeichnen ;-)

    4.3.1 Parameter

    Wann wird die Modifikation angewandt?


    Die beiden folgenden Parameter bestimmen, bei welcher Linien-Sonderzeichen-Kombination die in dieser Sektion definierten Modifikationen angewendet werden sollen. Beide Bedingungen müssen erfüllt sein.

    line_pattern Ein regulärer Ausdruck mit dem die Liniennummer verglichen wird. Das Weglassen dieses Parameters ist immer ein Treffer.
    specialchar_pattern Ein regulärer Ausdruck mit dem der Sonderzeichencode verglichen wird. Das Weglassen dieses Parameters ist immer ein Treffer.


    Ersetzen von Linie und Ziel


    Sowohl die Linie als auch das Ziel können überschrieben werden.

    line_replace Eine zum regulären Ausdruck ‚line_pattern‘ passende Substitution. Hiermit wird der resultierende Linienstring generiert.
    override_terminus Hiermit kann das Ziel überschrieben werden. Der angegebene Wert wird als ID eines zusätzlich konfigurierten Ziels interpretiert (siehe Sektion [terminus]).


    Formatierung


    Standardmäßig werden die durch eine Linienmodifikation angepassten Linien nach bestimmten Regeln formatiert. Sie werden im Linienfeld mit größtmöglichem Font und maximaler Sperrung zentriert. Diese Formatierung kann überschrieben werden:

    no_format true – Dekativiert die automatische Formatierung. Es wird angenommen, dass es sich um eine unmodifizierte Liniennummer handelt. Diese werden linksbündig mit dem Standardfont und einer Sperrung von 1 dargestellt.
    false – Die Formatierung wird angewendet (default).


    Durch die unterschiedliche Größe der Anzeigen und der Bereiche für die Liniennummer, kann für jede Anzeige einzeln definiert werden, wie die automatische Formatierung überschrieben werden soll. Die Anzeigen werden dabei durch Kürzel definiert, die im Parameter enthalten sind:

    32f 32px hoch, Linie und Ziel
    26f 26px hoch, Linie und Ziel
    26l 26px hoch, nur Linie
    19f 19px hoch, Linie und Ziel
    19l 19px hoch, nur Linie


    Die Parameter sind also:

    format_X_align X durch das Anzeigenkürzel ersetzen (z.B. format_32f_align), siehe oben.

    Hiermit kann die automatische Ausrichtung überschrieben werden.
    Die Werte sind "left", "center" oder "right". Der Standardwert, der hiermit überschrieben wird, ist "center".
    format_X_offset X durch das Anzeigenkürzel ersetzen (z.B. format_32f_align), siehe oben.

    Hiermit kann ein Offest gesetzt werden. Es handelt sich um den Offset im Vergleich zur Standardformatierung, die bereits einen Offset von 1 enthält. Soll eine linksbündig dargestellte Linie also den linken Rand der Anzeige berühren, muss hier "-1" angegeben werden.
    format_X_spacing X durch das Anzeigenkürzel ersetzen (z.B. format_32f_align), siehe oben.

    Dieser Parameter überschreibt die Sperrung.



    Formatierung unter zusätzlichen Bedingungen


    Es ist möglich, eine zweite Formatierung anzugeben, die nur dann wirksam ist, wenn die zugehörigen Bedinungen ebenfalls auf die Linien-Sonderzeichen-Kombination passen:

    cond_line Ein regulärer Ausdruck mit dem die Liniennummer verglichen wird.
    cond_specialchar Ein regulärer Ausdruck mit dem der Sonderzeichencode verglichen wird.
    cond_format_X_align
    cond_format_X_offset
    cond_format_X_spacing
    siehe entsprechende "format_X..."-Parameter

    4.3.2 Beispiele

    Es folgen Beispiele mit ausführlicher Erklärung, um die Möglichkeiten zu verdeutlichen:


    Beispiel 1: Anpassung der Linien von 401 bis 412:


    Weitere Beispiele folgen

    4.4 Definition von in der Basis-FIS nicht enthaltenen Zielen

    Sektion [terminus]


    folgt ...

    4.5 Anlegen von Ziel-Templates

    Sektion [terminustemplate]


    folgt...

    5 Einfache Zielkonfiguration

    folgt...

    6 Komplexe Zielkonfiguration

    folgt...

    7 Benutzung von Templates

    folgt...

    8 Sonstiges

    Hast Du Fragen? Hast Du Kommentare? Hier gibt es einen Thread im Forum, in dem Du das alles loswerden kannst ;-)