# TIA Portal Projektbibliothek — Anleitung

**Projekt:** HundM_Fortna
**Stand:** 2026-06-29
**Ziel:** Kanonische Bausteine aus `_CommonLib/` in die TIA Portal Projektbibliothek übernehmen

---

## Voraussetzungen

- TIA Portal V17 oder höher
- Alle 5 PLCs (UH01–UH05) im selben TIA Portal Projekt geöffnet
- `_CommonLib/Programmbausteine/` als Referenz-Ordner vorhanden (dieses Repository)

---

## Schritt 1: SCL-Datei in einen PLC importieren

Für jeden Baustein aus `_CommonLib/` einmalig:

1. Im TIA Portal Projektbaum: Beliebigen PLC auswählen (z.B. UH01)
2. `Programmbausteine` → Rechtsklick → **"Externe Quelldatei einfügen"**
3. SCL-Datei aus `_CommonLib/Programmbausteine/<Pfad>/` auswählen
4. Der Baustein erscheint unter `Programmbausteine` → **Kompilieren** (F11)
5. Sicherstellen: Keine Kompilierfehler

**Gruppe-A-Blöcke (direkt importierbar, keine Anpassung nötig):**

| SCL-Datei | PLC-Pfad nach Import |
|---|---|
| `PROFINET/FC_GET_PROFINET_DEVICE_STATES.scl` | PLC → Programmbausteine → PROFINET |
| `SCADA/FB-OPC_UA_System-Stat.scl` | PLC → Programmbausteine → SCADA |
| `970_Visu/FC_CarrierManipulator.scl` | PLC → Programmbausteine → 970_Visu |
| `400_BasicFunctions/FC/FC_Int2String.scl` | PLC → Programmbausteine → 400_BasicFunctions |
| `900_Communications/FB_FortnaTele_Placeholder.scl` | PLC → Programmbausteine → 900_Communications |
| `_IBN/FC_S7.scl` | PLC → Programmbausteine → _IBN |

**Gruppe-B-Blöcke (vor Import Hinweise beachten → siehe Abschnitt "Gruppe B"):**

| SCL-Datei | Besonderheit |
|---|---|
| `Programming error.scl` | OB — direkt importierbar |
| `_PerformanceMeasurement_/FB_PerfTest.scl` | Kein Default-Wert; falls gewünscht im Instanz-DB setzen |
| `900_Communications/TCP-Logger/FB_CommunicationLogger.scl` | connectionID anpassen! Jam-Referenz prüfen! |
| `970_Visu/FB_Visu_Jam.scl` | VAR_INPUT `nInJamCount` entfernt — Aufrufe prüfen |
| `970_Visu/FB_Visu_JamStorage.scl` | Nur für UH01/UH02/UH03 relevant |

---

## Schritt 2: Baustein in Projektbibliothek speichern

Nachdem der Baustein in einem PLC kompiliert wurde:

1. Baustein im Projektbaum markieren
2. Rechtsklick → **"In Projektbibliothek kopieren"**
3. Im Dialog:
   - Bibliotheksname: `HundM_CommonLib`
   - Typ: **Typ** (nicht Instanz)
   - Version: `V1.0.0`
4. Bestätigen → Baustein erscheint unter **Projektbibliothek → Typen**

---

## Schritt 3: Lokale Kopien in anderen PLCs ersetzen

Für jeden weiteren PLC (UH02–UH05):

1. Lokalen Baustein in diesem PLC **löschen** (Rechtsklick → Löschen)
   - TIA Portal warnt, falls der Baustein noch aufgerufen wird — dann erst Aufrufe anpassen
2. In der **Projektbibliothek** (linkes Panel): `HundM_CommonLib → Typen`
3. Baustein per **Drag & Drop** in `Programmbausteine` des Ziel-PLCs ziehen
4. TIA Portal erstellt automatisch eine Bibliotheksreferenz (kein lokaler SCL-Code mehr)
5. **Kompilieren** und Konsistenzprüfung durchführen

---

## Schritt 4: Konsistenzprüfung aller PLCs

Nach Abschluss aller Blöcke:

1. **Gesamtprojekt kompilieren:** Menü → Kompilieren → Alle Bausteine
2. **Konsistenzprüfung:** Extras → Konsistenz prüfen
3. Alle 5 PLCs müssen ohne Fehler kompilieren

---

## Gruppe B: Besondere Hinweise vor dem Import

### FB_CommunicationLogger — connectionID

Die `connectionID` in diesem Block ist ein TCP-Verbindungsparameter, der je PLC eindeutig sein muss:

| PLC | Aktuelle connectionID |
|---|---|
| UH01 | 99 |
| UH02 | 100 (bewusst verschieden!) |
| UH03 | 99 |
| UH04 | 99 |
| UH05 | 99 |

**Empfehlung:** Nach Übernahme in die Projektbibliothek die `connectionID` als FB-Parameter
herausziehen (VAR_INPUT), damit jeder PLC seinen eigenen Wert im Aufruf setzen kann.
Alternativ: Im Instanz-DB der jeweiligen PLC nach dem Drag & Drop anpassen.

**Zusätzlich:** Zeile mit `"DB_JamArea0102"` ist UH01-spezifisch. In anderen PLCs
diesen Abschnitt anpassen oder auskommentieren.

### FB_Visu_Jam — VAR_INPUT entfernt

Die CommonLib-Version hat `nInJamCount : UInt` aus VAR_INPUT entfernt (war unbenutzt).
Falls bestehende Aufrufe in UH01 diesen Parameter übergeben:
→ Den Aufruf in UH01 anpassen (Parameter entfernen)

---

## Git-Workflow nach TIA-Export

Nach erfolgter Bibliotheksintegration und erneutem TIA Portal Export:

```
# Erwartete Git-Änderungen:
# - Lokale .scl Dateien in UH01-UH05 werden ersetzt durch TIA-interne Library-Referenz
# - Möglicherweise erscheinen neue .liblink Dateien für die CommonLib-Blöcke

git status
# Geänderte/gelöschte .scl Dateien überprüfen
# _CommonLib/*.scl bleiben unverändert (Quelle der Wahrheit)

git add _CommonLib/
git commit -m "CommonLib angelegt: 11 standardisierte P1/P2-Bausteine"
```

**Regel:** Änderungen an standardisierten Blöcken **immer** in `_CommonLib/` beginnen,
dann in TIA Portal aktualisieren, dann exportieren und committen.

---

## Übersicht: Was wurde standardisiert

### Gruppe A (6 Blöcke — 100% identisch)
- `FC_GET_PROFINET_DEVICE_STATES` — PROFINET-Gerätezustände
- `FB-OPC_UA_System-Stat` — OPC-UA Statusübersetzung
- `FC_S7` — S7 PUT-Wrapper (CPU-zu-CPU)
- `FC_CarrierManipulator` — HMI Carrier-Manipulation
- `FC_Int2String` — String-Konvertierung
- `FB_FortnaTele_Placeholder` — Fortna UDT-Platzhalter

### Gruppe B (5 Blöcke — bereinigt)
- `Programming error` (OB) — UH02-VAR_TEMP entfernt
- `FB_PerfTest` — Default-Wert bereinigt
- `FB_CommunicationLogger` — connectionID-Hinweis ergänzt
- `FB_Visu_Jam` — nInJamCount entfernt, REGION vereinheitlicht
- `FB_Visu_JamStorage` — UH01 als kanonische Version

### Nicht standardisiert (Gruppe D — 11 Blöcke)
Topologie-spezifische Blöcke (FB_Main, FB_PreMain, FB_CallSensors, FB_Visu,
FB_CommunicationWCSBL, FC_Call_Jams, FC_Direction, FB_Visu_Jams,
FC_CARR_GLOB_CORRECTION, FC_BARCODE_SEARCH, FC_Jam)
bleiben je UH individuell — Pflege weiterhin getrennt.
