Lua Tabellen

!!! Please ensure, that your contribution or question is placed into the relevant section !!!
Questions about rolling stock, for example, do not belong in "Questions about the Forum". Following is perhaps the right area where your question will be better looked after:
General questions to EEP , Splines, rolling stock, Structures in EEP, landscape elements, Signalling system and controlling, designers, Europe-wide EEP meetings , Gossip
Your cooperation to keep the forum clear is appreciated.
  • Hallo an alle;

    ich habe eine Tabelle angelegt mit Gleisen 1 - 9 und Zugnamen.

    Wenn ein Zug einen Kontaktpunkt überfährt, wird der Zugname ermittel und in

    die Tabelle eingetragen. Überfährt der Zug einen weiteren Kontaktpunkt, so

    wird der Zugname durch "Frei" überschrieben. Schließe ich meine Anlage und öffne

    sie später wieder, ist die Tabelle erst mal leer.

    Meine Frage ist: Wie kann ich die Werte in der Tabelle speichern.



    clearlog()


    print("Hey let's start, EEP Version is: ", EEPVer)


    Einfahrt = {Gleise = {1,2,3,4,5,6,7,8,9,},Zkommt = {},}


    function EEPMain()

    return 1

    end


    function Ausgabe()

    for Wert = 1 , 9 , 1 do

    print("Einfahrt auf Gleis " , Einfahrt.Gleise [Wert] , " : " , Einfahrt.Zkommt [Wert])

    end

    clearlog()

    end


    function Anmeldung(ZugName)

    Einfahrt.Zkommt [1] = ZugName

    EEPSaveData(Einfahrt.Zkommt[] , ZugName)

    Ausgabe()

    end


    function Abmeldung(Name)

    Einfahrt.Zkommt [1] = "Frei"

    Ausgabe()

    end


    Dnke

    Windows 10 Home

    Intel(R)Core(TM) i5 3.10GHz , 1,76TB

    EEP 16,4

  • Hallo terpitzer,

    es gibt in EEP eine Lua Tabelle, die nach Abspeichern der Anlage ebenfalls mit abgespeichert wird. Du kannst Deine Tabellenwerte dort ablegen und beim Öffner der Analge wieder einlesen, oder statt Deiner eigenen Tabelle gleich diese Lua Tabelle nutzen. Die Tabelle hat 1000 Speicherplätze.

    Gruß


    Paul


  • Hallo terpitzer ,

    Tabellen eignen sich in EEP nicht, um dort Werte zu speichern, die auch einen Anlagen-Neustart überstehen sollen. Denn der Tabellen-Inhalt muss bei jeder Änderung an einer Stelle gespeichert werden, die die Werte nach Beenden und Start der Anlage immer noch gespeichert hat. Und da kann man die Werte gleich dort, statt in einer Tabelle, speichern.

    In EEP bieten sich dafür zwei Speicherorte an.

    Einmal die Dataslots und zum anderen die Tag-Eigenschaft einer Immobilie. Für beide Orte gibt es Lua Funktionen, um Werte zu speichern und zu lesen.

    Wenn man bei seiner Anlage der "Herr" über die Dataslots ist, das heißt, man setzt keine Fremd-Tools, die ebenfalls Dataslots verwenden, ein oder man weiß genau, welche noch frei sind, dann ist es persönliche Geschmacksache, welchen Speicherort (Dataslot oder Immo-Tag) man verwendet.


    Für Deine Aufgabe benötigst Du möglichst 9 aufeinander folgende Dataslots oder 9 Immobilien mit fortlaufenden ID's (es ginge auch mit einem Dataslot oder einer Immobilie, aber für den Anfang soll's einfach bleiben).


    Ich werde Dir kein funktionierendes Script hier bereitstellen, denn selber machen hilft Dir mehr.


    Aber natürlich ein paar Hinweise.

    Und wenn Du nicht weiter kommst, einfach fragen.


    Aktuell wirst Du von den Ausgaben in der Funktion "Ausgabe" kaum etwas sehen, denn das clearlog() am Ende, löscht die Anzeige sofort wieder und was noch schlimmer ist, eventuelle Lua-Fehlermeldungen auch.

    Solange Du noch im Test bist, solltest Du das clearlog() nicht verwenden und wenn der Test beendet ist, dann an den Anfang der Funktion, dann wird vor der neuen Anzeige, die Alte gelöscht.


    Die for-Schleife der Gleise von 1 bis 9 kann bleiben, nur musst Du zuvor den Wert (Zugnamen) aus dem Immo-Tag (Dataslot) lesen.

    (Ich verwende lieber den Immo-Tag, als den Dataslot, aber das ist, wie gesagt Geschmacksache. Da mir aber EEP schon einmal den Inhalt der Dataslots in der Scriptdatei, ohne Vorwarnung gelöscht hat, hat bei mir der Immo-Tag "gewonnen",

    (War nicht schlimm, da ich immer über ausreichend Datensicherungen verfüge, aber ärgerlich.)


    Jetzt musst Du nur noch die Immo-ID oder die Dataslot-Nummer entsprechend der Gleisnummer in der for-Schleife finden.

    Da Du das öfter brauchst, am besten über eine Berechnung in einer Funktion und den Wert mit return zurückgeben lassen.

    Die Berechnung etwa so:

    KleinsteImmoID (bzw. KleinsteSlotNr) + Gleisnummer - 1

    Mit der Variablen Kleinste... bist Du nicht darauf angewiesen, dass z.B. die Dataslot-Nr. immer mit 1 beginnen muss.


    Die Funktionen "Anmeldung" und "Abmeldung" benötigen noch die Gleisnummer als Parameter, die dann wieder über die Funktion in die Immo-ID bzw. Dataslot-Nr. umgerechnet werden muss.


    Damit hast Du alle Informationen für das, in Deinem Script "EEPSaveData" bzw. das "EEPLoadData" für das Lesen der Daten.


    Wenn Du möchtest, könntest Du nun Deine 3 Funktionen so ändern, dass die gespeicherten Zugnamen auch einen Anlagen-Neustart überstehen.


    Mit "Test"-print's kannst Du beim Testen den Inhalt von Variablen prüfen.

    Wir haben leider in EEP beim Testen keine andere Möglichkeit, dies zu tun.

    Jürgen


    EEP: 12.1, 13.2, 14.1, 15.1, 16.4 (z.Zt. installiert, bezahlt, aber nur für Tests im Einsatz, da auf Fehlerbeseitigung gewartet wird)

    keinerlei Zusatztools und manuell manipulierte Anlagendateien


    Prozessor: Intel(R) Core(TM) i5-4460S CPU @ 2.90 GHz 2.90 GHz
    PC: RAM 12 GB, Windows 10 Home, 64 Bit
    GK: NVIDIA Geforce GT 730, 4 GB

    The post was edited 2 times, last by JuergenSchm ().

  • Hallo Paul und Jürgen;

    Danke für eure Hinweise. In menem Luasript zur Anlagensteuerung nutze ich schon die Lua Tabelle.

    Ich habe gehofft, es gibt noch eine andere Möglichkeit zur Speicherung und damit zur Steuerung dert Anlage.

    Der Begriff "Dataslot" ist mir bekannt, mit Immo-Tag kann ich noch nichts anfangen.


    Gruß Günter

    Windows 10 Home

    Intel(R)Core(TM) i5 3.10GHz , 1,76TB

    EEP 16,4