Jump to content
Melde dich an, um diesem Inhalt zu folgen  
Andy

Kleine EV-Tipps

Empfohlene Beiträge

Hier sollten kleine Hinweise für Dinge, die in der EV nicht unbedingt intuitiv sind, angehängt werden, .

Groß/Kleinschreibung:
  Variablennamen ändern Ist derzeit leider nicht möglich. Gibt man jedoch eine Variable ein, deren Name bereits existiert, ändert aber an der Groß/Kleinschreibung etwas, wird diese Änderung übernommen (demzufolge auch in allen Ereugnissen). Das bedeutet auch, dass z.B. x und X nicht gleichzeitig existieren können.

EV-Änderungen setzen normalerweise nicht das Sternchen im Anlagennamen, d.h. verläßt man die Anlage nun ohne zu speichern, wird man nicht gefragt, ob man noch sichern will.

Nutzung von nicht existierenden (Objekt)variablen.
Es ist ggf. möglich in Ereignissen Variablennamen zu verwenden, die sich noch nicht in der Variablenliste befinden. Diese Variablen gelten als nicht existent und ihre Verwendung in Bedingungen wird eine Teilaussage als 'falsch' erzeugen. Sie werden auch nicht automatisch ins Leben gerufen, sondern müssen manuell über die Liste ins Leben gerufen werden.
Man kann diesen Effekt aber auch durchaus verwenden. Im nachfolgenden Beispiel 1 werden alle Loks außer Rangierloks an dem Stopgleis angehalten. Jetzt gibt es nicht so viele Rangierloks, und man gibt nur den Rangierloks die Objektvariable 'istRangierlok' und setzt den Wert auf 1.

Im Ereignis wird gefragt, ob Auslöselok.istRangierlok auf 1 steht, gibt bei der Rangierlok 'wahr', Negierung ist angeklickt, wird also zu 'falsch', die Lok stoppt nicht.
Die BR 118 besitzt die Objektvariable gar nicht. Die Abfrage findet keine Variable und setzt 'falsch', negiert wird das 'wahr', die Lok stoppt.
Nun Beispiel 2. Eine Alt-Copy des Beispiels kopiert Objektvariablen zum Glück mit! Die Loks sind also identisch.
Nur die Ereignisbedingung ist anders.
Sie läßt auf Anhieb das Gegenteil vermuten, denn wenn ich nur die Werte 0 und 1 für 'istRangierlok' verwende, prüfe auf 1 und negiere, erwarte ich das gleiche Resultat wie prüfe auf 0 ohne Negierung. Aber, die BR 118 hat die Objektvariable gar nicht, der Versuch der Prüfung wird mit 'falsch' bewertet, und damit nun auch der komplette Ausdruck. Die Lok stoppt nicht! Keine hält hier!
Obwohl man hier auch mit der alternativen Aktion hätte arbeiten können, zeigt das Beispiel auch schön auf, wie eine Negation auf einer Einzelbedingung brauchbar ist.
Und man spart sich einiges an Tipperei bei der Erstellung von Objektvariablen.

 

objektvariable.mbp

Bearbeitet von Andy

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

EV vs. herkömmlicher Programmlinearität:

Manchmal bringen kleine Beispiele Licht ins Dunkel.
Das folgende Beispiel zeigt auf, dass man in der EV gelegentlich etwas umdenken muß:

Wird der Kippschalter betätigt, wird eine Variable check auf 1 gesetzt.
Im nächsten Ereignis wird darauf reagiert, dass check auf 1 gesetzt wird. Die Aktion ist: check auf 0 setzen.
Der 'normale' Programmierer erwartet nun in einem linearen Programmverlauf, dass check nicht mehr 1 sein kann.

Das dritte Ereignis reagiert nun doch noch mal auf das Setzen check auf 1. Und siehe da, die Testvariable test wird wirklich auf 1 geschaltet. Es ist eingetreten!

Dann prüfen wir nochmal die tatsächlichen Verhältnisse mit einem vierten Ereignis:
Nochmal reagieren wir auf das Setzen von check auf 1 und fragen in der Bedingung nun, ob check nun 0 ist. Ist es nicht! Die Aktion, das Setzen von test2 auf 1 wird nicht ausgeführt!

Das heißt:
Wie immer ich auch Variablen in einem Zyklus der Ereignis-Abarbeitung beeinflusse, die Änderung wird erst nach der Abarbeitung aller Ereignisse vollzogen.
Wie sich das nun auswirkt, wenn man Variablen innerhalb eines Zyklus mehrfach verändert, mag man selber mal testen.

Grüße Andy

 

variablencheck.mbp

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Hallo Andy,

in Deinem Beispiel gibt es 3 Ereignisdefinitionen ("reset check", "check2" und "check3"), die sich alle auf dasselbe Ereignis (nämlich "Variable check bekommt den Wert 1 zugewiesen") beziehen. Damit wird die Bearbeitung aller 3 Ereignisdefinitonen angestoßen, sobald das besagte Ereignis eintritt.

In der Ereignisdefinition gibt es nun 3 Möglichkeiten, eine Aktion(sfolge) anzustoßen, nämlich bedingungslos (wenn keine Bedingungen formuliert wurden), wenn eine vorliegende Bedingung(smenge) erfüllt ist, oder wenn diese nicht erfüllt ist. Diese Bedingung (falls vorhanden) bezieht sich genau auf den Auslösezeitpunkt, muss also geprüft werden, bevor irgendwelche Aktionen aufgrund dieses Ereignisses in Gang gesetzt werden und möglicherweise den Zustand zum Zeitpunkt des Ereignisses verändern. Deshalb werden diese Bedingungen für alle durch dieses Ereignis ausgelösten Definitionen geprüft, bevor irgendeine Aktion aus diesen Definitionen angestoßen wird.

Damit ist im vorliegenden Beispiel von vorherein klar, warum die Aktion zu Ereignisdefinition "check2" ausgeführt wird und jene zu Ereignisdefinition "check3" nicht.

Erst bei der Ausführung der in den Ereignisdefinitionen hinterlegten Aktionen spielt die Reihenfolge der Ereignisdefinitionen in der Ereignisverwaltung eine Rolle. Denn würde man beispielsweise in Definiton "check2" die Variable check mit 2 multiplizieren und in Definiton "check3" 2 hinzuaddieren, käme bei umgekehrter Reihenfolge der angestoßenen Aktionen ein anderes Ergebnis heraus. Hier ist sichergestellt, dass die Ausführung der Aktionen in jener Reihenfolge geschieht, in der die betroffenen Definitionen in der Ereignisverewaltung hinterlegt sind.

Übrigens:
Besitzt die Variable check vor dem Umlegen des Schalters bereits den Wert 1, tritt das Ereignis "Variable check bekommt den Wert 1 zugewiesen" trotzdem ein. Die genannten Aktionen würden also in dieser Situation genauso ausgeführt. Dies ist ein signifikanter Unterschied zu den Ereignissen "Weiche schaltet auf Stellung x" und "Signal schaltet auf Begriff y". Besitzt die Weiche nämlich bereits die Stellung x oder zeigt das Signal bereits den Begriff y an, führt das Zuweisen ("Umschalten") der der Weiche oder des Signals auf diese Position eben nicht zur Auslösung dieser Ereignisse.. 

Viele Grüße
BahnLand

Diesen Beitrag teilen


Link zum Beitrag
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
Melde dich an, um diesem Inhalt zu folgen  

×