# Operar

> Las unidades en uso: un nodo por unidad con los paneles y los paneles de control desde los que se ejecuta, qué es un ensayo, el ciclo de vida del Arranque a Completado, y qué se rechaza con el runtime detenido.

**Operar** es el último de los cuatro grupos de un modelo en la columna Espacio de trabajo de la
página Process (Process > Modelos > un modelo > Operar), después de
[Definición](process-definition), [Visualización](process-visualization) y
[Preparación](process-setup). Los otros tres declaran el proceso; este contiene las unidades en
uso, un nodo por unidad, y bajo cada unidad las superficies desde las que se opera. Aquí no se
configura nada: una unidad se declara y se termina en la página propia del modelo
([Unidades](process-units)), sus paneles y sus paneles de control se disponen en Visualización, y
lo que ejecuta se compone en Preparación.

La rama se dibuja para todos los roles que pueden consultar modelos (Consultar los modelos,
Ejecutar procedimientos, Gestionar Process). A un rol que solo tiene Editar recetas y evaluaciones
se le muestra cada modelo reducido a su grupo de Preparación, así que Operar no se le dibuja. Mirar
es gratis con el árbol; preparar, arrancar y gobernar un ensayo exigen **Ejecutar procedimientos**,
y un panel lo dice en su propia cara cuando el rol no lo tiene.

## La página Operar {#the-operate-page}

Al seleccionar el grupo se abre un muro de tarjetas, una por unidad, encabezado "Las estaciones
sobre las que se ejecuta este modelo. Abra una para preparar un procedimiento, arrancarlo y seguir
un ensayo registrado y evaluado." Al hacer clic en una tarjeta se abre esa unidad. Cada tarjeta
lleva el estado en vivo de la unidad, resuelto en este orden de precedencia:

| Estado | Significado |
| --- | --- |
| Parada disparada, A la espera de rearme, Señal de parada no disponible | El [enclavamiento](process-automation) de la unidad no está En reposo. Se muestra solo cuando el modelo observa una parada externa; manda sobre todo lo de abajo. |
| Esperando a que las consignas lleguen al equipo | Un ensayo posee la unidad y su receta ha entregado las consignas de un segmento y espera a que el equipo las acepte. El tiempo propio del segmento todavía no ha empezado a contar, así que esto manda sobre los estados de abajo; el registro de datos sigue grabando por debajo exactamente igual que antes. Solo lo muestra un segmento configurado para esperar. Véase [Recetas](process-recipes#what-a-run-does-with-it). |
| Registrando, En pausa, Guardando, Preparando, Finalizando | Un ensayo posee la unidad: está muestreando, en pausa en una consigna, escribiendo su instantánea, reservada antes de que el ensayo exista, o cerrando su archivo tras el estado final. |
| En reposo · procedimiento | Nada posee la unidad y ese procedimiento está preparado para el próximo Arranque. |
| En reposo · sin procedimiento preparado | Nada posee la unidad y no hay nada preparado. |

Un modelo sin unidades dice "Todavía no hay unidades. Añada una en la página del propio modelo, en
la tabla Unidades." La fila del grupo en el árbol cuenta sus unidades.

La barra de detalle lleva los dos disparadores por lotes, dibujados solo para un rol con Ejecutar
procedimientos. En esta barra no hay nada más, porque aquí no se crea ni se elimina nada.

| Comando | Qué hace | Atenuado cuando (situación) | No se dibuja cuando (rol) |
| --- | --- | --- | --- |
| Arrancar todas | Arranca todas las unidades que tienen un procedimiento preparado y pueden ejecutarlo ahora; las demás se omiten en silencio. Cada ensayo arrancado registra como responsable al operador con la sesión iniciada en esta pantalla. | Ninguna unidad admite ahora mismo el Arranque, o ya hay un lote despachándose. | Sin Ejecutar procedimientos. |
| Detener todas | Detiene todas las unidades que están en marcha ahora; las que ya estaban detenidas siguen detenidas. | Ninguna unidad admite ahora mismo Detener, o ya hay un lote despachándose. | Sin Ejecutar procedimientos. |

Un lote es un disparador, no una operación coordinada: cada unidad va por su cuenta, el rechazo de
una unidad queda en el diario y nunca hace retroceder a otra, y el registro de acciones informa del
recuento ("3 unidades arrancadas.", "No se ha podido detener ninguna unidad.").

## La unidad {#the-unit}

La página propia de una unidad la nombra, dice si un ensayo la posee y abre a cada una de sus
superficies. La cabecera lleva una píldora con el estado del ensayo mientras un ensayo posee la
unidad (Registrando, En pausa, Guardando, Preparando, Finalizando, o "Esperando a que las consignas
lleguen al equipo" mientras un segmento de receta configurado para esperar sigue esperando sus
consignas; nada mientras la unidad está libre). Mientras el ensayo espera, la línea de la cabecera
deja paso a "Aún pendientes: Furnace, Pump 1", los canales cuyo equipo todavía no ha aceptado su
consigna, así que la propia página dice por qué el reloj del segmento no ha empezado. Una sola
tarjeta, **Superficies**, lista como fichas los paneles y los paneles de control que define el
modelo, dibujados para esta unidad. La página no tiene verbos de barra ni menú del botón derecho:
es una vía de entrada, no un sitio donde editar.

Bajo la unidad, el árbol tiene un nodo por panel del modelo, y después un nodo por panel de control.
Los dos se abren bajo la misma barra de escenario que usa la página View, llamada "Modelo · Unidad ·
Superficie", con la píldora del estado del ensayo al lado del nombre y los dos verbos de ventana en
el lado de salida: **Ampliar** entrega la ventana entera a la superficie, **Pantalla completa** (F11)
toma toda la pantalla, y Esc sale de cualquiera de las dos.

- Un nodo de **panel** dibuja las tarjetas que dispone el panel, para esta unidad: la tarjeta Ensayo,
  la tarjeta Metadatos, el Estado del ensayo, los Comentarios, las Incidencias, el gráfico de
  Canales, el registro de Productividad, los Comandos sueltos y cualquier panel de control que el
  panel incruste como tarjeta. Esa superficie, tarjeta a tarjeta, es
  [Ensayos y comentarios](process-runs).
- Un nodo de **panel de control** ejecuta la única definición del modelo con cada canal abstracto
  respondido por la fuente vinculada de esta unidad. Muestra el panel de control y nunca lo edita:
  editar es un verbo de la fila propia del modelo dentro de Visualización ([Paneles de control de un
  modelo](process-dashboards)). Un panel de control sin nada colocado lo
  dice en lugar de dibujar un escenario vacío. Aquí sus componentes de mando solo necesitan Ejecutar
  procedimientos, porque esta es la superficie oficial de Process y no un panel de control propio de
  la estación.

Un panel o un panel de control marcado con **Mostrar en View** aparece además en la página View, con
una entrada por unidad del modelo y bajo el mismo nombre; lo que dibuja es lo mismo en los dos
casos.

## Qué es un ensayo {#what-a-run-is}

Un ensayo es una ejecución de un procedimiento en una unidad. Se llama "Procedimiento · Unidad", se
registra en un archivo SQLite propio dentro de la carpeta `acquisitions` de la raíz de datos de la
aplicación, y lo apunta una fila del índice del histórico, que es lo que permite encontrar y reanudar
un ensayo sin terminar después de un reinicio. El modo del procedimiento es la envolvente del ensayo:
**Instantáneo** aplica, registra una fila y juzga una vez, y termina solo; **Temporizado** ejecuta la
ventana del procedimiento, repetida como ciclos si procede, y termina cuando se cierra la última
ventana; **Controlado** aplica en el Arranque y registra hasta que alguien lo detiene.

Un ensayo por unidad a la vez. El Arranque reserva la unidad antes de resolver nada, así que una
unidad preparándose está Ocupada sin fingir que registra; la reserva dura durante En marcha, En
pausa, Guardando y el cierre final del archivo. Mientras alguna unidad está ocupada, toda superficie
de configuración de la estación es de solo lectura ("La configuración está bloqueada mientras una
unidad está en marcha."); Operar en sí sigue vivo, porque operar no es configurar.

## El ciclo de vida {#the-lifecycle}

| Estado | Significado | Se entra por | Se sale por |
| --- | --- | --- | --- |
| Preparando | La unidad está reservada y el ensayo se está validando y materializando. No es un estado guardado: el punto `Procedure.Status` lo lee mientras `Busy` ya es verdadero. | Arrancar | Que el ensayo se materialice (En marcha), o un rechazo (en reposo otra vez). |
| En marcha | El muestreo y, en un ensayo Temporizado, el reloj de la ventana están avanzando. | Arrancar, Reanudar | Pausar, Detener, Abortar, el final de la ventana, un fallo, el enclavamiento. |
| En pausa | El reloj de la ventana está congelado en la última consigna; el datalog sigue registrando. Solo en ensayos temporizados. | Pausar | Reanudar, Detener, Abortar, el enclavamiento. |
| Guardando | El muestreo se ha parado; el bloque de finalización se ha ejecutado y se está escribiendo la instantánea congelada. | Detener, Abortar, el final de la ventana, el enclavamiento, un ensayo Instantáneo que se completa | Que se escriba la instantánea. |
| Completado | Terminó limpiamente; el veredicto es el de la evaluación. | Guardando después de Detener, del final de una ventana o de un ensayo Instantáneo | Final. |
| Abortado | Terminó antes de tiempo; el veredicto es No conforme diga lo que diga la evaluación. | Guardando después de Abortar, una política de fallo de receta puesta en Abortar, el enclavamiento, o la parada del runtime | Final. |
| Fallido | Terminó por un error irrecuperable; el veredicto es Ninguno. | Un fallo mientras se ejecutaba o terminaba; un puntero en Guardando que dejó un cierre inesperado vuelve como Fallido en el arranque siguiente | Final. |

Un ensayo que estaba En marcha o En pausa cuando se cerró la aplicación no ha terminado: se reanuda
en el arranque siguiente, con un perfil temporizado en pausa en el segmento y el ciclo que tenía
persistidos.

Cada ensayo registra quién lo arrancó (el operador con la sesión iniciada en la pantalla que pulsó
Arrancar, la estación cuando no había nadie, la automatización de la unidad, o un agente) y quién lo
terminó (las mismas clases, para un Detener o un Abortar). Una ventana que se agotó, un disparo de
enclavamiento y un fallo terminan sin nombrar a nadie. Pausar y Reanudar no dejan ningún actor
detrás.

## Qué se rechaza, y por qué {#what-is-refused-and-why}

- **Runtime detenido**: mientras el runtime de la estación está detenido, Arrancar, Pausar,
  Reanudar, Detener, Abortar, los comandos sueltos, la preparación y los comentarios se rechazan
  todos con ese motivo, y la tarjeta Ensayo lo escribe bajo sus botones. Los ensayos que sigan
  abiertos cuando se para el runtime terminan como Abortados.
- **El enclavamiento**: mientras el enclavamiento de una unidad está Disparado, A la espera de
  rearme o No disponible, en esa unidad no se admite ningún Arranque nuevo, ni Reanudar, ni
  instantánea, ni evaluación, ni aplicación de receta ("La unidad 'X' está bloqueada por su
  enclavamiento: motivo"). Detener y Abortar siguen disponibles.
- **Nada preparado**: el Arranque necesita un procedimiento preparado ("No hay ningún procedimiento
  preparado. Elija uno primero.").
- **Una fuente que tiene otro ensayo**: dos unidades que escriben la misma fuente no pueden
  ejecutarse a la vez; el segundo Arranque se rechaza nombrando el canal y la unidad que la tiene.

Las páginas de este grupo:

| Página | Cubre |
| --- | --- |
| [Ensayos y comentarios](process-runs) | El panel de una unidad: la preparación, el Arranque y lo que valida, los comandos del ciclo de vida, las tarjetas en vivo, los comentarios, los comandos sueltos, el archivo del ensayo, y las vías de la automatización y del agente hacia el mismo ciclo de vida. |
| [El espacio de direcciones de la unidad](process-addresses) | Cada punto que publica una unidad bajo `Process.<Model>.<Unit>`, su tipo y su significado, y qué puntos son comandos escribibles. |
