# Alarmas

> El editor de la alarma: identidad y dirección, la condición, la tarjeta Comportamiento con la prioridad, la notificación, los retardos, el mensaje y el reconocimiento, el riel Estado, la máquina de estados, el anuncio, y Reconocer y Reconocer todas.

Una alarma vigila una condición booleana y mueve una máquina de estados de reconocimiento, para que una condición que importaba nunca pueda ir y venir sin que nadie la vea. Seleccione una alarma bajo la raíz Alarms de la columna de Logic, o pulse **Abrir** en su fila de la tabla de su carpeta o de la raíz de su sección, para abrir su editor (una alarma hecha con Nuevo… > Nueva alarma no se abre, sino que queda resaltada en esa tabla, véase [Crear y copiar](logic#creating-and-copying)); leerlo necesita **Ver Logic**, editarlo **Configurar Logic**, y reconocer **Operar Logic**.

El encabezado muestra la marca de alarma (sonando mientras la alarma está activa), el nombre, la línea "Una condición que esta estación vigila: mientras se cumple, la alarma se anuncia y espera a que la reconozcan.", una pastilla con el estado actual (En reposo; Activa, sin reconocer; Activa, reconocida; Restablecida, sin reconocer) y una pastilla **Desactivado** mientras la alarma está apagada. La columna del formulario lleva IDENTIDAD, CONDICIÓN y COMPORTAMIENTO; el riel lleva ESTADO.

## Identidad {#identity}

| Campo | Qué es | Valores / valor inicial | Efecto |
| --- | --- | --- | --- |
| Nombre | El nombre visible; su segmento higienizado es la dirección bajo `Alarms`. | Texto libre; una alarma nueva es `AlarmN`. | Se confirma por el cambio de nombre seguro, igual que el [nombre de una variable](logic-variables#name-and-address): una vista previa de las referencias que van detrás, Entrar o salir del campo para confirmarlo, y "Se renombró la alarma y se actualizaron N referencias." Renombrarla conserva el estado en vivo y un reconocimiento pendiente. Un nombre que choca se rechaza ahí mismo. |
| Línea de dirección | `Alarms.<carpetas>.<segmento>`, repetida debajo del nombre. | De solo lectura. | Las expresiones y los scripts leen el estado de la alarma por ella (`Alarms.NivelAlto.IsActive`). |
| Descripción (opcional) | Texto libre. | Vacía. | Ninguno. |

## Condición {#condition}

La tarjeta CONDICIÓN es el [editor de scripts](logic-expressions#the-script-editor) con la pista "Una sola expresión JavaScript de tipo booleano sobre el espacio de direcciones, por ejemplo Connector.Simulated.Pump.Temp.ValueToReal() > Variables.SetpointHigh.ValueToReal(). Las condiciones no pueden hacer referencia a otras alarmas." La condición sigue todas las [reglas de una expresión](logic-expressions): una sola expresión de solo lectura, direcciones estáticas, la compuerta de calidad, el límite de 250 ms. Puede referenciar tags, variables de las dos clases, puntos de Process, recursos y los diagnósticos, nunca `Alarms.*`, y tiene que producir un booleano ("La condición debe evaluarse como booleano, pero produjo '…'."). Una condición que no se puede evaluar en un ciclo (un punto referenciado malo, ausente o vacío) es incertidumbre: la máquina de estados mantiene su último estado.

## El comportamiento {#behavior}

| Campo | Qué es | Valores / valor inicial | Efecto |
| --- | --- | --- | --- |
| Prioridad | La gravedad. | Crítica, Alta, Media (al inicio), Baja; cada opción se dibuja en el color de su gravedad. | Se muestra en el punto del árbol, en todos los resúmenes, en la tarjeta del mensaje emergente, en el diario técnico y en el indicador de la barra de estado; en las marcas compartidas gana la peor prioridad pendiente. |
| Notificación | Cómo se anuncia una activación más allá del indicador siempre encendido de la barra de estado. | Persistente (al inicio), Temporizada, Barra de estado. La información emergente del campo: "Cómo se anuncia una activación: Persistente = mensaje emergente hasta que se reconozca o vuelva a la normalidad; Temporizada = mensaje emergente durante unos segundos; Barra de estado = solo el indicador de la barra de estado." | Vea El anuncio. |
| Retardo a la activación (ms) | Cuánto tiempo tiene que cumplirse la condición antes de que la alarma se levante. | Un entero no negativo; 0 la levanta de inmediato. | Tiempo observado sostenido, con la resolución del ciclo de 100 ms. |
| Retardo a la desactivación (ms) | Cuánto tiempo tiene que dejar de cumplirse la condición antes de que la alarma se restablezca. | Un entero no negativo; 0 la restablece de inmediato. | La misma resolución. |
| Mensaje (se muestra mientras está activa, opcional) | El texto que lleva el anuncio. | Texto libre, vacío. | La tarjeta y la notificación del sistema dicen "`<Mensaje>` (Prioridad)"; sin ninguno, "La alarma de prioridad `<prioridad>` está activa." |
| Requiere reconocimiento: una alarma restablecida queda enclavada hasta que el operador la reconoce | Si una activación exige una respuesta. | Encendido al inicio. | Apagado: la alarma sube directo a Activa, reconocida y se restablece directo a En reposo; se anuncia, pero nunca se enclava y nunca espera. |

Un retardo negativo o que no se puede interpretar conserva el valor guardado y muestra "Los retardos deben ser enteros no negativos (ms; la resolución es el ciclo de 100 ms)." Un retardo es tiempo **observado** sostenido: mientras la condición no se puede evaluar, los dos relojes de retardo se reinician, así que una ventana ciega nunca se acredita ni para levantar ni para restablecer.

Guardar un cambio en la condición, en un retardo, en Requiere reconocimiento o en Activado regresa la máquina a En reposo (un estado viejo de otra regla mentiría); el reinicio se registra con la fuente Configuración y cierra la tarjeta emergente de la alarma. Cambiar el nombre, la descripción, la prioridad, el mensaje o la notificación, o volver a archivar la alarma en otra carpeta, conserva el estado.

## El riel Estado {#the-state-rail}

ESTADO muestra el estado actual en palabras, "Prioridad: `<prioridad>`", **Activo desde** (un guion mientras la condición no se cumple) y **Última transición** (un guion antes del primer cambio de estado), y la nota "Todas las transiciones aparecen en la página Eventos y en el histórico permanente de Alarmas. El estado de la alarma vive en el espacio de direcciones, por ejemplo Alarms.X.IsActive en una expresión o en un script." El panel de la raíz Alarms lista todas las alarmas con "`<estado>` · `<prioridad>` · desde `<cuándo>`" en su columna Valor y un botón **Reconocer** por fila.

## La máquina de estados {#the-state-machine}

| Estado | Significado |
| --- | --- |
| En reposo | La condición es falsa y no hay nada pendiente. |
| Activa, sin reconocer | La condición es verdadera y todavía no se ha reconocido. |
| Activa, reconocida | La condición es verdadera y ya se reconoció (o la alarma nunca exige reconocimiento). |
| Restablecida, sin reconocer | La condición volvió a la normalidad sin que se reconociera: queda enclavada hasta que el operador la reconozca. |

Una condición que se cumple durante todo el retardo a la activación levanta la alarma desde En reposo o desde Restablecida, sin reconocer hacia Activa, sin reconocer (directo a Activa, reconocida cuando Requiere reconocimiento está apagado). Una condición que deja de cumplirse durante todo el retardo a la desactivación la restablece: a En reposo cuando ya estaba reconocida, y a Restablecida, sin reconocer cuando no. Reconocerla mueve Activa, sin reconocer a Activa, reconocida y libera el enclavamiento de vuelta a En reposo. El ciclo evalúa primero las variables y después las alarmas, cada 100 ms, en la cola de la lógica. El estado de la alarma vive en memoria: después de un reinicio, cada máquina arranca En reposo y el primer ciclo vuelve a derivar la realidad de las condiciones en vivo, así que un enclavamiento o un reconocimiento pendiente no sobreviven a un reinicio. Toda transición, sea cual sea su origen (el ciclo, un reconocimiento, un reinicio al guardar, desactivar o eliminar), se registra y queda grabada en el histórico permanente de alarmas de la página [Eventos](events-alarms).

## El anuncio {#annunciation}

La barra de estado del shell siempre lleva el conteo y la peor gravedad pendiente ([la ventana](app-window)). Más allá de eso, decide la clase de notificación:

| Notificación | Comportamiento |
| --- | --- |
| Persistente | Una tarjeta de mensaje emergente al levantarse, titulada con el nombre de la alarma y coloreada por su prioridad (Crítica como error, Alta y Media como advertencias, Baja como información), que lleva **Reconocer** mientras no se ha reconocido y **Abrir las alarmas**. Se queda hasta que la alarma se reconozca o vuelva a En reposo; el enclavamiento de Restablecida, sin reconocer la mantiene en pantalla, y volver a levantarse la reemplaza. |
| Temporizada | La misma tarjeta, descartada por sí sola después de 8 segundos. |
| Barra de estado | Sin tarjeta y sin notificación del sistema; solo el indicador de la barra de estado. |

Descartar una tarjeta a mano no es un reconocimiento. Mientras la ventana está escondida en el área de notificación o minimizada, una activación Persistente o Temporizada levanta además una notificación del sistema con el mismo texto.

## Reconocer {#acknowledging}

Reconocer es un comando de operación y pasa dondequiera que la alarma se le cruce: el verbo **Reconocer** sobre una alarma abierta, **Reconocer todas** sobre la raíz Alarms, el botón **Reconocer** de cada fila del panel de la raíz Alarms, el **Reconocer** del clic derecho sobre una fila de alarma, el **Reconocer** de la tarjeta emergente, la página [Eventos](events-alarms), un [Aviso de alarmas](component-alarm-banner) de un panel de control, y el agente (registrado como MCP). Todo reconocimiento viaja en la cola de la lógica, se registra con su fuente, y cierra la tarjeta de la alarma.

Dondequiera que aparezca, la respuesta se ofrece solo donde hay una que dar. Una alarma que está En reposo o ya reconocida conserva su verbo en su lugar, en gris, diciendo "Esta alarma no está esperando respuesta."; **Reconocer todas** sobre un registro sin nada pendiente dice "Ninguna alarma está esperando respuesta.". Y el registro de acciones confirma solo lo que se movió: presionar una respuesta que no cambia nada informa esa misma frase, nunca "Reconocida.", porque un registro de estación que anota un acto de operador que nadie hizo es peor que un verbo fuera de alcance por un momento.

| Comando | Qué hace | Gris cuando | No se dibuja cuando |
| --- | --- | --- | --- |
| Reconocer | Reconoce la alarma abierta; el registro de acciones dice "Reconocida." | "Esta alarma no está esperando respuesta." cuando está En reposo o ya reconocida; "Runtime detenido" mientras está en solo lectura. | El rol no tiene Operar Logic. |
| Reconocer todas | Reconoce todas las alarmas con algo pendiente, en un solo elemento de la cola; el registro de acciones dice "Todas las alarmas reconocidas." | "Ninguna alarma está esperando respuesta." cuando no hay nada pendiente; "Runtime detenido" mientras está en solo lectura. | El rol no tiene Operar Logic. |
| Activar / Desactivar | Cambia Activado; desactivarla regresa la máquina a En reposo y detiene la evaluación. | La estación está bloqueada o en solo lectura. | El rol no tiene Configurar Logic. |
| Copiar | Duplica la alarma en la raíz Alarms con un nombre libre y resalta la copia en la tabla de esa raíz en lugar de abrirla ([Crear y copiar](logic#creating-and-copying)); la copia arranca En reposo. | La estación está bloqueada o en solo lectura. | El rol no tiene Configurar Logic. |
| Eliminar la alarma | Pregunta "¿Eliminar 'X'? Esto quita la alarma. Esta acción no se puede deshacer.", reinicia primero la máquina (para que un anuncio nunca sobreviva a su alarma) y la quita; las referencias a `Alarms.X` quedan sin resolver. | La estación está bloqueada o en solo lectura. | El rol no tiene Configurar Logic. |

## Usado por {#used-by}

La tarjeta USADO POR, al pie de la columna del formulario, lista todo lo que en la estación lee la alarma, para que vea lo que depende de ella antes de renombrarla o eliminarla. Se lee cuando selecciona la alarma y otra vez después de un cambio de nombre.

| Tipo | Ubicación | Nombre |
| --- | --- | --- |
| Servidor Modbus | Vacía | La fila del mapa de registros del [servidor Modbus](connector-modbus-server) que sirve uno de los estados de la alarma, por su clase de registro y su registro (`Coil 0`) |
| Servidor OPC UA | Vacía | La fila de los [nodos servidos](connector-opcua-served-nodes) del servidor OPC UA que sirve la alarma: siempre Solo lectura |
| Publicación MQTT | El bróker | El tópico de la fila de la [tarjeta Publicar](driver-mqtt#the-publish-card) del bróker que publica la alarma |
| Variable de Logic, Acción | Vacía | La variable de expresión o la acción cuyo texto lee uno de los miembros de la alarma (`Alarms.HighLevel.IsActive`), con las carpetas en las que está archivada |
| Panel de control | El panel de control | El componente cuya propiedad de dirección nombra la alarma |

Una condición nunca lee otra alarma, así que no se lista ninguna alarma. La fila de un servidor guarda la alarma por su identidad estable: un cambio de nombre la deja sirviendo la misma alarma, y una eliminación deja la fila en pie, nombrando lo que perdió. La fila de un bróker hace lo mismo y mantiene su tópico. Mientras la búsqueda corre, la tarjeta dice "Leyendo las referencias…"; cuando nada usa la alarma, "Nada en la estación usa esta alarma."; cuando la búsqueda falla, "No se pudieron leer las referencias" con **Intentar de nuevo**, nunca una lista vacía. La tarjeta solo lee: todo rol que abre el editor la ve, también mientras la estación está bloqueada, y no ofrece ningún comando.

## Lo que las alarmas no hacen {#what-alarms-do-not-do}

No hay histéresis ni banda muerta más allá de lo que exprese la condición, ni inhibición temporal, ni sonido, ni reconocimiento desde un script, ni estado guardado a lo largo de los reinicios, ni evaluación mientras la alarma está desactivada o el runtime detenido. Una alarma no es una ocurrencia de Process: esas se configuran y se juzgan en la página [Process](process-occurrences).
