# Operação

> As unidades em uso: um nó por unidade com os painéis e dashboards pelos quais ela é operada, o que é uma execução, o ciclo de vida do Iniciar até Concluída, e o que é recusado enquanto parado.

**Operação** é o último dos quatro grupos de um modelo na coluna Espaço de trabalho da página
Process (Process > Modelos > um modelo > Operação), depois da [Definição](process-definition), da
[Visualização](process-visualization) e da [Preparação](process-setup). Os outros três declaram o
processo; este guarda as unidades em uso, um nó por unidade, e sob cada unidade as superfícies pelas
quais ela é operada. Nada é configurado aqui: uma unidade é declarada e encerrada na página do
próprio modelo ([Unidades](process-units)), os painéis e dashboards dela são arranjados sob a
Visualização, e o que ela executa é composto sob a Preparação.

O ramo é desenhado para todo papel que pode ver modelos (Ver modelos, Executar procedimentos,
Gerenciar o Process). Um papel que tem apenas Editar receitas e avaliações vê cada modelo reduzido
ao grupo de Preparação dele, então a Operação não é desenhada para ele. Acompanhar vem de graça com
a árvore; preparar, iniciar e conduzir uma execução exigem **Executar procedimentos**, e um painel
diz isso na cara dele quando o papel não a tem.

## A página Operação {#the-operate-page}

Selecionar o grupo abre uma parede de cartões, um por unidade, encabeçada por "As estações em que
este modelo roda. Abra uma para preparar um procedimento, iniciá-lo e acompanhar uma execução
registrada e avaliada." Clicar num cartão abre aquela unidade. Cada cartão carrega a situação ao vivo
da unidade, resolvida nesta ordem de precedência:

| Situação | Significado |
| --- | --- |
| Parada disparada, Aguardando rearme, Sinal de parada indisponível | O [intertravamento](process-automation) da unidade não está em Sem disparo. Mostrado apenas quando o modelo observa uma parada externa; ele passa na frente de tudo o que vem abaixo. |
| Aguardando os setpoints chegarem ao equipamento | Uma execução detém a unidade e a receita dela entregou os setpoints de um segmento e está esperando o equipamento aceitá-los. O tempo do próprio segmento ainda não começou a contar, então isto passa na frente dos estados abaixo dele; o datalog segue gravando por baixo exatamente como antes. Só um segmento configurado para aguardar chega a mostrar isto. Veja [Receitas](process-recipes#what-a-run-does-with-it). |
| Gravando, Pausada, Salvando, Preparando, Finalizando | Uma execução detém a unidade: ela está amostrando, pausada num setpoint, escrevendo o snapshot dela, reservada antes de a execução existir, ou fechando o arquivo dela depois do estado terminal. |
| Ociosa · procedimento | Nada detém a unidade, e aquele procedimento está preparado para o próximo Iniciar. |
| Ociosa · nenhum procedimento preparado | Nada detém a unidade e nada está preparado. |

Um modelo sem unidades diz "Nenhuma unidade ainda. Adicione uma na página do próprio modelo, na tabela Unidades." A linha do grupo na
árvore conta as unidades dele.

A barra de detalhe carrega os dois disparadores em lote, desenhados apenas para um papel com
Executar procedimentos. Nada mais fica nesta barra, porque nada é criado nem excluído aqui.

| Comando | O que faz | Fica cinza quando (situação) | Não é desenhado quando (papel) |
| --- | --- | --- | --- |
| Iniciar tudo | Inicia toda unidade que tem um procedimento preparado e que pode executar agora; as demais são puladas em silêncio. Toda execução iniciada grava como responsável o operador autenticado nesta tela. | Nenhuma unidade aceita Iniciar agora, ou um lote já está despachando. | Sem Executar procedimentos. |
| Parar tudo | Para toda unidade que está executando agora; as unidades já paradas continuam paradas. | Nenhuma unidade aceita Parar agora, ou um lote já está despachando. | Sem Executar procedimentos. |

Um lote é um disparador, não uma operação coordenada: cada unidade roda por conta própria, uma
recusa numa unidade vai para o diário e nunca desfaz outra, e o feed de ações informa a contagem ("3
unidades iniciadas", "Nenhuma unidade pôde ser parada.").

## A unidade {#the-unit}

A página da própria unidade a nomeia, diz se uma execução a detém e abre para cada uma das
superfícies dela. O cabeçalho carrega uma pílula com o estado da execução enquanto uma execução
detém a unidade (Gravando, Pausada, Salvando, Preparando, Finalizando, ou "Aguardando os setpoints
chegarem ao equipamento" enquanto um segmento de receita configurado para aguardar ainda tem
setpoints a receber; nada enquanto a unidade está livre). Enquanto a execução aguarda, a linha do
cabeçalho dá lugar a "Ainda aguardando: Furnace, Pump 1", os canais cujo equipamento ainda não
aceitou o setpoint, então a própria página diz por que o relógio do segmento não começou. Um
cartão, **Superfícies**, lista como blocos os painéis e os dashboards que o modelo define,
desenhados para esta unidade. A página não tem verbos de barra nem menu de clique direito: ela é
um caminho de entrada, não um lugar para editar.

Sob a unidade, a árvore guarda um nó por painel do modelo e depois um nó por dashboard. Os dois
abrem sob a mesma barra de palco que a página View usa, chamada "Modelo · Unidade · Superfície", com
a pílula de estado da execução ao lado do nome e os dois verbos de janela no lado final:
**Expandir** entrega a janela inteira à superfície, **Tela cheia** (F11) toma a tela inteira, e Esc
sai de qualquer um dos dois.

- Um nó de **painel** desenha os cartões que o painel arranja, para esta unidade: o cartão Execução,
  o cartão Metadados, o Estado da execução, os Comentários, as Ocorrências, o gráfico de Canais, o
  livro de Produtividade, os Comandos únicos e qualquer dashboard que o painel embuta como cartão.
  Essa superfície, cartão a cartão, é [Execuções e comentários](process-runs).
- Um nó de **dashboard** roda a definição única do modelo com todo canal abstrato respondido pela
  origem vinculada desta unidade. Ele mostra o dashboard e nunca o edita: editar é um verbo da linha
  do próprio modelo, sob a Visualização ([Dashboards de um
  modelo](process-dashboards)). Um dashboard sem nada colocado nele diz isso, em vez de desenhar um
  palco vazio. Os componentes de comando dele precisam apenas de Executar procedimentos aqui, porque
  esta é a superfície oficial do Process e não um dashboard da própria estação.

Um painel ou dashboard marcado com **Mostrar em View** também aparece na página View, uma entrada
por unidade do modelo, sob o mesmo nome; o que ele desenha é o mesmo dos dois jeitos.

## O que é uma execução {#what-a-run-is}

Uma execução é uma execução de um procedimento numa unidade. Ela se chama "Procedimento · Unidade",
é gravada no próprio arquivo SQLite dela, sob a pasta `acquisitions` da raiz de dados da aplicação, e
é apontada por uma linha do índice de históricos, que é o que permite encontrar e retomar uma
execução inacabada depois de um reinício. O modo do procedimento é o envelope da execução:
**Instantâneo** aplica, grava uma linha e julga uma vez, e termina sozinho; **Temporizado** roda a
janela do procedimento, repetida em ciclos se você quiser, e termina quando a última janela fecha;
**Controlado** aplica no Iniciar e grava até alguém parar.

Uma execução por unidade de cada vez. O Iniciar reserva a unidade antes de resolver qualquer coisa,
então uma unidade preparando fica Ocupada sem fingir que grava; a reserva dura por Em execução,
Pausada, Salvando e o fechamento final do arquivo. Enquanto qualquer unidade está ocupada, toda
superfície de configuração da estação fica somente para leitura ("A configuração está travada
enquanto uma Unidade está em execução."); a própria Operação continua viva, porque operar não é
configurar.

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

| Estado | Significado | Entra por | Sai por |
| --- | --- | --- | --- |
| Preparando | A unidade está reservada e a execução está sendo validada e materializada. Não é um estado guardado: o ponto `Procedure.Status` o lê enquanto `Busy` já é verdadeiro. | Iniciar | A execução se materializar (Em execução), ou uma recusa (ociosa de novo). |
| Em execução | A amostragem e, numa execução Temporizada, o relógio da janela estão andando. | Iniciar, Retomar | Pausar, Parar, Abortar, a janela terminar, uma falha, o intertravamento. |
| Pausada | O relógio da janela está congelado no último setpoint; o datalog continua gravando. Só em execuções Temporizadas. | Pausar | Retomar, Parar, Abortar, o intertravamento. |
| Salvando | A amostragem parou; o bloco de finalização rodou e o snapshot congelado está sendo escrito. | Parar, Abortar, a janela terminar, o intertravamento, uma execução Instantânea concluindo | O snapshot ser escrito. |
| Concluída | Terminou limpa; o veredito é o da avaliação. | Salvando depois de um Parar, de uma janela terminar ou de uma execução Instantânea | Terminal. |
| Abortada | Terminou cedo; o veredito é NOK, seja lá o que a avaliação tenha julgado. | Salvando depois de um Abortar, de uma política de falha de receita definida como Abortar, do intertravamento, ou do runtime parando | Terminal. |
| Com falha | Terminou por um erro irrecuperável; o veredito é Nenhum. | Uma falha enquanto executava ou terminava; um ponteiro de Salvando deixado por uma queda volta Com falha na inicialização seguinte | Terminal. |

Uma execução que estava Em execução ou Pausada quando a aplicação fechou não está encerrada: ela é
retomada na inicialização seguinte, com um perfil temporizado pausado no segmento e no ciclo
persistidos dele.

Toda execução grava quem a iniciou (o operador autenticado na tela que acionou o Iniciar, a estação
quando não havia ninguém, a automação da unidade, ou um agente) e quem a encerrou (os mesmos tipos,
num Parar ou num Abortar). Uma janela que se esgotou, um disparo de intertravamento e uma falha
terminam sem ninguém nomeado. Pausar e Retomar não deixam ator para trás.

## O que é recusado, e por quê {#what-is-refused-and-why}

- **Runtime parado**: enquanto o runtime da estação está parado, Iniciar, Pausar, Retomar, Parar,
  Abortar, os comandos únicos, a preparação e os comentários são todos recusados com esse motivo, e
  o cartão Execução o escreve sob os botões dele. As execuções ainda abertas quando o runtime para
  terminam como Abortadas.
- **O intertravamento**: enquanto o intertravamento de uma unidade está Disparado, Aguardando
  rearme ou Indisponível, nenhum Iniciar, Retomar, amostra, avaliação ou aplicação de receita nova é
  admitido naquela unidade ("A unidade 'X' está bloqueada pelo intertravamento: motivo"). Parar
  e Abortar continuam disponíveis.
- **Nada preparado**: o Iniciar precisa de um procedimento preparado ("Nenhum procedimento está
  preparado. Escolha um primeiro.").
- **Uma origem detida por outra execução**: duas unidades que escrevem a mesma origem não podem
  executar juntas; o segundo Iniciar é recusado pelo canal e pela unidade que a detém.

As páginas deste grupo:

| Página | Assunto |
| --- | --- |
| [Execuções e comentários](process-runs) | O painel de uma unidade: a preparação, o Iniciar e o que ele valida, os comandos de ciclo de vida, os cartões ao vivo, os comentários, os comandos únicos, o arquivo da execução, e os caminhos da automação e do agente até o mesmo ciclo de vida. |
| [O espaço de endereços da unidade](process-addresses) | Todo ponto que uma unidade publica sob `Process.<Model>.<Unit>`, o tipo e o significado dele, e quais pontos são comandos graváveis. |
