> 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/french/function-blocks/blocks-reference/input-output/communication/siemens-s7-write.md).

# Siemens S7 Write

Ce bloc de fonction écrit des valeurs dans un automate Siemens S7. Il accepte une entrée de données et une référence client, et peut effectuer des écritures immédiates (synchrones) ou planifiées en arrière-plan (asynchrones). Une valeur optionnelle peut être fournie pour être écrite lorsque le système s'arrête ou que le bloc est supprimé.

## 📥 Inputs <a href="#inputs" id="inputs"></a>

* `Enable`\
  Fournissez un booléen pour autoriser ou inhiber les écritures. Lorsqu'il n'est pas fourni ou à `True`, les écritures sont effectuées.
* `Data`\
  La valeur à écrire dans l'automate. Accepte le type de données sélectionné dans les contrôles.
* `[Optional] Data on Stop`\
  Valeur optionnelle qui sera écrite lorsque le bloc est arrêté ou supprimé.
* `S7 Client`\
  La référence client/connexion au PLC utilisée pour effectuer l'écriture. (Fournir via un bloc de connexion tel que `Siemens S7 Connect`.)

## 📤 Outputs <a href="#outputs" id="outputs"></a>

Ce bloc de fonction ne produit pas de sorties.

## 🕹️ Controls <a href="#controls" id="controls"></a>

* `DB Number`\
  Spécifiez le numéro de DB à l'intérieur du PLC où la valeur sera écrite.
* `DB Byte Address`\
  Spécifiez l'offset en octets à l'intérieur du DB sélectionné.
* `Bit Position`\
  Pour les écritures booléennes, sélectionnez la position du bit dans l'octet ciblé.
* `DB Data Type`\
  Choisissez le type de données à écrire (par exemple : boolean, integer, float, string). Le bloc convertit la valeur d'entrée selon cette sélection.
* `Connection Type`\
  Choisissez entre les modes `Sync` et `Async`. `Sync` effectue l'écriture immédiatement et partage une connexion commune ; `Async` planifie l'écriture en arrière-plan et utilise une connexion dédiée pour ce bloc.

## 🎛️ Key Features <a href="#features" id="features"></a>

* Prise en charge de plusieurs types de données PLC avec sélection explicite via `DB Data Type`.
* Adressage par octet et par bit pour un placement précis des valeurs booléennes ou scalaires.
* Deux modes d'écriture :
  * Écritures synchrones (immédiates) pour des opérations déterministes en une seule étape.
  * Écritures asynchrones (en arrière-plan) pour éviter de bloquer le flux principal et décharger les écritures plus longues.
* Écriture sécurisée optionnelle à l'arrêt : une valeur fournie à `[Optional] Data on Stop` est écrite automatiquement lors de l'arrêt ou de la suppression du bloc.
* Gestion de connexion et reconnexion lorsque l'adresse client change.
* Messages d'erreur et d'avertissement clairs pour aider au diagnostic des problèmes de connectivité ou de type.

## ⚙️ How it runs <a href="#running-mechanism" id="running-mechanism"></a>

* Lorsque `Enable` est absent ou `True`, le bloc tente d'écrire la valeur fournie sur `Data` dans le PLC à l'adresse DB et l'adresse octet configurées.
* Si `Connection Type` est réglé sur `Sync`, le bloc utilise une connexion synchrone partagée et effectue l'écriture immédiatement.
* Si `Connection Type` est réglé sur `Async`, le bloc planifie l'écriture sur un worker en arrière-plan afin que le flux principal ne soit pas bloqué ; cela utilise une instance de connexion dédiée pour le bloc.
* Si la référence client sur `S7 Client` n'est pas connectée, le bloc tentera de (re)connecter avant d'essayer l'écriture.
* Lors de l'arrêt ou de la suppression, le bloc tentera d'écrire la valeur fournie à `[Optional] Data on Stop` pour garantir un état final défini.

## 📝 Usage Instructions <a href="#usage" id="usage"></a>

1. Fournissez une référence client PLC à `S7 Client` (utilisez `Siemens S7 Connect` pour créer la connexion).
2. Configurez l'adresse cible en utilisant `DB Number` et `DB Byte Address`.
3. Pour écrire des booléens, définissez `Bit Position`.
4. Sélectionnez le `DB Data Type` approprié pour les données que vous allez écrire.
5. Choisissez `Connection Type` :
   * Utilisez `Sync` lorsque vous souhaitez des écritures immédiates et partager la connexion entre blocs.
   * Utilisez `Async` pour décharger les écritures en arrière-plan et éviter de bloquer le flux.
6. Alimentez la valeur à écrire dans `Data` et activez l'écriture avec `Enable`.
7. Facultatif : fournissez une valeur dans `[Optional] Data on Stop` pour qu'elle soit écrite lors de l'arrêt ou de la suppression du bloc.

## 💡 Tips and Tricks <a href="#tips-and-tricks" id="tips-and-tricks"></a>

* Utilisez `Siemens S7 Connect` pour fournir une référence client fiable à l'entrée `S7 Client`.
* Combinez avec `Siemens S7 Read` pour vérifier les registres avant ou après les écritures.
* Utilisez `Logic Input` pour piloter la broche `Enable` depuis un simple interrupteur UI.
* Si vous devez préparer ou formater du texte/données structurées avant l'écriture, envisagez `String Input` ou `Data to JSON` en amont.
* Utilisez `Data Write Global` / `Data Write Local` ou `Data Memory` pour stocker des valeurs que vous prévoyez d'écrire depuis plusieurs endroits de votre flux.
* Pour la journalisation ou le diagnostic, connectez un `CSV Export` ou un `Debug Input` pour capturer ou inspecter les valeurs que vous écrivez.
* Préférez le mode `Sync` lorsque plusieurs blocs écrivent sur le même DB/octet afin d'éviter les conflits d'écriture ; choisissez `Async` lorsque les écritures peuvent être gérées indépendamment pour réduire la latence de traitement.

## 🛠️ Troubleshooting <a href="#troubleshooting" id="troubleshooting"></a>

* Perte de connexion / Échecs d'écriture : vérifiez la joignabilité du PLC et la référence client fournie à `S7 Client`. Utilisez `Siemens S7 Connect` pour tester la connexion séparément.
* Valeurs de données incorrectes : assurez-vous que le `DB Data Type` sélectionné correspond au type de la variable PLC réelle et ajustez `DB Byte Address` / `Bit Position` en conséquence.
* Serveur occupé ou écritures concurrentes : si vous voyez des avertissements concernant le serveur occupé, essayez de passer en mode `Sync` pour des écritures partagées et sérialisées sur les mêmes adresses, ou assurez-vous que chaque écrivain utilise des adresses séparées.
* Valeur non écrite à l'arrêt : assurez-vous qu'une valeur valide est fournie à `[Optional] Data on Stop` et que le bloc est autorisé à effectuer la finalisation (certains scénarios d'arrêt peuvent empêcher les écritures finales).

## ✅ Safety and Best Practices <a href="#safety-and-best-practices" id="safety-and-best-practices"></a>

* Vérifiez deux fois les DB et adresses octet avant d'écrire sur des PLC en production afin d'éviter des modifications involontaires.
* Utilisez l'écriture à l'arrêt avec précaution ; assurez-vous que la séquence d'arrêt permet au bloc de compléter l'écriture finale.
* Préférez des connexions dédiées (`Async`) pour les tâches d'écriture lourdes ou fréquentes qui ne doivent pas bloquer le flux principal ; préférez `Sync` lorsque vous coordonnez des écritures entre plusieurs blocs.
