SpDrS60-Stellpult und Signalverknüpfungen

!!! 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 zusammen,


    ich knoble gerade an einer Aufgabe hinsichtlich des SpDrS60-Stellpults.

    Ich möchte eine Signalverkettung in einem mehrgleisigen Bahnhof steuern.

    [IMG:https://i.imgur.com/CUq43rx.png]


    Nun würde ich hier zwei Verkettungen definieren, nämlich (nicht in der LUA-Syntax): 3 - 4 - 6 sowie 3 - 5 - 6.

    Jedoch ist es nicht erlaubt, ein Signal in mehreren Verkettungen aufzuführen.


    Hat jemand Erfahrung mit dem genannten Problem?

    Verstehe ich vielleicht einfach etwas am Aufbau nicht, müsste ich die Signale anders stellen?


    Vielen Dank für Eure Hilfe!

    Viele Grüße

    Max

    EEP-Version: 14.4

    Rechner: Apple MacBook Pro 2016 13" // Intel i5-6360U 2,0GHz // 8,00GB RAM

    OS: Windows 10 Professional

  • Hallo zusammen,


    dein Aufbau ist schon in Ordnung, nur deine Definition ist nicht korrekt.


    Du hast drei Signaltypen in der Kette:


    1x Einfahrsignal = SigType 1

    2x Ausfahrtsignal = SigType 2

    1x Blocksignal = SigType 3


    Dann müsste deine Signalverkettung etwa so aussehen (Signale mit Beispieldaten):

    Code
    1. {------------ SignalBlock West zu Ost ------------
    2. { SigId=3, SigType=1, SigChar=HpSig_E_V40_Vs_V60_69_V8, HpDtcId=83, VrDtcId=87, ExtVrDtcId=117, SprrDtcId=142, HpBtnId=96, Hp2BtnId=98},
    3. { SigId=4, SigType=2, SigChar=HpSig_A_V40_Vs_69_V7, HpDtcId=71, VrDtcId=80, SprrDtcId=145, Hp2BtnId=91},
    4. { SigId=5, SigType=2, SigChar=HpSig_A_V40_Vs_69_V7, HpDtcId=72, VrDtcId=81, SprrDtcId=144, Hp2BtnId=93},
    5. { SigId = 6, SigType=3, SigChar=HP01_Form_oVSig, HpDtcId=84, SprrDtcId=147, HpBtnId=19},
    6. },------------------------


    Diese Kette ist eindeutig. Du darfst beliebig viele Signale gleichen Typs einsetzten. Sie müssen nur unterschiedliche Ids haben und dürfen nur einmal in allen Blöcken definiert werden.


    Das jetzt aktuelle System der Signalverkettung wird in Zukunft jedoch noch einmal überarbeitet.


    Ray

  • Ah, dann hatte ich nur einen Denkfehler.

    Ich war davon ausgegangen: Eine Strecke = Eine Verkettung.

    Somit hätte ich dann mehrere Gleise als mehrere Strecken angesehen, nach dieser (besseren) Logik liegt hier ja eine Strecke mit einer Verzweigung vor.


    Danke, rayler!

    EEP-Version: 14.4

    Rechner: Apple MacBook Pro 2016 13" // Intel i5-6360U 2,0GHz // 8,00GB RAM

    OS: Windows 10 Professional

  • Lieber Ralf,


    eine Frage hätte ich noch zu der Signalverkettung.

    Ich suche derzeit nach einer LUA-Lösung für meine U-Bahn.

    Die Signale sind dort gleichzeitig Haupt- und Vorsignal. Steht das hintere Signal auf Rot, springt das vordere auf Gelb usw.

    [IMG:https://i.imgur.com/ntHRw3R.jpg]


    Weißt Du, ob diese Verkettung auch über Dein GBS möglich ist?


    Danke und viele Grüße

    Max

    EEP-Version: 14.4

    Rechner: Apple MacBook Pro 2016 13" // Intel i5-6360U 2,0GHz // 8,00GB RAM

    OS: Windows 10 Professional

  • Hallo Max,


    ich bin zwar nicht Ralf und ich kann das auch gerade von unterwegs nicht prüfen. Wenn mich nicht alles täuscht kann man doch mittlerweile bei den Signalverküpfungen in EEP selbst auch pro Stellung einstellen welche Stellung am verknüpften Signal ausgelöst werden soll, damit ließe sich das doch erledigen?


    Gruß Michael

    163-katalog-banner-jpg

    Hardwarekonfiguration:
    Laptop: Intel Core i3-3110M 2,4 GHz, 4GB RAM, Win7 64 bit, EEP 6.1/EEP 14.1 Expert Plugin 1

  • Wenn mich nicht alles täuscht kann man doch mittlerweile bei den Signalverküpfungen in EEP selbst auch pro Stellung einstellen welche Stellung am verknüpften Signal ausgelöst werden soll

    Das Problem bei Hauptsignalen mit integriertem Vorsignal ist, dass Signalstellungen der beiden nicht voneinander getrennt eingestellt werden können. Wenn ich mit einem Kontaktpunkt das erste Signal auf Fahrt stellen möchte, muss ich wissen, welche Stellung das nachfolgende Signal hat. Denn nur so entscheidet sich, ob man "Fahrt, Fahrt erwarten, "Fahrt, Langsamfahrt erwarten" oder "Fahrt, Halt erwarten" einstellen muss.

  • Dazu gibt es ja auch eine Twitch-Sendung von Goetz . Wenn ich nicht irre, müsste das Lua Teil 4 sein, zu finden auf dem EEP-Official-Kanal auf YouTube.

    Ich werde mal schauen, ob ich eine Kombination aus beiden hingebastelt bekomme.

    EEP-Version: 14.4

    Rechner: Apple MacBook Pro 2016 13" // Intel i5-6360U 2,0GHz // 8,00GB RAM

    OS: Windows 10 Professional

  • Hi Ray,


    prinzipiell dürfte doch aber nichts dagegensprechen, die Signale mittels EEPOnSignal zu verketten und sie über Dein GBS zu schalten oder? Die Einbindung würde dann als „normale“ Signale erfolgen.


    Viele Grüße

    Max

    EEP-Version: 14.4

    Rechner: Apple MacBook Pro 2016 13" // Intel i5-6360U 2,0GHz // 8,00GB RAM

    OS: Windows 10 Professional

  • wenn du die Signale als "normale" Signale einbindest und dazu eigenen Code verwenden möchtest, hast du folgende Möglichkeiten:


    - das Signal muss mit seinen möglichen Stellungen in der Datei "SpDrS60_SigPara_RL2.lua" definiert sein (s. Handbuch Erweiterung1)


    - für jedes Signal in der "used_Signals_SpDr"-Table wird ein korrespondierender Methodeneintrag als "Template" in der Datei "TmpFunctionFile.txt" erzeugt. Sie wird im Lua-Verzeichniss abgelegt.


    Beispiel: SpDrSigEA_ID16.setObjByPrg(nil) für das Signal mit der Id16


    Als Parameter erwartet die Funktion einen numerischen Wert (0-4).

    Dieser numerische Wert repräsentiert den Stellimpuls von einem der auf dem Pult für dieses Signal installierten und in "used_Signals_SpDr" definierten Taster.


    Wert: 0 = Stellimpuls ist Hp0, Signal geht in Haltstellung

    Wert: 1 = Stellimpuls vom Hp1-Taster

    Wert: 2 = Stellimpuls vom Hp2-Taster

    Wert: 3 = Stellimpuls vom Sh-Taster

    Wert: 4 = Stellimpuls vom Zs1-Taster


    Auf das Beispiel bezogen würde der Aufruf " SpDrSigEA_ID16.setObjByPrg(2) " das Signal Id16 in die Hp2-Stellung bringen, wenn dieses Signal die Stellung unterstützt.


    - die Verwendung der Datei "SpDrS60_TmpDtcCol.lua" im Lua-Verzeichniss


    Alle definierten Signalobjekte für das SpDrS60 ("used_Signals_SpDr" sowie "SigDtcTbl_SpDr" ) werden nach der Initialisierung in der Table "_SPDRS60_SignalObjCol" der Datei "SpDrS60_TmpDtcCol.lua" gesammelt. Du kannst diese Datei via "require" in deinen Code einbinden.


    Nun besteht die Möglichkeit, in Verbindung mit einer Tabelle der Signale und den gewünschten Stellungen über die Kollektion zu iterieren. Dazu nutzen wir eine weitere Methode der Signalobjekte: "xxx.getSigId()"


    Beispiel:


    Gegeben ist eine Tabelle mit zwei Signalen (Id20 und Id35) und dem gewünschten Stellimpuls.



    Dies ist natürlich nur ein kleines Beispiel, lässt aber erahnen, welch mächtiges Werkzeug sich hinter diesem Konzept verbirgt. Eine ausführliche Dokumentation zu den Beispielen wird mit dem nächsten Set erscheinen.


    Ray

  • Toll, welche Mühe Du dir gibst Ray, ehrlich!

    Vielen herzlichen Dank für deine ausführliche und hilfreiche Arbeit und Antwort!


    Max

    EEP-Version: 14.4

    Rechner: Apple MacBook Pro 2016 13" // Intel i5-6360U 2,0GHz // 8,00GB RAM

    OS: Windows 10 Professional

  • Hallo Ray,

    falls Du mal wieder ins Forum schaust, gib mir bitte noch einen Tipp zu dem Iterieren über "SpDrS60_TmpDtcCol.lua".

    Das Beispiel aus #10 funktioniert prima für die Signale mit vi.getSigId(), mit der print-Funktion konnte ich mir alle Signal_Ids ausgeben.

    Wie lautet der Name der Funktion für die Weichen? vi.getSwId() oder vi.getSwitchID() funktionieren nicht, sind also offenbar nicht die korrekten Funktionsnamen.

    Viele Grüße
    Berthold


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

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

  • Hallo Ray,

    Danke für die prompte Nachricht.


    ich habe allerdings noch eine weitere Frage:

    Code
    1. for ki,vi in pairs(_SPDRS60_SignalObjCol) do
    2.     if vi.getSigId() == SBhfHBOAusASig[FSNr][1] then
    3. print(vi.getSigId(), " ", SBhfHBOAusASig[FSNr][1], " ",SBhfHBOAusASig[FSNr][2])
    4.      vi.setObjByPrg(SBhfHBOAusASig[FSNr][2] break
    5. end
    6. end

    Diese Codezeilen sind abgewandelt aus Deinem vom Beitrag 10 aus diesem thread. Die Variablen SBhfHBOAusASig[FSNr][1] und SBhfHBOAusASig[FSNr][2]) wurden vorher im Skript bereits abgefragt und beinhalten die gewünschte Signalnr. und den Wert 2,

    der Vergleich der SignalNr aus vi.getSigId() mit der gewüschten SigNr ergibt true und der print-Aufruf wird durchgeführt.

    Allerdings wird die letzte Zeile mit dem setObj .. nicht ausgeführt, das Signal bleibt auf HP0.

    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.0Exp P3, PlanEx 3.2, SpDrS60 mit Ergänzungen, Hugo, Modellkatalog, Modellkonverter,Tauschmanager

  • Sorry, die steht im Skript, ist nur nicht mitkopiert. Das break habe ich nicht kopiert sondern per Hand nachgetragen.

    Viele Grüße
    Berthold


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

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

  • Hallo Ray,

    das verstehe ich. Daher habe ich mal alles andere gelöscht und mich nur auf das Freischalten der Einfahrt beschränkt. Es geht also nur um die Übermittlung des Stellimpulses des Hp1 Tasters (1) an das Einfahrtsignal. Das sieht dann so aus:

    Leider schaltet das Signal nicht auf Fahrt, obwohl die Bedingung true ist, die beiden Kontrollen durch print-Befehle werden ausgegeben. Die SigId ist auf jeden Fall in der _SPDRS60_SignalObjCol vorhanden, das Signal also korrekt eingebunden, was auch die print-Kontrolle innerhalb der Schleife zeigt. Die erste Zeile ist zu ignorieren, da sie von der Ausfahrt-Funktion aufgerufen wird.



    Ich habe übrigens in einer separaten Testanlage ohne Probleme Weichen geschaltet und die Anzeige der Pultmelder sowohl auf FS bzw. Besetzt verändert.

    Viele Grüße
    Berthold


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

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

  • Hallo Ray,

    noch mal ich.

    Ich habe zum Test einmal die Zeile aus TmpFunctionFile.txt eingefügt. Gebe ich nur einen Wert in den Klammern ein, passiert bei 1 und 2 nichts, bei >=3 gibt es eine Fehlermeldung, der Wert sei außerhalb der Range 1-2. Gebe ich in die Klammern 2 Werte, wie es wohl früher sein sollte, dann schaltet das Signal z.B bei den Kombinationen SpDrSigEA_ID3073.setObjByPrg(2,1) und SpDrSigEA_ID3073.setObjByPrg(2,2)

    Viele Grüße
    Berthold


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

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

  • Hallo zusammen,


    Berthold


    du hast mit deiner Vermutung natürlich Recht. Ich habe irrtümlich den Code für das Erweiterungsset 3 vor Augen gehabt. Nach einer Überprüfung des Quellcode aus Erweiterungsset 1

    ist der Sachverhalt folgender:


    Die Methode xxx.setObjByPrg() erwartet im Erweiterungsset 1 zwei Parameter. Der genaue Aufruf sieht folgendermaßen aus:


    LUA Source Code
    1. SpDrSigEA_IDxxx.setObjByPrg(_pos,_idx)


    _pos: repräsentiert die Schalterstellung: 1 (Aus) oder 2 (Ein).


    _idx: repräsentiert den Schaltertyp wie folgt:


    Wert: 1 = Stellimpuls vom Hp1-Taster

    Wert: 2 = Stellimpuls vom Hp2-Taster

    Wert: 3 = Stellimpuls vom Sh-Taster

    Wert: 4 = Stellimpuls vom Zs1-Taster


    Ein Sonderfall ist das Hp0, es wird mit dem _idx-Wert: 0 aufgerufen.


    Möchtest du beispielsweise ein Signal in die Hp1-Stellung versetzten, erfolgt der Aufruf so:


    LUA Source Code
    1. SpDrSigEA_IDxxx.setObjByPrg(2,1)


    Wenn du ein Signal in die Stellung "HALT" bringen willst, musst du aktuell die Methode in dieser Form aufrufen:


    LUA Source Code
    1. SpDrSigEA_IDxxx.setObjByPrg(1,0)


    Diese Methode ist jedoch "veraltet" und wurde für Erweiterungsset 3 neu definiert. Aus diesem Grund habe ich auch keine weitere Dokumentation dazu veröffentlicht.



    Wenn du die "veraltete" Version nutzt, wirst du die Methodenaufrufe in deinem Code nach Installation des entstehenden Sets 3 abändern müssen. Dabei musst du lediglich den ersten Parameter "_pos" der Methoden löschen.


    ein Beispiel:


    LUA Source Code
    1. SpDrSigEA_IDxxx.setObjByPrg(2,1)
    2. -- wird zu
    3. SpDrSigEA_IDxxx.setObjByPrg(1)
    4. --und
    5. SpDrSigEA_IDxxx.setObjByPrg(1,0)
    6. -- wird zu
    7. SpDrSigEA_IDxxx.setObjByPrg(0)


    Der Hintergrund:


    In der ursprünglichen Codierung der Methode habe ich wegen der Flexibilität die Schalterposition als Übergabeparameter mit einbezogen. Der Aufruf der Methode und die Reihenfolge ihrer Parameter hat sich im Nachhinein als unpraktisch erwiesen, das Set war allerdings schon auf dem Markt.


    Deshalb wird im Set 3 der _idx-Parameter "erster" Methodenparameter werden. Der Defaultwert für _pos als optionaler Parameter bei Aufruf der Methode ist nun "2" (Schalter ein) und kann bei Bedarf mit dem Wert "1" (Schalter aus) als zweiter Parameter "überladen" werden.


    ein Beispiel:

    LUA Source Code
    1. SpDrSigEA_IDxxx.setObjByPrg(2) -- Defaultaufruf
    2. SpDrSigEA_IDxxx.setObjByPrg(2,1) -- optionaler Aufruf (Schalter aus)

    Ich hoffe, ich konnte alle Klarheiten beseitigen.


    Ray