Jump to content

Zufällige Zugauswahl


bigrala

Empfohlene Beiträge

Hallo zusammen,

ich würde gerne Züge in zufälliger Reihenfolge aus einem Schattenbahnhof heraus starten.

Schattenbahnhof;

- Harfe mit 10 Gleisen

- 10 Signale (S201 - S210)

- Gleisbelegt in Modul-Variabel (SBGL01 - SBGL10)

 

Ich würde gerne z.B. durch kurzes Drücken eines Tasters oder bei Eintreten eines Ereignisses einen im Schattenbahnhof stehenden Zuge starten, wobei die Zugauswahl zufällig passieren soll.

Es muss also zunächst eine Zufallszahl zwischen 1 und 10 ermitelt werden, dann geschaut werden ob das Gleis mit der ermittelten Nummer in der BesetztVariabel auf "True" steht und das zugehörige Signal muss auf Fahrt gestellt werden. Steht die BesetztVariabel auf "False", so muss eine neue Zufallszahl ermittelt werden.

Soweit ist mir das ja alles klar, nur wie setze ich das in der EV um .....

Oder habt Ihr eine anderen Vorschlag wie ein zufällige Auswahl der wartenden Züge realisiert werden könnte ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wähle alle Ausfahrsignale aus (mit Strg + Linksklick)

Drücke Strg + C für Copy

jetzt kannst du diese Signale in deinem Knopf in einer Variable hinterlegen. Der Variablentyp ist: Liste.

 

455907124_zuflligeAusfahrt1.thumb.jpg.8a09c3ee8450784f88d1f2ceed61330c.jpg

Eine Zufallszahl findest du unter dem Zahnrad immer dann, wenn du in der EV eine Zahl eingeben kannst.
Also auch dort, wo du einen Listenindex angibst.

 

1076263291_zuflligeAusfahrt2.jpg.3e4c325b5fa0030f70beea349e0a0146.jpg

Das reicht noch nicht ganz, weil noch keine Prüfung stattfindet, ob im zufällig gewählten Gleis überhaupt ein Zug steht.

Aber das Thema solltest du erst dann angehen, wenn du die zufällige Auswahl wirklich durschaust.
"Es funktioniert" reicht da nicht. "Ich verstehe, wie und warum es funktioniert" ist dein Ziel.   ;)

 

Bearbeitet von Goetz
Bild hinzugefügt
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hab das mal nachgebaut und wie ich glaube auch weitgehend verstanden.

Der Index kann man nicht wirklich manipulkieren, da er intern erzeugt wird.

Das würde auch soweit funktionieren, da das Signal nach Überfahrt wieder auf Halt gesetzt wird.

 

Rein Interessehalber, kann ich den zufällig ermittelten Index feststellen z.B. um das Signal auf Fahrt geschaltete wieder auf Halt zuschalten.

Evtl mit einer Wdh ..... hier müssten die Signale aus der Liste der Reihe nach auf 0 gesetzt werden ???

Bearbeitet von bigrala
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 19 Minuten schrieb bigrala:

z.B. um das Signal auf Fahrt geschaltete wieder auf Halt zuschalten.

Das ist leider ein schlechtes Beispiel, weil du das Signal auf Halt stellen musst, welches vom Zug passiert wird. Dafür haben Signale ihren eigenen Kontakt.

Trotzdem: Du kannst es feststellen, weil du ja für jedes Signal, welches schaltet, ein Ereignis definieren kannst.
Du "siehst" dann in diesem Ereignis, wer der "Auslöser" war.

An "weitgehend verstanden" habe ich ehrlich gesagt noch Zweifel. Dir fehlen da noch ganz grundlegende Erkenntnisse.
Und ich wüsste auch nicht, warum du mit einer Wiederholung alle Signale auf Halt stellen willst, wenn du doch zuvor nur ein Signal auf Fahrt gestellt hast?

Aber lass dich nicht entmutigen. Du darfst (Denk)fehler machen, weil du sonst nicht lernen kannst. (Niemand kann lernen, ohne Fehler zu machen.)
Du musst dich nur nicht erschrecken, wenn ich dann auf diese Fehler hinweise.
Ich werfe dir keinen Mangel vor, sondern zeige dir auf, wo du weiter lernen musst.

Bearbeitet von Goetz
Link zu diesem Kommentar
Auf anderen Seiten teilen

Keine Angst, ich erschrecke mich nicht  ;-)

Das ist nur ein Funktionsbeispiel ..... natürlich werden bei mir die Signale beim verlassen des Signalkontakts auf Halt gestellt.

Ich möchte nunmehr den Umgang mit Listen besser verstehen, um Listen auch auf andere Dinge anwenden zu können .... das mit den Signalen hier ist nur ein Scenario zum testen und lernen.

 

Es ist mir klar, dass ich eine beliebige Anzahl von Objekten in einer Liste zusammenfassen kann, jedes Objekt der Liste bekommt eine Art lfdNr. Beim Ermitteln einer Zufallszahl kann ich beim Index(zufällig) die "lfdNr" zum Eingrenzen der Spannweite nutzen. Die Randomfunktion selbst ist eine interne Prozedur.

Bezüglich der Frage, warum alle Signale auf Halt stellen ....... das war ja meine Frage, ob man den ausgewählten Index feststellen kann, um das soeben auf Fahrt geschaltete Signal wieder auf Halt zu schalten.

Bearbeitet von bigrala
Link zu diesem Kommentar
Auf anderen Seiten teilen

Du kannst beispielsweise zuerst eine Zufallszahl erzeugen und in einer Variablen speichern, die dir als temporäres Gedächtnis dient.
Im nächsten Schritt nimmst du diese Variable so oft du sie benötigst. Als Index einer Tabelle und für jeden weiteren Zweck, der dir einfällt.

Alternativ kannst du auch das "gewürfelte" Signal in eine Variable übertragen und anschließend alle Befehle, die du diesem Signal schicken willst, mithilfe der Variablen anlegen.

 

vor 43 Minuten schrieb bigrala:

Die Randomfunktion selbst ist eine interne Prozedur.

Ja, genau. Du gibst nur den Minimal- und den Maximalwert an. Den Rest macht das MBS.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das heißt beim Signalbegriff wähle ich statt "Zahl" die "Variablen" und speichere da in den Randomwert in eine Variable

Weißt Du welchen Wert die Randomfunktion rausgibt, die "lfdNr" oder den Namen aus der Liste ? Wenn ich den Signalnamen in die Variable speichern kann, so lässt sich diese einfach an "Signal einstellen" übergeben.

Bearbeitet von bigrala
Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Signalbegriff ist ein anderes Wort für die Signalstellung  

Wenn du dort eine Zufalllszahl eingibst, dann ... ich denke, dir dämmert gerade was dann passiert?

Die Zufallsfunktion gibt einfach eine Zahl aus  unabhängig davon, wofür du diese Zshl verwendest  

Bearbeitet von Goetz
Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay, der Inhalt und Zweck von Signalbegriff war mir schon klar.

Du hattest nur geschrieben, dass ich auch das "gewürfelte Signal" in eine Variable packen kann ......

Dazu wähle ich Eigenschaft/Variable setzen, Variable(Liste/Tabelle), lasse aus der Liste wieder eine Zufallszahl würfeln und ........ dann müsste ich den Signalnamen in eine Variable schreiben. Dazu habe ich eine Modulvariable SB_Signal angelegt - ich würde sagen, dass diese den Typ Objekt haben müsste, da ja das Signal darin gespeichert werden soll.

Allerdings funktioniert es so nicht, da hier nur die Indexziffer gespeichert werden würde und nicht das Objekt. Ich gehe mal davon aus, dass ich hier mit erweiterten Variablen arbeiten muss .....  ??

 

Screenshot 2020-10-23 165059.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb bigrala:

dass ich auch das "gewürfelte Signal" in eine Variable packen kann ......

Ja, das Signal, was du zufällig auswählst, kannst du in einer Objektvariablen (zum Beispiel im Taster) ablegen, damit du mehrfach darauf zugreifen kannst.

Also musst du oben das Ziel angeben (die Objekt - oder Modulvariable) und unten das, was du in dieser Variablen speichern möchtest (also das ausgewürfelte Signal.)

 

Du hast alles auf den Kopf gestellt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay ..... habe das rumgedreht, wird jedoch nichts in die Variable geschrieben.

 

Die Liste der Signale ist in den Schlagwort/Variabeln des Tasters.

Es existiert eine Modul-Variable SB_Signal vom Typ Objekt.

Diese steht nun oben als Ziel - unten würfle ich nun aus der Liste SB_Ausfahrsignal zwischen 1 und 10.

 

Wenn ich den Taster betätige und anschließend die ModulVariable angucke, so ist diese weiterhin leer

Screenshot 2020-10-23 183215.jpg

Screenshot 2020-10-23 184037.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Minuten schrieb bigrala:

Kann man die Liste, ähnlich einer Modulvariabeln, zentral ablegen ?

Ja, kann man.
Aber ebenso gut kannst du sie im Taster ablegen. Das ist egal

Wichtig ist nur, dass du sie anschließend dort suchst, wo du sie hingelegt hast. Und das tust du in deinem Beispiel dem Anschein nach nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay, habs gefunden,

Ich hatte das Testscenario mit den Signalen aufgebaut und angefangen zu testen, dann habe ich aus Faulheit den Taster für ein anderes Scenario kopiert und dabei die Liste mitkopiert. Somit wurde die Liste bei zwei Objekten (Tastern) angezeigt und ich hatte die falsche in den Variabeln ausgewählt.

Bearbeitet von bigrala
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 17 Minuten schrieb bigrala:

In welche Richtung müssen sich meine Gedanken bewegen

Zurück an den Anfang. Und dann noch einmal alles von vorne machen (ohne etwas abzuschreiben!)

Und dann noch dreimal. Damit du die richtigen Wege verstehst und erinnerst.
Im Augenblick bist du durch die vielen Fehlversuche verwirrt und wirst nichts aus ihnen lernen, wenn du dich nicht eingehender mit diesem Teil befasst, sondern gleich das nächste tun willst. 

Vertrau mir bitte. Ich schule seit ca. 30 Jahren Leute. Ich weiß, wovon ich rede ;)

anbei noch meine Version der Zufallsauswahl:   zufälliges Signal.mbp

Bearbeitet von Goetz
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

Hallo @Goetz,

ich schließe mich mal der Frage von bigrala an
 

Zitat

Ich würde gerne z.B. durch kurzes Drücken eines Tasters oder bei Eintreten eines Ereignisses einen im Schattenbahnhof stehenden Zuge starten, wobei die Zugauswahl zufällig passieren soll.

Es muss also zunächst eine Zufallszahl zwischen 1 und 10 ermitelt werden, dann geschaut werden ob das Gleis mit der ermittelten Nummer in der BesetztVariabel auf "True" steht und das zugehörige Signal muss auf Fahrt gestellt werden. Steht die BesetztVariabel auf "False", so muss eine neue Zufallszahl ermittelt werden.

Ich habe mal eine Testanlage zusammen gebastelt mit deiner Zufallssteuerung der Signale. Wie ist denn nun das weitere Vorgehen in der EV damit nur das "ausgewürfelte" Signal bei einem freien Gleis geöffnet wird?

Bei der Testanlage kann man die einzelnen Gleise mit den Schaltern entweder belegen oder frei geben. Die Variable ob TRUE oder FALSE liegt in dem jeweiligen Schalter.
Zufalls-Signal.thumb.jpg.8423fec26ac2e74cbe6fe5f67dcfd9db.jpg

Die dazu gehörige Anlage Signalschaltung per Zufall.mbp

Vielen Dank im voraus für deine Bemühungen.

Viele Grüße
Stephan

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Stephan

Du hast ja schon eine Liste der Signale in Deinem blauen Taster.
Du solltest Dir jetzt in jedem Signal merken, welche Lok davor steht und nicht in den anderen Tastern.
Dann kannst Du in der EV mit einer Wiederholung beim Drücken der blauen Taste jedesmal bei einem gefundenen Signal die Bedingung abfragen, ob die Variable "Lok" im
Signal vorhanden oder "leer" ist. Ist sie nicht leer, kannst Du die Lok, die Du ja jetzt kennst,losfahren lassen und die Wiederholung/Schleife verlassen.

Gruß
Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo HaNNoveraNer,

das Problem ist ja bei mir, wie geht das mit der Wiederholunge/Schleife. Da habe ich keinen Schimmer wie das funktioniert und habe auch noch nichts konkretes dazu hier im Forum gefunden Wie es funktioniert nur Beispiele Das es funktioniert. Ich bin nur ein Anwender ohne fundierte Progammierkenntnisse.

Viele Grüße
Stephan

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 45 Minuten schrieb Shantyman:

Wie es funktioniert

erkläre ich in diesem Video:

 

Ich erkläre es anhand eines Beispiels.
Aber ich beschreibe dabei auch in allen Einzelheiten das "Wie". 
Und dieses "Wie" ist immer gleich. Deshalb kannst du ignorieren, dass das "warum" im Video ein anderes ist.

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