Jump to content

Kann man Schlagwörter variable setzen?


Empfohlene Beiträge

Hallo zusammen,

mein Neffe, L-N.Bär, würde noch gerne die Ein-/Ausblendung seiner Züge auf seiner aktuellen Anlage vereinfachen. Die Idee von ihm ist dieses per Schlagwort zu lösen, das Problem ist der Wagenwechsel bei seinen Kieszügen. Bisher wurden die Wagons und die Ladung in Objektvariablen in der Lok gespeichert, was bei einigen Zügen durchaus mal über zwanzig Variablen sein können, bei den Kieszügen wurden diese bei der Bereitstellung des Zuges jedesmal neu geschrieben, ist dieses mit Schlagwörtern auch möglich? Oder hat jemand von Euch eine andere Idee, wie man das Problem mit den wechselnden Wagons per Schlagwort lösen könnte? Ich stehe da total auf den Schlauch.

HG

Wüstenfuchs

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @Wüstenfuchs,
das Problem benötigt sicherlich eine detaillierte Beschreibung.
Und ich habe da das Gefühl, dass man da besser mit Tabellen arbeitet. Vermutlich wird's da auch mehrstufig indirekt. Aber die Datenorganisation kann man sich halt erst dann überlegen, wenn man das Problem genau kennt.
Prinzipiell lassen sich Schlagwörter schon verändern - und wenn es per Lua ist...

Gruß
  Andy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @Andy,

Tabellen gibt es für die Schaltung schon. In den auslösenden Gleiskontakten hat er eine Tabelle gespeichert in der angegeben ist welches Schlagwort die Wagons der auslösenden Lok haben, aber bei den erwähnten Kieszügen gibt es da drei Möglichkeiten. da er drei Züge hat von denen zwei auf der Stecke unterwegs sind und einer (ohne Lok) im Güterbahnhof steht. Oder meinst Du er sollte die Tabelle lieber in der auslösenden Lok speichern und dort die Namen der Wagons und der Ladung hinterlegen, anstatt wie vorher jeden dieser Namen in einer eigenen Variable?

HG

Wüstenfuchs

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo zusammen,

ich würde für dieses Problem eine Variable vom Typ "Liste" hernehmen, die ich als Objektvariable in die Lokomotiven eintragen würde, die für die Bespannung der Kieszüge in Frage kommen. Wenn dann eine Lok an einen solchen Kieszug ankuppelt und anschießend losfährt, kann man zu diesem Zeitpunkt mithilfe der Lua-Funktion "layout:getVehicleGroup(ZugObjekt)" alle Fahrzeuge bestimmen, die in dem durch die in dem Parameter "ZugObjekt" hinterlegte Lok gezogenen Zug vorhanden sind (der Parameter "Zugobjekt" ist hier von mir willkürlich gewählt). Diese Wagen können dann in der in der Lok hinterlegten Liste in einer Schleife einzeln angesprochen werden.

Anbei ein kleines Beispiel aus meiner Anlage "Ablaufberg" (Content-ID BF1E3582-32E9-4074-AE25-5F55DED16C28 im Online-Katalog). In dieser Anlage ist der "Anlagenbaustein Ablaufberg" enthalten, der aus dem Online-Katalog (Content-ID = B9B9CF7A-4616-4350-B2E0-6EA3BD8A3429) in jede beliebige Anlage eingelesen werden kann. In diesem Anlagen-Modul wird die oben genannte Lua-Funktion genutzt, um die am Eselsrücken zu entkoppelnden Wagen des herangeschobenen Zuges zu identifizieren. Folgende Variablen- und Ereignis-Definitionen dieses Anlagen-Moduls sind hier von Bedeutung:

  1. Objektvariable "Wagenliste" des Gleisstücks "AB1_Trennweiche"
    676770824_01ObjektvariablevomTypListe.thumb.jpg.e0ad0ed85f5e61358fde41d771e49722.jpg
    Die diesem Gleisstück zugeordnete Objektvariable "Wagenliste" ist vom Typ "Liste" und kann daher dynamisch mit Listen-Elementen versorgt werden.
     
  2. Durch das Betreten eines Gleiskontakts ausgelöstes Ereignis, in dessen Aktionsverarbeitung 2 benutzerdefinierte Ereignisse aufgerufen werden. Das Ereignis gibt 2 Auslöser zurück, nämlich den "Gleiskontakt" selbst und als "Fahrzeug" das Triebfahrzeug des Zuges, der den Gleiskontakt betreten hat.
    1836658621_02AufrufFahrzeuglisteerstellen.thumb.jpg.09956ae947ea2c257b82d13765e0b986.jpg
    Beim Aufruf des 1. benutzdefinierten Ereignisses "Fahrzeugliste erstellen" werden 2 Parameter mitgegeben, wobei im ersten Parameter die im Gleiskontakt hinterlegte Objektvariable "Trennweiche" mitgegeben wird, welche das im ersten Bild gezeigte Gleisstück "AB1_Trennweiche" repräsentiert, und welches seinerseits die Objektvariable "Wagenliste" besitzt. Im zweiten Parameter wird der zweite Auslöser "Fahrzeug", also die Lok des Zuges, der den Gleiskontakt betreten hat, eingetragen.
     
  3. Aufruf des 2. benutzerdefinierten Ereignisses "Wagen feststellen und zur Positionsprüfung ansetzen" aus dem oben skizzierten Gleiskontakt-Ereignis.
    1811195933_03WahgenfeststellungundPositionsprfung.thumb.jpg.db6e75df6fb50263969b1e064e4e361f.jpg
    Hier wird als einziger Parameter die im Gleiskontakt als Objektvariable hinterlegte Trennweiche mitgegeben.

     
  4. Definition des benutzdefinierten Ereignisses "Fahrzeugliste erstellen".
    481117708_04Fahrzeuglisteerstellen.thumb.jpg.cd682d6487f93388db207c272da29679.jpg
    Diese Ereignisdefinition stellt die beiden Parameter "ListenObjekt" und "Zugobjekt" zur Verfügung, die in der in Bild 2 beschriebenen Aktion mit den beiden Argunenten "Trennwieche" und "Fahrzeug" aufgerufen wird. Mit der Lua-Funktion "layout:getVehicleGroup" werden nun die Wagen des durch die im Parameter "Zugobjekt" hinterlegte Lok identifizierten Zuges gescannt und anschießend in der als Objektvariable der durch den Parameter "Listenobjekt" hinterlegten Trennweiche abgelegten "Wageniste" hinterlegt. Nach Abschluss der Bearbeitung dieses benutzerdefinireten Eregnisses können damit alle Wagen dieses Zuges über die Objektvariable "Wagenliste" der Trennweiche abgefragt werden.
     
  5. Definition des benutzderfinierten Ereignisses "Wagenfeststellen und Positionsprüfung ansetzen".
    1293787797_05Positionsprfung.thumb.jpg.26591193836cc10195701566cc1b16b9.jpg
    Zum Zeitpunkt des Aufrufs dieses Eregnisses durch die in Bild 3 beschriebene Aktion sind in der Objektvariablen "Wagenliste" der hier als Parameter übergebenen "Trennweiche"  alle Wagen des auszuwertenden Zuges erfasst. Mithilfe der hier braun unterlegten Schleife über alle Elemente der Wagenliste, deren "Laufvariable" als "Fzg" gekennzeichnet und in den in der Schleifen enthaltenen Bedingungen und Aktionen durch "@Fzg" referenziert wird (Wertetyp "Wiederholung" bei der Definition der Bedingungenund Aktionen), lassen sich nun alle Wagen einzeln ansprechen und auswerten. Man beachte jedoch, dass auch die im Zug als "Fahrzeug" repräsentierte Lok in dieser Liste enthalten ist. Sie muss also gegebenenfalls wie in der im obigen Bild sichtbaren zweiten Bedingung separat behandelt oder von der Bearbeitung ausgeklammert werden.

Auf das Ausgangsproblem angewendet würde man hier nun die Wagenliste als Objektvariable der an den Zug ankuppelnden Lok spezifizieren. Beim Anfahren des Zuges ruft man nun das erste benutzdefinierte Ereignis aus Bild 4 auf, indem man für beide Parameter die Lok spezifiert. Über den 1. Parameter wir dann die in der Lok als Objektvariable hinterlegte Wagenliste adressiert, während die Wagen des durch den 2. Parameter über die Zuglok spezifizierten Zuges indentifiziert und anschließend in die Wagenliste übertragen werden.

Anstelle des 2 benutzerdefinierten Ereignisses aus Bild 5 tritt dann die für den an die Lok angehängten Kieszug vorgesehene Aktion (oder Aktiónsfolge), die dann über eine zu der in Bild 5 dargestellten analogen Schleife auf die einzelnen Wagen des Kieszugs angewendet wird. Über die Reihenfolge, in der die Wagen im Zugverband innerhalb dieser Schleife abgearbeitet werden, kann ich momentan keine Aussage machen (ich habe die Wagen beim Ablaufberg nicht über deren Reihenfolge abgefragt). Das lässt sich aber sicher mit ein paar Versuchen herausbekommen.

Viele Grüße
BahnLand


 

Bearbeitet von BahnLand
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @BahnLand,

genau so was brauchen wir.(y) In welcher Reihenfolge die einzelnen Wagen/Ladungen dann aus- oder eingeblendet werden ist in unseren Fall eigentlich egal, da das innerhalb eines Tunnels passiert wo es eh keiner sieht.

Danke für Deine (wie immer) ausführliche Antwort, da werde ich mich mal dran versuchen. L-N.Bär ist ja noch damit beschäftigt seine Verloren gegangene Zugübergabesteuerung wieder herzustellen.

HG

Wüstenfuchs 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo ihr beiden,
gut, dass BahnLand das Problem gleich erkannt und eine Lösung dafür parat hat. Ich bin momentan etwas raus aus allem und es wäre mir bestimmt schwerer gefallen, eine derartige Lösung zu finden. Das kann ich ruhig zugeben. Es ist schon erstaunlich, wie schnell man aus Dingen rauskommt, wenn man sich nicht permanent mit ihnen beschäftigt.
Umso mehr erstaunen mich Anlagen, bei denen Leute gar nicht viel Hilfe brauchen, um zu guten Ergebnissen zu kommen.

Gruß
  Andy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo zusammen,

das Problem meines Neffen ist dank @BahnLand gelöst, dafür habe ich jetzt eins mit der Kreuzungssteuerung auf meiner Lengede Anlage. Ich war nach Bahnlands Tipp mit den Listen auf die Idee gekommen die Kreuzungen ebenfalls mit Listen zu Steuern. Also eine Liste für die Fahrzeug die gerade aus Fahren sollen, eine für rechts Abbieger und eine für links Abbieger. Allerdings funktioniert das irgendwie nicht wenn von einen Auslöser mehrere Listen abgefragt werden. Hat da irgendjemand eine Idee wie ich die Kreuzung sonst noch variable Steuern kann ohne zig Befehle schreiben zu müssen?

HG

Wüstenfuchs

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @Wüstenfuchs,

wenn ich Deine Aussage richtig interpretiere, möchtest Du die Eigenschaft "Auto ist Geradeausfahrer, Linksabbieger oder Rechtsabbieger" für jedes an der Kreuzung ankommende Fahrzeug an dessen Zuordnung zu einer bestimmten Liste erkennen. Das geht aber nach meiner EInschätzung wesentlich einfacher, wenn Du jedem Fahrzeug eine Objektvariable zuweist, in der Du die von jedem Fahrzeug auzuwählende Fahrtrichtung hinterlegst. Wenn Du beispielsweise die Objektvariable "Fahrtrichtung" jedem Fahrzeug zuordnest, gibst Du ihr den Wert "Geradeaus", "Links" oder "Rechts" in Abhängigkeit davon, in Welche Richtung das Fahrzeug an besagter Kreuzung weiterfahren soll.

Vermutlich verwendest Du als Ereignisgeber für die Steuerung der an der Kreuzung einreffenden Fahrzeuge ein "Fahrzeug betritt Straße"- oder ein "Gleiskontakt wird ausgelöst"-Ereignis. Bei beiden Ereignistypen, kannst Du das auslösende Fahrzeug über die Eingabe "Fahrzeug" als auslösendes Objekt identifizieren. In Abhängigkeit von der Erfüllung der Bedingung "Objektvariable [Fahrzeug].Fahrtrichtung = Geradeaus, Links oder Rechts" kannst Du dann in der entsprechenden Verzweigung die Aktionen für die jeweilige Fahrtrichtung eintragen. Du benötigst also für jedes Straßenstück oder jeden Gleiskontakt, bei dem eine solche Fahrtrichtungs-Entscheidung getroffen werden soll, nur eine Ereignisdefintion, in der Du alle ankommenden Fahrzeuge entsprechend ihres Werts in der Objektvariable "Fahrtrichtung" korrekt über die Kreuzung führen kannst.

Möchtest Du nun dieselbe Steuerung auf mehrere Straßenstücke oder Gleiskontakte anwenden, weil beispielsweise die an der Kreuzung gliechermaßen zu verteilenden Fahrtzeuge aus 4 Richtungen an der Kreuzung eintreffen oder Du mehrere Kreuzungen mit derselben Steuerung ausrüsten möchtest, kannst du bei der Ereignisdefinition selbst anstelle eines konkreten Straßenstücks oder Gleiskontakts, an dem die Ankunft des Fahrzeugs die Auslösung des Ereignisses bewirken soll, auch eine Liste von Straßenstücken oder Gleiskontakten spezifizieren oder gleich ein Schlüsselwort angeben, das den gleichartig zu behandelnden Straßenstücken oder Gleiskontakten als Schlüsselwort zugeteilt ist. Da Du in den genannten Ereignisdefinitionen auch das Straßenstück  (Auslöser= "Neues Gleis/Straße") oder den Gleiskontakt (Auslöser="Gleiskontakt") als Auslöser identifizieren kannst, kannst Du auch diesbezüglich mit einer einzigen Ereignisfdefinition auskommen, die dann für alle in der Liste enthaltenen oder durch das Schlüsselwiórt gekennzeichneten Straßenstücke oder Gleiskontakte gültig ist.

Als Beipiel hierzu kannst Du Dir die "Demo-Anlage Gleisbelegung V5" anschauen, die Du im Online-Katalog unter der Content-ID 3041EF03-5EAF-4C01-BD5B-30BBD9BCF741 findest. Die für gleichzeitig mehrere Objekte gültigen Ereignisdefinitonen findest Du bei dieser Anlage im Ereignismodul "Allgemein".

Viele Grüße
BahnLand

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