TRO-Fluss: Kreisel-Umlauf laeuft durch alle Stationen, Speicher-Abzweig aus der Umlaufkette
- _add_chain_pair: Be- und Entladestationen sind in der Umlaufkette gewoehnliche Glieder - der Kreisel laeuft immer weiter. HundM05 Kreisel1: TRO19 -> SYS3 -> SYS1 -> SYS2 -> TRO20 (vorher endete der Fluss an SYS3). Mubea: TRO04 -> SYS1 statt der groben Fehlkante TRO04 -> TRO18. - link_tros: der letzte Halt vor dem ersten Ausschleuselement einer Speicherlinie speist den PinStore-TRO (Mubea Kreisel3: TRO05 -> TRO18) - HundM05 28 Verbindungen, Mubea 26 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
b09493f8ab
commit
f9c9d88a08
+35
-9
@@ -1267,15 +1267,13 @@ def link_tros(
|
||||
def _add_chain_pair(a: str, b: str) -> None:
|
||||
if a == b:
|
||||
return
|
||||
# Eine Beladung ist nur Quelle, nie Ziel (siehe derive_boundaries) -
|
||||
# unabhaengig davon, wie TrackIds sie in der geschlossenen Umlaufliste
|
||||
# aufzaehlt. Eine Entladung auf der Kreisel-Bahn wird dagegen
|
||||
# DURCHFAHREN: was nicht entladen wird, faehrt weiter zur naechsten
|
||||
# Station. Mubea Kreisel2: TRO02 -> SYS3 -> SYS2 -> TRO13 als Kette
|
||||
# (Review 2026-10-01) - vorher endete der Fluss an SYS3, und TRO13
|
||||
# hatte keinen Vorgaenger.
|
||||
if by_id[b].type_name == BOUNDARY_ENTRY:
|
||||
return
|
||||
# Be- und Entladestationen auf der Kreisel-Bahn werden DURCHFAHREN: der
|
||||
# Kreisel laeuft immer weiter, was nicht entladen wird, faehrt an der
|
||||
# naechsten Station vorbei. Systemgrenzen sind in der Umlaufkette daher
|
||||
# gewoehnliche Glieder (Review 2026-10-01): Mubea Kreisel2
|
||||
# TRO02 -> SYS3 -> SYS2 -> TRO13, HundM05 Kreisel1
|
||||
# TRO19 -> SYS3 -> Beladungen -> TRO20. Vorher endete der Fluss an jeder
|
||||
# Entladung, und eine Beladung durfte nie Ziel sein.
|
||||
pair = (a, b)
|
||||
edges.add(pair)
|
||||
edge_kinds.setdefault(pair, "bahn")
|
||||
@@ -1344,6 +1342,21 @@ def link_tros(
|
||||
if vario_id:
|
||||
einschleus_vario[el.teile_id] = vario_id
|
||||
|
||||
# Ausschleuselement-Id -> PinStore-TRO, dessen Schwerkraftlinie dort
|
||||
# beginnt. Die Linien eines Speichers zweigen in der Umlaufkette eines
|
||||
# Kreisels als Folge von Ausschleuselementen ab (Mubea Kreisel3: TRO05 ->
|
||||
# 0060 -> 0122, 0119, ... 0065 -> TRO07); der TRO direkt davor speist den
|
||||
# Speicher (Review 2026-10-01: TRO05 -> TRO18).
|
||||
store_by_host = {h: t.tro_id for t in tros
|
||||
if t.type_name == "PinStore_Auto" for h in t.hosts}
|
||||
speicher_ausschleus: dict[str, str] = {}
|
||||
for el in elements:
|
||||
if el.kind != "Ausschleus":
|
||||
continue
|
||||
strecke_id = str(_merkmal(el.merkmale, "Strecke", "Förderer") or "")
|
||||
if strecke_id in store_by_host:
|
||||
speicher_ausschleus[el.teile_id] = store_by_host[strecke_id]
|
||||
|
||||
for el in elements:
|
||||
if not el.is_circle or len(el.track_ids) < 2:
|
||||
continue
|
||||
@@ -1379,6 +1392,19 @@ def link_tros(
|
||||
if nxt is not None and nxt != vario_id:
|
||||
_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
|
||||
# Nachfolger gefunden hat (precise_sources) - ein TRO ohne brauchbare
|
||||
# TrackIds-Abdeckung behaelt seine bisherigen (ungenaueren, aber nicht
|
||||
|
||||
Reference in New Issue
Block a user