Jump to content

Hilfestellung für Automatik Steuerung 07a


winpet

Empfohlene Beiträge

Hilfestellung für Automatik Steuerung 07a - Dynamische Gleiswahl von BahnLand

Ich bin kein blutiger, aber doch noch Anfänger. Die Automatik Steuerung 07a - Dynamische Gleiswahl hat es mir angetan und ich habe sie nachgebaut - leicht reduziert mit 4 Bahnhöfen (A bis D). Die Anlage lief nicht, darum habe ich sie abgespeckt auf eine eingleisige Variante (A1, C1, B1 und D2: siehe Anhang). Trotz mehrfacher Kontrolle der Programmierung und der Hilfe von Plugin>Planung>EV-Fehlersuche finde ich den/die  Fehler nicht. Einfahren in die Anlage aus der Fiddle Yard, Durchfahrt in den Bahnhöfen A, C und B funktionieren, aber ….
Fehler 1: Nachdem der ganze Zug den Bahnhof B verlassen hat, öffnen im Bahnhof C das Ausfahrt-Signal und die Ausfahrt-Sperrweiche „unbeabsichtigt/fehletrhaft“ (#AusSIG-C1>B und #SperrWEI-C1>B).
Fehler 2: Die Durchfahrt im Bahnhof D kommt nicht zu Stande. Der Zug bremst ab und kommt auf dem Haltegleis zum Stehen (#HalteGL-D2>A) - soweit regelkonforme Abbremsung, aber doch nicht erwünscht.

P.S. Nehme ich das gleiche Abspecken mit der Originalanlage von BahnLand vor, funktioniert diese auch in der reduzierten Form fehlerfrei.

Anliegen Nr. 1 (Hauptanliegen): Kann mir jemand einen Hinweis geben, wie/wo ich bzgl. den Fehlern 1 & 2 weiter suchen soll. Ich trete mit der Fehlersuch an Ort.

Anliegen Nr. 2 (Nebenanliegen): Trotz dem wiki 4437 verstehe ich die Freigleis-Kalkulation nicht vollständig. Unverständlich ist für mich, mit welchen Anfangszahlen und warum genau mit diesen, gestartet werden muss - dies für die Anlagen 07a und 07b. Kann mir jemand die Freigleiskalkulatuion in anderen Worten als wie im wiki erklären?

Herzlichen Dank zum Voraus für alle Antworten und Tipps.

winpet

aRed_07_PW_AuSteu-v1012.mbp

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo winpet,

Zum Anliegen Nr.2:
Bei der Freigleis-Kalkulation werden 3 Freigleis-Variablen pro Bahnhof mit folgenden Funktionalitäten benötigt:

  • Freigleiszähler global
    Der Zähler zeigt die Anzahl freier Gleise im Bahnhof an. Entsprechend wird der Zähler bei der Initialisierung mit der aktuellen Zahl der freien Gleise im Bahnhof belegt. Fährt nun ein Zug ein, wird der Zähler um 1 reduziert. Fährt ein Zug aus, wird der Zähler um 1 erhöht. Enthält der Zähler den Wert 0, sind alle Gleise des Bahnhofs belegt, sodass kein weiterer Zug einfahren kann.
  • Freigleiszähler von links
    Dieser Zähler protokolliert die Anzahl der Züge, die momentan von links in den Bahnhof einfahren dürfen, wenn im Bahnhof die dafür erforderlichen Gleise frei sind. Es dürfen nicht alle Gleise des Bahnhofs mit Zügen mit Fahrtrichtung nach rechts belegt werden, da sonst aus dem Nachbarbahnhof rechts kein Zug hierher fahren könnte. Würde nun im rechten Nachbarbahnhof dieselbe Situation, aber mit Fahrtrichtung nach links, eintreten, wäre dies eine nicht mehr auflösbare Totalblockade, weil keiner der Züge in den beiden Bahnhöfen mehr ausfahren könnte.
    Deshalb muss im Bahnhof immer mindestens 1 Gleis für die Gegenrichtung reserviert bleiben. Wenn also der Bahnhof "n" Gleise besitzt, dürfen diese von höchstens "n-1" Zügen mit gleicher Fahrtrichtung belegt sein. Bei der Initialisierung wird daher dem "Freigleiszähler von links" der Wert "n-1" abzüglich der Anzahl Züge im Bahnhof, die von links eingefahren sind, zugewiesen.
    Fährt nun ein Zug von links in den Bahnhof ein, wird der "Freigleiszähler von links" um 1 reduziert. Verlässt dieser Zug den Bahnhof, wird dieser Zähler wieder um 1 erhöht. Dies gilt auch dann, wenn der Zug im Bahnhof wendet und den Bahnhof in jene Richtung verlässt, aus der er gekommen ist. Jeder Zug muss also beim Verlassen des Bahnhofs genau jenen Fahrtrichtungs-abhängigen Zähler wieder erhöhen, der bei seiner Einfahrt in den Bahnhof um 1 reduziert wurde.
    Bei einem von rechts in den Bahnhof einfahrenden Zug wird der "Freigleiszähler von links" nicht verändert. insbesondere bleibt dieser Zähler unverändert, wenn der von rechts eingefahrene Zug den Bahnhof wieder verlässt, und zwar unabhängig davon, in welche Richtung dieser Zug ausfährt.
  • Freigleiszähler von rechts
    Dieser Zähler wird genauso behandelt wie der "Freigleiszähler von links", mit dem Unterschied, dass dieser Zähler nun von den von rechts einfahrenden Zügen modifiziert wird.

Man beachte, dass ein Zug aus einem Nachbarbahnhof nur dann die Fahrt zu diesem Bahnhof antreten darf, wenn sowohl der globale Freigleiszähler als auch der Richtungs-abhängige Freigleiszähler für die Richtung, aus der der Zug einfahren würde, einen Wert >0 enthalten. Ein noch nicht ausgeschöpftes Kontingent aus einer Richtung nützt nichts, wenn der Bahnhof voll ist, und ein im Bahnhof freies Gleis darf nicht belegt werden, wenn das Kontingent für die Richtung, aus der eingefahren werden soll, bereits ausgeschöpft ist.

Zum Fehler 1:
Ich habe festgestellt, dass die Ausfahr-Bereitschaft aus dem Bahnhof C in Richtung B nicht deaktiviert wurde, nachdem der Zug den Bahnhof C verlassen hat. Dies ist die Erklärung dafür, dass in dem Augenblick, wo derselbe Zug den Bahnhof B verlassen hat, die Sperrweiche und das Signal im Bahnhof C geöffnet werden (die Bedingungen "Gleis im Bahnhof B frei" und "Streckenabschnitt CB frei" sind beide erfüllt). Warum die Ausfahrbereitschaft im Bahnhof C nicht zurückgsetzt wird, solltest Du nochmals in Deiner Ereignisverwaltung überprüfen.

Zum Fehler 2:
Zweitbedingung.png

In dieser Ereignisdefinition fehlt die hier gezeigte zweite Bedingung (ODER-Verknüpfung!). Dies ist der Gleisbelegungs-Indikator, der gesetzt wird, wenn ein Zug aus dem "Fiddle Yard" einfährt. Dieser muss beim Verlassen des Bahnhofsgleises genauso zurückgesetzt werden, wie wenn der Zug vom Bahnhof D her eingefahren wäre. Da die Gleisbelegung nicht zurückgesetzt war, konnte bei der Suche nach einem freien Bahnhofsgleis keines gefunden werden, was dazu führte, dass der Zug im Bahnhof D keine Ausfahrt bekam.

Zum Anliegen Nr. 1:
Gerade wenn Du versuchst, eine vorhandenes Scenario für Deine Bedürfnisse zu adaptieren, solltest Du bei einer Fehlersuche immer die Vorlage mit zu Rate ziehen. Ich habe insbesondere auch den Trace (EV-Fehlersuche) zur Diagnose verwendet. In Deinem konkreten Fall habe ich die Trace-Einräge in einen Editor kopiert und dort die Stoppuhr-Ereignisse ausgeblendet. Danach bin ich ab der Einfahrt des ersten Zuges in den Bahnhof D alle Ereignisse Schritt für Schritt in der Ereignisverwaltung durchgegangen (hierfür ist es nützlich, diese zu exportieren und in einer Datei anzuschauen) und habe mir insbesondere die Variablen-Zuweisungen und Variablenzustände angeschaut. Hierbei bin ich dann auf die nicht freigegebene Gleisbelegung gestoßen.

Wenn Du die oben im Bild gezeigte Korrektur bei Dir vorgenommen hast, müsste Deine Anlage laufen (bei mir tat sie es).

 

@EASY
Wäre es eventuell möglich, in Dein Plugin auch die Ereignisse "Ereignisdefinition wird aktiviert/deaktiviert" mit aufzunehmen?


Viele Grüße
BahnLand

 

 

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo BahnLand,

Zitat
vor 8 Stunden schrieb BahnLand:

Wäre es eventuell möglich, in Dein Plugin auch die Ereignisse "Ereignisdefinition wird aktiviert/deaktiviert" mit aufzunehmen?

... ist leider nicht im Funktionsumfang der Schnittstelle enthalten... siehe wiki...

Nachtrag: Ich bin zwar nicht "betroffen"... aber Dir gilt meine Bewunderung, wie Du so einen Fehler findest...

Gruß
EASY

Bearbeitet von EASY
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo EASY,

Danke für die schnelle Antwort (schade, vielleicht kann Neo diese Ereignisse noch in die Schnittstelle aufnehmen) - und auch für das Lob: Einfach war es nicht, aber da die Wertzuweisung an die Variablen in Deinem Trace-Tool enthalten ist, konnte ich die Spur bis zum Fehler verfolgen - und es funktionierte auch nur im direkten Vergleich mit meiner Muster-Anlage.

Viele Grüße
BahnLand

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo BahnLand

Ganz herzlichen Dank für Deine detaillierten und prompten Korrekturhilfen. Sie sind wirklich enorm hilfreich.

Die Freigleis-Kalkulation ist nun klar. Globaler Zähler: Ein freies Bahnhofgleis zählt wegen der beidseitigen Befahrbarkeit als 2.
Fehler 2: Die Durchfahrt im Bahnhof D klappt nun auch.

Mit dem Fehler Nr 1 tue ich mich schwer.
Einschub: Den Umbau einer Originalanlage in eine andere Version mache ich bewusst, damit ich gezwungen werde, die Steuerung verstehen zu müssen. Mit Hilfe der Originalprogrammierung schreibe ich meine Version in Excel (leider kann ich sie nicht anhängen). Schliesslich schreibe ich die EV der MBS und vergleiche den htlm-Print-out mit der Ecxel-Tabelle. Summa summarum: Ohne das Originalscript und die Erklärungen im WIKI käme ich zu gar nichts.

Zurück zum Fehler 1: Nach dem Verlassen des Zugs aus dem Bahnhof C schliessen das Ausfahrtsignal und die Sperrweiche. Warum diese dann nach Ausfahrt des Zuges aus dem Bahnhof B erneut  öffnen ist mir schleierhaft. Geschätzter BahnLand, wo würdest Du nun suchen? Im Programmierblock Bahnhof C oder Bahnhof B oder irgendwo anders? Kannst Du den Suchkreis allenfalls noch mehr eingrenzen? Ich habe schon mehrfach die Programmierung durchgegangen, finde jedoch den Fehler trotz erhöhter Aufmerksamkeit nicht. Suche ich am falschen Ort?

Herzlichen Dank BahnLand, falls Du Dich nochmals mit meinem Problem befassen magst.
 

Beste Grüsse
winpet

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Winpet,

vor 5 Minuten schrieb winpet:

Die Freigleis-Kalkulation ist nun klar. Globaler Zähler: Ein freies Bahnhofgleis zählt wegen der beidseitigen Befahrbarkeit als 2.

Das stimmt so nicht ganz. Angenommen, Du hast einen Bahnhof mit 5 Gleisen, in den von jeder Seite eine eingleisige Strecke einmündet. Dann hat bei leerem Bahnhof die globale Freigleiszähler-Variable den Wert "5", während den Richtungs-abhängigen Freigleiszählern (oder besser "Zufahrtszählern") jeweils der Wert "4" zugewiesen ist. Ein einfahrender Zug zählt jeweils den Gesamtzähler und "seinen" Zufahrtszähler herunter. Beim Verlassen des Bahnhofs werden der Gesamtzähler und jener Zufahrtszähler, der von diesem Zug bei der Einfahrt herunter gezählt wurde, wieder hochgezählt. Ein Zug kann in den Bahnhof nur dann einfahren, wenn sowohl der Gesamtzähler als auch "sein" Zufahrtszähler >0 sind. Ansonsten darf der Zug schon gar nicht aus dem letzten Bahnhof in die eingleisige Strecke zu dem hier betrachteten Bahnhof einfahren.

Insgesamt haben also in dem Bahnhof 5 Züge Platz, wobei aber maximal 4 Züge in einer Richtung eingefahren sein dürfen (es muss immer möglich sein, dass wenigstens noch ein "Gegenzug" rein kommt). Dies wird genau durch die Ausgangswerte "5" und "4" des Gesamtzählers und der Zufahrtszähler bei einem leeren Bahnhof ausgedrückt.

Um das Problem mit dem ungewollten Öffnen des Ausfahrsignals im Bahnhof C analysieren zu können, muss ich mich erst wieder in meine eigene Ereignisverwaltung hinein denken, bevor ich diese mit Deiner EV vergleichen kann. Die Ursache über den Trace herauszufinden, ist hier nicht so einfach, weil leider die Aktivierung und Deaktivierung von Ereignissen und Ereignisgruppen momentan nicht unterstützt werden kann. Ich werde hier zusätzliche Hilfsvariable definieren müssen, die ich anstelle der Aktivierungen/Deaktivierungen stellvertretend protokollieren kann. Du musst Dich also hier noch etwas gedulden.

Viele Grüße
BahnLand

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Winpet,

Du hast in einer Ereignisdefinition bei einer Zusatzbedingung fälschlicherweise das Negierungs-Kästchen gesetzt.

Negierung_falsch.png

Wenn Du hier die Negierung heraus nimmst, wird das Signal im Bahnhof C nicht mehr unerwartet geöffnet.

Nun zur Methode, wie ich den Fehler entdeckt habe;
Eigentlich sollte sich die Ereignisverwaltung in allen Bahnhöfen im Wesentlichen gleich verhalten (in den Bahnhöfen A und D gibt es wegen der "Fiddle-Yard"-Zuführungen einige Unterschiede). Also habe ich mir die Ereignisdefinitionen der Bahnhöfe B und C nebeneinander gelegt und alle Ereignisse Zeile für Zeile miteinander verglichen. Hierbei muss man allerdings berücksichtigen, dass sich die Bezeichnungen aufgrund des Bezugs zu den verschiedenen Bahnhöfen natürlich unterscheiden. Aber in den Ereignis-Typen, Bedingungs-Typen und Aktionsarten müssen die zu vergleichenden Definitionsabschnitte übereinstimmen. Und genau in der Art, wie eine bestimmte Bedingung auszuwerten ist (positiv oder negiert), gab es bei dieser Ereignisdefinition von Bahnhof B und Bahnhof C eine Diskrepanz. Zur "Sicherheit" habe ich dann noch die beiden analogen Ereignisdefinitionen für die Bahnhöfe A und D überprüft, die alle diese Bedingung nicht negiert hatten. 

Die "Probe aufs Exempel" ergab dann die Bestätigung: Entfernt man an der hier im Bild gezeigten Stelle das Häkchen für die Negierung, Verhält sich die Signalschaltung in Bahnhof C genauso wie in Bahnhof B, A oder D, womit das Problem gelöst ist.

Viele Grüße
BahnLand

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo BahnLand

Ich kann mich nur wiederholen und Dir ganz, ganz herzlich für Deinen unermüdlichen Support danken.

P.S: Dass es ungewollt beim Koperen von EV-Blöcken zu Häkchen oder Verschwinden von Häkchen kommen kann, habe ich schon einige Male festgestellt. Dies ist wohl eine Marotte des Programms und gehört zur persönlichen Lerning Curve. Offensichtlich wird man irgendwie "betriebsblind", wenn man sich andauernd mit einer Fehlersuche beschäftigt.

Ganz herzlichen Dank auch für die Hinweise, wie man systematisch an eine Fehlersuiche herangeehen kann.
Ich werde nun die Anlage wieder vervollständigen und hoffe auf ein fehlerarmes/fehlerloses Endresultat.

Viele Grüsse aus der Schweiz
winpet

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am ‎25‎.‎06‎.‎2016 um 19:38 schrieb winpet:

Ich (...) hoffe auf ein fehlerarmes/fehlerloses Endresultat.

Wenn du wirklich lernen willst, wie man die EV benutzt, dann solltest du genau darauf nicht hoffen. Denn wenn alles klappt, dann wirst du die EV nicht weiter untersuchen, sondern dich über den laufenden Betrieb freuen.

Wenn du lernen willst, dann hoffe auf Fehler. Mache Fehler. Provoziere Fehler. Das größte Manko unserer Schulbildung ist, dass sie uns Angst vor Fehlern einimpft. Dass sie Fehler bestraft.

Und zäum das Pferd nicht von hinten auf, indem du fertige EVs abschreibst und anpasst. Fang viel kleiner an. Und vor allem mit komplett eigenen Entwürfen. Die müssen nichts spektakuläres tun. Ganz im Gegenteil. Je banaler die Aktion, desto besser kannst du sie ständig ändern und so ganz genau untersuchen. Bis du alles weißt, was man zu dieser oder jener Funktion wissen muss.

Diese Gier nach schnellem Erfolg (Abschreiben und ein bisschen Verbiegen) sehe ich immer und immer wieder. Und ich beobachte jedesmal, dass dabei kein Verständnis für die Materie wächst. Logischen Systemen wie der EV kommt man aber nur durch Verständnis näher. Da gibt es nichts zu lernen (im Sinne von erinnern, merken, abspeichern). So etwas muss man (genau wie Mathe auch) begreifen. Durchschauen. Mit Mathe tun sich so viele schwer, weil ihnen nie erklärt wurde, wie man das lernt. Weil sie denken, das müsste man pauken ...

Bearbeitet von Goetz
Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo leute,

hier möchte ich Goetz mal beipflichten,

es ist nicht das wissen an sich, was uns weiter bringt, sondern die anwendung von diesem ist für intelligenz entscheidend
so war für mich pythagoras recht sinnlos, bis auf den nachbargrundstück, maurer mit einem zwölf meter langem seil einen rechten winkel erstellten

ansonsten lieber immer klein anfangen und mit dem erlernten weiter aufbauen.

vg quackster

 

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