# Diff-Analyse P1-Bausteine — HundM_Fortna **Stand:** 2026-06-29 **Analysiert:** 22 Bausteine die in allen 5 Konfigurationen (UH01–UH05) vorhanden sind **Methode:** Vollständiger Inhaltsvergleich aller Versionen --- ## Ergebnis-Übersicht | Baustein | Gruppe | UH01 | UH02 | UH03 | UH04 | UH05 | Aktion | |---|---|:---:|:---:|:---:|:---:|:---:|---| | `FC_GET_PROFINET_DEVICE_STATES` | **A** | ✅ | ✅ | ✅ | ✅ | ✅ | In CommonLib → Projektbibliothek | | `FB-OPC_UA_System-Stat` | **A** | ✅ | ✅ | ✅ | ✅ | ✅ | In CommonLib → Projektbibliothek | | `FC_S7` | **A** | ✅ | ✅ | ✅ | ✅ | ✅ | In CommonLib → Projektbibliothek | | `FC_CarrierManipulator` | **A** | ✅ | ✅ | ✅ | ✅ | ✅ | In CommonLib → Projektbibliothek | | `FC_Int2String` | **A** | ✅ | ✅ | ✅ | ✅ | ✅ | In CommonLib → Projektbibliothek | | `FB_FortnaTele_Placeholder` | **A** | ✅ | ✅ | ✅ | ✅ | ✅ | In CommonLib → Projektbibliothek | | `Programming error` (OB) | **B** | ✅ | ⚠️ | ✅ | ✅ | ✅ | UH02 bereinigen (VAR_TEMP entfernen) | | `FB_PerfTest` | **B** | ✅ | ✅ | ⚠️ | ✅ | ✅ | UH03 Default-Wert klären/entfernen | | `FB_CommunicationLogger` | **B** | ✅ | ⚠️ | ✅ | ✅ | ✅ | connectionID + JAM-Ref. beachten! | | `FB_Visu_Jam` | **B** | ⚠️ | ✅ | ✅ | ✅ | ✅ | UH01 cleanup: nInJamCount entfernt, REGION vereinheitlicht | | `FB_Visu_JamStorage` | **B** | ✅ | ✅ | ⚠️ | — | — | UH03 hat HMI-Block auskommentiert (nur UH01/02/03) | | `FB_Main` | **D** | ❌ | ❌ | ❌ | ❌ | ❌ | Nicht standardisierbar — TRO-Nummern, Topologie | | `FB_PreMain` | **D** | ❌ | ❌ | ❌ | ❌ | ❌ | Nicht standardisierbar — EStop, Monitoring | | `FB_CallSensors` | **D** | ❌ | ❌ | ❌ | ❌ | ❌ | Nicht standardisierbar — Sensor-IDs, Hardware | | `FB_Visu` | **D** | ❌ | ❌ | ❌ | ❌ | ❌ | Nicht standardisierbar — TRO-Ranges, Config | | `FB_CommunicationWCSBL` | **D** | ❌ | ❌ | ❌ | ❌ | ❌ | ConnectionID 10/20/30/40/50, Logik je UH reduziert | | `FC_Call_Jams` | **D** | ❌ | ❌ | ❌ | ❌ | ❌ | Jam-Bereichsnummern je UH (0100/1100/2100/4000/5000) | | `FC_Direction` | **D** | ❌ | ❌ | ❌ | ❌ | ❌ | Weichen-Nummern je UH | | `FB_Visu_Jams` | **D** | ❌ | ❌ | ❌ | ❌ | ❌ | Jam-Instanzen je UH | | `FC_CARR_GLOB_CORRECTION` | **D** | ❌ | ❌ | ❌ | ❌ | ❌ | 568–5826 Zeilen je UH (Faktor 10!) | | `FC_BARCODE_SEARCH` | **D** | ❌ | ❌ | ❌ | ❌ | ❌ | UH01: 2 Lagerbereiche, UH02–UH05: 12 | | `FC_Jam` | **D** | ❌ | ❌ | ❌ | ❌ | ❌ | UH02/UH03 mit erweiterter Storage-Logik | **Legende:** ✅ = identisch mit Referenz | ⚠️ = kleine Abweichung | ❌ = topologie-spezifisch | — = nicht vorhanden --- ## Gruppe A — 100% identisch (6 Blöcke) ### FC_GET_PROFINET_DEVICE_STATES - **Typ:** FC, 28 Zeilen - **Funktion:** Liest PROFINET-Gerätezustände (vorhanden/gestört) via `DeviceStates()` - **Status:** Alle 5 Versionen byte-identisch - **Kanonische Version:** UH01 (gleichwertig) ### FB-OPC_UA_System-Stat - **Typ:** FB, 73 Zeilen - **Funktion:** Übersetzt internen Anlagenstatus in OPC-UA SCADA-Statuscodes - **Status:** Alle 5 Versionen byte-identisch - **Kanonische Version:** UH01 (gleichwertig) ### FC_S7 - **Typ:** FC, 63 Zeilen - **Funktion:** S7-PUT Wrapper für CPU-zu-CPU-Datenaustausch - **Status:** Alle 5 Versionen byte-identisch - **Kanonische Version:** UH01 (gleichwertig) ### FC_CarrierManipulator - **Typ:** FC, 159 Zeilen - **Funktion:** HMI-gesteuerte Carrier-Manipulation in Jam-Listen (Löschen, Verschieben, HyperJam) - **Status:** Alle 5 Versionen byte-identisch (MD5 identisch) - **Kanonische Version:** UH01 (gleichwertig) ### FC_Int2String - **Typ:** FC, 25 Zeilen - **Funktion:** Wandelt INT in String, entfernt führendes "+" (Autor: Christian Forkl, 28.07.2021) - **Status:** Alle 5 Versionen byte-identisch - **Kanonische Version:** UH01 (gleichwertig) ### FB_FortnaTele_Placeholder - **Typ:** FB, 37 Zeilen (nur Variablendeklaration, kein Code) - **Funktion:** Platzhalter-Baustein mit allen Fortna WES/WCS UDT-Instanzen zur Typ-Aktivierung - **Status:** Alle 5 Versionen byte-identisch - **Kanonische Version:** UH01 (gleichwertig) --- ## Gruppe B — Kleine Abweichungen (5 Blöcke) ### Programming error (OB) - **Typ:** OB (Organization Block), 33 Zeilen - **Funktion:** Fehlerbehandlung bei Programmierfehler, schreibt Fehlerinfo in DB_Error - **Abweichung UH02:** Hat zusätzliche `VAR_TEMP` Sektion mit ungenutzter `Temp_1 : Bool` - **Entscheidung:** UH01-Version ist korrekt. UH02-VAR_TEMP ist redundant und sollte entfernt werden. - **CommonLib-Version:** UH01 (ohne VAR_TEMP) ### FB_PerfTest - **Typ:** FB, 105 Zeilen - **Funktion:** Leistungsmessung — zählt Trolley-Releases und protokolliert Zeitstempel - **Abweichung UH03:** `nInGoalFlags : Int := 498;` (Default-Wert = 498 = Array-Größe 500 minus 2) - **Abweichung UH03:** Eine fehlende Leerzeile nach `END_IF` - **Entscheidung:** Default-Wert in UH03 war vermutlich temporär für Tests gesetzt. UH01-Version (kein Default) ist der Standard. Falls UH03 den Default bewusst nutzt, muss dieser nach TIA-Import im Instanz-DB gesetzt werden. - **CommonLib-Version:** UH01 (kein Default-Wert für `nInGoalFlags`) ### FB_CommunicationLogger - **Typ:** FB, 229 Zeilen - **Funktion:** TCP-Logger Kommunikation zu Fortna WCSBL, empfängt GOHDRespM-Telegramme - **Abweichung UH02:** `connectionID := 100` (UH01/UH03/UH04/UH05 = 99) - **Wichtig:** `connectionID` muss je PLC eindeutig sein! Dies ist KEIN Fehler in UH02, sondern möglicherweise bewusst. - **Weitere Abweichung:** Zeilen 171–179 (Jam-Referenz auf `"DB_JamArea0102"`) sind UH01-spezifisch - **Entscheidung:** CommonLib-Version nimmt UH01 als Basis mit explizitem Kommentar: - `connectionID` muss beim Import in UH02–UH05 angepasst werden - Jam-Referenz `"DB_JamArea0102"` bei anderen PLCs auskommentieren oder ersetzen - **CommonLib-Version:** UH01 mit Hinweis-Kommentaren ### FB_Visu_Jam - **Typ:** FB, 207 Zeilen - **Funktion:** HMI-Listenverwaltung für Jam-Carrier-Anzeige (Scroll, Carrier-Manipulation) - **Abweichung UH01:** Hat ungenutzten `VAR_INPUT nInJamCount : UInt` — in UH02/UH03/UH04/UH05 nicht vorhanden - **Abweichung UH01:** REGION-Name "Carrier Manipulation" — in anderen UH "FC_CAR_MOVE" - **Bereinigungen in CommonLib-Version:** - `VAR_INPUT` Sektion vollständig entfernt (`nInJamCount` war unbenutzt) - REGION umbenannt zu "FC_CAR_MOVE" (einheitlich mit UH02–UH05) - **CommonLib-Version:** Bereinigt ### FB_Visu_JamStorage - **Typ:** FB, 200 Zeilen - **Funktion:** HMI-Listenverwaltung für Lager-Jam-Carrier-Anzeige (nur in UH01/UH02/UH03) - **Nicht vorhanden in:** UH04, UH05 - **Abweichung UH03:** HMI-REGION (Zeilen 193–196) ist auskommentiert — `nCapacitySetHMI`-Zuweisung deaktiviert - **Entscheidung:** UH01-Version ist die vollständigste (aktive HMI-Logik). UH03 hat bewusst deaktiviert. - **CommonLib-Version:** UH01 (aktive HMI-Logik) --- ## Gruppe D — Topologie-spezifisch (11 Blöcke) Diese Blöcke können **nicht ohne vollständiges Redesign** standardisiert werden, da sie hartcodierte Werte enthalten, die die physikalische Anlagentopologie abbilden. | Baustein | Hartcodierte Topologie-Werte | Größenunterschied | |---|---|---| | `FB_Main` | TRO-Nummern (100er/200er/300er/400er/500er), Workstations, Carousel-IDs, UDT-Referenzen | 1835–9293 Zeilen | | `FB_PreMain` | EStop-Konstanten (10–31 je UH), Monitoring-Instanzen, Befeuerungs-Konfiguration (1x/2x/4x) | 491–2373 Zeilen | | `FB_CallSensors` | Sensor-IDs (BG0280/BG3240 etc.), Schaltschrank-State-Referenzen | 769–11649 Zeilen | | `FB_Visu` | TRO-Ranges, Schaltschrank-IDs, EStop-Array-Größen | 70–1796 Zeilen | | `FB_CommunicationWCSBL` | ConnectionID 10/20/30/40/50 je UH, Telegramm-Logik je UH verschieden | — | | `FC_Call_Jams` | Jam-Bereichsnummern (0100er/1100er/2100er/4000er/5000er) | — | | `FC_Direction` | Weichen-Nummern (cSwi107/cSwi202/cSwi313/cSwi405/cSwi505) | — | | `FB_Visu_Jams` | Jam-Instanzen (Anzahl und Art je UH) | 32–52 KB | | `FC_CARR_GLOB_CORRECTION` | Jam-Bereiche, Stationsnummern | 568–5826 Zeilen | | `FC_BARCODE_SEARCH` | Lagerbereiche: UH01=2, UH02–UH05=12 | — | | `FC_Jam` | UH02/UH03 mit erweiterter `CarrierStatisticsStorage`-Logik | 85–203 Zeilen | ### Empfehlung für Gruppe-D-Blöcke Langfristig könnten diese Blöcke durch **Code-Generierung** aus einer zentralen Topologie-Konfigurationsdatei (z.B. UDT-Array oder JSON) erstellt werden. Kurzfristig: Getrennte Pflege je UH bleibt notwendig. --- ## Entscheidungsstatus FC_StorageLines (Sonderfall) `FC_StorageLines` war zunächst als P1-Kandidat eingestuft: - **UH01, UH03, UH05:** identisch (gleiches MD5) - **UH02, UH04:** abweichend (unterschiedliche Storage-Strukturen) Da nicht alle 5 UH identisch sind, wurde dieser Block **nicht** in die CommonLib aufgenommen. Möglichkeit: Separate CommonLib-Instanz nur für UH01/UH03/UH05 — bei Bedarf ergänzen.