diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..421d2a6 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,112 @@ +# CLAUDE.md — Projektübersicht HundM_Fortna + +## Projektbeschreibung + +Siemens TIA Portal / STEP 7 SPS-Projekt für ein Fördertechnik-Automatisierungssystem (Kunde: Hund & Metzler, System: Fortna WES/WCS). + +Das Repository enthält den exportierten SCL-Quellcode (Structured Control Language, IEC 61131-3) von **5 SPS-Konfigurationen** (Steuerungen), die gemeinsam eine Förderanlage steuern. + +--- + +## Repository-Struktur + +``` +HundM_Fortna/ +├── =A01+UH01-KF00/ # SPS-Konfiguration UH01 (Steuerung 1) +├── =A01+UH02-KF00/ # SPS-Konfiguration UH02 (Steuerung 2) +├── =A01+UH03-KF00/ # SPS-Konfiguration UH03 (Steuerung 3) +├── =A01+UH04-KF00/ # SPS-Konfiguration UH04 (Steuerung 4) +├── =A01+UH05-KF00/ # SPS-Konfiguration UH05 (Steuerung 5) +├── .vci/ # TIA Portal VCS-Workspace-Konfiguration +└── SCL_Analyse_Standardisierung.md # Analyse: Duplikate / Standardisierungspotenzial +``` + +### Konfigurationsname-Schema + +`=A01+UH0x-KF00` +- `A01` = Anlage / Projekt-ID +- `UH0x` = Unit Handler / Steuerungsnummer (01–05) +- `KF00` = Konfigurationsbezeichner + +### Struktur je Konfiguration (Unterordner) + +Jede `=A01+UH0x-KF00/`-Konfiguration enthält: + +``` +PLC-Datentypen/ # UDTs (User Defined Types), als .xml / .liblink +Programmbausteine/ # SCL-Bausteine (FB, FC, OB) — projektspezifisch + ├── 050_Sensors/ # Sensoraufruf + ├── 075_PreMain/ # Vorverarbeitung + ├── 100_Main/ # Hauptprogramm + ├── 200_MFR/ # Material Flow Routing + ├── 400_BasicFunctions/ # Hilfsfunktionen (FC) + ├── 700_Jams/ # Staubehandlung + ├── 800_Storage/ # Puffer / Lagerverwaltung (nur UH02/UH03) + ├── 900_Communications/ # Fortna WES-WCS Kommunikation + ├── 970_Visu/ # HMI-Visualisierung + ├── PROFINET/ # PROFINET-Diagnose + ├── SCADA/ # OPC-UA / SCADA-Anbindung + ├── Längenmessung/ # Längenmessung (UH01, UH05) + ├── _AutomatedIntelligence/# KI-gestützte Lagerlogik (UH02, UH03) + ├── _CPU-CPU-Exchange/ # SPS-zu-SPS-Kommunikation (UH02, UH03) + └── _IBN/ # Inbetriebnahme / Testbausteine +Bibliotheksreferenzen/ # Verweise auf externe Libs (BaseSystemLib, ILSLib) +``` + +--- + +## Verwendete Bibliotheken (bereits bibliothekarisiert) + +| Bibliothek | Beschreibung | +|---|---| +| `BaseSystemLib` | Siemens-Basisbausteine: Zustandsmaschinen, Sensoren, PROFINET, Monitoring, TCP, Safety | +| `ILSLib` / `2_ILSLib` | Integrated Logistics System: Carrier-Tracking, Separator, Priority Manager, Switch | + +Diese Bibliotheken sind **nicht** im Git-Repository als Quellcode enthalten, sondern nur als `.liblink`-Referenzen (Verweise auf externe Bibliotheksdateien). + +--- + +## Technologie-Stack + +| Bereich | Technologie | +|---|---| +| SPS-Plattform | Siemens S7 (TIA Portal) | +| Programmiersprache | SCL (Structured Control Language, IEC 61131-3) | +| Versionskontrolle | TIA Portal VCS (.vci), Git | +| Feldbus | PROFINET | +| SCADA | OPC-UA | +| WES/WCS-Kommunikation | TCP/IP — Fortna-Telegrammprotokoll | +| Barcode-Erkennung | Cognex DM-Scanner | +| Carrier-Tracking | ILS (Integrated Logistics System) | + +--- + +## Wichtige Konzepte + +- **Carrier**: Transporteinheit (Tablar/Tray) auf der Foerderanlage; wird mit Barcode identifiziert und durch das System geroutet +- **TRO** (Transfer Object): Datenobjekt fuer den Carrier-Transport zwischen Stationen +- **WES** (Warehouse Execution System) / **WCS** (Warehouse Control System): Uebergeordnete Leitsysteme, die per TCP-Telegramm mit den SPSen kommunizieren +- **MFR** (Material Flow Routing): Logik fuer die Weichensteuerung und Carrier-Verteilung +- **Separator**: Vereinzelungseinheit fuer Carrier +- **Jam**: Stau auf der Foerderstrecke + +--- + +## Standardisierungsanalyse + +Die Datei [SCL_Analyse_Standardisierung.md](SCL_Analyse_Standardisierung.md) dokumentiert das Ergebnis einer Duplikatanalyse ueber alle 5 Konfigurationen (Stand: 2026-06-23): + +- **49 Bausteine** mit Standardisierungspotenzial identifiziert +- **22 Bausteine (P1)** sind in allen 5 Konfigurationen identisch vorhanden → sofort in gemeinsame Projektbibliothek auslagern +- **Top-5 Quick Wins**: `FC_GET_PROFINET_DEVICE_STATES`, `FB-OPC_UA_System-Stat`, `Programming error` (OB), String-Konvertierungen, `FB_CommunicationLogger` +- Sonderanalyse: Versionschaos bei `StockRemoval`-Bausteinen in UH02/UH03 + +--- + +## Arbeitsweise mit diesem Repository + +- Dateien werden aus TIA Portal exportiert (SCL-Export) und per Git versioniert +- Aenderungen werden in TIA Portal gemacht, exportiert und dann committed +- `.scl`-Dateien enthalten den Quellcode der Bausteine; `.xml`-Dateien enthalten UDTs und Datenbloecke +- `.liblink`-Dateien sind nur Referenzen auf externe Bibliotheken (kein Quellcode) +- Die `.vci/`-Konfiguration steuert das TIA Portal VCS-Verhalten diff --git a/SCL_Analyse_Standardisierung.md b/SCL_Analyse_Standardisierung.md new file mode 100644 index 0000000..45687d4 --- /dev/null +++ b/SCL_Analyse_Standardisierung.md @@ -0,0 +1,240 @@ +# SCL-Bausteinanalyse: Standardisierungspotenzial +**Projekt:** HundM_Fortna +**Datum:** 2026-06-23 +**Analysierte Konfigurationen:** UH01, UH02, UH03, UH04, UH05 +**Gesamt SCL-Dateien:** ~224 Baustein-Deklarationen gefunden + +--- + +## Methodik + +- **Eingeschlossen:** Alle `.scl`-Dateien in projektspezifischen Verzeichnissen +- **Ausgeschlossen (bereits bibliothekarisiert):** + - `*/1_BaseSystemLib/**` (UH01, UH04, UH05) + - `*/2_ILSLib/**` (UH01, UH04, UH05) + - `*/BaseSystemLib/**` (UH02, UH03) + - `*/ILSLib/**` (UH02, UH03) + - `LGF_DTLtoString_ISO` (Siemens LGF-Standardbibliothek) +- **Kriterium:** Baustein erscheint identisch (gleicher Name) in mehreren Konfigurationen → Duplikationspflege notwendig + +--- + +## Priorität 1 — In ALLEN 5 Konfigurationen vorhanden + +> Diese 22 Bausteine werden in jedem SPS-Projekt kopiert und separat gepflegt. +> **Empfehlung:** Sofort in eine gemeinsame Projektbibliothek auslagern. + +| Baustein | Typ | Kategorie | Pfad | +|---|---|---|---| +| `FB_CallSensors` | FB | Sensoren | `050_Sensors/` | +| `FB_PreMain` | FB | Programmstruktur | `075_PreMain/` | +| `FB_Main` | FB | Programmstruktur | `100_Main/` | +| `FC_CARR_GLOB_CORRECTION` | FC | MFR | `200_MFR/` | +| `FC_Direction` | FC | MFR | `200_MFR/` | +| `FC_Int2String` | FC (→ String) | Hilfsfunktionen | `400_BasicFunctions/FC/` | +| `FC_Jam` | FC | Stau | `400_BasicFunctions/FC/` ¹ | +| `FC_StorageLines` | FC | Puffer | `400_BasicFunctions/FC/` ² | +| `FC_Call_Jams` | FC | Stau | `700_Jams/` | +| `FB_CommunicationWCSBL` | FB | Kommunikation | `900_Communications/` ³ | +| `FB_FortnaTele_Placeholder` | FB | Kommunikation | `900_Communications/` ⁴ | +| `FB_CommunicationLogger` | FB | Kommunikation | `900_Communications/TCP-Logger/` | +| `FB_Visu` | FB | Visualisierung | `970_Visu/` | +| `FB_Visu_Jam` | FB | Visualisierung | `970_Visu/` | +| `FB_Visu_Jams` | FB | Visualisierung | `970_Visu/` | +| `FC_CarrierManipulator` | FC | Visualisierung | `970_Visu/` | +| `FC_BARCODE_SEARCH` | FC | Barcode | `Programmbausteine/` (Root) | +| `FC_GET_PROFINET_DEVICE_STATES` | FC | PROFINET | `PROFINET/` | +| `Programming error` | OB | Fehlerbehandlung | `Programmbausteine/` (Root) | +| `FB-OPC_UA_System-Stat` | FB | SCADA | `SCADA/` | +| `FB_PerfTest` | FB | Performance | `_PerformanceMeasurement_/` | +| `FC_S7` | FC | IBN/Test | `_IBN/` | + +**Anmerkungen:** +- ¹ UH03: Datei liegt in `700_Jams/FC_Jam.scl` statt `400_BasicFunctions/FC/` +- ² UH03: Datei liegt in `800_Storage/FC_StorageLines.scl` statt `400_BasicFunctions/FC/` +- ³ UH03/UH04/UH05: Unterordner `Fortna-WES-WCS/` +- ⁴ UH04/UH05: Unterordner `Fortna-WES-WCS/Misc/` + +--- + +## Priorität 2 — In 4 von 5 Konfigurationen vorhanden + +| Baustein | Typ | Vorhanden in | Fehlt in | Bemerkung | +|---|---|---|---|---| +| `FB_EventLog_StepChange` | FB | UH02, UH03, UH04, UH05 | UH01 | Neu, fehlt noch in UH01 | +| `FB_PriorityLogic` | FB | UH01, UH03, UH04, UH05 | UH02 | UH02 hat `FB_PriorityManagement` (abweichende Logik) | +| `FC_Get_LaneStatus` | FC (→ String) | UH01, UH03, UH04, UH05 | UH02 | UH02 verwendet andere Lane-Logik | + +--- + +## Priorität 3 — In 3 Konfigurationen vorhanden + +| Baustein | Typ | Vorhanden in | Bemerkung | +|---|---|---|---| +| `FB_Visu_JamStorage` | FB | UH01, UH02, UH03 | UH04/UH05 benötigen kein Jam-Puffer-Visu? | + +--- + +## Priorität 4 — In 2 Konfigurationen vorhanden + +### 4a) AI/Storage-Gruppe (UH02 + UH03) + +Diese Gruppe enthält die Lagerungs- und Umstapelintelligenz. Beide Konfigurationen pflegen identische Kopien. + +| Baustein | Typ | +|---|---| +| `FB_LineEmptyAnalyze` | FB | +| `FB_LineLvlAnalyze` | FB | +| `FB_RearrangeSequencer` | FB | +| `FB_RearrangeStartCoordination` | FB | +| `FB_StockRemovalBLKModul` | FB | +| `FB_StockRemovalSequencerUDT` | FB | +| `FB_StorageManagement` | FB | +| `FB_StorageManagementCall` | FB | +| `FB_UpdateMessage` | FB | + +> **Hinweis:** UH02 hat zusätzliche Varianten `_New`, `_New_EY`, `Lvl1` — diese sollten konsolidiert werden (siehe Sonderanalyse unten). + +### 4b) CPU-CPU-Exchange (UH02 + UH03) + +| Baustein | Typ | Pfad | +|---|---|---| +| `FB_I-Device_ReceiveCarrier` | FB | `_CPU-CPU-Exchange/` | +| `FB_I-Device_SendCarrier` | FB | `_CPU-CPU-Exchange/` | + +### 4c) Visu-Erweiterungen (UH02 + UH03) + +| Baustein | Typ | +|---|---| +| `FB_Visu_AuslagernAI` | FB | +| `FB_Visu_AuslagernList` | FB | +| `FB_Visu_ListPinband` | FB | + +### 4d) Kommunikation (paarweise) + +| Baustein | Typ | Vorhanden in | +|---|---|---| +| `FB_CommunicationWES_ASRS` | FB | UH02 + UH03 | +| `FC_Call_StorageLines` | FC | UH02 + UH03 | +| `FB_CommunicationWES_DeviceHub` | FB | UH04 + UH05 | + +### 4e) Längenmessung (UH01 + UH05) + +| Baustein | Typ | Pfad | +|---|---|---| +| `FB_Längenmessung` | FB | `Längenmessung/` | +| `FB_LaengenmessungAI` | FB | `970_Visu/` | + +### 4f) String-Konvertierung (UH01 + UH04) + +| Baustein | Typ | Rückgabetyp | +|---|---|---| +| `FC_usint2String` | FC | String | +| `FC_Uint2TroString` | FC | String | + +> **Zusatzempfehlung:** Zusammen mit `FC_Int2String` (5x vorhanden) prüfen, ob alle drei durch Siemens-Standardfunktionen (`INT_TO_STRING`, `USINT_TO_STRING`) ersetzt werden können. Falls eigene Formatierung nötig: zu einer parametrierbaren FC zusammenfassen. + +### 4g) AMR/F2H-Verwandtschaft (UH04 + UH05) + +| Baustein | Typ | Vorhanden in | +|---|---|---| +| `FB_ScanMonitor` | FB | UH04 + UH05 | +| `FB_TROHandshakeAMR` | FB | UH04 + UH05 | + +### 4h) Test-Bausteine (UH02 + UH03) + +| Baustein | Typ | Pfad | +|---|---|---| +| `FB_Test_RotierenMT` | FB | `_IBN/` | + +--- + +## Sonderanalyse: Versionschaos — StockRemoval (UH02) + +In UH02 existieren 4 Varianten desselben Kernbausteins nebeneinander: + +| Baustein | Pfad | Status | +|---|---|---| +| `FB_StockRemovalBLKModul` | `200_MFR/_AutomatedIntelligence/` | Original | +| `FB_StockRemovalBLKModul_New` | `200_MFR/_AutomatedIntelligence/` | Neuversion | +| `FB_StockRemovalBLKModul_New_EY` | `200_MFR/_AutomatedIntelligence/Embi/` | Sonderabzweig | +| `Fb_StockRemovalManagementLvl1` | `200_MFR/_AutomatedIntelligence/` | Lvl1-Erweiterung | + +**UH03** hat daneben noch: +- `FB_StockRemovalManagementLvl2` +- `FB_StockRemovalSequencer` +- `FB_StorageManagement_Rework` +- `FB_StorageTaskScheduler` + +**Empfehlung:** Auf eine versionierte Hauptvariante reduzieren. Unterschiede als konfigurierbare Parameter lösen. `old/`-Verzeichnisse aufräumen. + +--- + +## Sonderanalyse: "old/"-Verzeichnisse (technische Schulden) + +Folgende Bausteine liegen in `old/`-Unterordnern und sollten entfernt werden: + +| Baustein | Konfiguration | Pfad | +|---|---|---| +| `FB_AMR_Management` | UH04 | `200_MFR/_AutomatedIntelligence/old/` | +| `FB_F2H_Management` | UH05 | `200_MFR/_AutomatedIntelligence/old/` | + +--- + +## Nicht standardisierbar (anlagenspezifisch) + +Diese Bausteine sind inhärent projektspezifisch und sollten **nicht** zusammengelegt werden: + +| Baustein | Konfiguration | Begründung | +|---|---|---| +| `FB_PriorityManagement` | UH02 | Abweichende Priorisierungslogik vs. `FB_PriorityLogic` | +| `FB_OffsetCorrection` | UH02 | Anlagenspezifische Korrektur | +| `FC_ClearJam`, `FC_PutToHj` | UH01 | Spezifische MFR-Logik UH01 | +| `FB_EmptyCarrBuffer`, `FB_Pin_EmptyBuffer` | UH01 | Pin-Puffer spezifisch UH01 | +| `FB_SSCCAI` | UH01 | SSCC-Scan spezifisch | +| `ReadServerDiagnostics` | UH01 | OPC-UA Diagnose | +| `ReadSessionDiagnostics` | UH01 | OPC-UA Diagnose | +| `CheckForTimeOut` | UH01 | OPC-UA Session-Timeout | +| `LCom_Example` (OB) | UH01 | Beispiel/IBN | +| `TestBaustein`, `FB_TestMain` | UH01 | IBN/Test | +| `FB_BoomWorkStation` | UH01 | Ladeschleife spezifisch | +| `FB_ButtonAck` | UH01 | Ladeschleife spezifisch | +| `FB_DistanceFoot` | UH01 | Ladeschleife spezifisch | +| `FB_LoadingBoom_INBOUND` | UH01 | Ladeschleife spezifisch | +| `FB_MotorSimple_INBOUND` | UH01 | Ladeschleife spezifisch | +| `FB_StopperSimple` / `FB_StopperSpecial` | UH01 | Ladeschleife — könnten aber zusammengefasst werden | +| `FB_Tilt_TEST` | UH01 | Test | +| `FB_LV1BlockStorageManagement` | UH02 | Spezifisch UH02 | +| `FB_Lvl1AdditionalRouting` | UH02 | Spezifisch UH02 | +| `Fb_StockRemovalManagementLvl1` | UH02 | Spezifisch UH02 | +| `FB_StockRemovalManagementLvl2` | UH03 | Spezifisch UH03 | +| `FB_StockRemovalSequencer` | UH03 | Spezifisch UH03 | +| `FB_StorageManagement_Rework` | UH03 | Rework-Branch | +| `FB_StorageTaskScheduler` | UH03 | Spezifisch UH03 | +| `FB_AMR_Management_V2` | UH04 | AMR-Verwaltung UH04 | +| `FB_CallAMRManagement` | UH04 | AMR-Aufruflogik UH04 | +| `FB_F2H_Management_Rework` | UH05 | F2H Rework-Branch | +| `FB_CallF2HManagement` | UH05 | F2H-Aufruflogik UH05 | +| `FC_GetStationIndex` | UH05 | Stationsindex UH05 | +| `FB_PhasenTest` | UH02 | Phasenüberwachungs-Test | +| `FB_Test_RotierenMT` | UH02, UH03 | IBN-Test | + +--- + +## Zusammenfassung: Standardisierungspotenzial + +| Priorität | Anzahl Bausteine | Konfigurationsbreite | Aufwand | +|---|---|---|---| +| **P1** — Alle 5 UH | 22 | 5x | Hoch, aber höchster Nutzen | +| **P2** — 4 von 5 UH | 3 | 4x | Mittel | +| **P3** — 3 von 5 UH | 1 | 3x | Niedrig | +| **P4** — 2 von 5 UH | 23 | 2x | Nach Gruppen priorisieren | +| **Gesamt** | **49** | — | — | + +### Top-5 Quick Wins + +1. **`FC_GET_PROFINET_DEVICE_STATES`** — Reine Diagnose-FC, kein anlagenspezifischer Inhalt. Sofort in BaseSystemLib. +2. **`FB-OPC_UA_System-Stat`** — OPC-UA-Standard-Handling, identisch in allen 5 UH. Sofort in BaseSystemLib. +3. **`Programming error` (OB)** — Standard-Fehlerbehandlungs-OB, keine Anlagenlogik. +4. **`FC_Int2String` / `FC_usint2String` / `FC_Uint2TroString`** — String-Konvertierungen; prüfen ob `INT_TO_STRING` (STEP 7) ausreicht, sonst eine gemeinsame FC. +5. **`FB_CommunicationLogger`** — TCP-Logger-Logik ohne anlagenspezifische Abhängigkeiten, in allen 5 UH identisch.