Jump to content

Lua-Skript zum Verbinden der Gleise eines Gleisstrangs mit einem GBS-Strang


Empfohlene Beiträge

Hallo zusammen,

für meine erste Anlage hatte ich mir ein kleines Skript gebastelt zum Verbinden der Gleis-Stränge mit den GBS-Strängen.

Dann bin ich über einen Beitrag von @digidampfman gestolpert, der dieses Problem ebenfalls mit einem Skript gelöst hatte.

Daraufhin habe ich mein Skript angepackt, erweitert, dokumentiert und nun, da ist es.

--[[
Dieses Skipt soll helfen, einen Gleisstrang (die Strecke zwischen zwei Weichen) mit
dem entsprechenden GBS-Strang zu verbinden.

Achtung! Vor dem Benutzen des Skripts unbedingt die Anlage sichern!

Fragen zum Skript, Anregungen, Verbesserungen bitte an "Erwin".

Installiert wird das Skript im Ereignismodul "Hacks" unter dem Namen "Verbinde Gleis-Strang mit GBS-Strang".
Das Modul "Hacks" enthält eine Modulvariable "Gleiszähler" vom Typ Zahl.
 
Auslöser für dieses Skript: Ein Zug/Fahrzeug betritt ein "beliebiges Gleis/Straße".


Vorbereitungen:

Das Gleisbild ist angelegt und das zugehörige GBS ist ebenfalls angelegt.
Im GBS haben alle Gleis-Bausteine einen Namen erhalten.
Namensschema ist z.B. "GBS <Strangbezeichnung>_<laufende Nummer, zweistellig, 01, 02, 03...>"
Beispiel: "GBS o3_04" (4. Baustein im Strang "3o")
        
Das Ereignismodul "GBS" sollte deaktiviert sein!

Ein kleiner Zug (z.B. "ASF 139") mit dem Schagwort "Baufahrzeug" wird auf die Startweiche gesetzt.

Im Skript werden die entsprechenden Variablen gesetzt (Beispiele siehe unten):
Scharf_Gleisname
Scharf_Schlagwort
Scharf_Zielbaustein_GBS
Anzahl_Gleise                   
Gleis_Name
Anzahl_GBS
GBS_Name
Startweiche
Endweiche

Die Ereignisprotokollierung wird gestartet und der Zug wird losgeschickt.
Das Skript protokolliert alles, was es tut oder tun würde!

Wenn das Baufahrzeug die Zielweiche erreicht hat, wird das Ereignis sicherheitshalber deaktiviert.
Das Baufahrzeug kann dann weiterfahren, ohne dass es Schaden anrichtet!

Zum Testen wird empfohlen, die Variablen Scharf_... auf 0 zu setzen!

Ein Hinweis: Beim Setzen des Gleisnamens habe ich den alten Namen hinten angefügt.
In dieser Form sollte der Name nicht mehrfach gesetzt werden! 
--]]
--

-- Wenn Scharf_... ~= 0 ist, dann werden die Änderungen wirklich durchgeführt!
-- Wenn Scharf_... == 0 ist, dann wird nur ausgegeben, was ansonsten getan werden würde!
local Scharf_Gleisname = 0
local Scharf_Schlagwort = 0
local Scharf_Zielbaustein_GBS = 0

-- Die folgenden Variablen müssen für jeden Gleisstrang angepasst werden!
local Anzahl_Gleise = 9        -- Anzahl Gleise des Strangs 3o
local Gleis_Name = "Gleis 3o_" -- So beginnt jeder Gleis-Name des Gleis-Strangs "3o"

local Anzahl_GBS = 6        -- Anzahl GBS-Bausteine des Strangs 3o
local GBS_Name = "GBS 3o_"  -- So beginnt jeder GBS-Baustein-Name des GBS-Strangs "3o"

-- Der Strang geht von Startweiche bis Endweiche
local Startweiche = "W2_5128"
local Endweiche = "Kreuzung - 5114"


if vehicle.variables["Baufahrzeug"] then  -- Nur das Baufahrzeug darf Änderungen vornehmen!!
  if (oldTrack.name == Startweiche) then  -- Soeben wurde die Startweiche verlassen!
    $("Hacks").variables["Gleiszähler"] = 0
  end
  if (track.name == Endweiche) then
    self.enabled = false  -- Fertig, Ereignis sicherheitshalber deaktivieren
  else -- Ein Gleis des Strangs wird befahren
    $("Hacks").variables["Gleiszähler"] = $("Hacks").variables["Gleiszähler"] + 1

    -- Neuer Gleisname
    local Neuer_Gleisname = Gleis_Name ..
        string.format("%02d", $("Hacks").variables["Gleiszähler"]) ..
        " - " .. track.name

    print("\nScharf_Gleisname == " .. Scharf_Gleisname)
    print("Gleisname Vorher: " .. track.name .. ". Nachher: " .. Neuer_Gleisname)

    if Scharf_Gleisname ~= 0 then
      track.name = Neuer_Gleisname
    end

    -- Schlagwort für GBS-Steuerung
    local Schlagwort = "Gleis"

    print("\nScharf_Schlagwort == " .. Scharf_Schlagwort)
    print("Schlagwort: " .. Schlagwort)

    if Scharf_Schlagwort ~= 0 then
      track.variables["Gleis"] = keyword
    end

    -- Zielbaustein GBS
    local GBS_zu_Gleise = Anzahl_GBS / Anzahl_Gleise -- z.B. 4 / 8
    local Zielnummer =  GBS_zu_Gleise * $("Hacks").variables["Gleiszähler"] -- z.B. 0,5 1,0 1,5 2,0 ... 
  Zielnummer = math.ceil(Zielnummer) -- z.B. 1 1 2 2 ...
    local Neuer_Zielbaustein_GBS = GBS_Name .. string.format("%02d", Zielnummer) -- z.B. "GBS 3o_01" "GBS 3o_02"

    print("\nScharf_Zielbaustein_GBS == " .. Scharf_Zielbaustein_GBS)
    if track.variables["GBS"] then
      print("Vorher: " .. track.name .. " verbunden mit " .. track.variables["GBS"].name)
    else
      print("Vorher: " .. track.name .. " nicht verbunden!")
    end
    print("Nachher: " .. track.name .. " verbunden mit " .. Neuer_Zielbaustein_GBS)

    if Scharf_Zielbaustein_GBS ~= 0 then
      track.variables["GBS"] = layout:getEntityByName(Neuer_Zielbaustein_GBS)
    end
  end
end

Eine Beipielanlage, mit der man das Skript ausprobieren kann, gibt es auch, hier als Anhang.

Kommentare, Fragen, Verbesserungsvorschläge und (konstruktive) Kritik sind herzlich willkommen!

Viele Grüße

Reinhold (Erwin)

 

 

Beispiel_Verbinde Gleis-Strang mit GBS-Strang.mbp

Bearbeitet von Erwin
Beispielanlage verbessert
Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...