> For the complete documentation index, see [llms.txt](https://docs.augelab.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.augelab.com/german/funktionsblocke/blocks-reference/input-output/communication/siemens-s7-write.md).

# Siemens S7 Write

Dieser Funktionsblock schreibt Werte in eine Siemens S7 PLC. Er akzeptiert einen Dateneingang und eine Client-Referenz und kann sofortige (synchron) oder geplante Hintergrund- (asynchron) Schreibvorgänge ausführen. Optional kann ein Wert angegeben werden, der beim Stoppen des Systems oder beim Entfernen des Blocks geschrieben wird.

## 📥 Eingänge

`Enable`\
Geben Sie einen Boolean an, um Schreibvorgänge zu erlauben oder zu verhindern. Wenn nicht angegeben oder True, werden Schreibvorgänge ausgeführt.

`Data`\
Der Wert, der in die PLC geschrieben werden soll. Akzeptiert den in den Steuerungen ausgewählten Datentyp.

`[Optional] Data on Stop`\
Optionaler Wert, der geschrieben wird, wenn der Block gestoppt oder entfernt wird.

`S7 Client`\
Die PLC-Client-/Verbindungsreferenz, die zum Ausführen des Schreibvorgangs verwendet wird. (Bereitstellen über einen Verbindungsblock wie `Siemens S7 Connect`.)

## 📤 Ausgänge

Dieser Funktionsblock liefert keine Ausgänge.

## 🕹️ Steuerungen

`DB Number`\
Geben Sie die DB-Nummer im PLC an, in die der Wert geschrieben werden soll.

`DB Byte Address`\
Geben Sie die Byte-Verschiebung innerhalb des ausgewählten DB an.

`Bit Position`\
Bei Boolean-Schreibvorgängen wählen Sie die Bit-Position innerhalb des Zielbytes.

`DB Data Type`\
Wählen Sie den Datentyp, der geschrieben werden soll (z. B. boolean, integer, float, string). Der Block konvertiert den Eingabewert entsprechend dieser Auswahl.

`Connection Type`\
Wählen Sie zwischen `Sync` und `Async`. `Sync` führt den Schreibvorgang sofort aus und verwendet eine gemeinsame Verbindung; `Async` plant den Schreibvorgang im Hintergrund und verwendet eine dedizierte Verbindung für diesen Block.

## 🎛️ Key Features

* Unterstützung mehrerer PLC-Datentypen mit expliziter Auswahl über `DB Data Type`.
* Byte- und Bit-Adressierung für präzise Platzierung von boolean- oder skalaren Werten.
* Zwei Schreibmodi:
  * Synchronous (sofortige) Writes für deterministische Einzel-Schritt-Operationen.
  * Asynchronous (Hintergrund-)Writes, um den Hauptablauf nicht zu blockieren und längere Schreibvorgänge auszulagern.
* Optionales Safe-Write-on-Stop: Ein an `[Optional] Data on Stop` übergebener Wert wird automatisch beim Stoppen oder Entfernen des Blocks geschrieben.
* Verbindungsverwaltung und erneute Verbindung bei Änderung der Client-Adresse.
* Klare Fehlermeldungen und Warnungen zur Diagnose von Verbindungs- oder Typproblemen.

## ⚙️ Ablauf

* Wenn `Enable` fehlt oder True ist, versucht der Block, den in `Data` bereitgestellten Wert in die PLC an der konfigurierten DB- und Byte-Adresse zu schreiben.
* Ist `Connection Type` auf `Sync` gesetzt, verwendet der Block eine gemeinsame synchrone Verbindung und führt den Schreibvorgang sofort aus.
* Ist `Connection Type` auf `Async` gesetzt, plant der Block den Schreibvorgang an einen Hintergrund-Worker, sodass der Hauptablauf nicht blockiert wird; hierfür wird eine dedizierte Verbindungsinstanz für den Block verwendet.
* Wenn die Client-Referenz auf `S7 Client` nicht verbunden ist, versucht der Block, sich vor dem Schreiben (erneut) zu verbinden.
* Beim Stoppen oder Entfernen versucht der Block, den in `[Optional] Data on Stop` angegebenen Wert zu schreiben, um einen definierten Endzustand sicherzustellen.

## 📝 Nutzungshinweise

1. Stellen Sie eine PLC-Client-Referenz an `S7 Client` bereit (verwenden Sie `Siemens S7 Connect`, um die Verbindung zu erstellen).
2. Konfigurieren Sie die Zieladresse mit `DB Number` und `DB Byte Address`.
3. Bei Boolean-Werten setzen Sie die `Bit Position`.
4. Wählen Sie den passenden `DB Data Type` für die zu schreibenden Daten.
5. Wählen Sie `Connection Type`:
   * Verwenden Sie `Sync`, wenn Sie sofortige Schreibvorgänge möchten und die Verbindung mit anderen Blöcken teilen wollen.
   * Verwenden Sie `Async`, um Schreibvorgänge im Hintergrund auszuführen und den Ablauf nicht zu blockieren.
6. Speisen Sie den zu schreibenden Wert in `Data` ein und aktivieren Sie das Schreiben mit `Enable`.
7. Optional: Geben Sie einen Wert in `[Optional] Data on Stop` an, der beim Stoppen oder Entfernen des Blocks geschrieben werden soll.

## 💡 Tipps und Tricks

* Verwenden Sie `Siemens S7 Connect`, um eine zuverlässige Client-Referenz für die Eingabe `S7 Client` bereitzustellen.
* Kombinieren Sie mit `Siemens S7 Read`, um Register vor oder nach dem Schreiben zu überprüfen.
* Nutzen Sie `Logic Input`, um den `Enable`-Socket über einen einfachen UI-Schalter zu steuern.
* Wenn Sie Text oder strukturierte Daten vorbereiten oder formatieren müssen, prüfen Sie upstream `String Input` oder `Data to JSON`.
* Verwenden Sie `Data Write Global` / `Data Write Local` oder `Data Memory`, um Werte zu speichern, die von mehreren Stellen im Flow geschrieben werden sollen.
* Für Logging oder Diagnose: Verbinden Sie `CSV Export` oder `Debug Input`, um geschriebene Werte zu erfassen oder zu inspizieren.
* Bevorzugen Sie `Sync`-Modus, wenn mehrere Blöcke in dieselbe DB/Byte schreiben, um Schreibkonflikte zu vermeiden; wählen Sie `Async`, wenn Schreibvorgänge unabhängig gehandhabt werden können, um Latenz zu reduzieren.

## 🛠️ Fehlersuche

* Verlorene Verbindung / Schreibfehler: Prüfen Sie die Erreichbarkeit der PLC und den an `S7 Client` übergebenen Client. Verwenden Sie `Siemens S7 Connect`, um die Verbindung separat zu testen.
* Falsche Datenwerte: Stellen Sie sicher, dass der gewählte `DB Data Type` mit dem tatsächlichen PLC-Variablentyp übereinstimmt, und passen Sie `DB Byte Address` / `Bit Position` entsprechend an.
* Server beschäftigt oder konkurrierende Schreibvorgänge: Wenn Warnungen über einen beschäftigten Server erscheinen, versuchen Sie, für gemeinsam genutzte, serialisierte Schreibvorgänge auf dieselben Adressen den `Sync`-Modus zu verwenden, oder stellen Sie sicher, dass jeder Schreiber separate Adressen nutzt.
* Wert wird beim Stop nicht geschrieben: Stellen Sie sicher, dass ein gültiger Wert an `[Optional] Data on Stop` übergeben wurde und der Block die Finalisierung ausführen darf (bei einigen Shutdown-Szenarien sind finale Schreibvorgänge möglicherweise nicht möglich).

## ✅ Sicherheit und bewährte Vorgehensweisen

* Überprüfen Sie DB- und Byte-Adressen sorgfältig, bevor Sie Änderungen an Live-PLCs vornehmen, um unbeabsichtigte Änderungen zu vermeiden.
* Verwenden Sie Write-on-Stop mit Vorsicht; stellen Sie sicher, dass die Stopp-Sequenz dem Block erlaubt, den finalen Schreibvorgang abzuschließen.
* Bevorzugen Sie dedizierte Verbindungen (`Async`) für intensive oder häufige Schreibaufgaben, die den Hauptablauf nicht blockieren sollen; verwenden Sie `Sync`, wenn Schreibvorgänge zwischen mehreren Blöcken koordiniert werden müssen.
