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

# Subsystem Enabled

Este bloque crea un subsistema encerrado que puede ejecutarse de forma condicional. Úsalo para agrupar un conjunto de bloques (un pequeño escenario) y controlar cuándo se ejecuta ese conjunto. Es ideal para crear ramas de proceso opcionales, interruptores de función o flujos protegidos que solo deben ejecutarse cuando están explícitamente habilitados.

## 📥 Entradas

`Enable`\
Entrada booleana que controla si el subsistema encerrado se ejecuta.

* Si esta entrada está conectada y su valor es False, el subsistema se omitirá.
* Si esta entrada no está conectada o su valor es True, el subsistema se ejecutará.

(El bloque acepta entradas adicionales de forma indirecta al exponer las entradas de los bloques contenidos.)

## 📤 Salidas

`Dynamic Outputs`\
Este bloque no declara salidas fijas. Cuando el subsistema encerrado se ejecuta, expone las salidas producidas por los bloques internos. Piensa en este bloque como un contenedor: sus salidas reflejan lo que los bloques internos proporcionan.

## 🕹️ Controles

`Subsystem Canvas`\
Área visual donde puedes abrir o editar el subsistema encerrado. Coloca bloques dentro de este canvas para construir el flujo interno.

`Enable`\
La clavija de entrada descrita arriba actúa como control principal para activar o desactivar el subsistema.

(No hay deslizadores o botones adicionales en el bloque; todos los controles son los bloques que coloques dentro del subsistema y la entrada `Enable` que proporciones.)

## 🎨 Características

* Encapsulación — agrupa pasos relacionados de procesamiento en una unidad reutilizable que se puede habilitar o deshabilitar.
* Ejecución condicional — ejecuta el flujo interno solo cuando se desea, simplificando el diagrama principal.
* Salidas dinámicas — el bloque reenvía las salidas de sus bloques internos para que el flujo superior pueda consumirlas cuando el subsistema esté activo.
* Separación visual — mantiene el flujo principal ordenado al ocultar detalles dentro del canvas del subsistema.

## ⚙️ Mecanismo de ejecución

* Si la entrada `Enable` está conectada y es False, el subsistema no se ejecuta y el bloque proporcionará sus valores por defecto.
* Si la entrada `Enable` no está conectada o es True, el subsistema se ejecuta y las salidas de los bloques internos se recopilan y exponen.
* El bloque supervisa el estado de los bloques internos; si algún bloque interno informa un error, el bloque indicará un estado inválido para que puedas inspeccionar y corregir el subsistema.

## 📝 Cómo usar

1. Añade el bloque a tu canvas.
2. Haz doble clic o abre su canvas para colocar y conectar bloques que implementen la funcionalidad deseada.
3. Proporciona una entrada `Enable` (por ejemplo, un `Logic Input` o una señal booleana) para controlar si el subsistema se ejecuta. Si dejas `Enable` desconectado, el subsistema se ejecutará por defecto.
4. Conecta las salidas de los bloques internos a las salidas del subsistema (aparecerán en el canvas padre cuando estén disponibles).
5. Usa el grafo padre para enrutar datos hacia y desde el subsistema según sea necesario.

## 💡 Consejos y trucos

* Usa `Logic Input` para alternar el subsistema manualmente durante las pruebas.
* Usa `Rising Edge` si quieres que el subsistema se ejecute solo en la primera activación en lugar de continuamente.
* Coloca bloques de adquisición de imagen como `Camera USB`, `Camera IP (ONVIF)` o `Stream Reader` dentro del subsistema cuando quieras habilitar/deshabilitar el procesamiento de cámara como una sola función.
* Combínalo con `Show Image`, `Image Logger` o `Record Video` dentro del subsistema para controlar visualización y guardado solo cuando esté habilitado.
* Usa `Data Read Local` / `Data Write Local` (o equivalentes globales) para intercambiar datos entre el grafo padre y el subsistema cuando necesites estado persistente o comunicación entre subsistemas.
* Para comportamientos activados o temporizados, combínalo con bloques como `Delay Step` u `ON Delay` dentro del subsistema para dar forma al tiempo de ejecución.
* Emplea el subsistema para encapsular pipelines experimentales (por ejemplo: preprocessing -> detector -> postprocessing). Esto te permite activar/desactivar todo el pipeline sin volver a cablear el grafo principal.

## 🛠️ Solución de problemas

* El subsistema no se ejecuta: verifica la entrada `Enable`. Si está conectada y es False, el subsistema se omitirá.
* No se ven las salidas esperadas: asegúrate de que los bloques internos estén conectados para producir salidas y que el subsistema se haya ejecutado estando habilitado.
* Estado de error interno: abre el canvas del subsistema e inspecciona los bloques en busca de indicadores rojos/inválidos; corrige configuraciones o entradas faltantes dentro del canvas.
* Necesitas restablecer siempre las salidas: coloca bloques de reinicio de estado o inicialización dentro del subsistema para asegurar salidas por defecto consistentes cuando el subsistema no esté ejecutándose.
