# Siemens S7 Write

This function block writes data to a Siemens S7 PLC (Data Block). Use it to send numbers, booleans, strings and other supported types into a PLC address directly from your scenario.

## 📥 Eingänge

`Enable`\
Geben Sie TRUE an, um das Schreiben zu erlauben. Wenn FALSE oder leer, wird kein Schreibvorgang ausgeführt.

`Data`\
Der Wert, der in die SPS geschrieben werden soll. Akzeptiert numerische Werte, Booleans, Text oder komplexe Daten abhängig vom gewählten `DB Data Type`.

`[Optional] Data on Stop`\
Falls angegeben, wird dieser Wert einmalig geschrieben, wenn das Szenario oder der Block gestoppt bzw. entfernt wird.

`S7 Client`\
Geben Sie eine Verbindungsreferenz von einem Verbindungsblock (z. B. `Siemens S7 Connect`) an, damit der Block die SPS erreichen kann.

## 📤 Ausgänge

Dieser Funktionsblock erzeugt keine Ausgänge.

## 🕹️ Controls

`DB Number`\
Nummer des Data Blocks, in den auf der SPS geschrieben werden soll.

`DB Byte Address`\
Start-Byte-Adresse innerhalb des gewählten DB, an der der Wert geschrieben wird.

`Bit Position`\
Nur für Boolean-Schreibvorgänge verwenden — wählt aus, welches Bit innerhalb des Zielbytes gesetzt werden soll.

`DB Data Type`\
Wählen Sie den zu schreibenden Datentyp (z. B. Boolean, Int, Real, String, Time, etc.). Die Wahl bestimmt, wie der Eingabewert auf SPS-Seite kodiert wird.

`Connection Type`\
Wählen Sie `Async` oder `Sync`. `Async` plant das Schreiben in einem Hintergrund-Worker; `Sync` führt das Schreiben sofort aus.

## 🎯 Features

* Unterstützung zahlreicher SPS-Datentypen (numerisch, Boolean, Strings usw.).
* Optionaler "write on stop"-Wert, der beim Stoppen des Blocks/Szenarios in die SPS geschrieben wird.
* Zwei Verbindungsmodi: synchrones (sofortiges) Schreiben und asynchrones Schreiben im Hintergrund, um den Hauptablauf nicht zu blockieren.
* Automatische Wiederverbindung, wenn sich die Client-Adresse ändert (nützlich beim Umstrukturieren von Verbindungen).
* Einfache UI-Steuerung für DB-, Byte- und Bit-Adressen — kein Code erforderlich.

## ⚙️ Funktionsweise

* Wenn `Enable` TRUE ist und ein gültiger `S7 Client` vorhanden ist, versucht der Block, `Data` in den gewählten DB und die Byte-Adresse mit dem ausgewählten `DB Data Type` zu schreiben.
* Bei `Connection Type = Async` wird das Schreiben in einem Hintergrund-Worker geplant, sodass das Hauptszenario ohne Verzögerung weiterläuft.
* Bei `Connection Type = Sync` wird das Schreiben im aktuellen Ausführungsschritt durchgeführt.
* Wenn in `[Optional] Data on Stop` ein Wert angegeben wurde, wird dieser automatisch geschrieben, wenn der Block gestoppt oder entfernt wird.
* Der Block protokolliert informative Meldungen bei Erfolg, Warnungen, wenn PLC/Client beschäftigt sind, und Fehler, wenn Schreibvorgänge fehlschlagen oder Parameter ungültig sind.

## 📝 Nutzungshinweise

1. Fügen Sie einen Verbindungsblock wie `Siemens S7 Connect` hinzu und konfigurieren Sie die SPS-Adresse.
2. Verbinden Sie diese Verbindung mit dem Eingangsport `S7 Client` dieses Blocks.
3. Setzen Sie `DB Number`, `DB Byte Address` und, falls Sie ein Boolean schreiben, `Bit Position`.
4. Wählen Sie den passenden `DB Data Type` für den zu schreibenden Wert.
5. Wählen Sie `Connection Type`:
   * `Sync` für sofortige Schreibvorgänge oder wenn nur wenige Schreibvorgänge stattfinden.
   * `Async`, um häufige oder langsame Schreibvorgänge in den Hintergrund auszulagern.
6. Geben Sie einen Wert in den Eingangsport `Data` (für manuelle Eingabe können Sie Blöcke wie `Number Input` oder `String Input` verwenden).
7. Aktivieren Sie den Block, indem Sie TRUE an `Enable` übergeben, um das Schreiben auszulösen.
8. Optional: Geben Sie einen Wert für `[Optional] Data on Stop` an, der beim Stoppen geschrieben werden soll.

## 💡 Tipps und Tricks

* Verwenden Sie `Siemens S7 Connect` zusammen mit diesem Block, um die SPS-Verbindung zu verwalten und den Eingang `S7 Client` zu versorgen.
* Prüfen Sie nach dem Schreiben die Werte mit `Siemens S7 Read`, um den erwarteten DB-Inhalt zu bestätigen.
* Für manuelle Auslöser kombinieren Sie mit `Logic Input` oder `Number Input`, um Schreibvorgänge zu steuern.
* Beim Schreiben von Texten nutzen Sie `String Input`, damit die Kodierung erwartungsgemäß übereinstimmt.
* Zum Speichern von Werten für spätere Nutzung oder zur Koordination mehrerer Blöcke kombinieren Sie mit `Data Write Local` / `Data Read Local` oder `Data Write Global` / `Data Read Global`.
* Verwenden Sie `Debug Input`, um Werte vor dem Senden zu protokollieren oder zu inspizieren.
* Bevorzugen Sie `Sync`, wenn mehrere Blöcke dieselben Bytes beschreiben müssen — das reduziert Race-Conditions. Verwenden Sie `Async` für höhere Durchsatzraten, wenn die Schreibvorgänge unabhängig sind.

## 🛠️ Fehlersuche

* Verbindungsfehler oder Meldungen "cannot write":
  * Stellen Sie sicher, dass der Eingang `S7 Client` verbunden ist und der Verbindungsblock mit der korrekten SPS-Adresse konfiguriert und aktiv ist.
  * Versuchen Sie, die Verbindung im Verbindungsblock neu herzustellen.
* Falsche Werte in der SPS:
  * Überprüfen Sie `DB Number`, `DB Byte Address` und `Bit Position` für die Zielvariable.
  * Stellen Sie sicher, dass der gewählte `DB Data Type` dem SPS-Variablentyp entspricht (z. B. führt das Schreiben eines Float mit einem Integer-Typ zu falschen Werten).
* Zeichenketten werden abgeschnitten oder sind korrupt:
  * Prüfen Sie, ob die SPS-Seite ein Längenbyte oder einen festen Puffer erwartet. Begrenzen Sie ggf. die String-Länge.
* Schreibvorgänge sind zu langsam oder blockieren das Szenario:
  * Wechseln Sie zu `Connection Type = Async`, damit die Schreibvorgänge im Hintergrund stattfinden.
* Mehrere Schreiber auf dieselbe Adresse verursachen Konflikte:
  * Verwenden Sie `Sync` für Blöcke, die in dieselben DB/Bytes schreiben, oder zentralisieren Sie Schreibvorgänge über einen einzigen dedizierten Writer-Block.

Wenn Probleme weiterhin bestehen, überprüfen Sie die Adresszuordnung auf der SPS erneut und validieren Sie mit einem Lesevorgang (z. B. `Siemens S7 Read`) bevor Sie sich auf nachfolgende Schreibvorgänge verlassen.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.augelab.com/german/function-blocks/input-output/communication/siemens-s7-write.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
