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:
Samer Ayadi
2026-10-15 16:16:22 +02:00
co-authored by Claude Opus 5.5
parent 77c5aac343
commit 7ec2b88b79
5 changed files with 107 additions and 18 deletions
+29
View File
@@ -208,6 +208,35 @@ def test_kontext_setzt_namen_ein_und_loescht_den_merker():
assert kontext.eplan_source.startswith("Mubea_positionsdraw.json")
def test_kontext_setzt_namen_auch_in_speicherlinien_ein():
"""PinStore_Auto: die Linien sind Separatoren im Layout - ihre E-Planung-Namen
kommen in store.lines an (und damit ins PinStore-Template), nicht nur in den
Separatorblock."""
from model import Analysis, DerivedTro, TroDocument
from scl_skeleton import TEMPLATE_DIR, SclTemplates
linien = ["0066", "0069"]
store = DerivedTro(tro_id="TRO04", type_name="PinStore_Auto", label="Speicher",
hosts=["0016", "0017"], separators=linien, scanners=[],
reason="Test", predecessors=["TRO03"], successors=["TRO05"])
punkte = [LayoutPoint("0066", "Separator", 0, 0), LayoutPoint("0069", "Separator", 1000, 0)]
geraete = [_dev("BG0766", "IN SEP", 0, 0), _dev("MB0767", "SEP", 0, 300),
_dev("BG0769", "IN SEP", 1000, 0), _dev("MB0770", "SEP", 1000, 300)]
eplan = EplanDocument(csv_file="mubea.csv", eplan_file="Mubea_positionsdraw.json",
assignments=assign(punkte, geraete, [SENSOR, STOPPER], IDENT))
document = TroDocument.from_analysis(Analysis(tros=[store]), source="mubea.csv")
kontext = build_context(document, "mubea_tro.json", eplan=eplan)
zeilen = kontext.tros[0].store.lines
assert [(z.layout, z.sensor.value, z.stopper.value) for z in zeilen] == [
("0066", "cInBG0766", "MB0767"), ("0069", "cInBG0769", "MB0770")]
assert not any(n.todo for z in zeilen for n in (z.sensor, z.stopper))
text = SclTemplates(TEMPLATE_DIR).render(kontext.tros[0])
assert '#TRO04.arInSep[#nActNo].stSenTrolley := "DB_Inputs".Sensors["cInBG0766"];\n' in text
assert '"MB0770" := #TRO04.arOutSeparatorStore[2];\n' in text
def _lauf(tmp_path, monkeypatch, eplan: EplanDocument,
*weitere: str) -> tuple[int, Path]:
shutil.copy(FIXTURES / "mubea_tro.json", tmp_path / "mubea_tro.json")