Eventos
El registro de la estación sobre lo que ha pasado: cronologías persistentes de alarmas, incidencias y enclavamientos junto a la consola de diagnóstico en vivo, con búsqueda, filtros y exportación CSV/JSON.
Eventos es la página que responde a la pregunta "¿qué ha pasado?". Ocupa el grupo del pie de la barra de navegación (Validación, Eventos, Agente, Ajustes, Cuenta) y tiene cuatro pestañas: Alarmas, Incidencias y Enclavamientos son cronologías persistentes leídas del diario de eventos de la estación, y Consola es el flujo de diagnóstico en vivo en el que escriben todos los subsistemas. La cabecera de la página dice "Históricos persistentes de alarmas, incidencias y enclavamientos, y la consola de diagnóstico en vivo."
Ver la página exige el permiso Ver los eventos (área Sistema): tanto la entrada de la barra como
la dirección /events dependen de él. Todos los roles de fábrica lo tienen por defecto, "Sin
sesión iniciada" incluido, y Admin siempre lo tiene; un rol creado en blanco empieza sin él, y un
administrador puede quitárselo a cualquier rol que no sea Admin. Exportar desde cualquier pestaña
exige además Exportar/importar históricos.
Las pestañas y sus direcciones
| Pestaña | Qué lista | Dirección | Página |
|---|---|---|---|
| Alarmas | Las alarmas que esperan ahora, sobre la cronología persistente de las transiciones de estado | /events?view=alarms |
Alarmas |
| Incidencias | Todos los flancos de incidencia observados durante un ensayo o por el vigilante Always fuera de ensayo | /events?view=occurrences |
Incidencias |
| Enclavamientos | Todas las transiciones del enclavamiento de parada de una unidad | /events?view=interlocks |
Enclavamientos |
| Consola | Las últimas 500 entradas de diagnóstico del programa en marcha | /events?view=console |
Consola |
La página abre en Alarmas. Al hacer clic en una pestaña se reescribe la dirección (se sustituye, así
que la tira de pestañas nunca llena la pila de retroceso del navegador), y un enlace que lleva
view= aterriza en esa pestaña; un valor que la página no conoce la deja abriendo en Alarmas. Así
es como el indicador de alarmas de la barra de estado (la campana con "N activas (M sin reconocer)",
dibujada solo mientras hay una alarma activa o a la espera de un reconocimiento) llega a la lista de
alarmas: navega a /events?view=alarms, la pantalla donde lo que cuenta se lee y se responde, nunca
a la página Logic, donde las alarmas se configuran.
Consola sigue montada detrás de las otras pestañas, así que su seguimiento del final y su posición de desplazamiento sobreviven a un cambio; cada una de las tres cronologías conserva su búsqueda, su filtro, sus filas y su selección mientras se pasa de una a otra.
Quién puede ver y exportar
| Permiso | Qué abre en esta página | Sin él |
|---|---|---|
| Ver los eventos | La entrada de la barra, la dirección y todas las pestañas | La entrada no se dibuja y la dirección se rechaza |
| Exportar/importar históricos | Exportar en todas las pestañas (CSV, JSON) y Crear paquete de soporte en Consola | El botón Exportar no se dibuja; una pulsación que llegue igualmente al manejador responde "Exportar eventos necesita el permiso Exportar/importar históricos." en el registro de acciones |
| Operar Logic | Reconocer y Reconocer todas en la pestaña Alarmas | Los verbos no se dibujan; las filas siguen siendo legibles |
| Cambiar los ajustes | Iniciar captura y Detener captura en Consola | El botón no se dibuja; el estado de la captura se sigue anunciando a los lectores de pantalla |
Los permisos se deciden por conexión, así que un circuito de navegador con la sesión de otro usuario ve su propio juego de botones, y un inicio de sesión, un cierre de sesión o una edición de rol los vuelve a dibujar al instante. El catálogo está en Permisos.
Cómo se comportan las tres cronologías
Las pestañas Alarmas, Incidencias y Enclavamientos comparten una sola conducta, así que cambiar de pestaña nunca cambia las reglas:
| Comportamiento | Detalle |
|---|---|
| Ventana | Cada pestaña lista 500 eventos por página, los que coinciden con su búsqueda, su filtro y el periodo elegido, del más nuevo al más antiguo (un empate en la marca de tiempo se resuelve por el orden de inserción). Bajo la lista, Más recientes y Más antiguos recorren el resto del diario de página en página, y la banda solo se dibuja mientras queda otra página que alcanzar. La página más nueva sigue al diario en vivo; una página por detrás se queda quieta, así que un evento que llega ahora no empuja hacia abajo lo que está leyendo. |
| Periodo | Dos cuadros de fecha, Desde y Hasta, cada uno un extremo del periodo leído. Un cuadro vacío no es límite alguno, de modo que con los dos vacíos la pestaña lee todo el diario, y el día elegido como límite final entra entero, hasta su último instante. La cruz que está al lado borra el par y devuelve la pestaña a la primera página. |
| Búsqueda | Un cuadro de texto cuyo marcador de posición nombra las columnas con las que compara (nombre, mensaje, fuente, modelo, unidad, procedimiento, autor, según la pestaña). La comparación es "contiene", sin distinguir mayúsculas, aplicada 250 ms después de dejar de escribir; los espacios iniciales y finales se ignoran. |
| Filtro de nivel | Una lista por pestaña: Prioridad en Alarmas, Gravedad en Incidencias, Transición en Enclavamientos. Cambiarla vuelve a leer el diario al instante. |
| Actualizar | El botón de la flecha circular vuelve a leer el diario cuando se pide; su descripción emergente nombra la pestaña ("Actualizar los eventos de alarma", "Actualizar las incidencias", "Actualizar los eventos de enclavamiento"). Está atenuado mientras hay una lectura en marcha. |
| Actualización en vivo | Todo evento confirmado en el diario vuelve a consultar por su cuenta la pestaña abierta, agrupado para que una ráfaga cueste una sola lectura (unos 200 ms después de la última confirmación). Una pestaña que no se está mirando se vuelve a leer al volver a ella. |
| Selección | Al hacer clic en una fila se abre el panel de detalle de la derecha. La selección se conserva entre actualizaciones por el identificador del evento y se suelta si la fila no está en la página leída; la cruz de la cabecera del panel lo cierra. |
| Copiar evento | El botón del pie del panel de detalle copia el evento como una línea de texto: marca de tiempo completa, tipo, nivel, nombre, el resumen de la transición, el mensaje y, para incidencias y enclavamientos, las identidades. El registro de acciones responde "Evento copiado al portapapeles.", o "El portapapeles rechazó la copia." cuando el navegador la retuvo. |
| Exportar | Exportar abre un menú con Exportar como CSV… y Exportar como JSON… para todo evento que alcanzan la búsqueda, el filtro y el periodo, página tras página, y no solo las filas dibujadas. El botón está atenuado mientras la página está vacía. |
| Registro sin filtrar | El diario no se filtra por quién tiene la sesión iniciada ni por lo que ese rol puede ver en otro sitio: es el registro técnico de la estación, y una fila que faltara en silencio haría mentir al histórico. |
La lista y el panel de detalle
Cada fila lleva la fecha y la hora del evento en el formato configurado en Idioma y formatos, un punto en el tono de su nivel, el nombre del evento, un resumen de una línea de la transición y, en el borde derecho, la palabra propia del nivel (la prioridad, la gravedad o la transición). Los tonos siguen una escala única en toda superficie: el tono crítico para una alarma Crítica, una incidencia Crítica o un disparo de enclavamiento; el tono de precaución para Alta, Advertencia y "Fuente segura"; el tono de atención para Media; neutro para el resto.
El panel de detalle abre con la insignia del nivel y el nombre, después la marca de tiempo completa con milisegundos, el resumen de la transición, el mensaje (o "No se capturó ningún mensaje." cuando la definición no tenía ninguno), una tarjeta EVENTO con Nivel e ID de evento, y una o varias tarjetas de instantánea cuyos campos enumera la página de cada pestaña.
La línea de estado
Bajo cada cronología: "N mostrados · página 1", donde N cuenta las filas de la página abierta, seguido de " · filtrado" mientras hay una búsqueda, un filtro de nivel o un periodo en vigor; "N mostrados · actualizando…" durante una relectura; a la derecha, "1 seleccionado" mientras hay una fila seleccionada y "Actualizado hh:mm:ss", la hora de la última lectura correcta.
Estados de carga, vacío y fallo
| Estado | Qué muestra la pestaña |
|---|---|
| Primera lectura | "Cargando los eventos de alarma…" con "Leyendo del diario persistente los eventos de alarma coincidentes más recientes." (el sustantivo sigue a la pestaña). |
| Nada grabado | "Todavía no hay eventos de alarma" con una línea que dice qué aparecerá ahí; la página de cada pestaña cita la suya. |
| Nada coincide | "Ningún evento de alarma coincide con estos filtros" con "Ajuste la prioridad o los términos de búsqueda para ampliar este histórico." (prioridad, gravedad o transición, según la pestaña). |
| El diario no se puede leer | "No se han podido cargar las alarmas" con "El diario persistente no está disponible temporalmente. Los registros de la consola no se ven afectados." y un botón Intentar de nuevo; la línea de estado dice "Alarmas no disponibles". |
| Falla una actualización posterior | Las últimas filas correctas siguen en pantalla y el registro de acciones informa "Error al actualizar las alarmas." |
Exportar una cronología
Los dos formatos son descargas del navegador, así que funcionan igual en la ventana de la estación y
en un navegador remoto; el registro de acciones responde "Se han exportado N evento(s) a" seguido
del nombre del archivo, o "Error al exportar.". El
nombre del archivo lleva la pestaña y una marca ordenable:
alarm-history-20260902-143000.csv, occurrence-history-<stamp>.json,
interlock-history-<stamp>.csv.
Todos los instantes se escriben en el formato de visualización configurado, y el archivo declara la
referencia horaria una sola vez: el CSV la nombra en la cabecera de su primera columna, "Timestamp
(UTC-03:00)" (o "Timestamp (UTC)"), y el JSON es un sobre con un campo TimeZone de primer nivel
junto a una matriz Events. Más allá de lo que muestra la fila, las columnas llevan la instantánea
congelada completa, identidades incluidas (el identificador del evento, los de la alarma, la
incidencia o la observación, los del modelo y la unidad), de modo que una cronología exportada puede
correlacionarse con archivos de ensayo e informes. Una celda CSV que empieza por =, +, - o @
se prefija con un apóstrofo para que la hoja de cálculo la abra como texto y no como fórmula. La
página de cada pestaña enumera sus columnas.
Qué guarda el diario
Las tres cronologías viven en events.db, una base de datos propia en la carpeta de datos de la
estación, junto a config.db e history-index.db, con una tabla de solo anexado por cronología. Lo
que se escribe es una instantánea tomada en el instante del evento (nombres, prioridad, mensaje,
modelo, unidad, fuente, el valor observado), así que renombrar, editar o borrar la definición
después nunca reescribe lo que la estación dijo en su momento. Nada de esta página, ni de ninguna
otra parte de la aplicación, borra una fila: la retención guarda las 100.000 filas más recientes
por cronología, podando las más antiguas por orden de inserción con cada anexado, de modo que un
reloj corregido no puede expulsar un evento reciente.
El diario sobrevive a un reinicio y a una restauración de configuración: una copia de seguridad copia solo la base de datos de configuración y la carpeta de activos, así que restaurar una ni arrastra el diario ni lo devuelve atrás. Es un registro de transiciones, no de estado: después de un reinicio el registro de alarmas vuelve a derivar cada alarma desde el primer ciclo, los reconocimientos que estaban pendientes se pierden, y la cronología simplemente muestra lo que pasó antes y después.
Los eventos llegan al diario por una cola ordenada que nunca bloquea el runtime: el productor toma
la instantánea de inmediato, un único escritor confirma en orden de llegada, y una confirmación que
sigue fallando se reintenta hasta diez veces antes de descartar el evento con una línea de Error en
Consola. Una incidencia observada durante un ensayo se escribe primero en el archivo del propio
ensayo (la fuente que leen Históricos y los informes) y después se copia al diario con el mismo
identificador de evento y el contexto del ensayo; una observación hecha fuera de un ensayo por
una incidencia Always va solo al diario. Las transiciones de enclavamiento y de alarma no tienen más
registro que el diario. Un agente con el área Logs abierta lee ese mismo diario mediante
event_history_read, solo lectura (véase Áreas permitidas).
La consola junto al registro
Consola es algo distinto de las tres cronologías: una vista rodante de 500 entradas del flujo de diagnóstico del programa, en memoria, perdida al reiniciar y vaciada por Vaciar la vista. Las dos se solapan allí donde el runtime narra lo que está haciendo. Un flanco de incidencia deja una línea de Consola bajo el área Process (una activación en el nivel de su gravedad: Crítica como error, Advertencia como advertencia, Info como información), y también lo hace una transición de enclavamiento (un disparo como advertencia, una fuente segura y un rearme como información). Las transiciones de alarma no aparecen en Consola: la traza del evaluador es detalle de diagnóstico que solo graba una captura detallada. Las cronologías son el registro tipado; Consola explica el runtime que hay alrededor.
Qué no hace Eventos
- No configura nada. Las alarmas se definen en Logic > Alarms, las incidencias en Process > Setup > Occurrences y el enclavamiento de parada en Process > Definition > Automation.
- No rearma ningún enclavamiento: eso es el componente Enclavamiento de un panel de control o la vista propia de la unidad.
- No tiene filtro de unidad ni de ensayo: busque por nombre, o abra el ensayo en Históricos para ver su propio registro de incidencias.
- No borra nada y no edita nada; solo la retención quita filas.
- Mientras el runtime está detenido esta página no se dibuja en absoluto: todas las pantallas menos Cuenta se sustituyen por el aviso de pausa, cronologías incluidas. El diario en sí queda intacto y se lee exactamente igual que antes en cuanto el runtime se reinicia.