TRO-Fluss: Vario/1Sep alternierend rueckwaerts statt nur letzter Separator
Bisher wurde auf einer Streckengruppe nur der jeweils letzte Separator (in TrackIds-Reihenfolge) auf 1Sep umgestuft, alle davor blieben pauschal Vario. Eine Streckengruppe ist baulich aber meist eine alternierende VF/GF-Kette (angetriebener Abschnitt, Vereinzeler, unbetriebener Abschnitt, Vereinzeler, ...), nicht nur am Ende - fuer 2 Separatoren macht das keinen Unterschied, ab 3 schon. Die Umstufung laeuft jetzt vom letzten Separator rueckwaerts und alterniert: letzter = 1Sep, davor Vario, davor wieder 1Sep usw. Bestaetigt an HundM05 VF_1 (4 Separatoren): der neue Positions-Nachweis stuft den dritten von hinten (0035) unabhaengig auf 1Sep ein - deckungsgleich mit dem bereits vorhandenen (aber als moeglicherweise unkorrigierte CAD-Vorgabe mit Vorbehalt behafteten) Hoehen-/Antriebsnachweis (_incoming_drop). Der Hoehen-/Antriebsnachweis bleibt als unabhaengige Zusatzpruefung erhalten und kann eine laut Muster erwartete Vario-Position auf 1Sep umstufen, wenn dort tatsaechlich ein unbetriebenes Gefaelle gemessen wird - nicht umgekehrt. TRO-Typenzahl auf beiden Referenzanlagen (HundM05, Mubea) unveraendert, nur die Finding-Texte wurden praeziser. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
ef3d8170fe
commit
e4bfad4dcc
+67
-33
@@ -32,28 +32,42 @@ doc/500573_Mubea/TRO_Identifikation_500573.md:
|
||||
Kreisel-Bahn -> 1Sep
|
||||
|
||||
Zwei Ausnahmen stufen einen Separator auf einer "Strecke" trotzdem als 1Sep
|
||||
statt Vario ein (Review 2026-09-23, HundM05):
|
||||
statt Vario ein (Review 2026-09-23/25, HundM05):
|
||||
|
||||
1. Letzter Separator vor dem Wiedereinschleusen auf die Kreisel-Bahn (in
|
||||
TrackIds-Reihenfolge) - reiner Vereinzeler ohne eigene VarioDrive-Strecke,
|
||||
die Kreisel-Bahn treibt ab dort selbst an. Gilt fuer jede Separatoranzahl
|
||||
>= 2 (z. B. VF_3: erster Separator 0041 = Vario, letzter 0040 = 1Sep); bei
|
||||
genau einem Separator bleibt dieser Vario (einziger Antriebspunkt).
|
||||
1. Alternierendes Muster vom Wiedereinschleusen auf die Kreisel-Bahn
|
||||
rueckwaerts (in TrackIds-Reihenfolge, nur echte Kettenmitglieder - siehe
|
||||
"eigenstaendige Vereinzeler" unten): der letzte Separator vor dem
|
||||
Wiedereinschleusen ist ein reiner Vereinzeler ohne eigene VarioDrive-
|
||||
Strecke (die Kreisel-Bahn treibt ab dort selbst an), der vorletzte wieder
|
||||
ein eigener Vario-Antriebspunkt, der drittletzte wieder 1Sep usw. - eine
|
||||
Streckengruppe ist baulich meist eine alternierende VF/GF-Kette
|
||||
(angetriebener Abschnitt, Vereinzeler, unbetriebener Abschnitt,
|
||||
Vereinzeler, ...), nicht nur am Ende. Gilt fuer jede Separatoranzahl >= 2
|
||||
(z. B. VF_3: erster Separator 0041 = Vario, letzter 0040 = 1Sep); bei
|
||||
genau einem Separator bleibt dieser Vario (einziger Antriebspunkt der
|
||||
Strecke).
|
||||
2. Eine "Strecke" (Streckengruppe) ist selbst oft eine gemischte VF/GF-Kette:
|
||||
sie enthaelt sowohl angetriebene (VF, jede Antriebfahrtrichtung -
|
||||
horizontal, Auf oder Ab zaehlt gleichermassen als VF) als auch unbetriebene
|
||||
Gefaelle-Teilstuecke (GF) - siehe Merkmal "Antriebfahrtrichtung"/"VF_Winkel"
|
||||
je TrackIds-Segment. Ein (nicht letzter) Separator, dessen unmittelbar
|
||||
vorangehendes Segment als "horizontal" (=keine aktive Antriebsrichtung)
|
||||
gefuehrt wird, dabei aber tatsaechlich an Hoehe verliert (Merkmal "Hoehe"
|
||||
der Anbauteile, > 30mm Gefaelle), sitzt auf einem GF-Teilstueck und wird
|
||||
ebenfalls 1Sep (siehe _incoming_drop). Achtung: diese Hoehen-/
|
||||
je TrackIds-Segment. Ein laut Regel 1 als Vario erwarteter Separator,
|
||||
dessen unmittelbar vorangehendes Segment als "horizontal" (=keine aktive
|
||||
Antriebsrichtung) gefuehrt wird, dabei aber tatsaechlich an Hoehe verliert
|
||||
(Merkmal "Hoehe" der Anbauteile, > 30mm Gefaelle), sitzt auf einem
|
||||
GF-Teilstueck und wird ebenfalls 1Sep (siehe _incoming_drop) - eine
|
||||
unabhaengige Zusatzpruefung neben der Positions-Regel, kein Ersatz dafuer;
|
||||
ein laut Regel 1 bereits 1Sep bleibt 1Sep. Achtung: diese Hoehen-/
|
||||
Antriebsangaben sind bei mehreren Streckengruppen desselben Typs (z. B.
|
||||
VF_2/VF_3/VF_4 bei HundM05) identisch und damit vermutlich unkorrigierte
|
||||
CAD-Blockvorgaben, nicht echte Einzelmessungen - Regel 1 (Position in der
|
||||
Kette) ist deshalb der robustere Nachweis, Regel 2 nur ein Zusatzfund fuer
|
||||
Faelle mit echten, individuellen Messwerten (wie VF_1).
|
||||
|
||||
Separatoren, deren Zuordnung zwar auf eine Streckengruppe zeigt, die aber
|
||||
nicht Teil von deren eigener TrackIds-Kette sind, zaehlen bei beiden Regeln
|
||||
nicht mit - sie sind eigenstaendige Vereinzeler (plain 1Sep, siehe
|
||||
derive_tros Schritt 2) und treiben das alternierende Muster nicht mit.
|
||||
|
||||
Ein Scanner am Separator aendert den Typ NICHT: in connect.ini der
|
||||
Referenzanlage sind Separatoren mit Scanner ueberwiegend 1Sep (z. B.
|
||||
"TRO104 = 1Sep | TRO 104 (1Sep)+Scanner"). 1Sep_SSCC ist dem Sonderfall mit
|
||||
@@ -678,20 +692,32 @@ def derive_tros(
|
||||
drive = element.drive_dir or "unbekannt"
|
||||
reason = f"angetriebenes Streckensegment (Antriebfahrtrichtung: {drive})"
|
||||
|
||||
# Letzter Separator vor dem Wiedereinschleusen auf die Kreisel-Bahn
|
||||
# (in echter TrackIds-Reihenfolge, nicht sortierte Teile-Id) ist ein
|
||||
# reiner Vereinzeler ohne eigene VarioDrive-Strecke: die Kreisel-Bahn
|
||||
# uebernimmt den Antrieb ab dort selbst - bestaetigt am Beispiel VF_3
|
||||
# (Review 2026-09-23): TRO11 (erster Separator 0041, direkt nach dem
|
||||
# Ausschleusen) ist Vario, TRO10 (zweiter/letzter Separator 0040, vor
|
||||
# dem Wiedereinschleusen) ist 1Sep. Gilt unabhaengig von der
|
||||
# Separatoranzahl - siehe auch VF_1 (0034, letzter von vieren). Nur
|
||||
# bei genau einem Separator gibt es kein "erster vs. letzter", der
|
||||
# bleibt Vario (er ist der einzige Antriebspunkt der Strecke).
|
||||
# Alternierendes Muster vom Wiedereinschleusen auf die Kreisel-Bahn
|
||||
# rueckwaerts (in echter TrackIds-Reihenfolge, nicht sortierte
|
||||
# Teile-Id): eine Streckengruppe ist baulich meist eine alternierende
|
||||
# VF/GF-Kette, deshalb wechselt auch der TRO-Typ ab dem letzten
|
||||
# Separator (naechster Nachbar der Kreisel-Bahn, reiner Vereinzeler
|
||||
# ohne eigene VarioDrive-Strecke - die Kreisel-Bahn treibt ab dort
|
||||
# selbst an) rueckwaerts durch: letzter = 1Sep, davor Vario, davor
|
||||
# wieder 1Sep usw. Bestaetigt am Beispiel VF_3 (Review 2026-09-23):
|
||||
# TRO11 (erster Separator 0041, direkt nach dem Ausschleusen) ist
|
||||
# Vario, TRO10 (zweiter/letzter Separator 0040, vor dem
|
||||
# Wiedereinschleusen) ist 1Sep; siehe auch VF_1 (0034, letzter von
|
||||
# vieren). Fuer genau 2 Separatoren identisch zur frueheren "nur der
|
||||
# letzte wird umgestuft"-Regel; ab 3 weicht es ab (Review 2026-09-25)
|
||||
# - vorher blieben alle bis auf den letzten pauschal Vario, obwohl die
|
||||
# Kette baulich mehrfach zwischen VF und GF wechselt. Bei genau einem
|
||||
# Separator gibt es kein "erster vs. letzter", der bleibt Vario
|
||||
# (einziger Antriebspunkt der Strecke).
|
||||
seps_set = set(seps)
|
||||
track_seps = [tid for tid in element.track_ids if tid in seps_set]
|
||||
track_seps_set = set(track_seps)
|
||||
last_sep_id = track_seps[-1] if len(track_seps) > 1 else None
|
||||
alt_type: dict[str, str] = {}
|
||||
alt_offset: dict[str, int] = {}
|
||||
if len(track_seps) > 1:
|
||||
for offset, tid in enumerate(reversed(track_seps)):
|
||||
alt_offset[tid] = offset
|
||||
alt_type[tid] = "1Sep" if offset % 2 == 0 else "Vario"
|
||||
|
||||
for sep_id in seps:
|
||||
if sep_id not in track_seps_set:
|
||||
@@ -723,22 +749,29 @@ def derive_tros(
|
||||
)
|
||||
continue
|
||||
|
||||
type_name = "Vario"
|
||||
type_name = alt_type.get(sep_id, "Vario")
|
||||
sep_reason = reason
|
||||
confidence = "hoch"
|
||||
if sep_id == last_sep_id:
|
||||
type_name = "1Sep"
|
||||
if type_name == "1Sep":
|
||||
confidence = "mittel"
|
||||
sep_reason = (
|
||||
f"letzter Separator vor dem Wiedereinschleusen von "
|
||||
f"{element.name} auf die Kreisel-Bahn - reiner Vereinzeler, "
|
||||
f"kein eigenes VarioDrive mehr noetig (Review 2026-09-23)"
|
||||
f"alternierendes VF/GF-Muster vom Wiedereinschleusen von "
|
||||
f"{element.name} rueckwaerts ({alt_offset[sep_id] + 1}. "
|
||||
f"Separator von hinten) - unbetriebener Abschnitt ohne "
|
||||
f"eigenes VarioDrive (Review 2026-09-23/25)"
|
||||
)
|
||||
findings.append(
|
||||
f"{element.name} Separator {sep_id}: letzter Separator vor dem "
|
||||
f"Wiedereinschleusen - als 1Sep statt Vario eingestuft"
|
||||
f"{element.name} Separator {sep_id}: alternierendes Muster "
|
||||
f"({alt_offset[sep_id] + 1}. von hinten) - als 1Sep statt "
|
||||
f"Vario eingestuft"
|
||||
)
|
||||
else:
|
||||
# Hoehen-/Antriebsdaten des vorangehenden Segments (Strecke/
|
||||
# Gefaellestrecke) bleiben eine unabhaengige Zusatzpruefung (siehe
|
||||
# Docstring oben, Regel 2): sie kann eine laut Muster als Vario
|
||||
# erwartete Position auf 1Sep umstufen, wenn dort tatsaechlich ein
|
||||
# unbetriebenes Gefaelle gemessen wurde - nicht umgekehrt, ein
|
||||
# bereits per Muster bestimmtes 1Sep bleibt 1Sep.
|
||||
if type_name == "Vario":
|
||||
seg_drive, seg_drop = _incoming_drop(element, sep_id, elements_by_id)
|
||||
if seg_drive == "horizontal" and seg_drop is not None and seg_drop <= -GEFAELLE_DROP_MM:
|
||||
type_name = "1Sep"
|
||||
@@ -747,12 +780,13 @@ def derive_tros(
|
||||
f"Separator {sep_id} liegt auf einem unbetriebenen "
|
||||
f"Gefaelle-Teilstueck der Streckengruppe {element.name} "
|
||||
f"(Hoehe faellt um {-seg_drop:.0f}mm, keine aktive "
|
||||
f"Antriebfahrtrichtung) - kein Vario trotz Host 'Strecke'"
|
||||
f"Antriebfahrtrichtung) - kein Vario trotz Host 'Strecke' "
|
||||
f"und trotz alternierendem Muster"
|
||||
)
|
||||
findings.append(
|
||||
f"{element.name} Separator {sep_id}: {-seg_drop:.0f}mm Gefaelle "
|
||||
f"ohne Antrieb auf dem vorangehenden Segment - als 1Sep statt "
|
||||
f"Vario eingestuft"
|
||||
f"Vario eingestuft (widerspricht alternierendem Muster)"
|
||||
)
|
||||
tros.append(
|
||||
Tro(
|
||||
|
||||
Reference in New Issue
Block a user