Jump to content

Benutzerdefiniertes Ereignis


Empfohlene Beiträge

Hallo BauerHeini und Tesla,

vor 14 Minuten schrieb BauerHeini:

Ich bin davon ausgegangen, dass wenn ich ein neues Ereignis erstelle, dieses "benutzerdefiniert" ist.

Ja und nein. Grundlegend hast du recht und jedes Ereignis ist ein benutzerdefiniertes, in diesem Fall ist aber etwas anderes damit gemeint. Dieses spezielle ist dafür da, wenn du eine wiederkehrende Folge von Ereignissen hast wo sich nur bestimmte Parameter ändern, aber die Ereignisfolge nicht, dann ist es von vorteil wenn man die Ereignisfolge in einem "benutzerdefinieren Ereignis" erstellt und dort nur die sich ändernden Parameter hinterlegt. In einem weiteren Ereignis kannst du dann dein benutzerdefiniertes Ereignis abrufen und nur die Parameter angeben, was bei umfangreichen Steuerungen sehr hilfreich sein kann.

Gruß Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb BauerHeini:

was ist ein "benutzerdefiniertes Ereignis"?

Das ist ein Ereignis, dass nicht durch Aktivitäten in der Anlage ("Signal schaltet", "Zug verlässt Gleis" etc.) ausgelöst wird, sondern durch eine Aktion in einem anderen Ereignis.

Diese Aktion heißt 

2015615017_benutzerdefiniertesEreignis.jpg.c881e2e63c2b2e0a4dde9a16274b16a4.jpg

 

Der Auslöser kommt also vom Benutzer. Das unterscheidet dieses Ereignis von den Übrigen.
Im Ereignis passieren dann dieselben Dinge wie in anderen Ereignissen auch.

 

Vielleicht hilft es, wenn du dir ganz generell die folgende Denkweise angewöhnst:
Die Ereignisse sind die Auslöser für die EV. Also Signal schaltet, Variable ändert sich, Timer läuft ab und so weiter. All diese Dinge ereignen sich während des Betriebs. Egal, ob du damit etwas anstellst oder nicht. In der Ereignisverwaltung legst du dann fest, welche Aktionen als Reaktion auf solch ein Ereignis ausgeführt werden sollen.

Und in diesem Sinne geht es beim benutzerdefinierten Ereignis um einen vom Benutzer initiierten Auslöser.

Bearbeitet von Goetz
Ergänzungen
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 16 Stunden schrieb Goetz:

Und in diesem Sinne geht es beim benutzerdefinierten Ereignis um einen vom Benutzer initiierten Auslöser.

Hallo Goetz,

das wäre dann doch ein vom Benutzer betätigter Schalter? Wenn dem so ist, wo läge dann der Unterschied zum Ereignis: Schlter wird betätigt ?

 

mit verwirrtem Gruß,

Michael

 

P.S. Wenn es Deine Zeit zuläßt (und nur dann), könntest Du zum besseren Verständnis ein kleines Beispiel kreieren?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 12 Minuten schrieb Tesla:

das wäre dann doch ein vom Benutzer betätigter Schalter?

Nein,

der Auslöser ist kein Objekt auf der Anlage. Weder ein Schalter, noch ein Zug, ein Gleisstück, ein Kontaktpunkt oder eine Animation.
Und auch kein Timer in der EV.

Der Auslöser für benutzerdefinierte Ereignisse ist ein Eintrag in einem anderen Ereignis.

Für ein Beispiel fehlt mir aktuell die Zeit. Brauchst du aber auch nicht. Du kommst wunderbar ohne benutzerdefinierte Ereignisse zurecht bis du irgendwann, eines Tages mal denkst: "An dieser Stelle wäre es praktisch, wenn ich aus diesem Ereignis heraus ein anderes Ereignis auslösen könnte." Und wenn dieser Wunsch aufkommt, dann ist das benutzerdefinierte Ereignis das, was du suchst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo an Alle,

ich versuche es mal an einem Beispiel zu erklären für was unter anderem die benutzerdefinierten Ereignisse gut sind.

Benutzerdefiniertes Ereignis.mbp

Dazu habe ich dieses Beispiel erstellt (für alle Fortgeschrittenen, ja es würde auch andere Lösungen geben, aber zum Erklären sollte es recht gut herhalten).

Bild.thumb.jpg.423976763e0229b29397c3270c3713c4.jpg

Bei diesem Beispiel möchte ich, dass wenn die Lok ein gelbes Gleis betritt immer alle Lampen umschalten.

Bild2.thumb.jpg.21db67a53fb31fac57cd9c4aa3aa2f74.jpg

In der einfachsten Variante könnte ich für jedes der 4 Gleise ein Ereignis erstellen, wo jede der 4 Lampen einzeln hinterlegt ist.

Bild3.thumb.jpg.2743f0308ade9c6232f7d12f59f2def0.jpg

Da ich aber keine Lust habe immer wieder die 4 Lampen einzeln einzufügen und ich weiß, dass ich diese Kombination aus 4 Lampen auch noch an anderes stelle schalten will habe ich im nächsten Schritt ein benutzerdefiniertes Ereignis erstellt, in dieses habe ich die 4 Lampen gepackt.

Bild4.thumb.jpg.c8277145e282dee0b620ba2cb4bdfba7.jpg

Nun brauche ich bei den jeweiligen Gleisen nur immer dieses benutzerdefinierte Ereignis abrufen.

Ich hoffe dieses Beispiel zeigt in etwa auf für was die benutzerdefinierten Ereignisse sein könne. Interessant ist dies zum Beispiel, wenn ein Zug gestartet werden soll, denn die Abfolge ist ja meist gleich. Weichen werden geschalten, Signal wird geöffnet, nach einer Verzögerung fährt der Zug los. Dabei kommen dann noch die Parameter ins Spiel, aber dies ist schon wieder ein ganz anderes Thema.

Gruß Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @BauerHeini,

kleine Ergänzung zu @fzonk's anschaulichem Beispiel:

Wenn Du das Ereignis "Benutzerdefiniert" umbenennst in "Benutzerdefiniert xyz" und dann auch im Aufruf (in der Aktion) "Benutzerdefiniertes Ereignis auslösen" als adressiertes Ereignis "Benutzerdefiniert xyz" einträgst, wird es vielleicht etwas deutlicher.

So wie es dasteht könnte man nämlich fälschlicherweise den Begriff "Benutzderdefiniert" als "Schlüsselwort" interpretieren. Es ist aber tasächlich die Bezeichnung dieser konkreten Ereignisdefinition, neben der es theoretisch auch noch weitere andere benutzerdefinierte Ereignisse mit anderen Namen geben könnte.

Viele Grüße
BahnLand

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb BauerHeini:

Ich habe diverse erstellt, wie im Eingang zu sehen

Du hast viele Ereignisse erstellt.

Aber kein benutzerdefiniertes Ereignis.

Das bekommst du über das + Zeichen in der oberen linken Ecke des EV Fensters.

306593984_benutzerdefiniertesEreignisanlegen.jpg.60569b3a64a79d2e1ba67e1552e4bf9c.jpg
Dort kannst du jeden Ereignistyp auswählen um dafür ein neues Ereignis zu erstellen. Unter anderem auch das benutzerdefinierte Ereignis.
Dem gibst du dann einen Namen und in der Aktion kannst du es anschließend mit diesem Namen ansprechen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb fzonk:

ich versuche es mal an einem Beispiel zu erklären für was unter anderem die benutzerdefinierten Ereignisse gut sind.

Hallo Frank,

Dein Versuch ist gelungen! (y)  Hervorragend geeignet für "faule" Menschen.

Nun bin ich ja auch ein neugieriger Mensch: Wenn Du es irgendwann mal schaffst, dann denk noch mal an die Parameter. Ich vermute, daß sich da noch viele Möglichkeiten verstecken.

 

Gruß, Michael

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo an Alle,

vor 3 Stunden schrieb Tesla:

Nun bin ich ja auch ein neugieriger Mensch: Wenn Du es irgendwann mal schaffst, dann denk noch mal an die Parameter. Ich vermute, daß sich da noch viele Möglichkeiten verstecken.

Wie gewünscht, hier auch ein kleines Beispiel mit Parametern. Auch hier dient die Anlage ausschließlich der Verdeutlichung für die benutzerdefinierten Ereignisse, alle anderen mit eingeflossenen Ereignisse sollen hier nur nebensächlich sein.

Benutzerdefiniertes Ereignis mit Parametern.mbp

Bild.thumb.jpg.a59648e6e1a2c992e99682c090814a81.jpg

In diesem Beispiel soll einfach nur die Weichen gestellt werden, das Signal geöffnet werden und nach einer Verzögerung der Zug gestartet werden. Bitte immer nur einen Zug starten, dieser soll absichtlich wieder auf dem Ausgangsgleis ankommen.

Bild2.jpg.6e00ae093d6fbc27ce7954884fd5f726.jpg

Bei einer Steuerung ohne benutzerdefinierten Ereignissen könnte die Steuerung so aussehen.

Bild3.jpg.3fdc9fe514b2c445e4e27bc5fb6ca379.jpg

Da diese Abfolge ja aber für mehrere Ereignisse gleich ist, packe ich diese wieder in ein benutzerdefiniertes Ereignis. Nun suche ich mir alle Punkte heraus, die sich bei den Ereignissen unterscheiden. In diesem Fall sind es die beiden Weichenstellungen, das Signal, was geöffnet werden soll und die Lok, die gestartet werden soll. Dazu lege ich Parameter an (einfach auf das blaue Wort klicken). Die Namen der Parameter sind von mir frei gewählt und können x-beliebig benannt werden (Sonderzeichen und Leerzeichen sind nicht zugelassen). Für die beiden Weichenstellungen habe ich den Variablentyp „Zahl“ gewählt und für die Lok und das Signal den Typ „Objekt“.

Bild4.thumb.jpg.14937dc2bf8a0453cc1bcca84dc8adf2.jpg

Im nächsten Schritt habe ich wieder die Ereignisabfolge erstellt und an den betreffenden Stellen wählt man dann Auslöser und sucht sich den entsprechenden heraus.

Bild5.thumb.jpg.009606cc52f9feeed6d4ed1cd7af7ab0.jpg

Im letzten Schritt habe ich dann wieder die Ereignisse mit dem entstehenden Auslöser erstellt, in diesem Fall soll es einfach das betätigen des Tasters sein. Wenn man nun das benutzerdefinierte Ereignis hinzufügt kommt automatisch an der linken Seite die Liste mit den hinterlegten Parametern. Diese nur noch für jedes Ereignis eintragen und fertig ist eine Steuerung mit einem benutzerdefinierten Ereignis, inclusive Parameter.

Wie Eingangs schon erwähnt ist dies nur eine darstellende Nutzungsmöglichkeit, richtig interessant wird diese Nutzungsmöglichkeit erst bei umfangreichen Steuerungen, vor allen wenn man nicht mehr als Auslöser einen Taster nimmt, sondern zufällig gesetzte Variablen, was dann aber auch schon wieder ein ganz anderes Thema ist.

Gruß Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Frank,

vielen Dank für Deine Mühe.!(y) 

Mit Hilfe Deiner Erklärungen werde ich versuchen, die EV Einträge nach zu vollziehen.

Und wie Du schon sagst, bei kompexeren Vorgängen bieten sich dann wirklich Vereinfachungen, wenn man das einmal in der EV angelegt hat.

 

Danke und Gruß, Michael

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 4 Wochen später...

Auch ich verwende Benutzerdefinierte Ereignisseund finde sie sehr nutzvoll.

Allerdings versuche ich zur Zeit ein solches Ereignis mehrfach hintereinander ausführen zu lassen und komme da nicht wirklich weiter.

Ich habe zunächst eine Objekt-Variable "Anzahl X" gesetzt und frage in einer Bedingung "Variable hat den Wert" diese ab, ob der Wert <4 ist - wenn JA wird die Variable um eins hochgezählt und mein Ereignis "Test" soll ausgeführt werden. Das funktioniert auch einmal, aber ich bekomme den Loop für die weiteren male nicht hin.

Kann mir da jemand weiterhelfen ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb bigrala:

Kann mir da jemand weiterhelfen ?

Gerne.

Aber das geht besser, wenn du mal genau zeigst was du machst. Oder - besser noch - deinen Versuch hier hochlädst. Denn deine bisherige Beschreibung ist so ungenau, dass ich dir zwar jetzt irgendein Beispiel mit irgendeiner Variable in irgendeiner Schleife bauen kann. Aber dann kriege ich wahrscheinlich zur Antwort: "Okay, das geht natürlich. Aber das ist nicht das, was ich wollte ..." 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay, hab mal abgespeckte Demoversion gemacht.

Es geht um die Animation der Bekohlungsanlage ..... diese soll ankommende Loks mit 4 Schaufeln befüllen, anschließend sollen die Loks wieder starten.

Umgesetzt habe ich es bis jetzt so .....
Die Bekohlungsanlage hat eine Variable für die spätere Anzahl der Befüllvorgänge, diese wird am Ende der Befüllung auf Null gesetzt.
Auf Gleis 1 oder 2 kommt eine Lok an und fragt ob die Variable in der Bekohlungsanlage auf Null steht, dann wird der Befüllvorgang gestartet, sonst hält die Lok nur zur Befüllung an.

Der Kran fährt aus seiner "Parkposition" zur "Befüllposition" (in EV - Kran starten 1) und beginnt die Befüllung (in EV - Kran starten 2), nach jeder Befüllung wird die Variable in der Bekohlungsanlage um 1 erhöht. Beim Erreichen eines eingestellten Maximalwerts (im Beispiel 4) werden die Befüllungen beendet. Danach fährt der Kran wieder in seine "Parkposition" und die Lok´s starten.

Im Prinzip soll das eine einfache Schleife (for i = 1 to x) sein.
Ist das evtl. mit Wiederholung zu machen ?

Die beiden Schalter sind nur für mich zum Testen der Animation und den Verzögerungen gewesen.

Animation 4 Mal.mbp

Bearbeitet von bigrala
Link zu diesem Kommentar
Auf anderen Seiten teilen

Gerne, nur keinen Stress.

Es funktioniert ja so wie ich es gemacht habe.
Meine Überlegung war nur, um das Ganze in der EV kürzer zu halten müsste es doch eine einfache Routine/Schleife geben.

Ein Vorteil wäre hier auch, dass man die Max. Anzahl der Durchläufe in einer Objekt-Variabeln definieren könnte und diese dynamisch durch andere Ereignisse setzen  In meinem Beispiel mit 4 Durchläufen ist die EV noch übersichtlich, bei 10 oder 20 Durchläufen sieht das dann schon schlimmer aus ;)

Bearbeitet von bigrala
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Minute schrieb bigrala:

um das Ganze in der EV kürzer zu halten müsste es doch eine einfache Routine/Schleife geben.

Ja, das geht sicherlich und ich hatte auch verstanden, dass das dein Wunsch ist. Das ist auch vernünftig. 
Ich experimentiere gerade damit.

Mit der "Wiederholung" in der EV geht es nicht. Erstens sind innerhalb der Schleife keine Verzögerungen erlaubt. Und zweitens gibt es keine "for ... do" und auch keine "do ... while" Schleife in der grafischen EV. Man muss das also anders angehen. Ich habe auch schon erste Ideen dazu ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Und hier ist ein erstes Ergebnis.

Ich bin dabei recht nah an deinem Original geblieben. Der eigentliche Zyklus zum Befüllen ist aber kein benutzerdefiniertes Ereignis mehr. Stattdessen ist der Auslöser jetzt eine Änderung in der Variablen "Bekohlung Anzahl". Deshalb ist der Zähler auch ans Ende dieses Zyklus gewandert. Nach Ablauf einer Sequenz wird die Variable eins rauf gesetzt und das ruft das Ereignis erneut auf. Das ist aber noch unschön, weil der zweite Aufruf innerhalb der ersten Sequenz geschieht. Es entstehen also genestete Aufrufe.

Wahrscheinlich wäre es klüger, die ganze Wiederholung mit einem Timer auszustatten. Die sind nämlich genau für diesen Zweck (zyklische Wiederholungen) gedacht.

Ich habe auch die Ereignisse für die Kontakte abgeändert. Du hast in meinem Beispiel nur ein Ereignis "Brems" und ein Ereignis "Halt". Beide sind so angelegt, dass sie die Variablen des auslösenden Kontakts befüllen. Funktionieren also jeweils für zwei gleichartige Kontakte korrekt.

Das Ende der ganzen Sequenz ist unverändert und würde beide Loks losschicken, wenn beide die Kontakte überfahren hätten. Aber zunächst soll es um die vierfache Weiderholung der Kranaktion gehen.

Anlage: Animation 4 Mal (Goetz).mbp

 

Übrigens - diese großen Trichter sind sogenannte Wiegebunker. Die Trichter haben ein größeres Fassungsvermögen als die Tender.

  1. Eine Lok fährt unter den vollen Trichter. 
  2. Der Tender wird aus dem Trichter befüllt.
  3. Die Gewichtsdifferenz im Trichter wird ermittelt und die entnommene Kohle in Rechnung gestellt.
  4. Die Lok fährt frisch befüllt ab.
  5. und dann tritt der Bagger in Aktion und befüllt den Wiegebunker wieder neu.
Bearbeitet von Goetz
Schreibfehler korrigiert
Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die Info zu den Trichtern - wieder was gelernt (y)

Deine Änderungen schaue ich mir gleich mal an und schaue ob ich es nachvollziehen kann.

Auf Timer verzichte ich bei Ablöufen eigentlich sehr gerne, da es etwas mühsam ist die richtige Zeit für den Ablauf festzulegen, so dass es auch saubere Übergänge gibt.
Aber okay - wenn es Sinn macht, dann mal schauen wie es mit dem Timer läuft, wie ich das umstricke.

Erstmal vielen Dank für Deine prompten Bemühungen

Link zu diesem Kommentar
Auf anderen Seiten teilen

gern geschehen (und gerne mehr), bigrala

 

vor 3 Minuten schrieb bigrala:

Aber okay - wenn es Sinn macht

'horses for courses", sagt der Brite und meint damit: Das richtige Mittel für den richtigen Zweck wählen.

Bearbeitet von Goetz
Ergänzungen
Link zu diesem Kommentar
Auf anderen Seiten teilen

Habe mir mal alles angeschaut .... soweit alles klar und verständlich.
Das "Variable wird gesetzt" ein auslösendes Ereignis sein kann, hatte ich nicht auf dem Schirm.
Das mit den Parametern bei Bremsen und Halten ist auch verständlich.

Was spricht gegen "genestete Aufrufe", kann das zu Problemen führen oder ist es einfach nur der Userbillity bzw. Übersichtlichkeit halber.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich finde genestete Aufrufe unsauber, wenn es sich eigentlich um eine sequenzielle Wiederholung handelt.

Und Unsauberkeiten solcher Art führen zu schlechtem Stil. Schlechter Stil führt zu Missverständnissen und Umstandskrämerei. ...

Deshalb will ich das, was ich für den ersten Versuch auf die Schnelle zusammengezimmert habe, nicht zur Nachahmung empfehlen.

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