scl_skeleton --eplan: E-Planung-Namen auch in den PinStore-Lagerlinien
Sensor und Stopper jeder Lagerlinie (und des Pin-Separators) kommen aus der E-Planung wie bei den Separatorbloecken (scl_context._sep_namen); die Zaehlung der eingesetzten Namen beruecksichtigt die Linien. Dazu die ID-Datei cfg/mubea_tro_ids.ini und .gitignore fuer lokale Claude-Code- Einstellungen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
77c5aac343
commit
7ec2b88b79
+32
-14
@@ -432,17 +432,28 @@ def _jam(n: int, neighbour: str, jam_db: str, sensor: SclName | None = None,
|
||||
)
|
||||
|
||||
|
||||
def _store(tro: TroBase) -> SclStore:
|
||||
def _store(tro: TroBase, eplan: EplanDocument | None = None) -> SclStore:
|
||||
"""PinStore_Auto: eine Linie je Speicherbahn (Host) des Layouts.
|
||||
|
||||
tro_flow legt die Separatoren als [steuernde ..., Linien ...] ab; die
|
||||
Linien sind die letzten len(hosts). Fehlen Hosts (fremde JSON), zaehlt
|
||||
jeder Separator als Linie.
|
||||
jeder Separator als Linie. Sensor und Stopper jeder Linie (und des
|
||||
Pin-Separators, falls tro_flow einen gefunden hat) kommen aus der
|
||||
E-Planung wie bei den Separatorbloecken.
|
||||
"""
|
||||
hosts = list(getattr(tro, "hosts", []) or [])
|
||||
seps = list(tro.separators)
|
||||
anzahl = len(hosts) if 0 < len(hosts) <= len(seps) else len(seps)
|
||||
steuer, linien = seps[:len(seps) - anzahl], seps[len(seps) - anzahl:]
|
||||
pin_sensor, pin_stopper = _sep_namen(steuer[0], eplan) if steuer else (
|
||||
_offen("cInBG____"), _offen("MB____"))
|
||||
zeilen = []
|
||||
for n, sep in enumerate(linien, start=1):
|
||||
sensor, stopper = _sep_namen(sep, eplan)
|
||||
zeilen.append(SclStoreLine(n=n, layout=sep,
|
||||
jam_length=_offen('"cStorage____ExitJam"'),
|
||||
sensor=sensor, jam_sensor=_offen("cInBG____"),
|
||||
stopper=stopper))
|
||||
return SclStore(
|
||||
encoder=_offen("#fbEncoder____"),
|
||||
dest=_offen("cDest____"),
|
||||
@@ -460,27 +471,34 @@ def _store(tro: TroBase) -> SclStore:
|
||||
'arrudt_StorageRemovalHandshakeTROsLvl1[____]'),
|
||||
conv_db=_offen('"DB_ConveyorStations".stConveyorStations____'),
|
||||
pin_layout=", ".join(steuer) or "?",
|
||||
pin_sensor=_offen("cInBG____"),
|
||||
pin_stopper=_offen("MB____"),
|
||||
lines=[
|
||||
SclStoreLine(n=n, layout=sep, jam_length=_offen('"cStorage____ExitJam"'),
|
||||
sensor=_offen("cInBG____"), jam_sensor=_offen("cInBG____"),
|
||||
stopper=_offen("MB____"))
|
||||
for n, sep in enumerate(linien, start=1)
|
||||
],
|
||||
pin_sensor=pin_sensor,
|
||||
pin_stopper=pin_stopper,
|
||||
lines=zeilen,
|
||||
)
|
||||
|
||||
|
||||
def _separator(i: int, layout: str, eplan: EplanDocument | None) -> SclSeparator:
|
||||
def _sep_namen(layout: str, eplan: EplanDocument | None) -> tuple[SclName, SclName]:
|
||||
"""Sensor und Stopperventil eines Layout-Separators aus der E-Planung.
|
||||
|
||||
Gilt fuer die Separatorbloecke (stInSeparator<n>) und genauso fuer die
|
||||
Linien eines PinStore_Auto - beide sind Separatoren im Layout. Ohne
|
||||
Zuordnung bleiben beide offen.
|
||||
"""
|
||||
rollen = eplan.for_layout(layout) if eplan is not None and layout != "?" else {}
|
||||
sensor = rollen.get("sensor")
|
||||
stopper = rollen.get("stopper")
|
||||
return (_bekannt(_SENSOR.format(bmk=sensor.bmk)) if sensor else _offen("cInBG____"),
|
||||
_bekannt(_VENTIL.format(bmk=stopper.bmk)) if stopper else _offen("MB____"))
|
||||
|
||||
|
||||
def _separator(i: int, layout: str, eplan: EplanDocument | None) -> SclSeparator:
|
||||
sensor, stopper = _sep_namen(layout, eplan)
|
||||
return SclSeparator(
|
||||
n=i,
|
||||
layout=layout,
|
||||
no=_offen("cSep_____"),
|
||||
sensor=_bekannt(_SENSOR.format(bmk=sensor.bmk)) if sensor else _offen("cInBG____"),
|
||||
stopper=_bekannt(_VENTIL.format(bmk=stopper.bmk)) if stopper else _offen("MB____"),
|
||||
sensor=sensor,
|
||||
stopper=stopper,
|
||||
# Teilesensor kennt die E-Planung-Bruecke noch nicht - offen
|
||||
part_sensor=_offen("cInBG____"),
|
||||
)
|
||||
@@ -604,7 +622,7 @@ def _tro_context(tro: TroBase, alle: dict[str, TroBase],
|
||||
station_release=_offen('#"rTrig_Workstation ____".CLK'),
|
||||
loaded_error_sensor=_offen("cInBG____"))
|
||||
if items.get(TroItem.WORK_STATION) else None),
|
||||
store=_store(tro) if items.get(TroItem.STORAGE_LINE) else None,
|
||||
store=_store(tro, eplan) if items.get(TroItem.STORAGE_LINE) else None,
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user