Jump to content

bei Ereignis "Zug/Fahrzeug stoppt" -> Gleis/track per Schlagwort auswählen können


Recommended Posts

Haaallloo @Neo

ich mal wieder mit einem Wunsch. :D:D

Ist es möglich, das bei dem Ereignis "beliebiger Zug/Fahrzeug stoppt" nicht nur das Fahrzeug als Auslöser gewählt werden kann, sondern auch das Gleis (track), auf dem er stoppt?

301384035_Screenshot2022-04-22092830.thumb.jpg.bc40bf0d6675a825b2cbca278c6eec58.jpg

Im Moment erkennt das Programm nicht auf welchem Gleis/Gleiskontakt der Zug/ das Fahrzeug "gestoppt" hat.

969089085_Screenshot2022-04-22093336.jpg.8722a275bfc6de87ba4e8094d0a3be61.jpg

Das Gleis wird nur bei "Betreten" oder "Verlassen" durch einen Zug/Fahrzeug erkannt, nicht beim "Stoppen". 

Es ist also im Moment nur möglich zu prüfen, ob das Fahrzeug auf einem bestimmten Gleis gestoppt hat, wäre es nicht sinnvoll, das zumindest ein Gruppe von Gleisen über ein Schlagwort ausgewählt werden könnten? 

Sicherlich kann man eine Lösung auch über eine Umweg erzielen, indem man dem Fahrzeug beim Betreten eines "Gleises mit Schlagwort" dieses dem Fahrzeug zuordnet, um dann beim "Stoppen", über das dem Fahrzeug jetzt zugeordneten Schlagwort, die gewünschten Aktionen auszuführen und anschließend nach der Ausführung das Schlagwort im Fahrzeug wieder löscht. 

Finde ich sehr umständlich. Ist da was machbar?  9_9

Viele Grüße,

Hawkeye

Screenshot 2022-04-22 093525.jpg

Edited by Hawkeye
Link to comment
Share on other sites

vor einer Stunde schrieb Hawkeye:

Das Gleis wird nur bei "Betreten" oder "Verlassen" durch einen Zug/Fahrzeug erkannt, nicht beim "Stoppen".

Weil das Gleis nicht am Ereignis "Zug stoppt" beteiligt ist.

Um Missverständnissen zuvorzukommen: Ich verstehe deinen Wunsch. Ich will dir mit meinem Einwurf nur deutlich machen, nach welchen Prinzipien die EV arbeitet und warum das Gleis prinzipbedingt nicht enthalten ist.

Viele Grüße
Götz

Link to comment
Share on other sites

Posted (edited)

Hallo Götz,   

vor einer Stunde schrieb Goetz:

Ich verstehe deinen Wunsch. Ich will dir mit meinem Einwurf nur deutlich machen, nach welchen Prinzipien die EV arbeitet und warum das Gleis prinzipbedingt nicht enthalten ist.

Danke für dein Verständnis.  :D  (Du inspirierst mich mit deinen Beiträgen immer, auch andere Wege zu finden.;)

Dein Einwand ist ja richtig, das das Gleis als "track"  nicht vorhanden ist.  Das habe ich ja oben, wie aus dem Ereignisprotokoll zu entnehmen, ja auch schon erkannt. Es ist aber möglich, einzelne Gleise als Objekt auszuwählen und zu prüfen, ob das auslösende Fahrzeug auf einem solchen steht.

Daher kann doch bei allen Gleise mit einem bestimmten Schlagwort über eine Wiederholung geprüft werden, ob das auslösende Fahrzeug sich auf einem davon befindet. 

1870370354_Screenshot2022-04-22124022.thumb.jpg.21319253a5bfd21db697692d7710c7af.jpg

 

2031007929_Screenshot2022-04-22123923.jpg.51e3059a65a56e571591047d52524280.jpg

Da sich das auslösende Fahrzeug ja nur auf einem der Gleise mit dem entsprechenden Schlagwort befinden kann, ist doch eben die Frage ob diese Wiederholung nicht von Programm intern ausgeführt werden kann, um dem Nutzer dieses Gleis direkt in der Abfrage anzubieten. 

Unter der Bedingung "Fahrzeug steht auf einem Gleis/Gleiskontakt" das Fahrzeug aus "Auslöser" bei "Gleis/Gleiskontakt" wählen zu können ist doch sehr unglücklich gewählt.

1798185192_Screenshot2022-04-22092830.thumb.jpg.37452a37a7aacdbc9769bb8f9f137f16.jpg

Deshalb fände ich hier die Auswahl "Gleis mit Schlagwort" sinnvoller.  

Viele Grüße,

Hawkeye 

Edited by Hawkeye
Link to comment
Share on other sites

Hallo Hawkeye,

ein Fahrzeug kann auf 0 bis N Gleisen gleichzeitig stehen, je nachdem wie lang es ist bzw. wie lang/kurz die Gleise sind. Diese Dynamik ist zumindest in der grafischen EV schwer abzubilden.

Allerdings ist der Koordinatenursprung als Punkt immer nur mit maximal einem Gleis verknüpft, und diese Verknüpfung kannst du bereits über die Eigenschaften abfragen. Einen Einzeiler, um über alle Gleise unterhalb eines Fahrzeuges/Zugs zu iterieren, gibt es aktuell nicht. Eventuell gibt es aber auch andere Lösungen, je nach dem, was du eigentlich erreichen willst.

Viele Grüße,

Neo

Link to comment
Share on other sites

Hallo @Neo,

vor 19 Stunden schrieb Neo:

ein Fahrzeug kann auf 0 bis N Gleisen gleichzeitig stehen, je nachdem wie lang es ist bzw. wie lang/kurz die Gleise sind.

ja, das hab ich jetzt auch gemerkt. Auch mit der Lua-Anweisung layout:getVehiclesOn(Gleis) werden nur die Fahrzeuge erkannt, die sich auch auf diesem Gleisstück befinden und das muss eben je nach Fahrtrichtung nicht die Lok einschließen.

Ich habe dieses Problem jetzt so gelöst, das ein Zug, der einen Gleiskontakt betritt (also noch mit geringer Fahrt kurz vor dem Stoppen), den Zug im GK als Variable speichert. Wenn der Zug dann unmittelbar danach zum Stehen kommt, wird geprüft, ob das stoppende Fahrzeug mit der im GK gespeicherten Variablen übereinstimmt. Trotzdem komme ich immer wieder bei allen festgestellten Problemen der letzten Tage und versuchter verschiedener Lösungsansätze zu dem Schluss, das die Lokalisierung eines stoppenden Fahrzeuges mit Antrieb auf einem Gleis nützlich wäre. 

Für einen Punkt habe ich nämlich noch keine Lösung gefunden. Daher hier mal meine kleine Testanlage mit 2-Schalter-Steuerung:

Rangieren mit 2 Schaltern.mbp

Ziele, die ich erreichen wollte:

1. Rangieren, nur mit Auswahl von Startgleis und Zielgleis über Schalter.

2. Auf allen Abstellgleisen können beliebig viele Loks (einzeln) stehen, bis das Gleis voll ist. Los fährt immer die erste vor dem Sperrsignal stehende Lok. Loks kuppeln nicht an Loks an. 

2. Fährt einen Lok mit Wagen in beliebiger Richtung, also ziehend oder schiebend auf ein braunes Abstellgleis (L1, L2, L3, R1) , wird die Lok nach dem Stoppen abgekuppelt und fährt bis zum Prellbock, oder dem Sperrsignal vor.  (gilt nicht für Gleis R 2)   

3. Eine 2te Lok kuppelt selbständig auf einem Abstellgleis (braun = L1, L2, L3, R1) an stehende Wagen, an.

Noch offen ist der Punkt, das eine Lok, die an stehende Wagen angekuppelt hat, nach dem Stoppen mit den Wagen bis zum Sperrsignal vorfährt. Das kriege ich noch nicht hin. Das ist mit der Gleiskontaktlösung nicht realisierbar, weil mögliche Stopppunkt je nach Zuglänge und Gleislänge zu stark variieren würden. Es fehlt ein sinnvoll Bezug (aus meiner Sicht eben ein entsprechend langes Gleis, auf dem der Zug gestoppt hat). Fehlt dieser Bezug, fahren alle Loks die Stoppen sofort wieder los.  

Der zweite Schritt wäre dann mit der 2-Schalter-Steuerung, anstatt der Stumpfgleise, eine Anlage mit beidseitig befahrbaren Abstellgleisen zu testen.  

182916156_Screenshot2022-04-23175955.thumb.jpg.92d00d1134261ba2a693b007e32b5712.jpg

Vielleicht hat ja jemand zum ungelösten Punkt eine Idee dazu? 

Viele Grüße,

Hawkeye

Link to comment
Share on other sites

Hallo, 

ich habe noch einen neuen Ansatz probiert, und festgestellt, das die vorhandenen Lua-Anweisung ausreichen, um eine Lok auf einem Gleis mit Schlagwort zu lokalisieren.

Hier eine kleine Anlage dazu: Test-Lok auf Gleisen mit Schlagwort.mbp

Die Prüfung findet in einer function  statt und wird über die Skript-Bedingung in dem Ereignis "Zug/Fahrzeug stoppt" aufgerufen.  

 902894298_Screenshot2022-04-25163326.thumb.jpg.59c04d2cef3c197ecd93e889e5fb665f.jpg

Die Gleise in der Testanlage haben die Schlagwörter (Gleis grün = "Abkuppeln", Gleis Schotter = "Weiterfahren", Gleis rot = "Zurückfahren") 

Das einzige was man beachten muss ist, das die Pufferspitze der Lok dafür ausreicht, damit die Lok auf dem "Gleis mit Schlagwort" erkannt wird. Deshalb ist die Reihenfolge bei den verschachtelten Bedingungen zu berücksichtigen, Hier im Test: Grün vor Schotter vor Rot

124658943_Screenshot2022-04-25163252.thumb.jpg.bb93d12db99020f51272465098219d09.jpg 

Schön wäre natürlich, wenn man die Prüfung dahingehend optimieren könnte, das der Erkennungsbereich auf den Lok-Mittelpunkt reduziert wird. Dann wäre das Ergebnis eindeutiger. So wie z.B. in diesem Bild:

2079807090_Screenshot2022-04-25165841.jpg.5957e87d92dda5ba9147f9ded4c39a94.jpg

Dazu müsste geprüft werden können, ob sich der Lok-Mittelpunkt innerhalb des Bereiches (Anfangs-/Endpunkt) des erkannten Gleises befindet.  Das kriege ich aber (noch) nicht hin. :/ Vielleicht hat jemand hierfür eine Tipp? 

Ich bin mit dem bisherigen Ergebnis aber schon ganz zufrieden, da sich hiermit gerade auch Fahrzeuganimationen beim Stoppen in einem selbst definierbaren Bereich (=Gleislänge, oder mehrere Gleise mit dem gleichen Schlagwort hintereinander) ausführen lassen, ohne dabei auf einen fixen Punkt in Form eines Gleiskontaktes angewiesen zu sein. 

Viele Grüße,

Hawkeye

Link to comment
Share on other sites

Hallo,

vor 20 Stunden schrieb Hawkeye:

Dazu müsste geprüft werden können, ob sich der Lok-Mittelpunkt innerhalb des Bereiches (Anfangs-/Endpunkt) des erkannten Gleises befindet.  Das kriege ich aber (noch) nicht hin.

Auch das ist gelöst. Das Lok-Zentrum wird jetzt als Bezug zum Gleis erkannt. Die Lok steht im folgenden Bild somit auf Gleis "rot"

1078803226_Screenshot2022-04-26144129.jpg.3212649d99c060cd95a6d7e6381f857e.jpg

Für Interessenten hier das ganze Skript:

-------------------------------------------------------------------------------
function VehicleOnTrack(vehicle,keyword)
--[[---------------------------------------------------------------------------
    vehicle - zu prüfendes Fahrzeug
    keyword - Schlagwort des Gleises, das gesucht wird.
-----------------------------------------------------------------------------]]
local t = layout:getEntitiesByKeyword(keyword)
  for i, t in pairs(t) do
    local v = layout:getVehiclesOn(t)
    for i,v in pairs(v) do
      if v == vehicle then
        if PositionOnTrack(v,t) then return t -- Zusatzprüfung Fahrzeug-Zentrum
        end
      end
    end
  end
return
end
-------------------------------------------------------------------------------
function PositionOnTrack(v,t)   -- v = vehicle, t = track
-- prüft, ob sich das Fahrzeug-Zentrum im Suchradius des Gleises befindet.
-------------------------------------------------------------------------------
local VKo = {x = v.transformation.position.x, y = v.transformation.position.y}
local TKo = {x = t.transformation.position.x, y = t.transformation.position.y}
local TRad = t.routes[0].length/ 2 -- Suchradius = halbe Bogenlänge des Gleises
local VPos = math.sqrt((VKo.x - TKo.x)^2 + (VKo.y - TKo.y)^2)
  if TRad > VPos  then return true
  end
return
end
-------------------------------------------------------------------------------

Kann mit der Skript-Bedingung aufgerufen werden, z.B.: 

--[[---------------------------------------------
    Skript-Bedingung
------------------------------------------------]]
if VehicleOnTrack(vehicle,"Weiterfahren") then
   return true
end

Funktioniert prächtig, ich bin zufrieden. :)

Viele Grüße,

Hawkeye

Link to comment
Share on other sites

Neo hatte die Tage schon den Hinweis gegeben, wie man das Gleis ermittelt auf dem eine Lok steht.

Am 22.4.2022 um 22:21 schrieb Neo:

der Koordinatenursprung [ist mit] einem Gleis verknüpft, und diese Verknüpfung kannst du bereits über die Eigenschaften abfragen.


Meine Versuche dazu scheiterten dann einfach an mangelnder Konzentration und ich hätte die Sache beinahe vergessen.

Heute habe ich einen weiteren Anlauf unternommen.

583317147_GleisorteinerLok.jpg.193f998f788dc0d1ad36eb51595ecd02.jpg

Klappt prächtig!

1860741435_GleisortBeispiel.jpg.037c7f814849d0effc99e791f33226d3.jpg

 

Viele Grüße
Götz

 

Edited by Goetz
Schreibfehler korrigiert
Link to comment
Share on other sites

Hallo @Goetz

da sieht man mal wieder: „Lesen“ heißt noch lange nicht „verstehen“😂

Am 22.4.2022 um 22:21 schrieb Neo:

Allerdings ist der Koordinatenursprung als Punkt immer nur mit maximal einem Gleis verknüpft, und diese Verknüpfung kannst du bereits über die Eigenschaften abfragen.

Danke für die Codezeile. Ist nur die Frage was der Code an der Schnittstelle zweier Gleise zurückgibt, wenn mehrere Bedingungen verschaltet sind. 

Wenn mit „Koordinatenursprung als Punkt“ das Fahrzeug-Zentrum gemeint ist, dann kommt wohl das gleiche heraus, was ich erreichen wollte, bzw. mit dem Skript erreicht habe. Werde ich ausprobieren, danke. Wieder was gelernt. 👍

Trotzdem macht es immer wieder Spaß an solchen Dingen zu knobeln und ist sehr befriedigend selbst eine Lösung zu finden.

Viele Grüße, 

Hawkeye

Link to comment
Share on other sites

vor 2 Minuten schrieb Hawkeye:

Wenn mit „Koordinatenursprung als Punkt“ das Fahrzeug-Zentrum gemeint ist

Ist es.
Ob es genau das Zentrum ist, hängt von der Konstruktion des Modells ab.
Dort, wo der Gismo den Nullpunkt hat, ist der Ursprung des Objekts.

Du bekommst doch von jedem Fahrzeug Positionsdaten. Und die können sich nur auf einen einzelnen Punkt beziehen ...

Link to comment
Share on other sites

Posted (edited)
vor 1 Stunde schrieb Goetz:

Klappt prächtig!

Ich stimme dir jetzt voll umfänglich zu. 😂

Am 23.4.2022 um 18:40 schrieb Hawkeye:

Noch offen ist der Punkt, das eine Lok, die an stehende Wagen angekuppelt hat, nach dem Stoppen mit den Wagen bis zum Sperrsignal vorfährt.

Der offene Punkt  ist durch den Eintrag „local Gleis = vehicle.link“ und einer kleinen Bedingung erledigt. Einfacher geht es wirklich nicht mehr. Aber man muß da auch erstmal drauf kommen. . . . Oder Götz fragen. 😉

Edited by Hawkeye
Link to comment
Share on other sites

vor 5 Minuten schrieb Hawkeye:

Aber man muß da auch erstmal drauf kommen. . .

Ohne Neos Hinweis hätte ich auch übersehen, dass jedes Fahrzeug mit dem Fahrweg verknüpft ist.

Obwohl man das sofort bemerkt, wenn man das Stück Fahrweg verschiebt.
Oder auf das Kettensymbol schaut:

483359057_VerknpfungmitGleis.thumb.jpg.6d447e8bd65458b88e0c6362ab7b2376.jpg

 

vor 10 Minuten schrieb Hawkeye:

dass eine Lok, die an stehende Wagen angekuppelt hat, nach dem Stoppen mit den Wagen bis zum Sperrsignal vorfährt

kannst du verhindern, wenn du bei der Lok die automatische Verzögerung aktivierst. Sie sollte dann gleich nach dem Ankuppeln anhalten. 

Oder habe ich dich missverstanden und du möchtest erreichen, dass sie anschließend zum Sperrsignal vorzieht?

Link to comment
Share on other sites

Posted (edited)
vor 13 Minuten schrieb Goetz:

Oder habe ich dich missverstanden und du möchtest erreichen, dass sie anschließend zum Sperrsignal vorzieht?

Bingo! Genau darum geht es.

2021362908_Screenshot2022-04-29202012.thumb.jpg.fc1139c85ce27ab833caacadaab6fdb8.jpg

Die Fahrstraße wird doch erst blockiert, wenn der Zug auf dem Gleiskontakt "Ziel" steht, deshalb soll er ja vorfahren, damit kein anderer Zug oder Lok zusätzlich einfahren kann. 

1675885709_Screenshot2022-04-29202713.thumb.jpg.96d2a109c0f08f86ace04f42990a859c.jpg

1133066527_Screenshot2022-04-29202741.thumb.jpg.86c98837f1f91fa45df9d97b05b136b0.jpg

Die Fahrstraße darf ja nicht länger sein, sonst fährt keine Lok in das Gleis mit abgestellten Waggons.

Edited by Hawkeye
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...