Jump to content

Blockade finden und Wiederholungs-Liste mit Leerstellen


Empfohlene Beiträge

Hallo,

  1. ich habe bei einer größeren Anlage immer wieder mal das Problem, dass Fahrstraßen blockiert bleiben. Es ist nicht einfach dabei die Blockade zu finden. Deshalb möchte ich gerne alle Fahrstraßen zurück setzen, wenn sich alle Züge im DEPOT befinden. Ich habe allen Fahrstraßen ein Schlagwort "Zurücksetzen" gegeben. Über eine Wiederholungsetze ich dann die FS zurück.  Jetzt fehlen mir noch die Weichen. Kann ich die auch über die EV entsperren? Es ist müßig alle Weichen einzeln aufzurufen um sie zu prüfen.
  2. Man hat nie alle Züge im Depot. Derhalb möchte ich sie per Wiederholung ins Depot stellen. Das funktioniert auch gut, solange alle Züge auf der Anlage sind. Wenn aber ein Zug schon im Depot steht, steht in der Liste der Wiederholung Leer. Wenn das an 1. Stelle der Liste ist, wird die Liste nicht abgearbeitet. Kann man das irgendwie abfangen? 

Ich hänge mal eine Beispielanlage an.

Vielen Dank für Eure Hilfe,
Gruß Jürgen

Wiederholung Fahrzeuge ind Depot.jpg

Beispiel ins DEPOT verschieben.mbp

Bearbeitet von jloos
Anlage und Bild geladen
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 38 Minuten schrieb jloos:

Jetzt fehlen mir noch die Weichen. Kann ich die auch über die EV entsperren?

Mit Lua kannst du alle Gleise ansprechen, die in einer Fahrstraße stecken.
Dann schaust du, ob die Eigenschaft "locked" in dem Objekt gesetzt ist.
Falls ja, setze sie auf "false".

local t = layout:getRoutesByKeyword("Zurücksetzen")

for i, route in ipairs(t) do
  for _, track in ipairs(route.tracks) do
    if track.locked then
      track.locked = false
    end
  end
end

viele Grüße
Götz

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb jloos:

Kann man das irgendwie abfangen?

Hallo Jürgen,
du kannst prüfen, ob das Element aus der Liste eine Fahrzeugeigenschaft hat:

1301569258_leereElementeabfangen.jpg.ca679e12e965f73a8d3a5ea5168b7214.jpg

Wenn die Eigenschaft existiert, handelt es sich um einen Zug.

Viele Grüße
Götz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Götz,

vielen Dank für die beiden Tipps. Das mit der Weichenfreigabe klappt prima.

Die zusätzliche Abfrage auf die Eigenschaft Ist-Geschwindigkeit habe ich eingefügt. Doch wenn ich die blaue Taste betätige, passiert nichts.  

Ich hänge nochmal den aktuellen Stand an. Es sollen die beiden auf der Anlage befindlichen Züge per blauer Taste ins Depot befördert werden. 

Gruß Jürgen

 

Beispiel 3 ins DEPOT verschieben.mbp

Bearbeitet von jloos
neue Version der Beispieldatei hochgeladen
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb jloos:

Doch wenn ich die blaue Taste betätige, passiert nichts.

Hallo Jürgen,
das war mir bei meinem Versuch auch aufgefallen.
Ich hatte noch nicht die Zeit gefunden um genauer zu untersuchen, warum das nicht klappt.

Ich hatte dann die Anlage mit vier Zügen befüllt und die blaue Taste funktionierte. 
Beim nächsten einzelnen Zug, den ich rausfahren ließ, klappte es auch.

Danach hatte ich die Sache leider nicht weiter untersucht.

Eventuell steigt die Wiederholung beim ersten leeren Platz aus (weil eine Tabelle für die in ipairs Methode beim ersten leeren Platz endet).
Dann wirst du die Tabelle dynamisch bauen müssen. Aber ich habe gerade nicht den Kopf frei, um dir dafür einen Vorschlag zu entwerfen.

Viele Grüße
Götz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @jloos ,

vielleicht kann ich da mal kurz in die Bresche springen:

Bei Wiederholung über Listen mit leeren Elemente treten immer wieder Problem auf. Anscheinend endet die Iteration bei einem leeren Eintrag (leeres Objekt).
Mein Vorschlag: Gib jeder Lok ein Schlagwort. Statt der Liste führst Du eine Wiederholung über alle Objekte mit diesem Schlagwort aus. Züge im Depot werden dabei nicht
berücksichtigt, da sie dann nicht als Objekt existieren.

Viele Grüße,
  Wolfgang

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Am 9.7.2022 um 14:02 schrieb prinz:

Anscheinend endet die Iteration bei einem leeren Eintrag (leeres Objekt).

Das ist korrekt. Die Wiederholungen basieren auf der Lua-Funktion ipairs, und für diese Funktion endet eine Liste mit dem ersten leeren Eintrag (hängt damit zusammen, dass Lua keine Listen, sondern nur Tabellen mit Werte-Schlüssel-Paaren kennt). Umgehen liese sich das Problem durch Verwendung der Funktion pairs (ohne i). In diesem Fall werden alle nicht-leeren Einträge einer Tabelle/Liste iteriert, allerdings in einer "zufälligen" Reihenfolge, d.h. pairs garantiert nicht, dass der erste Eintrag einer Liste auch als erstes iteriert wird.

Ein Nutzer der grafischen EV möchte sich um solche Interna natürlich nicht kümmern, weshalb nur eine Erweiterung der Wiederholung "Für alle Elemente in einer Liste" in Frage käme. Ich könnte eine eigene Iterator-Funktion anbieten, die wie ipairs arbeitet, aber dabei Lücken überspringt.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

vor 1 Stunde schrieb Neo:

Umgehen liese sich das Problem durch Verwendung der Funktion pairs (ohne i). In diesem Fall werden alle nicht-leeren Einträge einer Tabelle/Liste iteriert, allerdings in einer "zufälligen" Reihenfolge, d.h. pairs garantiert nicht, dass der erste Eintrag einer Liste auch als erstes iteriert wird.

... da mir kein Beispiel einfällt, frage ich mal ob jemand ein Beispiel kennt , bei dem die "korrekte" Reihenfolge eine Rolle spielt.

Gruß
EASY

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Easy,

vor einer Stunde schrieb EASY:

... da mir kein Beispiel einfällt, frage ich mal ob jemand ein Beispiel kennt , bei dem die "korrekte" Reihenfolge eine Rolle spielt.


eine „korrekte“ Reihenfolge einer Liste verwende ich z.B. bei Listen von Fahrzeugen (Lok oder Wagen) in Zügen, um zu ermitteln, welches Fahrzeug mit welchem an der vorderen oder hinteren Kupplung verbunden ist.

Das ist bei mir wichtig für die Funktionen z.B. „Türen öffnen“, „Fahrlicht Umschaltung“ und beim Rangieren „An- und Abkuppeln“ von Wagen.

Da gibt es aber keine Lücken beim Einlesen der Listen.
 

Viele Grüße 

Hawkeye

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

vor 10 Minuten schrieb Hawkeye:

eine „korrekte“ Reihenfolge einer Liste verwende ich z.B. bei Listen von Fahrzeugen (Lok oder Wagen) in Zügen, um zu ermitteln, welches Fahrzeug mit welchem an der vorderen oder hinteren Kupplung verbunden ist.

... habe ich für Versuche auch schon benutzt... ich werde älter und die Zugriffszeit auf den Speicherplatz wird länger...

Gruß
EASY

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke @Neo für Deine Antwort. 
Ist vielleicht hilfreich, leere Einträge zu überspringen. Da es aber immer alternative Lösungsmöglichkeiten gibt, würde ich von meiner Seite die Priorität nicht so hoch setzen. Zumal in dem Beispiel die zu iterierende Liste fest definiert wurde.

HG

  Wolfgang

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