EnglishDeutsch/api/energyGitHub · iceccarelli
Grimaldi EngineeringCluster-Steuerung · Frankfurt
Dokumentation

Das Format lesen. Die Zustände lesen.

Alles, was der Planer annimmt, alles, was er ausgibt, und was die Zelle damit tut.

SKU-CSV

Kopfzeile erforderlich. Komma- oder Semikolon-getrennt; deutsche Dezimalzahlen (8,5) werden akzeptiert. Spaltennamen werden unabhängig von Groß-/Kleinschreibung erkannt, einige Aliasse werden verstanden (length / laenge, weight / gewicht, qty / anzahl).

SpalteEinheitHinweis
sku_idTextErforderlich. Über Zeilen wiederholt oder mit qty.
length_mmmmErforderlich. Grundfläche entlang der Palettenlänge vor Rotation.
width_mmmmErforderlich. Grundfläche entlang der Palettenbreite vor Rotation.
height_mmmmErforderlich.
weight_kgkgOptional, Standard 0. Bestimmt Nutzlastgrenze, Schwerpunkt und Stapellast.
qtyAnzahlOptional, Standard 1. Vervielfacht die Zeile.
max_stack_kgkgOptional. Maximale Masse, die dieser Karton oben tragen darf. Wird sie überschritten, ist das ein FAULT.

Beispiel

sku_id,length_mm,width_mm,height_mm,weight_kg,qty,max_stack_kg
SKU-01,400,300,250,8.5,6,60
SKU-02,600,400,300,15,4,120
SKU-03,300,200,200,4,10,20
SKU-04,400,400,280,11,6,80
SKU-05,250,250,200,3.2,8,15
SKU-06,400,200,250,2.4,3,20

Der Browser-Planer nimmt bis zu 400 Kartons pro Palette an. Größere Listen laufen in der Python-Engine. sku_id,length_mm,width_mm,height_mm,weight_kg,qty,max_stack_kg

Einheiten und Koordinaten

mm
Alle Längen. Ursprung ist die Palettenecke; x entlang der Palettenlänge, y entlang der Breite, z nach oben ab Deckoberfläche.
kg
Alle Massen. Das Paletteneigengewicht zählt nicht zur Nutzlastgrenze.
rot_deg
0 oder 90. Ein gedrehter Karton tauscht die Kanten seiner Grundfläche; die Höhe bleibt.
layer
1-basiert in Exporten, 0-basiert im JSON-Plan.
cycle
Taktzeit ist Kartons × 6 s — eine Planungsannahme, die neben der Zahl steht. Die gemessene Taktzeit ersetzt sie bei der Abnahme.

Wie die Zahlen entstehen

Kartons werden vom höchsten abwärts in Lagen gruppiert; eine Lage nimmt nur Kartons innerhalb von 10 % ihres höchsten Kartons auf, damit ihre Oberseite nahezu eben ist. Jede Lage wird Shelf-Packing First-Fit-Decreasing nach Grundfläche gepackt, beide Ausrichtungen werden geprüft.

Die Auflage pro Karton ist der Anteil seiner Grundfläche, der auf Kartons der darunterliegenden Lage ruht (1,0 auf der Palette). Der Schwerpunkt-Score ist 1 minus der gewichtete Versatz zur Palettenmitte über die halbe Diagonale. Stabilität = 0,6 × mittlere Auflage + 0,4 × Schwerpunkt-Score.

Dichte ist das gesetzte Kartonvolumen über Palettengrundfläche × Stapelhöhe. Die Stapellast auf einem Karton ist die Masse aller höheren Kartons anteilig zur Überlappung der Grundflächen; sie wird gegen max_stack_kg geprüft, wenn angegeben.

Die Python-Engine (palletizer_full/optimizer.py) nutzt dasselbe Packen und Bewerten; der Browser-Planer wendet zusätzlich die 10-%-Lagenhöhentoleranz und die Stapellast-Prüfung an, die die Engine noch nicht hat. Wo sie sich unterscheiden, steht es hier.

Codes

CodeStufeBedeutung
E-CSV-EMPTYFAULTLeere Eingabe.
E-CSV-HEADERFAULTEine erforderliche Spalte fehlt in der Kopfzeile.
E-ROW-DIM / E-ROW-KG / E-ROW-QTY / E-ROW-STACKFAULTEine Zeile enthält einen nicht positiven oder nicht numerischen Wert. Die Zeile wird übersprungen und benannt.
F-DECKFAULTEine SKU passt in keiner Ausrichtung auf die Palette.
F-HEIGHTFAULTEine SKU ist höher als die Stapelgrenze.
F-CRUSHFAULTDie Last auf einer SKU überschreitet ihr max_stack_kg. Text: „SKU-04 überschreitet die Stapellast.“
H-HEIGHT / H-PAYLOADHOLDKartons nicht gesetzt, weil Stapel- oder Nutzlastgrenze erreicht wurde. Sie werden aufgelistet.
H-SUPPORTHOLDEine Lage hat unter 85 % mittlere Auflage.
H-COMHOLDSchwerpunkt-Score unter 0,8.
H-CSV-CAPHOLDListe auf 400 Kartons begrenzt.
OKRUNAlle SKUs gesetzt, Stabilität ≥ 0,6, kein Fehler.

Zustandsautomat

ZustandDefinition
IDLEKein Plan geladen oder Planer ohne Platzierungen. Roboter wartet in Grundstellung. Wechsel nach RUN bei gültigem Plan und Bedienerstart.
RUNPlan gültig, Zelle setzt Platzierungen der Reihe nach. Telemetrie: aktueller Index, Lage, Stabilität des Teilstapels. Wechsel nach HOLD bei Hold-Code oder Bedienerpause; nach FAULT bei Fehlercode, Verlust der Greiferrückmeldung oder Sicherheitshalt.
HOLDBewegung in sicherer Pose angehalten, Plan bleibt erhalten. Bediener löst die benannte Bedingung (neu planen, SKU entfernen, Grenze anpassen) und kehrt nach RUN zurück oder bricht nach IDLE ab.
FAULTBewegung gestoppt, Plan ungültig, Fehlercode gespeichert. Quittierung erforderlich; Wechsel nur nach IDLE. Sicherheitsfunktionen liegen auf der Sicherheits-SPS, nicht hier.
IDLE ──plan valid + start──▶ RUN
RUN  ──hold code / pause───▶ HOLD ──resolved──▶ RUN
HOLD ──abort───────────────▶ IDLE
RUN  ──fault code / e-stop─▶ FAULT ──acknowledge──▶ IDLE

Referenznummerierung für die OPC-UA-Bereitstellung im Gateway: Zustand 0 IDLE, 1 RUN, 2 HOLD, 3 FAULT, dazu aktiver Code, Platzierungsindex, Lage, Stabilität und Dichte des bisherigen Stapels. Node-IDs gegen die eingesetzte Version prüfen.

Verfasst und gepflegt von Vincenzo Ceccarelli Grimaldi, Frankfurt am Main.