> 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-read.md).

# Siemens S7 Read

Cette fonction lit des données depuis une base de données (DB) d'un automates Siemens S7 et fournit la valeur en sortie pour l'utiliser ailleurs dans votre scénario. Elle prend en charge les types de données PLC courants et propose une interface simple pour définir le numéro DB, l'adresse en octets et le type de données. Utilisez l'entrée `Enable` pour déclencher les lectures et fournissez un `S7 Client` connecté depuis un bloc de connexion.

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

`Enable` — Entrée utilisée pour activer ou désactiver la lecture. Fournissez un signal booléen (par exemple depuis un bloc `Logic Input`) pour contrôler quand les lectures sont effectuées.

`S7 Client` — Entrée qui accepte un objet client/connexion (généralement fourni par un bloc `Siemens S7 Connect`). Cela indique au bloc quel PLC/serveur interroger.

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

`Data` — Sortie qui fournit la valeur lue depuis le PLC. Le type de la valeur dépend du `DB Data Type` sélectionné (nombre, chaîne, liste de booléens, etc.).

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

`DB Number` — Saisissez le numéro du DB (data block) à lire.

`DB Byte Address` — Saisissez l'offset en octets à l'intérieur du DB où commence la valeur demandée.

`DB Data Type` — Menu déroulant pour choisir le type de données à lire (exemples : Boolean, Int, DInt, Real, String, Word, DWord, Time, ...).

`Connection Type` — Menu déroulant pour choisir le mode de connexion (exemples : Sync ou Async). Permet de contrôler comment le bloc partage/utilise la connexion PLC avec d'autres blocs.

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

* Lorsque l'entrée `Enable` est active, le bloc lit la valeur au `DB Number` et à la `DB Byte Address` configurés en utilisant le `DB Data Type` sélectionné et l'envoie immédiatement sur la sortie `Data`.
* Le bloc attend qu'un `S7 Client` soit fourni à son entrée. Si le client n'est pas connecté, le bloc signale une erreur de connexion et ne fournit pas de données.
* Le réglage `Connection Type` détermine si ce bloc utilise une connexion partagée (synchrone) ou une connexion dédiée/asynchrone lors des échanges avec le PLC. Choisissez le mode adapté à votre configuration (voir Tips and Tricks).

## 🎯 Key features <a href="#features" id="features"></a>

* Prend en charge de nombreux types PLC courants : tableaux de Boolean, entiers (SInt/Int/DInt), types non signés, flottants (Real/LReal), chaînes, Word/DWord et types temps.
* Contrôles UI simples pour le numéro DB / l'adresse octet et la sélection du type de données.
* Sélection du mode de connexion pour s'adapter aux scénarios où plusieurs blocs accèdent au même PLC.
* Retourne les données dans un format facilement utilisable par d'autres blocs.

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

1. Ajoutez un bloc `Siemens S7 Connect` et configurez l'adresse du PLC et les paramètres de connexion.
2. Raccordez la sortie du bloc `Siemens S7 Connect` à l'entrée `S7 Client` de ce bloc.
3. Définissez le `DB Number` cible et le `DB Byte Address` via les contrôles.
4. Choisissez le bon `DB Data Type` qui correspond à la variable PLC à lire.
5. Utilisez un `Logic Input` ou un autre signal booléen sur l'entrée `Enable` pour contrôler quand les lectures ont lieu.
6. Exploitez la sortie `Data` pour visualisation, enregistrement ou prise de décision par d'autres blocs.

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

* Combinez avec `Siemens S7 Connect` pour gérer la connexion PLC de manière centralisée — ce bloc fournit l'objet client attendu sur l'entrée `S7 Client`.
* Utilisez `Logic Input` pour activer/désactiver des lectures périodiques ou pour implémenter des lectures à la demande.
* Pour visualiser des tendances numériques, envoyez la sortie numérique `Data` vers un bloc `Scope` pour un affichage en direct.
* Pour enregistrer des relevés, envoyez `Data` vers `Data to JSON` puis `CSV Export`.
* Envoyez des télémesures en aval en connectant `Data` à `MQTT Publish` pour la surveillance cloud ou à `Send Mail` (via un message structuré) pour des alertes.
* Partagez les résultats de lecture dans un scénario avec `Data Write Global` / `Data Read Global` ou des blocs mémoire locaux afin que d'autres parties du système puissent réagir sans relire le PLC.
* Pour le débogage, utilisez `Debug Input` pour enregistrer la valeur de sortie et vérifier adresses et types de données.
* Si plusieurs blocs lisent/écrivent la même zone DB, essayez de définir `Connection Type` sur `Sync` pour éviter des problèmes de concurrence.
* Lors de la lecture de champs texte, faites attention à la longueur et à l'encodage des chaînes sur le PLC. Vérifiez la longueur attendue dans le DB pour éviter des troncatures.

(indice : blocs utiles à combiner : `Siemens S7 Connect`, `Logic Input`, `Number Input`, `Data to JSON`, `CSV Export`, `MQTT Publish`, `Scope`, `Debug Input`, `Data Write Global`)

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

* Pas de données ou erreur de connexion : Vérifiez que le PLC est joignable et que le bloc `Siemens S7 Connect` montre une connexion réussie. Contrôlez les adresses réseau, les pare-feux et l'état du PLC.
* Mauvaise valeur retournée : Confirmez que le `DB Number`, le `DB Byte Address` et le `DB Data Type` correspondent bien à la disposition de la variable dans le DB du PLC. Un décalage d'un octet ou un mauvais type provoquent des résultats invalides.
* Chaîne partielle ou tronquée : Assurez-vous que la longueur de la chaîne côté PLC correspond à vos attentes. Si une chaîne est coupée, vérifiez la configuration de longueur dans le DB du PLC.
* Lectures intermittentes ou avertissements de serveur occupé : Si le PLC traite beaucoup de requêtes, essayez le mode `Sync` pour un accès coordonné ou réduisez la fréquence des lectures.
* Résultat booléen inattendu : Certaines lectures booléennes renvoient des groupes de bits — traitez-les comme des collections de valeurs booléennes quand c'est pertinent.

Si le problème persiste, ajoutez un bloc `Debug Input` pour afficher les valeurs brutes et envoyez les résultats vers des blocs de journalisation ou d'export pour capturer des cas défaillants en vue d'une analyse.
