Jump to content

Vorschläge zur Bedienung der Ereignisverwaltung (EV)


Hawkeye

Empfohlene Beiträge

Hallo @Neo

ich hätte zwei Wünsche für die Bedienung in der EV.

1. Wenn einer Bedingung eine Beschreibung hinzugefügt wird, dann überschreibt die Beschreibung die Bedingung.

Ist-Zustand: Die Bedingung wird angezeigt, wenn keine Beschreibung existiert.

1770249851_Screenshot2021-10-01121932.thumb.jpg.c8f8b786f69fdd300be11580d62e794a.jpg 

Wird eine Beschreibung als Text eingefügt, wird nur noch die Beschreibung angezeigt, die Bedingung entfällt.

1977885215_Screenshot2021-10-01121741.thumb.jpg.a664b8a42355565f0839c267722452e3.jpg

Deshalb die Frage, ob nicht beides untereinander angezeigt werden kann?  Also Bedingung und Beschreibung? 

2. Es ist sehr hilfreich zur Fehlersuche ins Ereignisprotokoll per print()- Anweisung Text einzugeben oder den Stand/Wert von Variablen abzufragen. Das ist z.Z. aber nur per Lua-Anweisung möglich.

Ist es daher machbar, eine EV-Anweisung unter dem Punkt "Kommentar" (der ja nur hilfreich in der EV-Ansicht ist),

einen zusätzlichen EV-Eintrag "Eintrag ins Ereignisprotokoll schreiben" hinzuzufügen?   

748819793_Screenshot2021-10-01122159.thumb.jpg.c435d3731a29ae13c82d112ece7f119a.jpg

Der Vorteil dabei wäre, das bei den print()-Anweisungen, die im Ereignisprotokoll in "grün" dargestellt werden, per Doppelklick mit der linken Maustaste sich sofort auch das dazugehörige Ereignis in der EV öffnet. So wie bei "blauen"-Protokolleinträgen.    Bei den "schwarzen Einträgen ist das nicht der Fall. 

1595132668_Screenshot2021-10-01134859.thumb.jpg.7fe1330d6c2da79cd8361e19471003d7.jpg

 

Viele Grüße,

Hawkeye

Bearbeitet von Hawkeye
Ergänzung
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Hawkeye,

vor 59 Minuten schrieb Hawkeye:

Deshalb die Frage, ob nicht beides untereinander angezeigt werden kann?  Also Bedingung und Beschreibung?

das wäre möglich, allerdings ist das so ein Punkt, den andere womöglich genau so wollen, weil sie mit der Kurzzusammenfassung nichts anfangen können. Du kannst die Kurzzusammenfassung ja selber mit in die Beschreibung aufnehmen.

vor einer Stunde schrieb Hawkeye:

einen zusätzlichen EV-Eintrag "Eintrag ins Ereignisprotokoll schreiben" hinzuzufügen?  

Ist dir die Möglichkeit bekannt, Lua-Skripte und die grafische EV zu mischen?

Skript.thumb.jpg.cf99158d0bc00b62339e1f4742ecf221.jpg

Damit kannst du beliebige print-Aufrufe einbinden. Eine eigene grafische Aktion ist womöglich etwas zu viel, weil dann auch wieder schnell Wünsche zur Formatierung usw. aufkommen und wir dann doch wieder bei Lua landen. Für die Überwachung von Variablen empfehle ich dir übrigens die Ereignisprotokollierung.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 20 Minuten schrieb Neo:

Ist dir die Möglichkeit bekannt, Lua-Skripte und die grafische EV zu mischen?

Hallo Neo, 

ja diese Möglichkeit nutzt ich auch ständig und sehr intensiv. Da arbeitet man aber in Lua, das schreckt viele Nutzer ab, hier ohne Fehler eine Anweisung einzugeben.

Mir geht es auch nicht um mich, sondern um diejenigen Nutzer, die sich mit Lua eben nicht beschäftigen wollen, oder können!

Hier könntest du ihnen eine Möglichkeit bieten, zumindest „Text“ per print() im Protokoll zur Verfügung zu stellen, ohne das sie sich mit Lua beschäftigen müssen. 

Das ist die Absicht des Vorschlages.

Viele Grüße

Hawkeye

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Hawkeye,
die Fehler bei den Anweisungen können auch in der Grafik passieren. Die Parameter im print-Befehl sind so flexibel, dass alle Möglichkeiten mit der Grafik gar nicht erfaßt werden können. Alles andere sind dann wieder Einschränkungen, wo der nächste Wunsch nicht lange auf sich warten lassen wird. Sinnvoll wäre wohl ein Tutorial über den print-Befehl für Nichtprogrammierer, denen Syntaxbeschreibungen nicht geläufig sind. Also - ein sanftes Heranführen. Mehr als einen Einzeiler wird das Skript dann ja nicht benötigen. Damit verbunden sein könnte eine Erklärung, warum z.B. Fahrzeug in Lua vehicle heißt und äquivalente Objektzugriffe.

Gruß
  Andy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Interessanter fände ich eine "ANLAGE PAUSIEREN" in der EV mit der Möglichkeit fortzufahren.
Wie in einem richtigen Debugger.
Vielleicht könnte man dann auch einen Debug Mode ein/ausschalten, der bei "aus" die Pausierungen ignoriert.
Die Ereignisprotokollierung zeigt eigentlich schon alles an, was man dann an der Stelle wissen muß.

;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @Neo,

zu diesem Thema noch ein Wunsch.  :)

Es gibt viele Animationen, die zur Ausführung eine gewisse Zeit in Anspruch nehmen.  Hier als Beispiel ein Pantograf einer Lok.

Nachdem eine Animation gestartet wurde, ("= true") werden andere Ereignisse weiter ausgeführt. Ist der Zeitbedarf für die Ausführung der Animation beendet, wird das Ende der Animation "=false" in das Ereignisprotokoll eingetragen. Also als Ereignis festgehalten. 

1180801416_Screenshot2021-10-01153653.thumb.jpg.92984908783ce10607ffb6a24d4335af.jpg

Hier würde ich mir die Möglichkeit wünschen, das dieses Ereignis eine Bedingung in der EV wird. z.B. "Animation beendet" oder "Animation gestoppt",  um nach/ durch Abschluss der Animation ein anderes Ereignis ausführen zu können.   z.B. an der roten Stelle.656198665_Screenshot2021-10-01153925.jpg.8022c38ffc3a48996a2f8f47a2575773.jpg

Hallo @Andy,

vor 10 Minuten schrieb Andy:

Die Parameter im print-Befehl sind so flexibel, dass alle Möglichkeiten mit der Grafik gar nicht erfaßt werden können

Ist ja auch nur ein Vorschlag, den ich hier mal zur Diskussion stellen wollte.  Ob das für viele Nutzer interessant/ sinnvoll ist, oder ob Neo das umsetzt oder nicht, bleibt Ihm doch überlassen. Das Thema lautet doch Feature-Wünsche. Es geht doch darum Ideen auszutauschen, auch wenn viele davon letztlich dann doch nicht realisiert werden, oder gar nicht realisiert werden können.

Viele Grüße, 

Hawkeye 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Hawkeye,

vor 8 Minuten schrieb Hawkeye:

um nach Abschluss der Animation ein anderes Ereignis ...

auszuführen, musst du die Zustandsänderung der Animation bitte selbst als Ereignis nutzen. Nicht als Bedingung.

1807455060_Animationgestartet.jpg.c875166d7d37a9a8f44afcb450201c12.jpg

 

Um Anfang vom Ende einer Animation zu unterscheiden, setze bitte im Objekt ein Flag, wenn du die Animation anstößt. 

Viele Grüße
Götz

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Minuten schrieb Goetz:

Um Anfang vom Ende einer Animation zu unterscheiden, setze bitte im Objekt ein Flag, wenn du die Animation anstößt. 

Hallo Götz,

kannst du das bitte etwas genauer erklären. Was verstehst du unter einem „Flag“?

 

VG

Hawkeye

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gerade eben schrieb Hawkeye:

Was verstehst du unter einem „Flag“?

Oh, Verzeihung Hawkeye.

Mit "flag" meinte ich eine boolsche Variable. Die kennt nur zwei Zustände: wahr oder falsch.
Kannst du als Objektvariable anlegen.

1887275536_boolean1.jpg.5083e0a59cc53bf24e1fbd0fa2a29044.jpg

In der grafischen EV hast du für die Veränderung dieser Variable dann ein weißes Kästchen, welches du entweder aktivierst oder deaktivierst.

1793257607_boolean2.jpg.25e11b110b2f94b0e61ae84d1defb24e.jpg

 

Und in der Bedingung prüfst du den Zustand um zu unterscheiden, ob die Zustandsänderung ein Start oder Stopp war.

1875018479_boolean3.jpg.0fdc1b7b1e3ea55d0685a5c646b2290c.jpg

 

Viele Grüße
Götz

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Götz,

ein interessanter Weg um das Ziel zu erreichen.

vor 8 Minuten schrieb Goetz:

Und in der Bedingung prüfst du den Zustand um zu unterscheiden, ob die Zustandsänderung ein Start oder Stopp war.

Dieser Umweg erreicht das Ziel mit den jetzigen Möglichkeiten in der EV. Werde ich mal testen.

Sollte Neo dieses Ereignis „Animation ….  =false“ aber gleich als Bedingung aufnehmen würde dieser Umweg entfallen. 
 

VG

Hawkeye

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @Hawkeye,

Grundsätzlich kann eine Bedingung nicht darauf warten, dass etwas eintritt.
In keiner Programmiersprache.

Eine Bedingung unterscheidet nur. Sie verzweigt. Je nachdem, wie eine Prüfung ausgefallen ist.

Du kannst nicht mitten im Ablauf darauf warten, dass eine Bedingung erfüllt wird.
Was du in deiner Beispiel EV versuchst, ist auch mit Änderungen nicht realisierbar.

Die Bedingung "Zeitpunkt überschritten" prüft einmalig, ob das jetzt wahr oder falsch ist. Ob die Zeit um ist oder nicht.
Sie wartet nicht, bis der Zeitpunkt überschritten ist. 

Viele Grüße
Götz

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

Es gibt ja Verzögerungen.
Man kann sich die Laufzeit einer Animation merken und die Verzögerung entsprechend einstellen.
Dann läuft der Scheduler weiter und niemand wartet.
Das funktioniert aber nur bei immer gleichem "Weg" der Animation, sollte aber für die meisten Fälle ausreichen.

Gruß
Thomas

 

Bearbeitet von HaNNoveraNer
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ein Flag für das Ereignis "Animation gestartet/gestoppt" wird nicht benötigt, das Ereignis selbst bringt bereits so ein Flag als Auslöser "Animationszustand" mit, womit du unterscheiden kannst, ob die Animation gestartet oder gestoppt wurde.

vor 1 Stunde schrieb HaNNoveraNer:

Interessanter fände ich eine "ANLAGE PAUSIEREN" in der EV mit der Möglichkeit fortzufahren.

Mitten in einem Ereignis zu pausieren wird schwierig, weil du danach den Zustand der Anlage verändern könntest. Wird das Ereignis anschließend wieder fortgeführt, könnten sich Ereignisparameter (Auslöser) geändert haben und es käme zum Crash (ein Debugger stoppt ja die gesamte Programmausführung).

Mit der Lua-Funktion "error" könntest du zumindest eine Pausierung der Anlage erreichen:

error("Pause")

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Minuten schrieb Goetz:

Grundsätzlich kann eine Bedingung nicht darauf warten, dass etwas eintritt.
In keiner Programmiersprache.

Hallo Götz, 

habe ich hier einen Denkfehler gemacht?

vor 3 Minuten schrieb Neo:

ein Flag für das Ereignis "Animation gestartet/gestoppt" wird nicht benötigt, das Ereignis selbst bringt bereits so ein Flag als Auslöser "Animationszustand" mit, womit du unterscheiden kannst, ob die Animation gestartet oder gestoppt wurde.

Oh, das ist interessant! Kannst du dafür bitte mal einfaches Beispiel geben, wo man das in der EV  findet, bzw. abfragt?

Wer suchet , der nicht immer findet.:$

Viele Grüße

Hawkeye

Link zu diesem Kommentar
Auf anderen Seiten teilen

 

Hallo Hawkeye,

vor 25 Minuten schrieb Hawkeye:

habe ich hier einen Denkfehler gemacht?

Ich fürchte, ja. 
Das wurde an deiner roten Unterstreichung von "Zeitpunkt überschritten" im Zusammenhang mit dem Text darüber deutlich.

 

vor 25 Minuten schrieb Hawkeye:

Wer suchet , der nicht immer findet.

Da ging es mir auch nicht besser als dir.

Deshalb hatte ich dir den Umweg vorgeschlagen.

Aber jetzt, wo ich wusste, dass es da ist, habe ich es auch gefunden:

Animationszustand.jpg.9de31d07de45156bd1e0222d026af755.jpg

Die Bedingung ist Eigenschaft besitzt den Wert

Dann wählst du über das Zahnrad den Auslöser aus.
Der steht automatisch auf "Objekt".
Du kannst stattdessen aus der Liste den "Animationszustand"der triggernden Animation zum Vergleich heranziehen.
Das ist ein Boolean und "true" bedeutet: Die Animation läuft.

Viele Grüße
Götz 

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

Yeah, genau das habe ich gesucht! Perfekt! Dank an euch, @Neound @Goetz. 👏

image.jpeg.174e7ec32048fec981fa70de2922ebeb.jpeg
 

Jetzt muß ich nur noch daran tüftelt, das der Animationszustand von einer bestimmten Animation als Auslöser für ein Folgeereignis definiert wird.

Aber das kriege ich dann wohl alleine hin. 
 

Danke und viele Grüße,

Hawkeye

Bearbeitet von Hawkeye
Leerzeichen entfernt
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 8 Minuten schrieb Hawkeye:

Hallo Thomas, 

so wie ich das jetzt verstanden habe ist das ein Boolscher-Wert = true oder false. Also nicht 0 oder 1.

Das meine ich nicht. Ich meine den Zustand der Animation. Die Position wäre interessant. Dann weiß man wo sie gestoppt hat und kann darauf unterschiedlich reagieren. Beispielsweise bei einem Bagger an verschiedenen Orten. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 51 Minuten schrieb HaNNoveraNer:

Ich meine den Zustand der Animation.

Ok. Also wo die Animation gestoppt hat in einem Bereich zwischen 0 und 1? Meinst du das?

Mit V7 hat Neo doch die Möglichkeit geschaffen, eine Animation per Lua auch in einem bestimmten Bereich bzw. Von Anfang oder Ende bis zu einem gewissen Punkt abzuspielen. Den kannst du doch selbst in einer Variablen definieren. 

siehe unter Punkt:

  • Abspielen von Animationen in einem benutzerdefinierten Bereich (per Lua)

hier die neue play-Anweisung in Lua:

734757847_Screenshot2021-10-01192354.thumb.jpg.bed61999d1b26230a332403f9df09e8a.jpg

Ich denke es sollte damit möglich sein, wenn du eh schon einen vorher definierten Punkt (z.B 0,5 oder 0,3) hast, an dem die Animation stoppen soll, dann kennst du doch den Wert zwischen 0 und 1, weil du ihn doch selbst vorgibst oder vorgeben kannst. Dann weiß du auch wo die Animation gestoppt hat. So denke ich mir das zumindest.


Ich bin aber noch nicht dazu gekommen, das auszuprobieren. Fahrstraßen zu testen war erstmal interessanter.

Viele Grüße

Hawkeye

 

Bearbeitet von Hawkeye
Ergänzung
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo zusammen,

vor 11 Stunden schrieb Hawkeye:

Es ist sehr hilfreich zur Fehlersuche ins Ereignisprotokoll per print()- Anweisung Text einzugeben oder den Stand/Wert von Variablen abzufragen. Das ist z.Z. aber nur per Lua-Anweisung möglich.

Ich habe hier einmal ein paar Möglichkeiten zusammengestellt, wie man die Print()-Funktion (oder auch stattdessen "nur" ein benutzerdefiniertes Ereignis) in das Ereignisprotokoll einbauen kann. Hierzu gibt es auch eine kleine Beispiel-Anwendung:

1817254789_01Schalter-bersicht.thumb.jpg.ba2508bcf2778f147747d261ee62dfdb.jpg

Print-Ausgaben im Ereignisprotokoll.mbp

Die hier gezeigten Schalter erzeugen jeweils beim Umschalten eine oder mehrere Protokollzeilen im Ereignisprotokoll.

Die einfachste Möglichkeit ist die Eingabe der Print()-Anweisung direkt in Lua, die man aber auch in die Aktion "Script ausführen" einschalen kann.

963974324_02DirekterScript-Aufruf.JPG.acbbed42c206a919694e99932393377c.JPG

Die Ausgabe ist dann die besagte "grüne Zeile".

768026132_03ProtokolldirekterScript-Aufruf.JPG.5bd0377eef819cd2eacc007d88214361.JPG

Packt man diesen Lua-Print()-Aufruf in ein benutzerdefiniertes Ereignis (hier die Ereignisdefinition Print 0"), ...

336945671_04EinschalunginbenutzerdefiniertesEreignis.thumb.JPG.a61f556f6858edcd73cc5fcb09db4cb3.JPG

... wird diese zusätzlich protokolliert.

1584481831_05AufrufbenutzderfiniertesEreignis.JPG.14a72e508240b168e86d117dca7a5852.JPG

Bei beiden Varianten ist jedoch der Text fest einprogrammiert und kann nicht variiert werden.

Das benutzerdefinierte Ereignis bietet jedoch die Möglichkeit, Parameter zu spezifizieren, ...

863587309_06BenutzerdefiniertesEreignismitParametern.JPG.eb182bbba40f999b95f7cdddbb4d21c7.JPG

... über die man dann beim Aufruf verschiedene - insbesondere auch automatisch bestimmte - Werte übergeben kann.

810057827_07Ereignis-AufrufmitParametern.thumb.JPG.0be18e842d52dffdb60a62b99986b794.JPG

Beim Protokoll stört aber meiner Ansicht nach die doppelte Ausgabe durch die Auflistung des Aufrufs (in blau) und der tatsächlich erfolgten Print-Ausgabe (in grün).

1523388372_08AufrufmitParametern.JPG.58fc344eb043d1abfcf16ce2a1d0a1e4.JPG

Ich habe deshalb auch eine Variante gebastelt, bei der das benutzerdefinierte Ereignis zwar Parameter für die Eingabe der zu protokollierenden Werte anbietet, aber keinen ausführbaren Inhalt - also insbesondere keine Print-Anweisung - besitzt.

784285242_09BenutzerdefiniertesEreignisohneInhalt.thumb.JPG.d563d3fa92e8becbb29ce90733a6be2a.JPG

Der Aufruf dieses Ereignisses unterscheidet sich (bis auf die Anzahl der Parameter) nicht von dem Beispiel davor.

1996631230_10Ereignis-Aufruf.thumb.JPG.08926f3d7478ca99399daf5889a41a25.JPG

Im Protokoll erscheinen nun aber nur noch die in blau protokollierten Aufrufe, welche dieselbe Information enthalten, die im vorausgehenden Beispiel nochmals in grün ausgegeben wurde. Trotz der fehlenden "hervorhebenden" grünen Farbe ziehe ich persönlich diese Variante vor, weil das Protokoll hierdurch zumindest auf mich übersichtlicher wirkt.

598105489_11AufrufdesleerenbenutzerdefiniertenEreignisses.JPG.dbeffdda457cb8c75eca9836cdb48d39.JPG

Viele Grüße
BahnLand

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @BahnLand,

ein schönes Beispiel, aber aus meiner Sicht schon zu weit gedacht.

Ich hatte eher an eine Hilfe in verschachtelten Bedingungen gedacht, da eine ausgeführte Bedingung im Ereignisprotokoll eben nicht dargestellt wird. 

Hier mal ein Beispiel:

1744500449_Screenshot2021-10-02075651.thumb.jpg.21431cfd2d736bcec1201290b24e2feb.jpg

für z.B. für Bedingung 2 nur der Text:

 1709533154_Screenshot2021-10-02075556.jpg.190a4d4e2f33bb735ff25dcd5fa3cc6b.jpg 

und im Protokoll erscheint, welche Bedingung ausgeführt wurde.

1077905052_Screenshot2021-10-02075507.jpg.8d72512899956099e6098a76f287eebb.jpg 

Daran kann man bei einer Fehlersuche schnell erkennen, ob die richtige Bedingung auch ausgeführt wurde.

Viele Grüße

Hawkeye

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