SpDrS60-Stellpult und Signalverknüpfungen

Achte bitte darauf, dass Du mit deinem Thema bzw. mit deiner Frage im richtigen Bereich bist.
Die Bereiche sind: Einstellungen im Forum, EEP aktuell ab EEP7 , Splines, Rollmaterialien, Immobilien, Landschaftselemente, Signale und Schaltung, Anlagenvorstellungen, Schnappschüsse Konstrukteure, EEP Treffen , Laberecke, Online - Handbuch EEP Vielen Dank für die Unterstützung das Forum übersichtlich zu halten.
Bilder/Fotos aus dem Internet sind nur als Link gestattet. Eigene Fotos, also Fotos aus dem realen Leben, sind erstens mit Eigenes Bild als Quellenangabe zu kennzeichnen und zweitens nur als Dateianhang im Beitrag zulässig. Bilder ohne Quellenangaben und Bilder dessen Quelle das Internet wie z. B. Google ist, werden gelöscht.
  • Hallo zusammen,

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

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

    [Blockierte Grafik: 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

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

    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!

  • 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.

    [Blockierte Grafik: 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

  • 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

    35098-katalog-banner-jpg

    Hardwarekonfiguration:
    Laptop: Lenovo IdeaPad Gaming 3, Ryzen 5 5600H, 32GB RAM, Win11 64 bit, EEP 6.1/EEP 17.2 Expert DEV

  • 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.

  • 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

  • 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

  • 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


    Mein System+EEP

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

    EEP17, P1, Plugin 1,2 PlanEx 3.2, SpDrS60-3, Modellkatalog, Modell Explorer, Modellkonverter, EEP-TauschManager2

  • Hallo Ray,

    Danke für die prompte Nachricht.

    ich habe allerdings noch eine weitere Frage:

    Code
    for ki,vi in pairs(_SPDRS60_SignalObjCol) do
        if vi.getSigId() == SBhfHBOAusASig[FSNr][1]  then
            print(vi.getSigId(), " ", SBhfHBOAusASig[FSNr][1], " ",SBhfHBOAusASig[FSNr][2])
            vi.setObjByPrg(SBhfHBOAusASig[FSNr][2] break
        end
    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


    Mein System+EEP

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

    EEP17, P1, Plugin 1,2 PlanEx 3.2, SpDrS60-3, Modellkatalog, Modell Explorer, Modellkonverter, EEP-TauschManager2

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

    Viele Grüße
    Berthold


    Mein System+EEP

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

    EEP17, P1, Plugin 1,2 PlanEx 3.2, SpDrS60-3, Modellkatalog, Modell Explorer, Modellkonverter, EEP-TauschManager2

  • 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


    Mein System+EEP

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

    EEP17, P1, Plugin 1,2 PlanEx 3.2, SpDrS60-3, Modellkatalog, Modell Explorer, Modellkonverter, EEP-TauschManager2

  • 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


    Mein System+EEP

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

    EEP17, P1, Plugin 1,2 PlanEx 3.2, SpDrS60-3, Modellkatalog, Modell Explorer, Modellkonverter, EEP-TauschManager2

  • 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
    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
    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
    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
    SpDrSigEA_IDxxx.setObjByPrg(2,1)
    -- wird zu 
    SpDrSigEA_IDxxx.setObjByPrg(1) 
    
    --und 
    SpDrSigEA_IDxxx.setObjByPrg(1,0)
    -- wird zu 
    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
    SpDrSigEA_IDxxx.setObjByPrg(2)  -- Defaultaufruf
    
    SpDrSigEA_IDxxx.setObjByPrg(2,1) -- optionaler Aufruf (Schalter aus)

    Ich hoffe, ich konnte alle Klarheiten beseitigen.

    Ray