Jump to content

Andreas66

Mitglieder
  • Gesamte Inhalte

    29
  • Benutzer seit

  • Letzter Besuch

Beiträge erstellt von Andreas66

  1. In meiner Lösung ist natürlich auch ein Lock drin, sonst käme es ja immer zum absoluten Chaos. Das Problem tritt auf, wenn zwei Ereignisse gleichzeitig auftreten, weil dann, wie Neo oben erklärt hat, beide Ereignisse den selben Lock-Zustand signalisiert bekommen, obwohl beide Ereignisse den Lock verändern.

    Nehmen wir mal das Beispiel, auf den Gleisen A und B wartet ein Zug für die Ausfahrt nach Gleis E. Die Event Bescheibung sieht dann so aus

    Ereignis 1: Zug auf Gleis A wartet.
    Bedingung: Lock nicht gesetzt.
    Aktion: Lock setzen / Zug A nach E freischalten

    Ereignis 2: Zug auf Gleis B wartet
    Bedingung: Lock nicht gesetzt.
    Aktion: Lock setzen / Zug B nach E freischalten

    Treten jetzt beide Ereignisse gleichzeitig auf, dann passiert nach Neos Beschreibung folgendes:

    Ereignis 1 ist aufgetreten und die Bedingung ist erfüllt. Die Aktionen "Lock setzen" und "Zug A nach E freischalten" werden in einer Liste vermerkt aber noch nicht ausgeführt.
    Ereignis 2 ist gleichzeitig aufgetreten und die Bedingung ist ebenfalls erfüllt (Bitte bedenken: Das "Lock setzen" wurde nur vermerkt aber noch nicht ausgeführt). Die Aktionen "Lock setzen" und "Zug B nach E freischalten" werden in einer Liste vermerkt.

    Jetzt wird alles der Reihe nach ausgeführt:

    - Lock setzen
    - Zug A nach E freischalten
    - Lock setzen
    - Zug B nach E freischalten

    und schon krachen die Züge zusammen.

    Der Lock ist zwar notwendig, für das Problem aber nicht die Lösung. Die Lösung sieht hier so aus, dass verhindert werden muss, dass die beiden Ereignisse gleichzeitig auftreten. In meinem speziellen Fall sieht das so aus:
    Ich habe einen Timer, der alle 500ms einen Schalter betätigt. Schaltet der Schalter auf "An", so wird Gleis "A" überprüft. Schalter der Schalter auf "Aus", so wird Gleis "B" überprüft. Damit ist sichergestellt, dass die Ereignisse nicht zeitgleich erfolgen können und zu dem Konflikt kann es nicht mehr kommen. Jetzt muss ich nur noch von einem Schalter auf einen Zähler Upgraden, da es ja drei Einfahrtsbereiche gibt, weswegen ich drei Zustände brauche.

     

    Andreas

    P.S.: Im Endeffekt kommt die Geschichte mit dem Schalter aber auf das Gleiche raus, wie die Beschreibung des Timers für den Lock im Wiki Artikel

  2. Hallo Neo,

    danke für die Erklärung, damit leuchtet mir dann auch ein, was auf meiner Anlage passiert.

    Das Beispiel mit den zwei Weichen ist natürlich Blödsinn. Es ging mir nur darum in einem ganz einfachen Beispiel zu verdeutlichen, was passiert. Das reale Szenario ist etwas komplexer (siehe Bild).

    Beteiligt sind drei Signale und mehrere Weichen. Aus den Richtungen A, B und C können Züge kommen und sie sollen auf die Gleise D und E verteilt werden. Je nachdem, welches der Ziel-Gleise gerade Platz hat, soll der Zug auf das entsprechende Gleis geleitet werden oder auch warten, wenn kein Gleis frei ist. Das klappt eigentlich auch ganz gut, nur manchmal kommt es vor, wenn mehrere Züge gleichzeitig eintreffen, dass zwei Züge gleichzeitig für das gleiche Gleis freigeschaltet werden und dann kracht es eben.

    Andreas

     

     

    Wege.jpg

  3. Hallo,

    die Anlage die ich gerade aufbaue hat ein Problem mit der Ereignisverarbeitung, wodurch es immer wieder zu Unfällen kommt. Ich konnte das Problem auf eine Anlage mit nur zwei Weichen und einem Taster reduzieren, so dass es leichter nachvollziehbar ist. (siehe Anhang)

    Die Idee ist folgende:
    Ich habe zwei Weichen, nennen wir sie A und B. Durch einen gemeinsamen Schalter können beide Weichen in die Position "0" geschaltet werden, was aber nur erlaubt ist, wenn die jeweils andere in der Position "1" steht.

    Tatsächlich passiert jetzt aber folgendes:
    Sind beide Weichen in der Position "1", so wird die Weiche A in die Position "0" geschaltet. (OK) Die Weiche "B" wird aber auch in die Position "0" geschaltet, wodurch dann beide Weichen in Position "0" stehen, was es eigentlich nicht geben dürfte.

    Entweder gibt es bei der Ereignisverarbeitung eine Parallelverarbeitung, so dass beide Ereignisse gleichzeitig abgearbeitet werden oder Innerhalb eines Ereignisses wirken sich Änderungen in der Weichenstellung nicht auf die Bedingungen anderer Ereignisse aus.

    Ich hoffe ich habe das verständlich beschrieben. Im Zweifelsfall bitte nachfragen.

    Es wäre nett, wenn mir jemand die Arbeitsweise der Ereignisverarbeitung soweit erklären könnte, dass klar wird, warum dieses Beispiel nicht wie erwartet funktionieren kann und ich mir überlegen kann, was ich dagegen tun kann.

     

    Zum Verständnis: Die Beispielanlage mit zwei Weichen ist so natürlich sinnlos, da eine Weiche niemals schalten würde, wenn es so funktionieren würde, wie ich es erwartet hätte. Es ist aber einfach die kleinst mögliche Anlage, mit der ich mein Problem erklären kann.

     

    Andreas

     

    Racecondition.zip

  4. Hallo,

    ich arbeite gerade an meinem ersten Modellbahn Projekt und habe schon ein Problem: Ich habe auf der Anlage mehrere Loks, will aber nur einen Drehregler für die Steuerung verwenden. Ich stell mir das so vor, dass ich eine Lok anklicke und der Drehregler dann die aktuelle Geschwindigkeit der Lok übernimmt und die Lok auch mit dem Drehregler gesteuert werden kann. Also so etwa wie das Eigenschafts Fenster es macht. Da ich gerne im Vollbild Modus fahren möchte, ist das Eigenschafts Fenster aber nicht verfügbar und ich brauche einen Ersatz um die Loks zu steuern.

    Vielen Dank im Voraus für jeden Tip.

     

    Andreas

     

×
×
  • Neu erstellen...