# Operar

> Las unidades en uso: un nodo por unidad con los paneles y los paneles de control desde los que se ejecuta, qué es una corrida, el ciclo de vida del Arranque a Completada, y qué se rechaza mientras está 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 todo rol que pueda consultar los modelos (Consultar los modelos,
Ejecutar procedimientos, Gestionar Process). Un rol que solo tiene Editar recetas y
evaluaciones ve 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 conducir una corrida exigen
**Ejecutar procedimientos**, y un panel lo dice en su cara cuando al rol le falta.

## 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 una corrida registrada y evaluada." Al hacer clic en una tarjeta se abre
esa unidad. Cada tarjeta lleva el estado en vivo de la unidad, resuelto con esta precedencia:

| Estado | Significado |
| --- | --- |
| Paro disparado, A la espera de rearme, Señal de paro no disponible | El [enclavamiento](process-automation) de la unidad no está Normal. Se muestra solo cuando el modelo observa un paro externo; manda sobre todo lo de abajo. |
| Esperando a que las consignas lleguen al equipo | Una corrida posee la unidad y su receta entregó las consignas de un segmento y está esperando a que el equipo las tome. El tiempo propio del segmento todavía no empezó 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 puesto a esperar. Véase [Recetas](process-recipes#what-a-run-does-with-it). |
| Registrando, En pausa, Guardando, Preparando, Finalizando | Una corrida posee la unidad: está muestreando, en pausa en una consigna, escribiendo su instantánea, reservada antes de que la corrida exista, o cerrando su archivo después del estado terminal. |
| En reposo · procedimiento | Nada posee la unidad y ese procedimiento está preparado para el siguiente 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. Agregue 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 lote, 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 ejecutarse ahora; las demás se saltan en silencio. Toda corrida arrancada graba como responsable al operador con la sesión iniciada en esta pantalla. | Ninguna unidad acepta un Arranque ahora mismo, o ya se está despachando un lote. | Sin Ejecutar procedimientos. |
| Detener todas | Detiene todas las unidades que están en marcha ahora; las que ya estaban detenidas siguen detenidas. | Ninguna unidad acepta un Paro ahora mismo, o ya se está despachando un lote. | Sin Ejecutar procedimientos. |

Un lote es un disparador, no una operación coordinada: cada unidad corre por su cuenta, un
rechazo en una unidad queda en el diario y nunca revierte a otra, y el registro de acciones
reporta la cuenta ("3 unidades arrancadas", "No se pudo detener ninguna unidad.").

## La unidad {#the-unit}

La página propia de una unidad la nombra, dice si una corrida la posee y abre hacia cada una
de sus superficies. El encabezado lleva una píldora con el estado de la corrida mientras una
corrida posee la unidad (Registrando, En pausa, Guardando, Preparando, Finalizando, o "Esperando
a que las consignas lleguen al equipo" mientras a un segmento de receta puesto a esperar todavía
se le deben sus consignas; nada mientras la unidad está libre). Mientras la corrida espera, la
línea del encabezado cede su lugar a "Aún pendientes: Furnace, Pump 1", los canales cuyo equipo
todavía no toma su consigna, así que la propia página dice por qué el reloj del segmento no ha
empezado. Una 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 entrada, no un lugar para editar.

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

- Un nodo de **panel** dibuja las tarjetas que dispone el panel, para esta unidad: la tarjeta
  Corrida, la tarjeta Metadatos, el Estado de la corrida, los Comentarios, las Ocurrencias,
  el gráfico de Canales, el balance de Productividad, los Comandos sueltos y cualquier panel
  de control que el panel incruste como tarjeta. Esa superficie, tarjeta por tarjeta, es
  [Corridas 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 en Visualización ([Paneles
  de control de un modelo](process-dashboards)). Un panel de control sin nada colocado lo dice
  en vez de dibujar un escenario vacío. Sus componentes de comando aquí 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 **Mostrar en View** aparece además en la página View,
una entrada por unidad del modelo, con el mismo nombre; lo que dibuja es lo mismo en los dos
lados.

## Qué es una corrida {#what-a-run-is}

Una corrida es una ejecución de un procedimiento en una unidad. Se llama "Procedimiento ·
Unidad", se graba en un archivo SQLite propio bajo la carpeta `acquisitions` de la raíz de
datos de la aplicación, y la señala una fila del índice de históricos, que es lo que permite
encontrar y reanudar una corrida sin terminar después de un reinicio. El modo del
procedimiento es la envolvente de la corrida: **Instantáneo** aplica, graba una fila y juzga
una vez, y termina por su cuenta; **Temporizado** corre la ventana del procedimiento,
repetida como ciclos si se quiere, y termina cuando cierra la última ventana; **Controlado**
aplica en el Arranque y graba hasta que alguien lo detiene.

Una corrida por unidad a la vez. El Arranque reserva la unidad antes de resolver nada, así
que una unidad que prepara está Ocupada sin pretender que graba; la reserva dura a lo largo de
En marcha, En pausa, Guardando y el cierre final del archivo. Mientras cualquier 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 la corrida se está validando y materializando. No es un estado guardado: el punto `Procedure.Status` lo dice mientras `Busy` ya es verdadero. | Arrancar | La corrida materializándose (En marcha), o un rechazo (en reposo otra vez). |
| En marcha | El muestreo y, para una corrida Temporizada, el reloj de la ventana se están moviendo. | Arrancar, Reanudar | Pausar, Detener, Abortar, el fin de la ventana, una falla, el enclavamiento. |
| En pausa | El reloj de la ventana está congelado en la última consigna; el datalog sigue grabando. Solo corridas Temporizadas. | Pausar | Reanudar, Detener, Abortar, el enclavamiento. |
| Guardando | El muestreo se detuvo; el bloque de finalización corrió y se está escribiendo la instantánea congelada. | Detener, Abortar, el fin de la ventana, el enclavamiento, una corrida Instantánea que se completa | La instantánea al quedar escrita. |
| Completada | Terminó limpiamente; el veredicto es el de la evaluación. | Guardando después de un Paro, un fin de ventana o una corrida Instantánea | Terminal. |
| Abortada | Terminó antes de tiempo; el veredicto es NOK haya juzgado lo que haya juzgado la evaluación. | Guardando después de un Aborto, una política de fallas de receta puesta en Abortar, el enclavamiento, o el runtime deteniéndose | Terminal. |
| Fallida | Terminó por un error irrecuperable; el veredicto es Ninguno. | Una falla mientras corre o mientras termina; un puntero en Guardando que dejó atrás una caída regresa como Fallida en el siguiente arranque | Terminal. |

Una corrida que estaba En marcha o En pausa cuando la aplicación se cerró no está terminada:
se reanuda en el siguiente arranque, un perfil temporizado en pausa en su segmento y su ciclo
persistidos.

Toda corrida graba quién la arrancó (el operador con la sesión iniciada en la pantalla que
presionó Arrancar, la estación cuando no había nadie, la automatización de la unidad, o un
agente) y quién la terminó (las mismas clases, para un Paro o un Aborto). Una ventana que se
agotó, un disparo de enclavamiento y una falla terminan sin nadie nombrado. 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, preparar y los comentarios se rechazan
  todos con ese motivo, y la tarjeta Corrida lo escribe bajo sus botones. Las corridas que
  siguen abiertas cuando el runtime se detiene terminan como Abortadas.
- **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, Reanudar, instantánea,
  evaluación ni aplicación de receta nuevos ("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 otra corrida**: dos unidades que escriben la misma fuente no pueden
  ejecutarse juntas; el segundo Arranque se rechaza por canal y por unidad que la tiene.

Las páginas de este grupo:

| Página | Cubre |
| --- | --- |
| [Corridas y comentarios](process-runs) | El panel de una unidad: preparar, el Arranque y qué valida, los comandos del ciclo de vida, las tarjetas en vivo, los comentarios, los comandos sueltos, el archivo de la corrida, y los caminos de la automatización y del agente al mismo ciclo de vida. |
| [El espacio de direcciones de la unidad](process-addresses) | Todos los puntos que publica una unidad en `Process.<Model>.<Unit>`, su tipo y su significado, y qué puntos son comandos escribibles. |
