Warum übernimmt Lua nur die Weiche, nicht die Stellung?

!!! 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.
  • Liebe Lua-Experten,

    ich schreibe gerade das Lua-Skript für eine Anlage neu, um Redundanzen bei den Funktionen zu vermeiden, also z. B. nicht für jede Bahnhofseinfahrt immer die gleiche Funktion zur Prüfung, ob die FS frei ist, etc.

    Die Informationen für die Fahrstraßen stehen in Tabellen, Z. B.


    Die Schaltfunktion sieht dann so aus:


    Diese Codes sind nicht vollständig, z. B. ist klar, dass bei er Funktion noch ein end fehlt, weil ich nur den für die Frage relevanten Teil kopiert habe. Außerdem sind für die Fehlersuch viele ansonsten überflüssige print-Befehle enthalten.


    Es geht mir um den Punkt --Weichen schalten.

    in der WSchl wird die Tabelle für die Weichen der aktuellen Fahrstraße aufgerufen. Es sollen die Werte für die Weichen-Id und die Fahrtrichtung übernommen werden. Wie aus dem Bild des Ereignisfensters in der 2. Zeile am Kontrolldruck zu ersehen, wird aber nur die WID übernommen, die gewünschte Pos bleibt nil.


    eepforum.de/attachment/24809/


    Wo steckt mein Fehler?

    Viele Grüße
    Berthold


    Lenovo LegionY720 i7 2,8GHz, 16GB 64bit, NVIDIA GeForce GTX 1060 - Win10Home

    EEP14.1 Exp (64) P2 U1, EEP15.1 Exp Patch2 Plugin 1 , PlanEx 3.2, SpDrS60 mit Ergänzungen, Modellkatalog, Modellkonverter,Tauschmanager

    The post was edited 1 time, last by icke: Darstellung des Script auf Lua gestellt ().

  • Hast du denn irgendwo sowas wie WFahrt=1 stehen? Sonst ist WFahrt halt nil, und das wird dann auch so ausgegeben (auch wenn ich es mangels Bild nicht sehe).


    Viele Grüße

    Benny


    PS: Wenn ich deinen Code richtig interpretiere, ist FSId eine Tabelle.

    Dann hilft dir die folgende Zeile nicht wirklich weiter, weil immer nur "Fahrstraße table" ausgegeben wird, eventuell noch mit einer nichtssagenden Speicheradresse.

    LUA Source Code
    1. print("Die Funtion FSSchalten wurde fuer die Fahrstrasse ",FSId," aufgerufen")
  • @Benny

    Ja, ich habe alle Signal- und Weichenstellungen zu Anfang des Hauptskriptes deklariert, um im Verlauf des Skriptes aussagefähige Termini benutzen zu können statt Zahlen. Ich habe den Wert an der Stelle auch noch einmal mit print überprüft und den print-Aufruf wieder entfernt, da der Wert korrekt angezeigt wurde.

    @Kaffeschlürfer

    die entsprechende Zeile ist:

    LUA Source Code
    1. SchBhfHBWEinFS1.W={{59,WFahrt}}

    (in diesem Fall nur eine Weiche, trotzdem als Tabelle, weil die Funktion auch andere FS mit mehr Weichen bedienen muss.) Die Weiche 59 wird übernommen, die hinter WFahrt verborgene 1 nicht.


    Und nach deiner Kritik, Icke, hier noch einmal der Versuch:

    LUA Source Code: Schaltfunktion Auszug
    1. function FSSchalten(FSId)
    2. --FS reservieren
    3. for BesMResSchl=1,#FSId.BesM,1 do
    4. EEPSetElem(FSId.BesM[BesMResSchl],Resv)
    5. end
    6. --Weichen schalten
    7. for WSchl=1,#FSId.W,1 do
    8. WId=FSId.W[WSchl][1]
    9. Pos=FSId.W[WSchl][2]
    10. print("Weiche schalten WId ",WId," Pos ",Pos)

    und das Bild vom Ereignisfenster:


    ich hoffe, jetzt ist alles sicht- und lesbar.

    Viele Grüße
    Berthold


    Lenovo LegionY720 i7 2,8GHz, 16GB 64bit, NVIDIA GeForce GTX 1060 - Win10Home

    EEP14.1 Exp (64) P2 U1, EEP15.1 Exp Patch2 Plugin 1 , PlanEx 3.2, SpDrS60 mit Ergänzungen, Modellkatalog, Modellkonverter,Tauschmanager

  • Schreibe doch in die Tabelle mal an Stelle von "WFahrt" eine "1" zum Testen. Nehme an in "WFahrt" ist nichts gespeichert (Schreibfehler oder ähnliches)

    EEP 15.1 EEP 16
    MS Windows 10 Pro 64bit
    Prozessor: AMD FX-8370 Eight-Core Processor 4,0GHz // RAM: 32GB // SSD 256GB // Grafikkarte: GeForce GTX 950

  • icke

    Danke dafür. Bisher war mir nur klar, dass man den Code mit dem Codezeichen lesbarer einfügen kann. Auf den Klick in die Codebox zum Aufruf des Auswahlmenüs bin ich auch erst nach ein paar Anläufen gekommen.

    Benny (BH2)

    Danke. Trotzdem hat mich Dein erster Hinweis auf die Lösung gebracht:

    Die Tabellen der Fahrstraßen stehen in einer eigenen Datei. Der Aufruf zum Einbinden steht vor der Deklaration der Signal-und Weichenstellungen, ist also in den Tabellen unbekannt. Das Programm, das die Schaltfunktion aufruft, kennt zwar die Variablenwerte, aber in die Tabelle werden sie als nil übernommen, da sie beim Einbinden noch nicht bekannt sind. Darum war das Drucken des Wertes von WFahrt zwar korrekt, aber nur weil das Programm die Variable inzwischen kennen gelernt hatte. Ich habe die Signal- und Weichenstellungen jetzt an den Anfang der Datei mit den FS-Tabellen verschoben, und siehe da … es funktioniert.

    icke

    Damit ist der Fall gelöst und kann geschlossen werden. Und nochmals Danke an alle, die geholfen haben.

    Viele Grüße
    Berthold


    Lenovo LegionY720 i7 2,8GHz, 16GB 64bit, NVIDIA GeForce GTX 1060 - Win10Home

    EEP14.1 Exp (64) P2 U1, EEP15.1 Exp Patch2 Plugin 1 , PlanEx 3.2, SpDrS60 mit Ergänzungen, Modellkatalog, Modellkonverter,Tauschmanager