Files
sps_skel/tests/fixtures/scl/mubea_tro.json
T
Michael StanglandClaude Opus 5.5 29077caa81 model: TroCandidate statt OpenPoint, tro_overrides nutzt model-Klassen (Schema v3)
- OpenPoint -> model.TroCandidate (type, position, belongsTo, note);
  TroDocument.candidates ersetzt openPoints, Schema sps_skel-tro-v3
- Positionsbehandlung von TroBase und TroCandidate im Mixin _Positioned
- tro_overrides.py: eigene ConnectionSpec/OpenPoint entfallen, stattdessen
  model.Connection / model.TroCandidate; einheitliche Feldnamen
  (tro_id/separator, hosts als Liste)
- Fixtures, Beispiel-JSON und Doku auf v3 nachgezogen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 11:31:05 +02:00

908 lines
20 KiB
JSON

{
"schema": "sps_skel-tro-v3",
"source": "mubea.csv",
"created": "2026-10-09 11:38",
"note": "Aus dem CSV-Export abgeleitet (lib/tro_flow.py) - die Zeichnung ist nur Ansicht, keine Datenquelle.",
"tros": [
{
"id": "TRO01",
"type": "1Sep",
"confidence": "mittel",
"separators": [
"0040"
],
"predecessors": [
"TRO10"
],
"successors": [
"TRO10"
],
"position": {
"x": 5355.05,
"y": -5878.0,
"z": 1555.5
},
"label": "Separator 0040 auf Kreisel1 Bahn R",
"hosts": [
"0001-R"
],
"scanners": [],
"reason": "einzelner Separator auf angetriebener Kreisel-Bahn",
"colocated": [],
"positionFrom": "Bauteile",
"positionPoints": 1,
"fbType": "FB_ILS_MTRO_1Sep",
"items": {
"Separator": 1
}
},
{
"id": "TRO02",
"type": "1Sep",
"confidence": "mittel",
"separators": [
"0012"
],
"predecessors": [
"TRO10"
],
"successors": [
"SYS2",
"SYS3",
"TRO13"
],
"position": {
"x": -220.0,
"y": -3472.47,
"z": 1554.75
},
"label": "Separator 0012 auf Kreisel2 Bahn L",
"hosts": [
"0002-L"
],
"scanners": [
"0007"
],
"reason": "Separator mit Scanner auf angetriebener Kreisel-Bahn",
"colocated": [],
"positionFrom": "Bauteile",
"positionPoints": 2,
"fbType": "FB_ILS_MTRO_1Sep",
"items": {
"Separator": 1
}
},
{
"id": "TRO03",
"type": "1Sep",
"confidence": "mittel",
"separators": [
"0042"
],
"predecessors": [
"SYS1",
"TRO04"
],
"successors": [
"TRO05"
],
"position": {
"x": 10490.0,
"y": -525.02,
"z": 2028.75
},
"label": "Separator 0042 auf Kreisel3 Bahn R",
"hosts": [
"0010-R"
],
"scanners": [
"0008"
],
"reason": "Separator mit Scanner auf angetriebener Kreisel-Bahn",
"colocated": [],
"positionFrom": "Bauteile",
"positionPoints": 2,
"fbType": "FB_ILS_MTRO_1Sep",
"items": {
"Separator": 1
}
},
{
"id": "TRO04",
"type": "1Sep",
"confidence": "mittel",
"separators": [
"0043"
],
"predecessors": [
"TRO07"
],
"successors": [
"TRO03"
],
"position": {
"x": 10310.0,
"y": 159.95,
"z": 2029.5
},
"label": "Separator 0043 auf Kreisel3 Bahn R",
"hosts": [
"0010-R"
],
"scanners": [],
"reason": "einzelner Separator auf angetriebener Kreisel-Bahn",
"colocated": [
"TRO05"
],
"positionFrom": "Bauteile",
"positionPoints": 1,
"fbType": "FB_ILS_MTRO_1Sep",
"items": {
"Separator": 1
}
},
{
"id": "TRO05",
"type": "1Sep",
"confidence": "mittel",
"separators": [
"0044"
],
"predecessors": [
"TRO03"
],
"successors": [
"TRO18"
],
"position": {
"x": 10310.0,
"y": -5013.05,
"z": 2029.5
},
"label": "Separator 0044 auf Kreisel3 Bahn R",
"hosts": [
"0010-R"
],
"scanners": [],
"reason": "einzelner Separator auf angetriebener Kreisel-Bahn",
"colocated": [
"TRO04"
],
"positionFrom": "Bauteile",
"positionPoints": 1,
"fbType": "FB_ILS_MTRO_1Sep",
"items": {
"Separator": 1
}
},
{
"id": "TRO06",
"type": "1Sep1Swi",
"confidence": "mittel",
"separators": [
"0003"
],
"predecessors": [
"TRO17"
],
"successors": [
"TRO08",
"TRO10"
],
"position": {
"x": -220.0,
"y": 13960.02,
"z": 1554.75
},
"label": "Separator 0003 an Ausschleuselement 0053 (Strecke 0013, Anfang)",
"hosts": [
"0013"
],
"scanners": [
"0004"
],
"reason": "899mm von Ausschleuselement 0053 entfernt - kein eigenes Weichen-Bauteil im Layout, das Ausschleuselement uebernimmt diese Rolle",
"colocated": [],
"positionFrom": "Bauteile",
"positionPoints": 2,
"fbType": "FB_ILS_MTRO_1Sep1Swi",
"items": {
"Separator": 1,
"Switch": 1
}
},
{
"id": "TRO07",
"type": "1Sep",
"confidence": "mittel",
"separators": [
"0045"
],
"predecessors": [
"TRO09",
"TRO18"
],
"successors": [
"TRO04"
],
"position": {
"x": 9510.0,
"y": 14217.05,
"z": 2029.5
},
"label": "VF_1",
"hosts": [
"0013"
],
"scanners": [],
"reason": "Separator 0045: Zuordnung zeigt auf VF_1, ist aber nicht Teil von dessen TrackIds-Kette - kein eigenes VF treibt ihn an",
"colocated": [
"TRO08"
],
"positionFrom": "Bauteile",
"positionPoints": 1,
"fbType": "FB_ILS_MTRO_1Sep",
"items": {
"Separator": 1
}
},
{
"id": "TRO08",
"type": "Vario",
"confidence": "hoch",
"separators": [
"0054"
],
"predecessors": [
"TRO06"
],
"successors": [
"TRO09"
],
"position": {
"x": 3299.55,
"y": 13509.62,
"z": 1416.12
},
"label": "VF_1",
"hosts": [
"0013"
],
"scanners": [],
"reason": "angetriebenes Streckensegment (Antriebfahrtrichtung: Auf)",
"colocated": [
"TRO07"
],
"positionFrom": "Bauteile",
"positionPoints": 1,
"fbType": "FB_ILS_MTRO_Vario",
"items": {
"Separator": 1,
"VarioDrive": 1
}
},
{
"id": "TRO09",
"type": "1Sep",
"confidence": "mittel",
"separators": [
"0055"
],
"predecessors": [
"TRO08"
],
"successors": [
"TRO07"
],
"position": {
"x": 8953.1,
"y": 13509.62,
"z": 2179.73
},
"label": "VF_1",
"hosts": [
"0013"
],
"scanners": [],
"reason": "alternierendes VF/GF-Muster vom Wiedereinschleusen von VF_1 rueckwaerts (1. Separator von hinten) - unbetriebener Abschnitt ohne eigenes VarioDrive (Review 2026-09-23/25)",
"colocated": [],
"positionFrom": "Bauteile",
"positionPoints": 1,
"fbType": "FB_ILS_MTRO_1Sep",
"items": {
"Separator": 1
}
},
{
"id": "TRO10",
"type": "2Sep2Swi",
"confidence": "hoch",
"separators": [
"0005",
"0036"
],
"predecessors": [
"TRO01",
"TRO06",
"TRO18"
],
"successors": [
"TRO01",
"TRO02",
"TRO11"
],
"position": {
"x": 1012.49,
"y": -4649.76,
"z": 1554.75
},
"label": "Uebergabestelle Kreisel2: Ausschleuselement 0057 + ILS Weiche 0125",
"hosts": [
"0014"
],
"scanners": [
"0006",
"0041"
],
"reason": "Ausschleuselement 0057 (Separator 0005) und ILS Weiche 0125 (Separator 0036) liegen in der TrackIds-Kette von Kreisel2 direkt hintereinander - eine Uebergabestelle",
"colocated": [],
"positionFrom": "Bauteile",
"positionPoints": 4,
"fbType": "FB_ILS_MTRO_2Sep2Swi",
"items": {
"Separator": 2,
"Switch": 2,
"Scanner": 2
}
},
{
"id": "TRO11",
"type": "Vario",
"confidence": "hoch",
"separators": [
"0058"
],
"predecessors": [
"TRO10"
],
"successors": [
"TRO12"
],
"position": {
"x": 3299.55,
"y": -4743.38,
"z": 1416.12
},
"label": "VF_2",
"hosts": [
"0014"
],
"scanners": [],
"reason": "angetriebenes Streckensegment (Antriebfahrtrichtung: Auf)",
"colocated": [],
"positionFrom": "Bauteile",
"positionPoints": 1,
"fbType": "FB_ILS_MTRO_Vario",
"items": {
"Separator": 1,
"VarioDrive": 1
}
},
{
"id": "TRO12",
"type": "1Sep",
"confidence": "mittel",
"separators": [
"0059"
],
"predecessors": [
"TRO11"
],
"successors": [
"TRO18"
],
"position": {
"x": 9411.55,
"y": -4150.19,
"z": 2103.86
},
"label": "VF_2",
"hosts": [
"0014"
],
"scanners": [
"0046"
],
"reason": "alternierendes VF/GF-Muster vom Wiedereinschleusen von VF_2 rueckwaerts (1. Separator von hinten) - unbetriebener Abschnitt ohne eigenes VarioDrive (Review 2026-09-23/25)",
"colocated": [],
"positionFrom": "Bauteile",
"positionPoints": 2,
"fbType": "FB_ILS_MTRO_1Sep",
"items": {
"Separator": 1
}
},
{
"id": "TRO13",
"type": "1Sep1Swi",
"confidence": "mittel",
"separators": [
"0011"
],
"predecessors": [
"TRO02"
],
"successors": [
"TRO16",
"TRO17"
],
"position": {
"x": -220.0,
"y": -480.98,
"z": 1554.75
},
"label": "Separator 0011 an Ausschleuselement 0061 (Strecke 0015, Anfang)",
"hosts": [
"0015"
],
"scanners": [
"0009"
],
"reason": "832mm von Ausschleuselement 0061 entfernt - kein eigenes Weichen-Bauteil im Layout, das Ausschleuselement uebernimmt diese Rolle",
"colocated": [],
"positionFrom": "Bauteile",
"positionPoints": 2,
"fbType": "FB_ILS_MTRO_1Sep1Swi",
"items": {
"Separator": 1,
"Switch": 1
}
},
{
"id": "TRO14",
"type": "1Sep",
"confidence": "mittel",
"separators": [
"0037"
],
"predecessors": [
"TRO15"
],
"successors": [
"TRO17"
],
"position": {
"x": -1026.0,
"y": 10723.05,
"z": 1634.5
},
"label": "VF_3",
"hosts": [
"0015"
],
"scanners": [],
"reason": "Separator 0037: Zuordnung zeigt auf VF_3, ist aber nicht Teil von dessen TrackIds-Kette - kein eigenes VF treibt ihn an",
"colocated": [
"TRO16"
],
"positionFrom": "Bauteile",
"positionPoints": 1,
"fbType": "FB_ILS_MTRO_1Sep",
"items": {
"Separator": 1
}
},
{
"id": "TRO15",
"type": "1Sep",
"confidence": "mittel",
"separators": [
"0038"
],
"predecessors": [
"TRO16"
],
"successors": [
"TRO14"
],
"position": {
"x": -1206.0,
"y": 5330.02,
"z": 1477.75
},
"label": "VF_3",
"hosts": [
"0015"
],
"scanners": [
"0039"
],
"reason": "Separator 0038: Zuordnung zeigt auf VF_3, ist aber nicht Teil von dessen TrackIds-Kette - kein eigenes VF treibt ihn an",
"colocated": [
"TRO17"
],
"positionFrom": "Bauteile",
"positionPoints": 2,
"fbType": "FB_ILS_MTRO_1Sep",
"items": {
"Separator": 1
}
},
{
"id": "TRO16",
"type": "Vario",
"confidence": "hoch",
"separators": [
"0062"
],
"predecessors": [
"TRO13"
],
"successors": [
"TRO15"
],
"position": {
"x": -898.87,
"y": 1134.6,
"z": 1534.33
},
"label": "VF_3",
"hosts": [
"0015"
],
"scanners": [],
"reason": "angetriebenes Streckensegment (Antriebfahrtrichtung: Auf)",
"colocated": [
"TRO14",
"TRO17"
],
"positionFrom": "Bauteile",
"positionPoints": 1,
"fbType": "FB_ILS_MTRO_Vario",
"items": {
"Separator": 1,
"VarioDrive": 1
}
},
{
"id": "TRO17",
"type": "1Sep",
"confidence": "mittel",
"separators": [
"0063"
],
"predecessors": [
"TRO13",
"TRO14"
],
"successors": [
"TRO06"
],
"position": {
"x": -702.98,
"y": 12296.45,
"z": 1751.35
},
"label": "VF_3",
"hosts": [
"0015"
],
"scanners": [],
"reason": "alternierendes VF/GF-Muster vom Wiedereinschleusen von VF_3 rueckwaerts (1. Separator von hinten) - unbetriebener Abschnitt ohne eigenes VarioDrive (Review 2026-09-23/25)",
"colocated": [
"TRO15",
"TRO16"
],
"positionFrom": "Bauteile",
"positionPoints": 1,
"fbType": "FB_ILS_MTRO_1Sep",
"items": {
"Separator": 1
}
},
{
"id": "TRO18",
"type": "PinStore_Auto",
"confidence": "hoch",
"separators": [
"0066",
"0069",
"0072",
"0075",
"0078",
"0081",
"0084",
"0087",
"0090",
"0093",
"0096",
"0099",
"0102",
"0105",
"0108",
"0111",
"0114",
"0117",
"0120",
"0123"
],
"predecessors": [
"TRO05",
"TRO12"
],
"successors": [
"TRO07",
"TRO10"
],
"position": {
"x": 958.0,
"y": 4700.0,
"z": 1697.6
},
"label": "Speicher (20 Schwerkraftlinien)",
"hosts": [
"0016",
"0017",
"0018",
"0019",
"0020",
"0021",
"0022",
"0023",
"0024",
"0025",
"0026",
"0027",
"0028",
"0029",
"0030",
"0031",
"0032",
"0033",
"0034",
"0035"
],
"scanners": [],
"reason": "20 Gefaellestrecken mit je eigenem Separator, gemeinsamer Zu-/Ablauf - Muster eines Linienspeichers",
"colocated": [],
"positionFrom": "Bauteile",
"positionPoints": 20,
"fbType": "FB_ILS_MTRO_PinStore_Auto",
"items": {
"Separator": 1,
"StorageLine": 19,
"Scanner": 1,
"Encoder": 1
}
}
],
"boundaries": [
{
"id": "SYS1",
"type": "Materialeingang",
"confidence": "hoch",
"separators": [],
"predecessors": [],
"successors": [
"TRO03"
],
"position": {
"x": 10410.95,
"y": 3.52,
"z": 1983.31
},
"label": "BTMT Beladung :1",
"hosts": [
"0047"
],
"scanners": [],
"reason": "Systemgrenze (Be-/Entladestation) - kein TRO, nur Materialein-/ausgang",
"colocated": [],
"positionFrom": "Host-Objekte",
"positionPoints": 1,
"fbType": "",
"items": {}
},
{
"id": "SYS2",
"type": "Materialausgang",
"confidence": "hoch",
"separators": [],
"predecessors": [
"TRO02"
],
"successors": [],
"position": {
"x": -778.79,
"y": -1226.1,
"z": 1401.09
},
"label": "BTMT Entladung :2",
"hosts": [
"0048"
],
"scanners": [],
"reason": "Systemgrenze (Be-/Entladestation) - kein TRO, nur Materialein-/ausgang",
"colocated": [],
"positionFrom": "Host-Objekte",
"positionPoints": 1,
"fbType": "",
"items": {}
},
{
"id": "SYS3",
"type": "Materialausgang",
"confidence": "hoch",
"separators": [],
"predecessors": [
"TRO02"
],
"successors": [],
"position": {
"x": -775.22,
"y": -2466.46,
"z": 1401.09
},
"label": "BTMT Entladung :1",
"hosts": [
"0049"
],
"scanners": [],
"reason": "Systemgrenze (Be-/Entladestation) - kein TRO, nur Materialein-/ausgang",
"colocated": [],
"positionFrom": "Host-Objekte",
"positionPoints": 1,
"fbType": "",
"items": {}
}
],
"connections": [
{
"from": "SYS1",
"to": "TRO03",
"kind": "normal"
},
{
"from": "TRO01",
"to": "TRO10",
"kind": "normal"
},
{
"from": "TRO02",
"to": "SYS2",
"kind": "normal"
},
{
"from": "TRO02",
"to": "SYS3",
"kind": "normal"
},
{
"from": "TRO02",
"to": "TRO13",
"kind": "transfer"
},
{
"from": "TRO03",
"to": "TRO05",
"kind": "bahn"
},
{
"from": "TRO04",
"to": "TRO03",
"kind": "bahn"
},
{
"from": "TRO05",
"to": "TRO18",
"kind": "normal"
},
{
"from": "TRO06",
"to": "TRO08",
"kind": "weiche"
},
{
"from": "TRO06",
"to": "TRO10",
"kind": "bahn"
},
{
"from": "TRO07",
"to": "TRO04",
"kind": "bahn"
},
{
"from": "TRO08",
"to": "TRO09",
"kind": "bahn"
},
{
"from": "TRO09",
"to": "TRO07",
"kind": "bahn"
},
{
"from": "TRO10",
"to": "TRO01",
"kind": "bahn"
},
{
"from": "TRO10",
"to": "TRO02",
"kind": "bahn"
},
{
"from": "TRO10",
"to": "TRO11",
"kind": "weiche"
},
{
"from": "TRO11",
"to": "TRO12",
"kind": "bahn"
},
{
"from": "TRO12",
"to": "TRO18",
"kind": "normal"
},
{
"from": "TRO13",
"to": "TRO16",
"kind": "weiche"
},
{
"from": "TRO13",
"to": "TRO17",
"kind": "bahn"
},
{
"from": "TRO14",
"to": "TRO17",
"kind": "bahn"
},
{
"from": "TRO15",
"to": "TRO14",
"kind": "bahn"
},
{
"from": "TRO16",
"to": "TRO15",
"kind": "bahn"
},
{
"from": "TRO17",
"to": "TRO06",
"kind": "normal"
},
{
"from": "TRO18",
"to": "TRO07",
"kind": "normal"
},
{
"from": "TRO18",
"to": "TRO10",
"kind": "normal"
}
],
"candidates": [],
"findings": [
"Kreisel2: Ausschleuselement 0057 und ILS Weiche 0125 benachbart - als 2Sep2Swi zusammengefasst (FB_ILS_MTRO_2Sep2Swi fehlt noch in der ILSLib)",
"Scanner 0008 'Scanner :5': montiert an 0010, liest aber an Separator 0042 auf 0010-R",
"Scanner 0046 'Scanner :1': montiert an 0035, liest aber an Separator 0059 auf 0014",
"TRO02 (Separator 0012 auf Kreisel2 Bahn L): Scanner 0007 am Separator - als 1Sep eingestuft. Pruefen, ob 1Sep_SSCC (SSCC-Scanner, Endmessung, WCS-Telegramm) erforderlich ist; das ist aus dem mechanischen Layout nicht erkennbar.",
"TRO03 (Separator 0042 auf Kreisel3 Bahn R): Scanner 0008 am Separator - als 1Sep eingestuft. Pruefen, ob 1Sep_SSCC (SSCC-Scanner, Endmessung, WCS-Telegramm) erforderlich ist; das ist aus dem mechanischen Layout nicht erkennbar.",
"TRO12 (VF_2): Scanner 0046 am Separator - als 1Sep eingestuft. Pruefen, ob 1Sep_SSCC (SSCC-Scanner, Endmessung, WCS-Telegramm) erforderlich ist; das ist aus dem mechanischen Layout nicht erkennbar.",
"TRO15 (VF_3): Scanner 0039 am Separator - als 1Sep eingestuft. Pruefen, ob 1Sep_SSCC (SSCC-Scanner, Endmessung, WCS-Telegramm) erforderlich ist; das ist aus dem mechanischen Layout nicht erkennbar.",
"VF_1 Separator 0045: Zuordnung ohne TrackIds-Mitgliedschaft - als 1Sep statt Vario eingestuft",
"VF_1 Separator 0055: alternierendes Muster (1. von hinten) - als 1Sep statt Vario eingestuft",
"VF_2 Separator 0059: alternierendes Muster (1. von hinten) - als 1Sep statt Vario eingestuft",
"VF_3 Separator 0037: Zuordnung ohne TrackIds-Mitgliedschaft - als 1Sep statt Vario eingestuft",
"VF_3 Separator 0038: Zuordnung ohne TrackIds-Mitgliedschaft - als 1Sep statt Vario eingestuft",
"VF_3 Separator 0063: alternierendes Muster (1. von hinten) - als 1Sep statt Vario eingestuft"
]
}