Jump to content

Fahrplanbau: Züge mit der selben Zugnummer?


Gleissperre

Recommended Posts

Hallo,

Edit: Neue Version, siehe etwas weiter unten (13. Februar)

durch das Thema BildFpl habe ich ein Problem festgestellt, das am selben Tag zwei Züge mit der selben Zugnummer zu existieren schienen. Bei der näheren Untersuchung habe ich folgende SQL-Abfrage zusammengeschrieben, die diese Fälle auflistet.

Allerdings war ich vollkommen überrascht, dass es so enorm viele Treffer gab.

Daher würde ich mal alle, die schon mal einen Fahrplan in der Hand hatten, bitten, die Abfrage mal auf allen Fahrplänen, die ihr habt, auszuführen und zu prüfen, ob ich da nicht irgendetwas übersehen habe.

Wer Ahnung von SQL hat, könnte mir auch gerne sagen, ob er die Abfrage in dieser Form für korrekt hält oder noch irgendwelche Kriterien fehlen.

Direkte Frage auch an TojeToje und Helmut für den Fahrplan von Heidelberg: 7916 (~09:42) scheint es so wie ich es sehe an Sa und Sonntagen doppelt zu kommen, oder sehe ich das nur falsch? (Helmut hatte den Zug hier schon mal angesprochen, aber in einem anderen Kontext, damals schien der Fehler allerdings nicht aufgetreten zu sein??????)

 

SELECT        TT1.ID, TT2.ID AS ID2, TT1.Train_Type, TT2.Train_Type AS Train_Type2, TT1.Train_ID, TT1.ActivityCode, TT2.ActivityCode AS ActivityCode2, TT1.Skip,                          TT2.Skip AS Skip2, TT1.Start_NX, TT2.Start_NX AS Start_NY2, TT1.End_NX, TT2.End_NX AS End_NY2, TT1.Opmerking, TT2.Opmerking AS Opmerking2, TT1.Monday, TT2.Monday AS Monday2, TT1.Tuesday,                          TT2.Tuesday AS Tuesday2, TT1.Wednesday, TT2.Wednesday AS Wednesday2, TT1.Thursday, TT2.Thursday AS Thursday2, TT1.Friday, TT2.Friday AS Friday2,                          TT1.Saturday, TT2.Saturday AS Saturday2, TT1.Sunday, TT2.Sunday AS Sunday2FROM            (TimeTable TT1 INNER JOIN                         TimeTable TT2 ON TT1.Train_ID = TT2.Train_ID AND TT1.ID <> TT2.ID AND TT1.ID < TT2.ID)WHERE        ((TT1.Monday <> 0) AND (TT2.Monday <> 0) OR                         (TT1.Monday <> 0) AND (TT2.Monday <> 0) OR                         (TT1.Tuesday <> 0) AND (TT2.Tuesday <> 0) OR                         (TT1.Wednesday <> 0) AND (TT2.Wednesday <> 0) OR                         (TT1.Thursday <> 0) AND (TT2.Thursday <> 0) OR                         (TT1.Friday <> 0) AND (TT2.Friday <> 0) OR                         (TT1.Saturday <> 0) AND (TT2.Saturday <> 0) OR                         (TT1.Sunday <> 0) AND (TT2.Sunday <> 0))                         AND (TT1.ActivityCode = TT2.ActivityCode OR                         TT1.ActivityCode IS NULL OR                         TT2.ActivityCode IS NULL);

Ich würde mich über jegliche Rückmeldungen freuen, ob ich so weit richtig gedacht habe, und wirklich so viele Züge - insbesondere in den Rheinstrecken - betroffen sind?

Gruß

Gleissperre

Link to comment
Share on other sites

Hallo Gleissperre,

deine Beobachtung ist wohl richtig.

Dieser Zug (7916) fährt Mo-Fr von Heilbronn nach Bruchsal und SaSo von Heilbronn nach Heidelberg. In der aktuellen Fahrplandatei (Fahrplan_Heidelberg_20150126_RA_West_Mitte) gibt es diesen Zug logischerweise zweimal [1x werktags (7916), 1x Wochenende (7916SaSo)]. Allerdings ist der Werktagszug (Mo-Fr) für alle Wochentage aktiviert, so dass am Samstag und Sonntag dieser Zug zweimal erscheint.

Da müssen nur zwei Verkehrstage beim 7916 gelöscht werden.

Link to comment
Share on other sites

...

In der aktuellen Fahrplandatei (Fahrplan_Heidelberg_20150126_RA_West_Mitte) gibt es diesen Zug logischerweise zweimal [1x werktags (7916), 1x Wochenende (7916SaSo)]. Allerdings ist der Werktagszug (Mo-Fr) für alle Wochentage aktiviert, so dass am Samstag und Sonntag dieser Zug zweimal erscheint.

Wo gibt's denn diese Fahrplandatei? Mein letztes Fahrplanupdate für RH ist vom 24.04.2014. Seither meldet das Programm keine neuen Updates.

Link to comment
Share on other sites

Moin Bahn-Michel,

das war mein Fehler. Die von mir genannte Fahrplandatei ist meine eigene, in der ich einige Rangieraufträge geändert habe.

Meine Aussage in #2 stimmt aber auch für die letzte offiziell herausgegebene Fahrplandatei: 140424_Heidelberg Hbf_timetable.

Link to comment
Share on other sites

  • 7 months later...

So, kleines Update, damit sich das ganze nicht auf mehrere Themen verteilt [1]:

Mit folgendem Code lassen sich auch die Verkehrsperioden betrachten. Verkehrsperioden sind bisher meines Wissens nur bei einem einzigen Zug im Fahrplan von Heidelberg überhaupt verwendet. Die Möglichkeit, ActivityCodes in einer Semikolon-getrennten Liste anzugeben, sowie die Möglichkeit, InactivityCodes anzugeben, sind noch nicht berüchsichtigt, und in vielen Fahrplänen auch noch nicht eingebaut. Diese Möglichkeiten werden vermutlich für Programmupdates nach dem 26. Jannuar 2016 zur Verfügung stehen.

SELECT        TT1.ID, TT2.ID AS ID2, TT1.Train_Type, TT2.Train_Type AS Train_Type2, TT1.Train_ID, TT1.ActivityCode, TT2.ActivityCode AS ActivityCode2, TT1.Skip, 
                         TT2.Skip AS Skip2, TT1.Start_NX, TT2.Start_NX AS Start_NY2, TT1.End_NX, TT2.End_NX AS End_NY2, TT1.Opmerking, TT2.Opmerking AS Opmerking2, TT1.Monday, 
                         TT2.Monday AS Monday2, TT1.Tuesday, TT2.Tuesday AS Tuesday2, TT1.Wednesday, TT2.Wednesday AS Wednesday2, TT1.Thursday, TT2.Thursday AS Thursday2, 
                         TT1.Friday, TT2.Friday AS Friday2, TT1.Saturday, TT2.Saturday AS Saturday2, TT1.Sunday, TT2.Sunday AS Sunday2, TT1.PeriodStart, 
                         TT2.PeriodStart AS PeriodStart2, TT1.PeriodEnd, TT2.PeriodEnd AS PeriodEnd2
FROM            (TimeTable TT1 INNER JOIN
                         TimeTable TT2 ON TT1.Train_ID = TT2.Train_ID AND TT1.ID <> TT2.ID AND TT1.ID < TT2.ID)
WHERE        ((TT1.Monday <> 0) AND (TT2.Monday <> 0) OR
                         (TT1.Monday <> 0) AND (TT2.Monday <> 0) OR
                         (TT1.Tuesday <> 0) AND (TT2.Tuesday <> 0) OR
                         (TT1.Wednesday <> 0) AND (TT2.Wednesday <> 0) OR
                         (TT1.Thursday <> 0) AND (TT2.Thursday <> 0) OR
                         (TT1.Friday <> 0) AND (TT2.Friday <> 0) OR
                         (TT1.Saturday <> 0) AND (TT2.Saturday <>0 ) OR
                         (TT1.Sunday <> 0) AND (TT2.Sunday <> 0))
                         AND (TT1.ActivityCode = TT2.ActivityCode OR
                         TT1.ActivityCode IS NULL OR
                         TT2.ActivityCode IS NULL)
                         AND (TT1.PeriodStart <= TT2.PeriodEnd OR
                         TT1.PeriodStart IS NULL OR
                         TT2.PeriodEnd IS NULL)
                         AND (TT2.PeriodStart <= TT1.PeriodEnd OR
                         TT2.PeriodStart IS NULL OR
                         TT1.PeriodEnd IS NULL);

Vorgehensweise, für alle, die selber prüfen wollen:

Du öffnest die Datenbank, klickst auf "Erstellen=>Abfrage-Entwurf", schließt die Popup-Fenster und wechselst stattdessen in die SQL-Ansicht.

Dort kannst du die SQL-Abfrage hineinkopieren, und kannst die Abfrage dann direkt ausführen.

In der Anzeige werden immer 2 Züge verglichen, die die selbe Zugnummer haben, aber eine andere Datenbank-ID. Die Spalte Monday ist für den 1., die Spalte Monday2 für den 2. Zug, die Spalte Tuesday für den 1., Tuesday2 für den 2. Zug usw.

Sofern die Züge Aufgrund von Unterschiedlichen ActivityCodes oder unterschiedlicher Verkehrstagen oder -perioden ohnehin nicht gleichzeitig auftreten, werden sie auch nicht aufgelistet.

Nicht korrekt berüchsichtigt werden die oben genannten neuen Notationsverfahren für ActivityCodes, ohnhin nicht für den Nutzgebrauch bestimmte Zugnummern (insbesondere RAbt s), sowie die Möglichkeit, dass ein Zug in Stellwerk 1 mit zwei Triebwagen gespawnt, dort entkuppelt wird, und in Stellwerk 2 mit einem Triebwagen aufgegleist wird, und desshalb doppelt in der Datenbank auftaucht. Solche False Positives müssen von Hand aussortiert werden.

Beim Rest müsste es sich dann um tatsächliche Fehler im Fahrplan handeln.

Link to comment
Share on other sites

Die ActivityCodes gab es schon immer. Bisher wurden damit nur zusätzliche Züge gekennzeichnet (Umleiter etc.), die vorher nicht im Fpl existierten. Durch die Einführung der Spalte InactivityCode kann aber jetzt der gleiche Zug ein zweites Mal mit ActivityCode auftauchen. D.h. der eine fährt nicht, dafür fährt der andere. Allerdings unterscheidet sich bei diesen Zügen dann mindestens das Spawn-Gleis, wenn nicht mehr. Also brauchst du m.E. diese Sache nicht zu berücksichtigen, wenn alle anderen Spalten abgefragt werden.

Der Eintrag im TimeTable ist immer nur einer. Die Trennung mit Semikolon erfolgt in einem anderen Datenblatt, in dem alle möglichen Activity/InactivityCodes aufgelistet werden.

Verkehrsperioden sind bisher meines Wissens nur bei einem einzigen Zug im Fahrplan von Heidelberg überhaupt verwendet.

Dann wurde es ja Zeit, dass sich daran mal was ändert. In Karlsruhe wird es davon eine ganze Reihe geben.

So, ich habe die neue Abfrage mal drüber laufen lassen. Es blieb ein Zug übrig, der aber auch nicht doppelt eingetragen ist. Diesen Zug gibt es dreimal in drei unterschiedlichen Perioden. Zwei von den drei Einträgen werden angezeigt, der dritte nicht. Weiß auch nicht, woran das liegen könnte.

Link to comment
Share on other sites

Ok, hast mich erwischt!

Es gab einen Zahlendreher bei einem Datum und dadurch eine Überschneidung von einem Monat und einem Tag.

Jetzt wird kein Zug mehr gelistet.

Danke dafür.

Link to comment
Share on other sites

Vorgehensweise, für alle, die selber prüfen wollen:

Du öffnest die Datenbank, klickst auf "Erstellen=>Abfrage-Entwurf", schließt die Popup-Fenster und wechselst stattdessen in die SQL-Ansicht.

Dort kannst du die SQL-Abfrage hineinkopieren, und kannst die Abfrage dann direkt ausführen.

Danke dafür.

Funktionierte Prima um der doppelte Zug 7916 im RH zu finden und zu beheben :)

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.