TRO-Fluss: Linienspeicher liegt im Kreisel-Umlauf
Die Ausschleuselemente der Speicherlinien zaehlen in der Umlaufkette als
Glied des PinStore-TROs, die Einschleuselemente liefern - wie bei einer
Vario-Strecke - den Ablauf zum naechsten Halt. Ersetzt die Regel
"letzter Halt vor dem Speicher speist ihn" aus f9c9d88.
Mubea Kreisel3: TRO05 -> TRO18 -> TRO07 (keine direkte Kante TRO05 -> TRO07
mehr, TRO05 bleibt 1Sep - kein ILS Ausschleuselement einer Strecke),
TRO12 (VF_2 muendet direkt vor den Speicherlinien) -> TRO18,
TRO18 -> TRO10 jetzt aus den Einschleuselementen auf Kreisel2.
Im Review 2026-10-01 bestaetigt. HundM05 unveraendert (28), Mubea 26.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f9c9d88a08
commit
9ac6f88123
1 file changed
+17
-21
+17
-21
@@ -1342,20 +1342,29 @@ def link_tros(
|
|||||||
if vario_id:
|
if vario_id:
|
||||||
einschleus_vario[el.teile_id] = vario_id
|
einschleus_vario[el.teile_id] = vario_id
|
||||||
|
|
||||||
# Ausschleuselement-Id -> PinStore-TRO, dessen Schwerkraftlinie dort
|
# Linienspeicher in der Umlaufkette. Seine Schwerkraftlinien beginnen als
|
||||||
# beginnt. Die Linien eines Speichers zweigen in der Umlaufkette eines
|
# Folge von Ausschleuselementen auf dem einen Kreisel (Mubea Kreisel3:
|
||||||
# Kreisels als Folge von Ausschleuselementen ab (Mubea Kreisel3: TRO05 ->
|
# TRO05 -> 0122, 0119, ... 0065 -> TRO07) und enden als Folge von
|
||||||
# 0060 -> 0122, 0119, ... 0065 -> TRO07); der TRO direkt davor speist den
|
# Einschleuselementen auf dem anderen (Kreisel2: 0067 ... 0124 -> TRO10).
|
||||||
# Speicher (Review 2026-10-01: TRO05 -> TRO18).
|
# Die Ausschleuselemente zaehlen in der Kette als Glied des PinStore-TROs:
|
||||||
|
# der Speicher liegt IM Umlauf, TRO05 -> TRO18 -> TRO07 (TRO05 bleibt 1Sep,
|
||||||
|
# kein ILS Ausschleuselement einer Strecke - Review 2026-10-01). Die
|
||||||
|
# Einschleuselemente liefern - wie bei einer Vario-Strecke - den Ablauf
|
||||||
|
# zum naechsten Halt (TRO18 -> TRO10).
|
||||||
store_by_host = {h: t.tro_id for t in tros
|
store_by_host = {h: t.tro_id for t in tros
|
||||||
if t.type_name == "PinStore_Auto" for h in t.hosts}
|
if t.type_name == "PinStore_Auto" for h in t.hosts}
|
||||||
speicher_ausschleus: dict[str, str] = {}
|
speicher_ausschleus: dict[str, str] = {}
|
||||||
for el in elements:
|
for el in elements:
|
||||||
if el.kind != "Ausschleus":
|
if el.kind not in ("Ausschleus", "Einschleus"):
|
||||||
continue
|
continue
|
||||||
strecke_id = str(_merkmal(el.merkmale, "Strecke", "Förderer") or "")
|
strecke_id = str(_merkmal(el.merkmale, "Strecke", "Förderer") or "")
|
||||||
if strecke_id in store_by_host:
|
if strecke_id not in store_by_host:
|
||||||
|
continue
|
||||||
|
if el.kind == "Ausschleus":
|
||||||
speicher_ausschleus[el.teile_id] = store_by_host[strecke_id]
|
speicher_ausschleus[el.teile_id] = store_by_host[strecke_id]
|
||||||
|
else:
|
||||||
|
einschleus_vario[el.teile_id] = store_by_host[strecke_id]
|
||||||
|
ketten_owner = {**elem_owner, **speicher_ausschleus}
|
||||||
|
|
||||||
for el in elements:
|
for el in elements:
|
||||||
if not el.is_circle or len(el.track_ids) < 2:
|
if not el.is_circle or len(el.track_ids) < 2:
|
||||||
@@ -1368,7 +1377,7 @@ def link_tros(
|
|||||||
# Einschleuselemente bewusst uebersprungen (unowned) - das beschreibt
|
# Einschleuselemente bewusst uebersprungen (unowned) - das beschreibt
|
||||||
# den BYPASS fuer Verkehr, der NICHT abzweigt (z. B. TRO01 -> TRO03,
|
# den BYPASS fuer Verkehr, der NICHT abzweigt (z. B. TRO01 -> TRO03,
|
||||||
# wenn dazwischen niemand abbiegt).
|
# wenn dazwischen niemand abbiegt).
|
||||||
owned = [(i, elem_owner[tid]) for i, tid in enumerate(chain) if tid in elem_owner]
|
owned = [(i, ketten_owner[tid]) for i, tid in enumerate(chain) if tid in ketten_owner]
|
||||||
for (_, a), (_, b) in zip(owned, owned[1:]):
|
for (_, a), (_, b) in zip(owned, owned[1:]):
|
||||||
_add_chain_pair(a, b)
|
_add_chain_pair(a, b)
|
||||||
if owned:
|
if owned:
|
||||||
@@ -1392,19 +1401,6 @@ def link_tros(
|
|||||||
if nxt is not None and nxt != vario_id:
|
if nxt is not None and nxt != vario_id:
|
||||||
_add_chain_pair(vario_id, nxt)
|
_add_chain_pair(vario_id, nxt)
|
||||||
|
|
||||||
# Speicher-Abzweig: letzter Halt VOR dem ersten Ausschleuselement einer
|
|
||||||
# Speicherlinie -> PinStore-TRO. Je Speicher nur einmal, auch wenn alle
|
|
||||||
# seine Linien hintereinander in der Kette stehen.
|
|
||||||
gespeist: set[str] = set()
|
|
||||||
for i, tid in enumerate(chain):
|
|
||||||
store_id = speicher_ausschleus.get(tid)
|
|
||||||
if store_id is None or store_id in gespeist:
|
|
||||||
continue
|
|
||||||
vorher = next((o for j, o in reversed(owned) if j < i), None)
|
|
||||||
if vorher is not None and vorher != store_id:
|
|
||||||
_add_chain_pair(vorher, store_id)
|
|
||||||
gespeist.add(store_id)
|
|
||||||
|
|
||||||
# Nur TROs, fuer die die Umlaufkette tatsaechlich einen praezisen
|
# Nur TROs, fuer die die Umlaufkette tatsaechlich einen praezisen
|
||||||
# Nachfolger gefunden hat (precise_sources) - ein TRO ohne brauchbare
|
# Nachfolger gefunden hat (precise_sources) - ein TRO ohne brauchbare
|
||||||
# TrackIds-Abdeckung behaelt seine bisherigen (ungenaueren, aber nicht
|
# TrackIds-Abdeckung behaelt seine bisherigen (ungenaueren, aber nicht
|
||||||
|
|||||||
Reference in new issue
Block a user