> 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/data-logic/flow-control/subsystem-enabled.md).

# Subsystem Enabled

Ce bloc de fonction fournit un sous-système fermé qui peut s'exécuter de façon conditionnelle. Utilisez-le pour regrouper une collection de blocs (un petit scénario) et contrôler quand ce groupe s'exécute. Il est idéal pour créer des branches de traitement optionnelles, des interrupteurs de fonctionnalités ou des flux protégés qui ne doivent s'exécuter que lorsqu'ils sont explicitement activés.

## 📥 Entrées <a href="#inputs" id="inputs"></a>

`Enable`\
Une entrée booléenne qui contrôle si le sous-système enfermé s'exécute.

* Si cette entrée est connectée et définie sur False, le sous-système enfermé sera ignoré.
* Si cette entrée n'est pas connectée ou est définie sur True, le sous-système enfermé s'exécutera.

(Le bloc accepte d'autres entrées indirectement en exposant les entrées des blocs contenus.)

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

`Dynamic Outputs`\
Ce bloc ne déclare pas de sorties fixes. À la place, lorsque le sous-système enfermé s'exécute, il expose les sorties produites par les blocs qu'il contient. Considérez ce bloc comme un conteneur : ses sorties reflètent ce que fournissent les blocs internes.

## 🕹️ Contrôles <a href="#controls" id="controls"></a>

`Subsystem Canvas`\
Une zone visuelle où vous pouvez ouvrir ou éditer le sous-système enfermé. Déposez des blocs dans cette zone pour construire le flux interne.

`Enable`\
La prise d'entrée décrite ci-dessus sert de contrôle principal pour activer ou désactiver le sous-système.

(Il n'y a pas de curseurs ou boutons supplémentaires sur le bloc lui-même ; tous les contrôles sont les blocs que vous placez à l'intérieur du sous-système et l'entrée `Enable` que vous fournissez.)

## 🎨 Fonctionnalités <a href="#features" id="features"></a>

* Encapsulation — regroupez des étapes de traitement liées en une seule unité réutilisable pouvant être activée ou désactivée.
* Exécution conditionnelle — exécutez le flux interne uniquement lorsque souhaité, simplifiant ainsi le graphe principal.
* Sorties dynamiques — le bloc transmet les sorties de ses blocs internes afin que le flux parent puisse les consommer lorsque le sous-système est actif.
* Séparation visuelle — garde le flux principal propre en cachant les détails de traitement dans le `Subsystem Canvas`.

## ⚙️ Mécanisme d'exécution <a href="#running-mechanism" id="running-mechanism"></a>

* Si l'entrée `Enable` est connectée et False, le sous-système n'est pas exécuté et le bloc fournira ses sorties par défaut.
* Si l'entrée `Enable` n'est pas connectée ou est True, le sous-système est exécuté et les sorties des blocs internes sont collectées et exposées.
* Le bloc surveille les blocs internes pour détecter des états invalides ; si un bloc interne signale une erreur, le bloc indiquera un état invalide pour que vous puissiez inspecter et corriger le sous-système.

## 📝 Comment utiliser <a href="#usage" id="usage"></a>

1. Ajoutez le bloc sur votre canvas.
2. Double-cliquez ou ouvrez son canvas pour placer et connecter des blocs implémentant la fonctionnalité souhaitée.
3. Fournissez une entrée `Enable` (par exemple un `Logic Input` ou un signal booléen) pour contrôler si le sous-système s'exécute. Si vous laissez `Enable` déconnecté, le sous-système s'exécutera par défaut.
4. Connectez les sorties des blocs internes aux sorties du sous-système (elles apparaîtront sur le canvas parent lorsque disponibles).
5. Utilisez le graphe parent pour router les données vers et depuis le sous-système selon les besoins.

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

* Utilisez `Logic Input` pour basculer manuellement le sous-système pendant les tests.
* Utilisez `Rising Edge` si vous souhaitez que le sous-système s'exécute uniquement lors de la première activation plutôt que de façon continue.
* Placez des blocs d'acquisition d'image tels que `Camera USB`, `Camera IP (ONVIF)`, ou `Stream Reader` à l'intérieur du sous-système lorsque vous voulez activer/désactiver le traitement caméra en une seule fonctionnalité.
* Combinez avec `Show Image`, `Image Logger`, ou `Record Video` à l'intérieur du sous-système pour contrôler la visualisation et l'enregistrement uniquement lorsque le sous-système est activé.
* Utilisez `Data Read Local` / `Data Write Local` (ou leurs équivalents globaux) pour échanger des données entre le graphe parent et le sous-système enfermé lorsque vous avez besoin d'un état persistant ou d'une communication inter-sous-systèmes.
* Pour un comportement déclenché ou temporisé, combinez avec des blocs comme `Delay Step` ou `ON Delay` à l'intérieur du sous-système pour façonner le timing d'exécution.
* Utilisez le sous-système pour encapsuler des pipelines expérimentaux (par exemple : preprocessing -> detector -> postprocessing). Cela vous permet d'activer/désactiver l'ensemble du pipeline sans recâbler le graphe principal.

## 🛠️ Dépannage <a href="#troubleshooting" id="troubleshooting"></a>

* Le sous-système ne s'exécute pas : vérifiez l'entrée `Enable`. Si elle est connectée et False, le sous-système sera ignoré.
* Sorties attendues non visibles : assurez-vous que les blocs internes sont connectés pour produire des sorties et que le sous-système a été exécuté alors qu'il était activé.
* État d'erreur interne : ouvrez le `Subsystem Canvas` et inspectez les blocs pour des indicateurs rouges/invalides ; corrigez la configuration ou les entrées manquantes à l'intérieur du canvas.
* Besoin de réinitialiser toujours les sorties : placez des blocs de réinitialisation d'état ou d'initialisation à l'intérieur du sous-système pour garantir des sorties par défaut cohérentes lorsque le sous-système ne s'exécute pas.
