Jump to content

Variable Probleme


astt

Empfohlene Beiträge

Hallo zusammen,

ich steh mal wieder auf dem Schlauch, so richtig kapiere ich die Sache mit den Variablen nicht.

Da man, scheinbar, eine Gruppe von Gleisen, nicht dazu nehmen kann, um z.b. das Ereigniss  "Zug betritt ein Gleis" zu erstellen, dachte ich mir, es müsste eventuell über Variablen gehen. Ich möchte, daß ein Fahrzeug stoppt, wenn auf der Gruppe der Gleise bereits ein Fahrzeug steht.

Nun habe ich ein paar Gleise zu einer Gruppe zusammen gefasst und Ihnen die Objekt Variable Test verpasst, mit dem Wert 1.

In der Ev steht unter dem ersten Punkt als Ereigniss, Zug betritt ein Gleis und unter Aktion Variable setzen.

Im zweiten Ereigniss betritt das Fahrzeug ein anderes Gleis, die Bedingung ist das die Variable auf 0 (habe auch schon 1 probiert) steht. Die Aktion soll sein, entweder ändert sich die Geschwindigkeit, oder das Fahrzeug bleibt stehen. Habe schon <, > , = ausprobiert, aber es funktioniert nicht. Entweder ändert sich die Geschwindigkeit oder das Fahrzeug bleibt stehen, ob nun ein anderes Fahrzeug auf den Gruppengleisen steht oder nicht. Irgendwie kapier ich nicht, was ich falsch mache.

Habe mal ein paar Bilder mit angehängt.

Vielleicht weiss einer ja einen Rat, dafür schon mal vielen Dank

astt

 

 

Signal_01.jpg

 

 

Signal_03.jpg

 

Signal_05.jpg

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo asst,

vielleicht denkst Du zu kompliziert?

Man kann ja in den Zusatzbedingungen auch  "verODERn", also " Zug betritt ein Gleis" als Auslöser, in den Zusatzbed. gleis1 oder gleis2 oder gleis3 eintragen; jeweils bei bedarf negierbar (also frei): zb so:

Bedingung.jpg

und dann deine gew. Aktionen ausführen.

Gruß Lutz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Lutz,

danke für Deinen Tip.

Aber genau Dies wollte ich vermeiden. Da müsste ich so um die 20 Gleise eintragen.

Die Gleise sind eine Zufahrt zu einem Parkplatz. Wenn dort nun ein Fahrzeug los fährt, soll ein eventuell gerade Ankommender, vor dem Parkplatz warten, bis der Jenige raus gefahren ist. Da unterschiedlich los gefahren wird (Countdown) kommt es vor, daß ein Fahrzeug gerade seinen Parkplatz verlässt, während ein "Neuer" gerade einfährt. Deswegen, wollte ich die gesamten Gleise des Parkplatzes zusammen fassen und als Gruppe "sperren".

Schönen Männertag noch
astt

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo astt,

wie wäre es mit einem Gleis am Parkplatzanfang, das die Objektvariable "NochPlatzFrei" hat. Mit "Zug betritt ein Gleis" (will auf den Parkplatz) wird eine obere Grenze dieser Objektvariablen abgefragt. < -> ist noch Platz (kann einfahren) >= -> Parkplatz ist voll (warten!). Mit "Zug verläßt ein Gleis" wird diese Objektvariable um eins erhöht (bin auf den Parkplatz gefahren -> Ein Platz weniger frei). Am Ende des Parkplatzes ist ein Gleis das mit "Zug verläßt ein Gleis" die Objektvariable des Anfangsgleises um eins ernierdrgt (bin vom Parkplatz gefahren -> wieder ein Platz frei)...

Gruß

EASY

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo astt,

bei experimentellen Anlagen, Autosteuerug_V1, hab ich auch einen Parkplatz ( da "eingleisig" gelockt ), da könnte man durch hinzufügen eines Zählers, wie von EASY vorgeschlagen eine "voll" -überwachung einbauen, bis jetzt fahren evtl. Parkplatzbenutzer weiter wenn der Lock nicht frei ist.

Vlt. kannst Du da was "abgucken".

Ebenfalls einen schönen (Rest)Männertag.

Gruß Lutz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

danke Ihr Guten.

Mit dem Voll und Leermachen vom Parkplatz habe ich im Prinzip keine Probleme. Bis auf dieTatsache, daß ich nicht dahinter komme, wie ich den Ankommenden beibringe "Du sollst warten" bis das Fahrzeug, daß gerade auf dem Parkplatz los gefahren ist, den Parkplatz verlassen hat.

Toll wäre es, wenn es unter Bedingungen die Möglichkeit gebe, eine Gruppe von Gleisen mit dem Befehl "eine Lok/Wagen steht auf dem Gleis" zu benutzen. Geht aber eben leider nicht.

Mit dem "lock" habe ich nun gar keine Erfahrung, deshalb traue ich mich an so was nicht.

Na ich werd mal weiter probieren, bin jetzt schon paar Tage dran.

Trotzdem noch mal Danke für Eure Hilfe

astt

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo quackster,

danke für Deinen Lösungsansatz und die Zip.

Allerdings, kannst Du mir noch verraten, wie ich die Datei daraus ins Programm bekomme .

Habe keine Ahnung wie ich die Mbp Datei reinbringen soll.

Danke

astt

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Astt,

gehe auf Start/Meine Anlagen. Dann unten rechts auf vorhandene Anlage importieren.

Noch ein Wort zu Deinem Problem. Ich bin zwar kein Variablenexperte und kann dir nur sagen, was ich versuchen würde. Wie wäre es wenn das abfahrende Auto den Abfahrbefehl bekommt, gleichzeitig einer Variablen ein Wert zugewiesen wird? Das ankommende Auto müsste diesen Wert auslesen. Das aufahrende Auto müsste dann die Variable nach der Ausfahrt wieder zurücksetzen und der Neue könnte über das Ereignis "Variable wierd gesetzt" die Einfahrt erhalten. Wenn es vor kommen kann, das mehrere Autos die Ausfahrt erhalten, könnte man diese Variable sogar hoch und runter zählen lassen.

Viele Grüße aus Berlin

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo astt,

Variable sind ein mächtiges Werkzeug, man kann damit ganz viele schöne Sachen machen...:).

Zum Thema: BahnLand hat ja in Sachen "Lock" mehrere Anlagen und auch im Wiki Beschreibungen veröffentlicht ( Thema "Streckenblock" ), da ist es gut erklärt.

Ich hab mich heute mal an einem PAP ( Programm Ablauf Plan ) versucht, mit dem ich das Prinzip der Parkplatz-Ein/Ausfahrt bei meiner Anlage "Autosteuerung_V1"

verdeutlichen will.

Dem Parkplatz habe ich eine Objektvariable Lock verpasst, mit folgender Bedeutung:

Lock  =0 : Frei

Lock =1 (bis 9): Anforderung Ausfahrt aus Parkbucht 1 (bis 9)

Lock =10: Anforderung Einfahrt oben

Lock =11: Anforderung Einfahrt unten

  Parkplatz1.jpg

Gruß Lutz

Nachtrag: Der "Kurzzeit-Timer" ist notwendig, da das Setzen der Variable und gleichzeitiges Los/Weiterfahren des Autos nicht garantieren, das ein anderes Ereigniss sich den Lock nicht "klauen" kann- was unweigerlich ein Durcheinander entstehen lässt.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo zusammen,

Quakster: Genial einfach, einfach Genial. Deine kleine Anlage hat mich ein sehr grosses Stück weiter gebracht, weil ich dadurch etwas mehr über den Wirkmechanismus von Variablen kapiert habe.

Im Wiki und den Anlagen ist das alles sicher gut beschrieben. Nur, wenn man damit noch nicht grossartig was zu tun hatte, ist die Beschreibung manchmal etwas zu Technisch. Kann aber auch an meiner Blödheit liegen, daß ich es nicht schnalle.

Hier mal ein kleines Video zum Parkplatz.

http://youtu.be/CFcQe1d-Tew

Läuft noch nicht alles rund (siehe ziemlich am Ende des Videos) aber, ich bin guter Dinge, die kleinen Macken noch ab zu stellen. Sei es durch verändern der Countdowns oder durch eine bessere Anordnung der Gleise.

Frilu: Den Lock setze ich als Objekvariable ? Diese gebe ich dann als "variable gesetzt" in die jeweilige Maske ein ?

Du schreibst, das du 9 Parkbuchten hast (habe mir natürlich die Anlage bereits angesehen). Wie verhält sich dies dann, zählt der Lock automatisch hoch, bis zur Neunten Bucht (Lock 1 bis 9) und wo kommt dann Lock 10 und 11 her. Wie gesagt, bin da ein absoluter Depp.

Was mich auch mal interessieren würde, was gibt es für Befehle für Variablen ? Ich kenne bisher $_Trigger1.typ und currentspeed. Gibt es da noch mehr und gibt es da eine Auflistung irgendwo ?

Schönen Tag noch und nicht sauer sein, über meine vielleicht etwas dummen Fragen.

astt

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo astt,

freut mich das ich dir helfen konnte, ich bin der meinung das ein kleines beispiel, wo man die wirkungsweise nachvollziehen  und bei veränderungen das resultat begutachten kann meist besser ist als bloße worte. (übrigens für mich auch, bin nicht so der viel schreiber o.O

vg quackster

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo astt,

Ob der Lock eine Objektvariable oder eine globale Variable ist, ist egal, hauptsache er hat einen eindeutigen Namen.
Der Lock wird nur in den Zusatzbedingungen abgefragt.
Wenn er "0" ist, also der überwachte Bereich frei, wird in den Aktionen die Variable "Lock-name" gesetzt.
Den Wert dazu kannst Du selbst bestimmen, bei mir ist "Einfahrt oben" eben 10 usw.
Jede Parkbucht hat ihren eigenen "Lockwert". Das dient dazu, das das Fahrzeug erst "seinen" Wert setzt und einen kurzzeittimer startet der nach ablauf überprüft, ob der Lock noch den eben gesetzten Wert hat ( Es kommt manchmal vor, das ein anderes Ereignis den Lock überschreibt; das liegt an der Art wie die Ereignisverwaltung abgearbeitet wird ). In der Regel reichen dazu 0,2s. Wenn der Wert noch stimmt, kann losgefahren(weitergefahren) werden, ansonsten wird ein Timer gestartet der in kurzen abständen prüft ob der Lock wieder "0" ist und dann einen neuen Versuch startet.
Wird der überwachte Bereich verlassen, wird der Lock auf "0" gesetzt.

Den Lock bitte nicht mit einem Zähler verwechseln! Eine "Füllstandsanzeige" muss separat realisiert werden.

Hmm, Befehle für Variablen?

Das $_Trigger1. ... bezieht sich ja auf Objektvariablen des auslösenden Objektes, vordefiniert sind da ein paar: ( Auszug aus dem Wiki )

  • Objektname._Name: Liefert den Namen des Objektes zurück
  • Objektname._Visible: Liefert die Sichtbarkeit des Objektes zurück (0 für unsichtbar, 1 für sichtbar)
  • Objektname._State: Liefert den Schaltzustand von Weichen, Signalen und Schaltern als Zahl zurück, wobei 0 für den ersten Zustand und N - 1 für den letzten Zustand zurückgegeben wird (N = Anzahl der Zustände)
  • Objektname._CurrentSpeed: Liefert die aktuelle Ist-Geschwindigkeit des Objektes in mm/s zurück (falls es sich bei dem Objekt um eine Lok handelt, ansonsten wird 0 zurückgegeben)
  • Objektname._TargetSpeed: Liefert die Ziel-Geschwindigkeit des Objektes in mm/s zurück (falls es sich bei dem Objekt um eine Lok handelt, ansonsten wird 0 zurückgegeben)

ansonsten halt die Namen der selbstdefinierten Objektvariablen.

Gruß Lutz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Frilu,

danke für Deinen ausführlichen Beitrag.

Habe natürlich mal probiert, habe es aber noch nicht hin gebracht. Aber egal.

Weiter probieren, wird schon.  Ist ja für mich der Sinn der Sache, um die Abläufe zu erkennen und Sie dann an zu wenden.

Wenn es wieder mal "brennt", melde ich mich und frage wieder mal.

Tschau

astt

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