Fehler 854: Bedingungen überschneiden sich

Es gibt Probleme mit BAHN und Co.? Dann einfach hier posten!
Antworten
Benutzeravatar
GNock
Beiträge: 433
Registriert: Mittwoch 25. März 2009, 02:55
Wohnort: Hamburg
Kontaktdaten:

Fehler 854: Bedingungen überschneiden sich

Beitrag von GNock »

Guten Abend,

ich habe hier noch einen Korrekturhinweis für die 386r2:


In der Hilfe wird die Benutzung der Bedingungen in der Linienliste beschrieben, für die folgende Anweisung wie folgt:

<Hilfe>
Für eine (nicht-exklusive) logische ODER-Verknüpfung schreiben Sie stattdessen zwei getrennte Einträge:
9(z=6:00-19:00), 9(n=100-200)

<Hilfeende>

Die Anweisung im Datenwechselpunkt:
RB(z=19:58-20:01,T=s,G=N), RB(n=97,L=R41,N=14711)

Ein Weiterbau wurde unterbunden durch Fehler 854: Bedingungen überschneiden sich, Linien "RB" + "RB"

Jetzt mag man einwenden: Wieso, "RB(z=19:58-20:01), RB(n=97)" funktioniert doch in Weichen, Lafas, Kontakten, Signalen und Haltepunkten. :!:
Ja, aber selbst diese reine Linienliste gibt in Taktpunkten und Rangierpunkten ebenfalls Fehler 854 aus. :?: :?: :?:

Schöne Grüße
Gerd
Benutzeravatar
micha88
Beiträge: 1989
Registriert: Freitag 18. Februar 2005, 12:50
Wohnort: Marbach am Neckar
Kontaktdaten:

Re: Fehler 854: Bedingungen überschneiden sich

Beitrag von micha88 »

Hm, ich würde ja sagen, es ist nur ein Fehler in der Hilfe, dort sollte erwähnt werden, dass es bei Datenwechselpunkten usw. nicht möglich ist.

Denn damit könnte man in Datenwechselpunkten (und anderen Elementen, an denen Daten geändert werden können) leicht Dinge produzieren, die unvorhersehbar funktionieren.

In deinem Beispiel wäre das kein Problem, aber z.B.
RB(z=19:58-20:01,L=R40), RB(n=97,L=R41) könnte sehr interessant werden.
Bild
Benutzeravatar
GNock
Beiträge: 433
Registriert: Mittwoch 25. März 2009, 02:55
Wohnort: Hamburg
Kontaktdaten:

Re: Fehler 854: Bedingungen überschneiden sich

Beitrag von GNock »

micha88 hat geschrieben:Hm, ich würde ja sagen, es ist nur ein Fehler in der Hilfe, dort sollte erwähnt werden, dass es bei Datenwechselpunkten usw. nicht möglich ist.
Jetzt quote ich mich der Einfachheit mal selber:
9(z=6:00-19:00), 9(n=100-200) - das Beispiel aus der Hilfe - ... gibt in Taktpunkten und Rangierpunkten ebenfalls Fehler 854 aus.
Also auch diese in Taktpunkten dokumentierten und erlaubten Anweisungen führen zu einer Fehlerausgabe. Daher glaube ich nicht, dass die Hilfe hier fehlerhaft ist.


Erweitern wir die Info aus der Hilfe um "Datenwechselpunkt/ Datenformat (Syntax)":

<Hilfe>
Die Angaben stellen eine erweiterte Linienliste dar. Dabei können die selben Bedingungen wie dort formuliert werden. Details zu Aufbau und Funktionsweise sind dort beschrieben
<Hilfeende>

Nach meinem Verständnis enthält meine Anweisung eine logische ODER-Verknüpfung, erweitert um im Datenwechselpunkt benötigte Zuweisungen.

In deinem Beispiel wäre das kein Problem, aber z.B.
RB(z=19:58-20:01,L=R40), RB(n=97,L=R41) könnte sehr interessant werden.
Rein von der Logik her würde ich die Auswertung wie folgt erwarten:

Alle Züge der Linie RB wechseln im Zeitraum z=19:58-20:01 auf die Linie R40, auch die RB mit der Nummer 97. Passiert dieser Zug den Datenwechsel allerdings zu einem anderen Zeitpunkt, dann wechselt er - und nur er - auf die Linie R41.


Und jetzt die interessante Variante - wir ändern die Reihenfolge der Anweisung:
RB(n=97,L=R41), RB(z=19:58-20:01,L=R40)

Jetzt wechselt RB Nr. 97 immer auf die Linie R41, alle anderen Züge der Linie RB wechseln im Zeitraum z=19:58-20:01 auf die Linie R40.


Das bedeutet: Wenn JanBo die Korrektur so ansetzt, wie ich diese Funktion aus der Hilfe verstehe (und was ich auch SEHR begrüßen würde), dann ist die Reihenfolge von Anweisungen dieser Art zu beachten. Anfügen möchte ich noch:

Im ersten Beispiel könnte man von einer Überschneidung sprechen, da RB Nr. 97 je nach Zeitpunkt des Passierens vom Datenwechsel entweder auf Linie 41 oder auf Linie 40 wechselt - diese Überschneidung, wenn sie denn nicht sein soll, kann durch Fehler 854 abgefangen werden mit der Maßgabe an den BAHNler, die Reihenfolge der Anweisungen zu ändern, denn:

Das zweite Beispiel ist eine logische ODER-Verknüpfung, da gilt (nach Korrektur gelten würde):
Entweder RB Nr. 97 -> dann immer weiter als Linie R41
oder RB Nr. xxxxx -> dann im Zeitraum z=19:58-20:01 weiter als Linie 40, sonst keine Änderung.

Theoretisch schlussfolgere ich: Sollen in einem Datenwechsel für eine Linie mehrere Anweisungen eingegeben werden, von denen einige die Bedingung "n=", andere die Bedingung "z=" enthalten, dann müssen zuerst die "n"-Bedingungen und dann die "z"-Bedingungen gesetzt werden. Und dazwischen wahrscheinlich die Anweisungen, die Linie(n=Nummer, z=Zeitraum, ...) enthalten. Womit ich zugleich ausdrücken will, dass auch diese beiden Bedingungen in einer Anweisung in der Reihenfolge "n=..", "z=.." gesetzt sein sollten.

Und tschüß
Gerd
Benutzeravatar
GNock
Beiträge: 433
Registriert: Mittwoch 25. März 2009, 02:55
Wohnort: Hamburg
Kontaktdaten:

Re: Fehler 854: Bedingungen überschneiden sich

Beitrag von GNock »

Guten Tag,

ich möchte zu diesem Thema noch eine weitere Situation beisteuern. Sie existiert seit 3.83-Zeiten, und jetzt endlich will ich den Wochenfahrplan 2007 komplett darstellen. Dazu ist vorab anzumerken, dass die Strecke werktags von Triebwagen der BR 614 und 628 unregelmäßig und sonntags von Zügen der BR 218 mit vier oder fünf Buntlingen im 2-Stunden-Takt bedient wird.

Der Haltepunkt Suerhop wird von allen Zügen mit einer Haltestellen-Verweildauer H=50-70 angefahren. Einige Züge fahren allerdings nach kürzerer Zeit wieder ab, dafür wurde ein Datenwechsel (siehe a) eingerichtet:
a) R41(z=4:59-5:57 +8:11-9:14 +15:39-15:42 +17:37-17:40 +18:14-18:17 +22:45-22:48,H=10-30)

BR 614 und 628 fahren als Gattung G=N. Die Sonntagszüge BR 218 haben abweichende Geschwindigkeiten und benötigen wegen ihrer Länge anders positionierte Haltepunkte; daher fahren sie als Gattung G=L. Also erweiterte ich den Datenwechsel nach b) - leider wieder Fehler 854.
b) R41(z=4:59-5:57 +8:11-9:14 +15:39-15:42 +17:37-17:40 +18:14-18:17 +22:45-22:48,H=10-30), R41(g=L,H=20-30)

Prinzipiell vermag ich erstmal keine Überschneidung erkennen, denn:
Der erste Befehl wird Zeitraum für Zeitraum ausgewertet, und wenn die Bedingung erfüllt ist, dann wird die Zuweisung H=20-30 durchgeführt. Ist die zeitliche Bedingung nicht erfüllt, erfolgt erst dann die Auswertung des zweiten Befehls. Das sollte eigentlich selbst für den Sonntagszug um 8:24-8:24 gelten, denn die Tatsche, dass er nun eine von anderen Zügen seiner Gattung abweichende Verweildauer erhält, ist durchaus gewollt - so früh am Sonntag sind noch nicht so viele Leute unterwegs. :wink:

Aber wie gesagt: Fehler 854. Daher eine weitere Änderung c) im Datenwechsel:
c) R41(z=4:59-5:57 +8:11-9:14 +15:39-15:42 +17:37-17:40 +18:14-18:17 +22:45-22:48,g=N,H=10-30), R41(g=L,H=20-30)

Gut, so klappt's, und so wird's jetzt auch erstmal gemacht - nach dem Motto: Geht doch, GEHT DOCH! :D


Jetzt teste ich in d) eine Änderung der Reihenfolge der beiden Befehle ohne die explizite Bedingung "g=N," im zweiten Befehl:
d) R41(g=L,H=20-30), R41(z=4:59-5:57 +8:11-9:14 +15:39-15:42 +17:37-17:40 +18:14-18:17 +22:45-22:48,H=10-30)
Die Auswertung der Eingabezeile sollte jetzt - analog zu dem "*" in Linienlisten - nach dem Schema ablaufen: Der erste Befehl gilt nun für alle Züge der Gattung G=L, der zweite Befehl für alle anderen Gattungen (... alle übrigen). Aber wiederum Fehler 854.


Auch wenn JanBo die Auswerte-Routine nicht ändert (optimiert :) ), so kann dieser Beitrag doch eine kleine Hilfe für die Nutzer sein, die vergleichbare Probleme haben, wenn sie mehrere Befehle für eine Linie in eine Eingabezeile eingeben, von denen mindestens einer eine Bedingung "z=..." enthält, während andere Bedingungen wie z.B. "g=..." oder "n=..." aufweisen:

:idea: Das explizite Hinzufügen mindestens eines der "g=..." oder "n=..." zur Bedingung "z=..." erlaubt nach meinen Recherchen die Eingabe.


Ich habe weiter oben (... noch weiter oben, im zweiten Beitrag) geschrieben, dass das Beispiel aus der Hilfe "RB(z=6:00-19:00), RB(n=100-200)" in einem Taktpunkt nicht funktioniert, obwohl es sich um eine reine Linienliste mit logischer ODER-Verknüpfung handelt (Linie 9 habe ich durch Linie RB ersetzt). Ändert man das Beispiel nach dem eben beschriebenen Schema,
RB(z=6:00-19:00,n=1-99+201-99999), RB(n=100-200)

dann wird die Eingabe erlaubt. Aber viel Sinn macht das m.E. nicht. :?


Schöne Grüße
Gerd
Rolf R
Beiträge: 2187
Registriert: Donnerstag 20. November 2003, 20:41
Wohnort: Erfurt

Re: Fehler 854: Bedingungen überschneiden sich

Beitrag von Rolf R »

Hi Gerd,

Fehler 854 ist in b) durch folgendes bedingt:
R41(z=4:59-5:57 +8:11-9:14 +15:39-15:42 +17:37-17:40 +18:14-18:17 +22:45-22:48,H=10-30), R41(g=L,H=20-30)
Hier gelten für R41 unterschiedliche Halte-Intervalle in den Zeiten, die in der 1. Bedingung angegeben wurden. Ganz einfach aus dem Grund, dass der 2. Befehl separat ausgewertet wird. Woher soll BAHN wissen, ob in der Zeit von 4:59-5:57 die Haltezeit nun 10-30 oder 20-30 Sekunden betragen soll?
Prinzipiell vermag ich erstmal keine Überschneidung erkennen, denn:
Der erste Befehl wird Zeitraum für Zeitraum ausgewertet, und wenn die Bedingung erfüllt ist, dann wird die Zuweisung H=20-30 durchgeführt. Ist die zeitliche Bedingung nicht erfüllt, erfolgt erst dann die Auswertung des zweiten Befehls.


Nee Du, der 2. Befehl wird auch ausgewertet. Dabei ist es völlig uninteressant, ob der 1. Befehl existiert oder nicht.
Das sollte eigentlich selbst für den Sonntagszug um 8:24-8:24 gelten, denn die Tatsche, dass er nun eine von anderen Zügen seiner Gattung abweichende Verweildauer erhält, ist durchaus gewollt - so früh am Sonntag sind noch nicht so viele Leute unterwegs. :wink:
Da beisst sich die Katze in Ihren Schwanz. :wink: Da 8:24 zwischen 8:11 und 9:14 liegt erfolgt die Zuweisung der Haltezeiten 10 bis 30 Sek.. Da der Zug aber noch zur Linie R41 gehört, gilt für ihn ja auch der 2. Befehl: falls er zur Gattung L gehört, wäre seine Haltezeit 20 bis 30 Sek., bei einer anderen Gattung ist der Befehl für ihn uninteressant.

Ergo: Wie lange soll der Zug jetzt halten: 10-30 oder doch 20-30 Sekunden?

In so fern ist BAHN da durchaus richtig vorgegangen, in dem es Dir da eine überschneidene Bedingung anzeigt.
c) R41(z=4:59-5:57 +8:11-9:14 +15:39-15:42 +17:37-17:40 +18:14-18:17 +22:45-22:48,g=N,H=10-30), R41(g=L,H=20-30)

Gut, so klappt's, und so wird's jetzt auch erstmal gemacht - nach dem Motto: Geht doch, GEHT DOCH! :D
Klar! Jetzt werden nur Züge der Gattungen N und L angesprochen, dazu die Gattung N nur zu den Zeitintervallen. Aber BAHN kann die Bedingungen unterscheiden.
Jetzt teste ich in d) eine Änderung der Reihenfolge der beiden Befehle ohne die explizite Bedingung "g=N," im zweiten Befehl:
d) R41(g=L,H=20-30), R41(z=4:59-5:57 +8:11-9:14 +15:39-15:42 +17:37-17:40 +18:14-18:17 +22:45-22:48,H=10-30)
Die Auswertung der Eingabezeile sollte jetzt - analog zu dem "*" in Linienlisten - nach dem Schema ablaufen: Der erste Befehl gilt nun für alle Züge der Gattung G=L, der zweite Befehl für alle anderen Gattungen (... alle übrigen). Aber wiederum Fehler 854.


Ist der gleiche Effekt wie unter b) :wink:

Den Fehler 854 würdest Du z.B. auch so vermeiden:

R41(z=5:58-8:10+9:15-15:38+15:43-17:36+17:41-18:13+18:18-22:44+22:49-4:58,H=20-30),R41(z=4:59-5:57 +8:11-9:14 +15:39-15:42 +17:37-17:40 +18:14-18:17 +22:45-22:48,H=10-30).
Übrigens ist die Reihenfolge egal. Außerdem sei Dir ggf. auch das Kopieren erlaubt :wink:

Liebe Grüße an die Waterkant von

Rolf
Mein Link-Tipp zu BAHN: http://www.gerdinoack.de. Dort findet Ihr Filme und Grafiken zu BAHN von Gerd (Username gnock) und mein neues Fahrzeugarchiv, das auch unter dem neuen Direktlink www.gerdinoack.de/Fahrzeugarchiv_385/ zu erreichen ist.
Benutzeravatar
GNock
Beiträge: 433
Registriert: Mittwoch 25. März 2009, 02:55
Wohnort: Hamburg
Kontaktdaten:

Re: Fehler 854: Bedingungen überschneiden sich

Beitrag von GNock »

Hallöle Rolf!

Gut gebrüllt, Löwe. Wenn deine Darstellung, dass eine Eingabezeile generell zur Gänze ausgewertet wird, richtig ist, dann lässt sich hier m.E. einiges optimieren und somit die Simulationszeit positiv beeinflussen. Denn die Algorithmen und Flussdiagramme, die ich kenne, brechen die Auswertung eines Ausdrucks ab, sobald eine der Bedingungen erfüllt ist, und verzweigen zur Folgeroutine, in der die Zuweisung gesetzt wird. Sie funktionieren praktisch nach dem Motto:
WENN 'Bedingung erfüllt' DANN 'verzweige' SONST 'untersuche nächsten Befehl' usw. bis zum Ende des Ausdrucks.

Nach diesem Schema macht es keinen Sinn, den gesamten Ausdruck zu untersuchen, sobald eine Bedingung als erfüllt erkannt wurde.

Oder konkret gefragt: Der Ausdruck (die Eingabe) ist erlaubt:
R41(g=N,G=X), R41(g=X,G=E)

Welchen Sinn hat es, für einen Zug der Gattung G=N, der zur Gattung G=X wechseln soll, den Rest des Ausdrucks zu untersuchen? Fährt er nun weiter als G=E? Natürlich nicht, denn die Zuweisung G=X erfolgt erst, wenn die Auswertung beendet ist. Folglich kann diese schon nach dem ersten gültigen Befehl beendet werden.

Es würde mich schon interessieren, ob EIN Zug in einer Eingabezeile durch zwei Befehle zwei Zuweisungen erhalten kann - mir ist kein solches Beispiel bekannt. Und daher denke ich weiterhin: Sobald die Bedingun(en) eines Befehls erfüllt ist/sind, braucht der Rest der Eingabe nicht weiter untersucht zu werden.
Rolf R hat geschrieben:Woher soll BAHN wissen, ob in der Zeit von 4:59-5:57 die Haltezeit nun 10-30 oder 20-30 Sekunden betragen soll?
Weil es nach meiner Auffassung so von mir definiert wurde:
Jeder Zug der Linie R41 erhält im Zeitraum 4:59-5:57 die Haltezeit 10-30 Sekunden, auch ein Zug der Gattung G=L, der aber lt. Fahrplan den Datenwechsel um diese Zeit gar nicht passiert.
Für alle übrigen Züge der Linie R41 mit der Gattung G=L gilt eine neue Haltezeit von 20-30 Sekunden.
Alle übrigen Züge der Linie R41, die den Datenwechsel außerhalb des gültigen Zeitraums passieren, erfahren keine Änderung der Haltezeit.

Ich meine, unter der Voraussetzung, dass die Auswertung nach der ersten erfüllten Bedingung beendet wird, sind das ganz klare Vorgaben, mit denen BAHN etwas anfangen kann. Das gilt somit auch für den Sonntagszug mit G=L um 8:24, aber das schrieb ich ja schon.

Aber leider denke ich, dass eine Diskussion nur theoretisch weiterlaufen kann, solange wir nicht definitiv wissen, ob die Eingabezeile generell vollständig oder nur bis zur ersten erfüllten Bedingung ausgewertet wird. In diesem Zusammenhang interessiert mich auch, warum das Beispiel aus der Hilfe "9(z=6:00-19:00), 9(n=100-200)" im Haltepunkt erlaubt ist, im Taktpunkt aber nur in der erweiterten Form "9(z=6:00-19:00,n=1-99+201-99999), 9(n=100-200)".
Rolf R hat geschrieben:Außerdem sei Dir ggf. auch das Kopieren erlaubt :wink:
Besser nicht, denn deine Zeile umfasst nicht die vollen 24 Stunden eines Tages. :mrgreen:

Liebe Grüße nach WildWest
Gerd
Rolf R
Beiträge: 2187
Registriert: Donnerstag 20. November 2003, 20:41
Wohnort: Erfurt

Re: Fehler 854: Bedingungen überschneiden sich

Beitrag von Rolf R »

Hi Gerd,

ehrlich gesagt war mir nicht klar, dass es möglich ist, Befehle in einer WENN - DANN Beziehung zu ordnen. Meine Erfahrung beschränkte darauf, dass mehrere Befehle gleichberechtigt nebeneinander standen und entsprechend von den Zügen verwertet wurden, wenn sie auf sie zutrafen und klar, wenn sie nicht gelten von den Zügen halt ignoriert werden.

Und: damit hätte man aber die Fehlermeldungen logisch erklären können - sowohl ihr Vorkommen als auch ihr Ausbleiben.

Und übrigens:
Gut gebrüllt, Löwe.
Das war nicht meine Absicht. Wennz so rübergekommen ist mein Lieber, dann bitte verzieh mir.
Besser nicht, denn deine Zeile umfasst nicht die vollen 24 Stunden eines Tages. :mrgreen:
Doch, wenn Du beide Befehle zusammenfasst, ist der 24 Stunden-Tag komplett erfasst. Die Zeiten des 2. Befehls sind identisch mit dem Befehl, den Du für das Halteintervall (H=10-30) verwendet hast. Die Zeiten des 1. Befehls füllen die Zwischenzeiten auf, wobei der letzte Teil des Zeitintervalls (22:49-4:58 soll die Nacht überbrücken und könnte theoretisch auch in 2 Einzelintervallen (0:00-4:58 u. 22:49-23:59) gesplittet werden. Aber damit hätteste die Möglichkeit, den Zügen zu bestimmten Zeiten das 10-30 Sek. mitzugeben, die restlichen Zeiten würden mit 20-30 Sek. aufgefüllt.

Liebe Grüße nach Hamburg
Rolf
Mein Link-Tipp zu BAHN: http://www.gerdinoack.de. Dort findet Ihr Filme und Grafiken zu BAHN von Gerd (Username gnock) und mein neues Fahrzeugarchiv, das auch unter dem neuen Direktlink www.gerdinoack.de/Fahrzeugarchiv_385/ zu erreichen ist.
Benutzeravatar
GNock
Beiträge: 433
Registriert: Mittwoch 25. März 2009, 02:55
Wohnort: Hamburg
Kontaktdaten:

Re: Fehler 854: Bedingungen überschneiden sich

Beitrag von GNock »

Hallo min Jung

da gibbet nüscht zu verzeihen, denn "gut gebrüllt Löwe" sollte in der gleichen Bedeutung gelesen werden wie "ruhig Brauner"... du erinnerst dich? :wink:
Rolf R hat geschrieben:Doch, wenn Du beide Befehle zusammenfasst, ist der 24 Stunden-Tag komplett erfasst.
Negativ, denn das galt in der vorliegenden Form für die 3.83-Zeiten, als die Werte z=4:59-5:57 und z=5:58-8:10 den Zeitraum 04:59:00-08:10:59 beschrieben, also durchgehend bis zum Ende der zuletzt genannten Minute. Aber nach der Änderung der Auswertung der bis-Zeit beschreiben diese beiden die Zeiträume 04:59:00-05:56:59 und 05:58.00-08:09:59. Mithin wird die Minute 05:57:00-05:57:59 nicht erfasst, und ein Zug, der den Datenwechsel in dieser Minute durchfährt, erhält keine Änderung.

Noch mal zum eigentlichen Thema. Du hattest geschrubselt
Nee Du, der 2. Befehl wird auch ausgewertet. Dabei ist es völlig uninteressant, ob der 1. Befehl existiert oder nicht.
In der Hilfe ist hingegen zum Thema Linienliste Abschnitt Bedingungen/ Einschränkungen zu lesen:
Die Linienliste wird von links nach rechts geprüft. Wenn ein Eintrag zum Zug paßt, d.h. aktuelle Linie und Bedingungen sind erfüllt, dann werden die weiteren Einträge nicht beachtet.

Ferner frugtest du
Woher soll BAHN wissen, ob in der Zeit von 4:59-5:57 die Haltezeit nun 10-30 oder 20-30 Sekunden betragen soll?
Oben ist praktisch die Antwort. Genauer wird die Hilfe im Thema Linienliste Abschnitt Kombinationen von Bedingungen:
9(z=6:00-19:00), 9(n=100-200)
Der Eintrag gilt für alle Züge der Linie 9, aber nur von 6:00-19:00. Er gilt außerdem für die Züge der Linie 9 mit den Kursnummern 100 bis 200, und zwar zu jeder Zeit.


Übertragen auf meinen ersten Versuch, hier verkürzt wiedergegeben
R41(z=4:59-5:57,H=10-30), R41(g=L,H=20-30)
Der Eintrag gilt für alle Züge der Linie R41, aber nur von 4:59-5:57. Er gilt außerdem für die Züge der Linie R41 mit der Gattung L, und zwar zu jeder Zeit.

Das bedeutet nun schlechthin, dass auch ein Zug der Gattung L im Zeitraum 4:59-5:57 die Haltezeit 10-30 zugewiesen bekäme. Wenn man das verhindern möchte - und nur dann - dann kann und muss der erste Eintrag um die Bedingung "g=N," erweitert werden.

Da nun mein erster Versuch so im Datenwechsel nicht angenommen wurde, harren wir fürderhin der 3.86r2, um zu erfahren, ob die Hife dem Programm oder das Programm der Hilfe angepasst wird. :wink:


Die Waterkant grüßt Buldern herzlichst
Gerd
Antworten