Nach dem sanften Ankuppeln (after_Coupling)

!!! 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.
In the case of pictures that are attached to the article, the source must also be stated. This also applies to your own pictures, which were taken by you. Pictures without source information will be deleted!
  • Wie an einer anderen Stelle angekündigt, war ich bereits am schreiben eines Lua-Skript und kann es Namens "after_Coupling" nun endlich veröffentlichen.

    Was ist das?
    Das Skript besteht aus zwei Lua-Funktionen. Eine für die Registrierung und eine für die Ausführung.

    Wozu dient es?
    Oft wurde hier im Forum diskutiert, wie es nach dem sanften Kuppeln weiter gehen soll, da der gekoppelte Zug die Geschwindigkeit 0 erhalten hat (ab EEP13). Ich habe die Funktionen bewusst universell gestaltet, um so möglichst alle Kuppel-Situationen abzudecken.

    Was kann das Skript?
    Die Funktion wird mit nur einen Kontaktpunkt aufgerufen. Diese Kuppel-Situation wird in Slots gespeichert und steht somit auch beim späteren laden der Anlage zur Verfügung. Der Zug setzt sich nach dem Kuppeln entweder sofort oder von einem zuvor angegebenen Signal beeinflusst, mit der angegebenen Geschwindigkeit in Bewegung.

    Wie kann ich das Skript nutzen?
    Verschiebe die heruntergeladene Datei in den Lua-Ordner von EEP. Im Lua-Skript der Anlage muss folgendes eingetragen werden:

    Code
    require "after_Coupling"
    
    
    
    
    after_Coupling_Slot_Anzahl = 5
    after_Coupling_Slot_Anfang = 100


    require ... muss angegeben werden, während die zwei folgende Zeilen auch weggelassen werden können und in dem Fall werden Defaultwerte benutzt.
    after_Coupling_Slot_Anzahl = 5 bedeutet, dass man maximal (im Beispiel 5) Kupplung-Situationen (gleichzeitig) auf der Anlage hat.
    after_Coupling_Slot_Anfang = 100 bedeutet, dass registrierte Kupplung-Situationen ab dem Slot (im Beispiel 100) abgespeichert werden.
    Die Beispielwerte sind auch gleich Defaultwerte, wenn also diese Werte weggelassen werden.
    Es werden 5 Slots pro Kupplung-Situationen benötigt. Mit den Beispielwerten also die Slots 100-125.
    Diese Slots müssen zusammenhängend sein und dürfen im gesamten Anlagen-Skript nicht weiterverwendet werden.

    Mit nur einem KP wird die Funktion aufgerufen. Dazu ist Bennys Einzeiler für KP mit Parameter erforderlich!

    Lua-Funktionsaufrufe mit Parametern in KPs: Geht nicht? Geht doch!


    Folgendes ist auch im Skript kommentiert:

    ************** Regeln für den Kontaktpunkt (KP) *****************


    Abfahrt nach dem sanften Ankuppeln mit Signalabhängigkeit:

    Als Funktionsaufruf muss im KP after_Coupling_regist(Signal, Stellung, Speed, keine_Umkehr) stehen. (die Parameter durch entsprechende Zahlen ersetzen)
    Signal: Die ID des Signales angeben, auf das der Zug warten soll.
    Stellung: Bei Stellung angeben, welche Stellung (als Zahl) das Signal haben soll, damit der Zug abfährt.
    Speed: Die Sollgeschwindigkeit, die der Zug haben soll (immer positiv angeben)
    keine_Umkehr: Der Zug fährt immer in Gegenrichtung ab. Ist dies nicht erwünscht, so muss man den 4. Parameter mit 1 angeben, sonst 0 oder weglassen.

    Abfahrt nach dem sanften Ankuppeln ohne Signalabhängigkeit:

    Signal: In diesem Fall egal, kann auch 0 sein. Muss aber vorhanden sein!
    Stellung: Hier zwingend die Zahl 0 angeben.
    Speed: Hier muss die Sollgeschwindigkeit abhängig von der Richtung des Zuges positiv (vorwärts) oder negativ (rückwärts) angegeben werden.
    keine_Umkehr: Diesen Parameter weglassen.

    **********************************************************************

    Anmerkung:
    In einem anderen Thread wurde ein Skript vorgestellt, bei dem man freie Slots automatisch suchen lassen kann. Ich habe lange damit experimentiert und versucht, alle möglichen Szenarien beim User vorzustellen.
    Nach vielen Versuchen bin ich dann zum Entschluss gekommen, dieses Skript nicht zu nutzen, aber dafür dem User in seinem Anlagen-Skript die variable Möglichkeit der Slotbänke zu wählen.


    Nun endlich der Link zur Datei:
    https://cloud.gmx.net/ngcloud/extern…me=Hokau@gmx.de

    Ich habe das Skript in zwei meiner Anlage getestet und für Gut befunden. ;)
    Von meiner Testanlage habe ich ein Video hochgeladen, welches die Funktion verdeutlichen soll.
    https://www.youtube.com/watch?v=t6jCM-BW9HQ&feature=youtu.be

    Edit:

    In der EEPMain muss noch folgende Zeile geschrieben werden:

    after_Coupling()


    Edited 2 times, last by Hokau (May 6, 2017 at 7:48 PM).

  • Hallo Hokau,
    das Script ist ja recht übersichtlich...
    Werde ich demnächst mal einbauen, bin gespannt.

    LG - Harald

    Notebook Gigabyte G5, Intel Core i5 -11400H - 4,5 GHz, 16 GB RAM, NVIDIA GeForce RTX3060 Grafik (6144 MB), SSD 1TB, Monitor: 34 Zoll, 21:9 Ultra Wide, Windows 11, EEP: 6-17, YouTube

  • Hallo Hokau , kannst Du mal ddie Anlage aus dem Video, als Dem hier eistellen?
    Dan kann man das besser verstehen.
    lokbi

    Destop

    AMD Phenom II X4 955 /8 GB Arbsp.1333C9 DDR3 /Motherboard / GA-AMD 790XTA-UD4
    NVidia GeForce GTX 660 TI 2Gb
    Win7 64 Pro 64 bit
    EEP6/EEP7/3/EEP14 Pluin 1+2/EEP15/EEP16

    Laptop
    Asus N76V Intel Core i7 3610 QM DDR3 16Gb
    nvidia Geforce GTX 1060 6Gb
    WIN 10 Pro 64 bit

    Festplatten WDCSSD m2 1Tb/ SSD 1Tb

  • Wie die Bezeichnung schon besagt, handelt es sich um eine Testanlage, wobei es den Namen Anlage eigentlich nicht verdient.
    Es handelt sich nur um ein Gleis, an der über eine Dreier-Weiche in 3 Sackgassen geht.
    Ansonsten ist nicht viel zu sehen. Außer den Kontakten für Weiche und Signale, gibt es (wie oben erwähnt) nur ein Kontakt pro Gleis für die Funktion.

    Daraus ein kleines Beispiel:
    Am linken Gleis steht das Signal 4 und der Zug soll bei der Stellung 2 (entspricht Fahrt) mit einer Geschwindigkeit von 40 Km/h in die Gegenrichtung fahren. Deshalb steht im Kontaktpunkt bei Lua-Funktion: after_Coupling(4,2,40).

    Wenn das Gleis keine Sackgasse wäre und der Zug soll weiter nach hinten fahren, so müsste dort stehen: after_Coupling(4,2,40,1)

    Wenn der Zug nicht vom Signal abhängig weiter fahren soll, so müsste dort stehen: after_Coupling(0,0,40). (Nur) In diesem Fall macht es allerdings Sinn, den KP mit einer Zeitverzögerung aktivieren zu lassen.

    Ich hoffe, dass es jetzt etwas verständlicher ist. Ansonsten fragen.

  • Mir ist im vorigen Beitrag ein großer Fehler passiert (Asche auf mein Haupt)
    Der Aufrufbefehl im KP lautet nicht after_Coupling, sondern after_Coupling_regist!

    Um es übersichtlicher zu halten, werde ich hier meinen Beitrag in berichtigter Form wiederholen. Eventuell könnte ein Moderator den vorigen Beitrag löschen.

    Wie die Bezeichnung schon besagt, handelt es sich um eine Testanlage, wobei es den Namen Anlage eigentlich nicht verdient.

    Es handelt sich nur um ein Gleis, an der über eine Dreier-Weiche in 3 Sackgassen geht.

    Ansonsten ist nicht viel zu sehen. Außer den Kontakten für Weiche und
    Signale, gibt es (wie oben erwähnt) nur ein Kontakt pro Gleis für die
    Funktion.


    Daraus ein kleines Beispiel:

    Am linken Gleis steht das Signal 4 und der Zug soll bei der Stellung 2
    (entspricht Fahrt) mit einer Geschwindigkeit von 40 Km/h in die
    Gegenrichtung fahren. Deshalb steht im Kontaktpunkt bei Lua-Funktion:
    after_Coupling_regist(4,2,40).


    Wenn das Gleis keine Sackgasse wäre und der Zug soll weiter nach hinten fahren, so müsste dort stehen: after_Coupling_regist(4,2,40,1)


    Wenn der Zug nicht vom Signal abhängig weiter fahren soll, so müsste
    dort stehen: after_Coupling_regist(0,0,40). (Nur) In diesem Fall macht es
    allerdings Sinn, den KP mit einer Zeitverzögerung aktivieren zu lassen.


    Ich hoffe, dass es jetzt etwas verständlicher ist. Ansonsten fragen.

  • Hallo Hokau.
    Ich habe bisher vergeblich probiert dieses Script anzuwenden, bin LUA-Anfänger und versuche zu lernen.
    Bei mir kommt nach überfahren des Kontaktpunktes die Fehlermeldung:
    "Error running function after_Coupling_regist(1,2,40):[string"EEP Script"]:73:bad argument #1 to EEPGetTrainSpeed (string expected, got nil)"
    Was könnte die Ursache sein, freue mich über jede Hilfe.
    Gruß Roman

  • Hallo.
    Ich habe alles so gemacht wie im Beitrag 1 beschrieben und habe auch das Script von Benny eingefügt.
    Was ich beim weiteren probieren festgestellt habe ist, wenn man bei "after_Coupling_regist" zum Beispiel dies (1,2,40,1) eingibt kommt keine Fehlermeldung.
    Aber nach betätigen des Signals bewegt sich kein Zug. Signalbezeichnung und Stellung werden im Ereignisfenster auch richtig angezeigt.
    Gruß Roman

  • Danke für den Hinweis, hatte wirklich nur die erste Version.Habe alles neu gemacht mit der aktuellen Version. Aber ich bin warscheinlich noch nicht reif für LUA, ich bekomme es einfach nicht zum laufen.
    Jetzt kommt die Meldung : Slots reichen nicht aus". Gibt es eigentlich irgendwo ein funktionierendes LUA-Script dieser Funktion wo man mal nachsehen könnte was man verkehrt macht.
    Schon mal vielen Dank für die bisherige Hilfe.

  • Das Skript funktioniert. Ich habe es ausgiebig getestet, nicht nur in der Testanlage, sondern auch in 2 meiner großen Anlagen.

    Was jetzt bei dir passiert ist, ist wahrscheinlich folgendes:
    Du hast vorher so oft probiert, obwohl es nicht funktionieren konnte (falscher Einzeiler).
    Aber bei diesen ganzen Versuchen ist jetzt wahrscheinlich der Slotspeicher voll.

    Um das wieder zu beheben gibt es drei Möglichkeiten. Egal welche du nutzt, speichere deine Anlage zuvor unter anderen Namen, damit du eine Kopie hast, wenn etwas schief gelaufen ist.:

    1. Entweder du öffnest den Lua-Editor, markierst das ganze Skript und kopierst in die Windows-Zwischenablage.
    EEP beenden und den Ordner, in dem die Anlage gespeichert ist, öffnen. Nun von der zuletzt abgespeicherten Anlage die Datei löschen, die die Endung .lua hat. Starte nun wieder die Anlage und den Lua-Editor aufrufen. Dort wird jetzt das Standard-Skript drin sein. Ersetze diese durch das Skript aus dem Windows-Zischenspeicher.

    2. Variante: Beende EEP und öffne die o.g. Lua-Datei deiner Anlage mit einem Texteditor. Ganz unten am Ende des Skript sollten jetzt die Slotsangaben zu sehen sein (die du im EEP-Lua-Editor nicht siehst). Diese löschen und Skript speichern und überschreiben.
    Beim nächsten Anlagenstart sollte nun alles funktinieren.

    3. Möglichkeit: Öffne in EEP das Skript und am besten eine Zeile über der function EEP-Main folgende Zeilen einfügen:

    Code
    for i = after_Coupling_Slot_Anfang,after_Coupling_Slot_Anfang+after_Coupling_Slot_Anzahl*5-1,5 do
    	EEPSaveData(i,false)
    end


    Starte die Anlage und wenn es jetzt funktioniert, lösche diese Zeilen wieder!

  • Hallo EEP Freunde.
    Ist es möglich dieses Programm mit dem Status Memorizer statt Signale zu verwenden?
    :love_1:

    EEP 7 bis EEP 17

    Rechner I7 3,4GHz

    18 GB Ram

    GeForce GTX 660

    Windows 10 Pro 64 Bit

    Notb. I7 Acer E17

    GeForce 940 M

    1TB Festplatte

    8GB Ram

    Windows 11

    neu 29.11.21

    Acer Nitro5

    AN517-41-R7JY

    GeForceRTX3080

    Windows 11

  • Hallo Hokau
    Vielen Dank für deine Bemühungen und deine Zeit, ich habe jetzt keine Fehlermeldungen mehr und trotzdem läuft es nicht. Es fährt einfach nichts los wenn ich das Signal auf Fahrt stelle, habe alles exakt wie im Beitrag 1 eingerichtet nur die Signalbezeichnungen angepasst. Da ich anscheinend der einzige bin der es nicht hinbekommt möchte ich diesen Thread nicht weiter mit meinem Problem verwässern. Einen Wunsch hätte ich da noch, ich würde sehr gerne mal das komplette LUA-Script deiner Demo-Anlage sehen. Veilleicht begreife ich dann was ich verkehrt mache.

  • Im Prinzip möglich, nur müsste man das Skript doch etwas umfangreich umschreiben.
    Aber mir fällt dazu kein Anwendungsfall an. Die meistgenutzte Variante wäre doch es signalabhängig zu machen, was ja auch ist.

  • @roTTman,
    probier doch mal an einer Stelle die

    -- Abfahrt nach dem sanften Ankuppeln ohne Signalabhängigkeit:

    aus, vielleicht findest du so den Fehler.

    eep_gogo ( RG3 )

    -------------------------

    Intel i3-540 3,2GHz 8GB, RAID10, HD 6570 1GB, W7/64 Prof., EEP 6-6.1, 10-17.0, HN13+15/16+15/16DEV, TM, "Schiefe Ebene 6 + 8", "Bahn2000", "Faszination der St. Gotthard-Nordrampe"

  • Da ich anscheinend der einzige bin der es nicht hinbekommt

    nee, nee, du bist nicht der einzige, ich habs auch vergeblich probiert und dann erst mal aufgegeben. Wollte abwarten, was sich hier entwickelt. Eine kleine Demo wäre vlt. wirklich hilfreich. Irgendwas fehlt da vlt doch noch, was für Hokau eventuell selbverständlich ist. Irgendso eine Kleinigkeit halt. Aber von von der Idee her sicher :be_1: Ich behalt das mal im Auge. :bn_1:

  • Irgendwas fehlt da vlt doch noch


    Ja, genau.

    Es fehlt der Hinweis, dass in die EEPMain() Funktion der Funktionsaufruf after_Coupling() eingetragen werden muss.

    Es muss ja regelmäßig geprüft werden, ob sich eine Bedingung geändert hat. Ob beispielsweise ein Signal umgeschaltet wurde. Und diese regelmäßigen Abfragen kann nur die EEPMain() leisten.

  • Zitat von »Byronic«
    Irgendwas fehlt da vlt doch noch


    Ja, genau.

    Danke für den Tipp, Goetz, wusste ich's doch ..., :af_1:
    nur fehlt mir eben ob meiner Faulheit, Bequemlichkeit und mangelnden Ehrgeizes das tiefere Wissen, um sofort zu erkennen, was da fehlte.
    Jedenfalls funzt es nun mit folgendem Lua-Skript zur Demo-Anlage, die ich mir mal eben schnell gebaut hab, drei Gleise, ein Soundkontakt und ein Markierungsbusch:

    Nochmals Danke an Hokau, den "Erfinder" dieses Codes.

    Eine Frage hab ich aber doch noch:
    Was passiert eigentlich, wenn verschiedene Funktionen in dieselben Saveslots schreiben?
    Das kann doch nicht gut gehen.
    Gibt es da sowas wie einen Schreibschutz für Dataslots?
    Oder einen "Aufseher" bzw. "Supervisor", der das überwacht?

  • Wann immer du etwas mit EEPSaveData() speicherst wird das, was vorher im selben Slot stand, überschrieben. Ist ja prinzipiell auch gewünscht, denn sonst könnte man gar keine Zustandsänderungen speichern und die Slots wären völlig nutzlos. Eine Funktion unterscheidet dabei nicht, wo oder von wem sie aufgerufen wurde. "Speicher in Slot 1"" heißt zugleich "Überschreibe Slot 1".

    Der Aufseher bist du selber!

  • Der Aufseher bist du selber!


    Ooooch nöööö
    i mag aber nich
    das soll automatisch gehen und nicht mit Stift und Zettel neben dem Monitor.
    Und über 1000 Positionen Buch führen, ist ja wohl auch ein bissl viel.
    Und das noch für jede Anlage gesondert.
    Für sowas haben wir doch wohl Computer, oder zu was sonst?