Jump to content

ereignis: Variable wird gesetzt - Funktion


Recommended Posts

Hallo,

im Moment beschäftige ich mich sehr mit der Steuerung mittels EV.

Darin ins besonderes mit Variablen.

Als "Ereignis : Variable wird gesetzt" habe ich so verstanden, dass sobald diese Variable auf den eingestellten Wert gesetzt wird, folgende "Aktionen" ausgeführt werden.

Bei mir ist das nicht so. Manchmal aber doch, aber nur "eine" Aktion. Stehen mehrere Aktionen an, geht es nie.

Die Variable wird natürlich jedes mal  auf 0 gesetzt bevor sie ihren neuen Wert z.B. 1  bekommt, auf den dieses Ereignis dann reagieren soll.

Denkfehler bei mir oder im Programm?

PS. Test mit neuer Anlage und geänderten Daten bereits durchgeführt, selbe Auswirkung.

       Test mit "Zug betritt Gleis" geht

Gruß

Rainer

Link to comment
Share on other sites

Hallo Rainer,

das Ereignis "Variable wird gesetzt" wird immer dann ausgelöst, wenn sich der Wert einer Variable geändert hat. Die Aktion werden ausgelöst, wenn der angegebene Wert gesetzt wird.

Um jetzt aber zu prüfen, ob der Fehler bei dir oder im Programm liegt, bräuchte ich eine Beispielanlage, die das Verhalten kurz demonstriert. Am besten du schickst mir diese per Mail (Exportieren als mbp).

Viele Grüße,

Neo

Link to comment
Share on other sites

Hallo Neo,

habe etwas herausgefunden.

Wenn Ereignis "Variable wird gesetzt" durch Variablenwechsel ausgelöst wird, kann ich unter Aktion "Lokgeschwindigkeit setzen" auswählen.

Um zusätzliche Einträge in der EV zu vermeiden, dachte ich, das ist toll.

Wähle ich die Aktion "Lokgeschwindigkeit setzen" aus, kann ich einmal die Lok, das Gleis und die Geschwindigkeit auswählen.

Wähle ich "nur" Lok und Geschwindigkeit aus funktioniert das ganze, allerdings bleibt die Lok ja sofort stehen.

Da ich das Gleis zusätzlich auswählen kann, dachte ich, trage hier das Stoppgleis ein.

Jetzt geht es nicht mehr, die Lok bleibt nicht mehr stehen.

ebenfalls Probleme anstatt Lokgeschwindigkeit wenn ich Weiche schalten nehme mal geht mal nicht trotz Reset Variable

Gruß

Rainer

Link to comment
Share on other sites

Hallo Rainer,

Zitat

Da ich das Gleis zusätzlich auswählen kann, dachte ich, trage hier das Stoppgleis ein.

Jetzt geht es nicht mehr, die Lok bleibt nicht mehr stehen.

"Lokgeschwindigkeit setzen" in Verbindung mit einen Gleis geht nur, wenn sich die Lok zu dem Zeitpunkt, in dem das Ereignis stattfindet auch tatsächlich auf diesem Gleis befindet...  wenn sich die Lok auf einem anderen Gleis befindet ist die Bedingung (Lok befindet sich auf "Stoppgleis") ja nicht erfüllt und wird deshalb nicht ausgeführt...

Gruß

EASY

Link to comment
Share on other sites

Hallo Rainer,

... es ist überigens nicht notwendig, daß Du die Variable wieder zurücksetzt (0).

Wenn Du sie bei "Aktion" auf 1 setzt wird das Ereignis "Variable wird gesetzt" auch dann ausgelöst, wenn die Variable vorher schon den Wert 1 hatte...

(... kann auch sein, das Dir das Zurücksetzen der Variablen die Ereignisverwaltung etwas durcheinanderbringt ?!...)

Gruß

EASY

 

Link to comment
Share on other sites

Hallo EASY,

leider stimmt es was du schreibst.

Schade, da müsste ich ja mit der Stoppuhr messen und das "Stoppgleis" dann so lang machen, dass zu der Millisekunde wo das Ereignis "Variable wird gesetzt" der Zug sich tatsächlich auf dem Stoppgleis steht. Was aber bedeutet, dass der Zug dann "irgendwo" auf diesem Stoppgleis stehen bleibt und nicht am tatsächlich beabsichtigten Haltepunkt.

Da kann ich diese Bedingung auch weglassen, denn da bleibt der Zug auch "irgendwo" stehen sobald das Ereignis eintritt.

Ich denke  diese Bedingung ist hier unsinnig.

PS. Das zurücksetzen der Variable wurde hier nur gemacht, damit ein klar definierter Zustand vorhanden ist.

     Wenn das die EV "etwas durcheinanderbringt", dann wäre das schlimm. :-))

Gruß

Rainer

Link to comment
Share on other sites

Hallo Rainer,

Zitat

...da müsste ich ja mit der Stoppuhr messen und das "Stoppgleis" dann so lang machen, dass zu der Millisekunde wo das Ereignis "Variable wird gesetzt" der Zug sich tatsächlich auf dem Stoppgleis steht. Was aber bedeutet, dass der Zug dann "irgendwo" auf diesem Stoppgleis stehen bleibt und nicht am tatsächlich beabsichtigten Haltepunkt.

du kannst ja , wenn die Variable gesetzt wird, einen (schnelllaufenden) Timer starten, der das Stoppgleis abfragt- und bei erreichen des Stoppgleises den Zug und sich selbst anhält.

Gruß Lutz

 

Link to comment
Share on other sites

Hallo Rainer,

verstehe das Problem noch nicht ganz. Wenn dein Zug beim Stoppgleis stehen bleiben soll, dann nutze doch einfach das Ereignis "Zug betritt ein Gleis" und wähle das Stoppgleis aus. Zusätzlich kannst du unter "Bedingungen" ja noch den Zustand deiner Variable prüfen, das der Zug nur unter bestimmten Bedingungen stoppen soll.

Viele Grüße,

Neo

Link to comment
Share on other sites

Hallo,

also gut, versuche ich es mal zu erklären.

Ich möchte für meine Anlage eine Variablen gesteuerte EV schreiben.

Grundgedanke war: weniger Einträge für ein und das selbe Ereignis. Denn je mehr Einträge die EV hat, desto mehr Ressourcen werden verbraucht.

Wenn ich die Steuerung per Gleis mache, ist sie bei einer Straßenanlage mit nur 18 Kreuzungen (pro Kreuzung werden 6 bzw. 8 Weichen benötigt, aktiv 3 bzw. 4 Weichen.) riesig.

Also versuche ich per Variablen diese Menge an Einträgen zu verkleinern.

Theoretisch gibt es dann nur 3 bzw. 4 "Zug betritt Gleis" und 3 bzw. 4 "Zug verlässt Gleis" um die gesamte Kreuzung zu steuern. Alles andere soll mittels Variable definiert und gesteuert.

Also egal ob Countdown, Zug halt bzw. Weiterfahrt , oder Weichenschaltung soll mittels wechselnden Variablen welche im 1. zutreffenden "Zug betritt Gleis" erzeugt werden.

Versuch den Ablauf zu erklären:

Linie1 kommt an Kreuzung, steuert seine Richtung, hält Linie2 und 3 an. Linie1 verlässt Kreuzung startet (eventuell vorhandene gehaltene) Linie2 bzw. 3.

Sind beide Linie2 und 3 gehalten, steuert Linie1 die Ausfahrt von Linie2 und Linie2 die Ausfahrt Linie3.

Jetzt kommt bestimmt Blockschaltung. Richtig, aber nicht mit 5- 20 Steuergleisen (betritt, verlässt, stopp etc.) sondern mit 3-4 Einfahrt und 3-4 Ausfahrt Gleisen.

Eben alles per Variable definiert.

Aufgefallen ist mir dabei dass oben genanntes Problem Ereignis "Variable gesetzt" Aktion "Lokgeschwindigkeit mit benanntem Gleis" nicht geht. Da zwar die Lok nicht aber die Bedingung des Gleises gespeichert wird bzw. so gut wie nie zutrifft. Wodurch die Beschränkung im "Variable gesetzt" als Ereignis eigentlich unsinnig ist. Bei Ereignis "Zug betritt Gleis" funktioniert es.

Ein ähnliches Problem tritt bei Ereignis "Weiche schaltet" auf. Denn solange die Weiche "nicht Real neu geschaltet" wird werden die folgenden Aktionen nicht ausgeführt. Hier lag allerdings ein Denkfehler meinerseits vor, da ich dachte, dass der Befehl Aktion "Weiche schalten" im System auch als Schalten registriert wird. Dem ist nicht so, es wird als "keine Veränderung" im Zustand registriert und somit passiert beim folgenden Ereignis "Weiche schaltet" nichts. Es ist also so, dass ich wie Weiche erst "falsch" und dann "richtig"  stellen muss, damit die Funktion Ereignis "Weiche schaltet" funktioniert.

PS.

Das mit dem Timer werde ich mal versuchen, vermute aber, dass ich für jede Kreuzung (ca.18) mehrere Timer (3-4) benötige, was vermutlich tierisch Rechenleistung abverlangt.

Neo, natürlich kann ich ein anderes Ereignis auswählen, dies ändert aber nichts an der Tatsache, dass dies dem nächsten nicht auch stundenlange Versuche beschert, bis er denkt das funktioniert nicht, warum steht es dann zur Verfügung. Wir alle suchen den Fehler ja erst bei uns selbst. Dann fragen wir hier und hoffen einen eventuellen Denkfehler unsererseits aufgezeigt bekommen. Lieber ist natürlich jedem wenn das Problem behoben wird. :-)

Gruß

Rainer

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...