# O espaço de endereços da unidade

> Todo ponto que uma unidade publica sob Process.Model.Unit, o tipo e o significado dele, quais pontos são comandos graváveis, e o que um script da Logic pode ler dele.

Toda unidade publica os dados de execução dela como endereços comuns da [Logic](logic), sob
`Process.<Model>.<Unit>`, então dashboards, expressões da Logic, o servidor OPC UA embutido e o
agente os alcançam sem encanamento extra. O ramo é navegado na página Logic, sob "De outras páginas"
([De outras páginas](logic-from-other-pages)), e em todo seletor de endereço. Renomear um modelo,
uma unidade, um canal, um campo de metadados, uma avaliação ou um critério substitui os endereços
correspondentes e reescreve as referências textuais vivas; os arquivos gravados mantêm os nomes congelados na hora em que foram
escritos. Os segmentos são os nomes higienizados: uma unidade chamada "Unidade 1" do modelo "Câmara
climática" é endereçada como `Process.Câmara_climática.Unidade_1`.

| Ramo | O que ele expõe | Gravável |
| --- | --- | --- |
| `Channels.<Channel>` | O valor vinculado ao vivo de cada canal, tipado como o canal declara. | Um canal gravável (função Somente escrita ou Leitura e escrita) é um ponto gravável pelo funil de escrita; uma origem que uma execução detém recusa todo outro escritor. |
| `Procedure.<point>` | O estado da execução, um escalar por ponto (tabela abaixo). | Não. |
| `Commands.<command>` | `Start`, `Hold`, `Resume`, `Stop`, `Abort` e `Comment`. | Sim: escrever despacha (tabela abaixo). |
| `Next.<point>` | A área de preparação que o próximo Iniciar consome. | Apenas os campos de metadados manuais. |
| `LastRun.<point>` | O registro da última execução que a unidade terminou ([LastRun](#lastrun)). | Não. |
| `Productivity.Today.<branch>` e `Productivity.Rolling.<branch>` | A projeção de produtividade da unidade para cada período. | Não. |

## Canais {#channels}

Um ponto de canal lê o valor por trás do vínculo da unidade, projetado no tipo de dado do canal, e
se lê como uma lacuna quando o canal não tem vínculo ou a origem dele está indisponível. Num script da
Logic, o ponto é uma projeção tipada somente leitura da tag ou da variável vinculada, nunca a tag em
si: `Value`, `ValueObject`, `ValueRaw`, `ValueScaled`, `ValueCalibrated`, `ValueLimited`,
`ValueRounded`, as conversões `ValueToBool()`, `ValueToInteger()`, `ValueToReal()`,
`ValueToString()` e `ValueToDateTime()`, a qualidade `State()`, os carimbos `SourceTimeStamp()` e
`ApplicationTimeStamp()`, `Refresh()`, `Name` e `EngineeringUnit`. Os membros da cadeia respondem
por um vínculo de tag; um vínculo de variável responde o valor e o carimbo da aplicação.

## Procedure {#procedure}

Todo ponto é calculado a partir da execução ao vivo e é lido com qualidade boa; um ponto que não tem
nada a dizer se lê como uma lacuna.

| Ponto | Tipo | Significado |
| --- | --- | --- |
| `Status` | Texto | `Preparing` enquanto a unidade está reservada e nenhuma execução existe ainda, `Idle` enquanto nada a detém e, fora isso, o estado da execução: `Running`, `Held`, `Saving`, `Completed`, `Aborted`, `Failed`. |
| `Running` | Booleano | Estritamente o estado Em execução; nunca verdadeiro na preparação, na pausa, ao salvar nem na finalização. |
| `Busy` | Booleano | O intervalo ocupado inteiro: a reserva, Em execução, Pausada, Salvando e o fechamento final do arquivo da execução. |
| `Verdict` | Texto | `Ok`, `Nok`, `Indeterminate` ou `None`, escritos exatamente assim, seja qual for a palavra que a interface ou uma etiqueta impressa mostre: uma comparação se escreve `Process.<Model>.<Unit>.Procedure.Verdict == "Nok"`. A evidência julgada continua legível depois de a execução terminar, até a próxima começar. |
| `Mode` | Texto | O modo da execução ativa, `Instant`, `Temporal` ou `Controlled`; um comando único (amostra, avaliar agora) também informa. Lacuna quando ociosa. |
| `ActiveProcedure` | Texto | O nome da execução ativa ("Procedimento · Unidade"). Lacuna quando ociosa. |
| `SegmentIndex` | Inteiro | O segmento atual do perfil temporizado, começando em 0. Lacuna sem um perfil. |
| `CycleIndex` | Inteiro | O ciclo atual, começando em 0. Lacuna quando ociosa. |
| `CycleCount` | Inteiro | O total de ciclos da execução (1 numa passagem única). Lacuna quando ociosa. |
| `Cycle` | Texto | "2 / 10" numa execução cíclica; uma lacuna quando a execução não é cíclica, então uma leitura vinculada mostra a marca de lacuna em vez de uma passagem única enganosa. |
| `FailedCycles` | Inteiro | Ciclos julgados NOK até agora. Lacuna quando a execução não é cíclica. |
| `SamplesEvaluated`, `SamplesOut`, `SamplesUnavailable`, `SamplesInvalid` | Inteiro | Os contadores de evidência da avaliação, atualizados atomicamente pelo motor de avaliação. Lacuna sem evidência julgada. |
| `Elapsed` | Número decimal | Segundos desde que a execução começou. Lacuna quando ociosa. |
| `StartedAt` | Data e hora | Quando a execução ativa começou. Lacuna quando ociosa. |
| `Metadata.<Field>` | Texto | Um ponto por campo de metadados do modelo: o valor que a execução em curso congelou no Início. Lacuna quando ociosa e para um campo que essa execução não pergunta; um campo deixado em branco se lê como texto vazio. É o que uma ação disparada no Início lê da execução que começa, já que `Next.<Field>` mostra a seguinte. |

## Commands {#commands}

Ler um ponto de comando responde "isto pode executar agora", então um Botão vinculado se desabilita
sozinho; escrevê-lo despacha o comando pelo console de execução, registrado em diário com a origem
da superfície que escreveu e gravado com a identidade de quem acionou. Um comando é uma chamada de
serviço, nunca uma escrita de ponto enfileirada.

| Ponto | Lê verdadeiro quando | Escrever |
| --- | --- | --- |
| `Start` | A unidade não está ocupada, o runtime aceita operações, o intertravamento está em Sem disparo e há um procedimento preparado. | Inicia o procedimento preparado com os metadados preparados. |
| `Hold` | Uma execução está Em execução e o procedimento dela é Temporizado. | Congela a janela. |
| `Resume` | Uma execução está Pausada e o intertravamento está em Sem disparo. | Solta a pausa. |
| `Stop` | Uma execução está Em execução. | Encerra a execução como Concluída. |
| `Abort` | Uma execução está Em execução ou Pausada. | Encerra a execução como Abortada. |
| `Comment` | Nunca: o ponto não tem leitura. | Acrescenta o texto escrito como comentário à execução ativa, ou como nota pós-execução na última execução terminada da unidade, quando ela está ociosa. Uma unidade sem execução nenhuma recusa ("A unidade não tem execução para comentar."), e texto vazio também. |

Todo comando lê falso enquanto a estação está recusando escritas (o runtime parado).

## Next {#next}

| Ponto | Tipo | Significado |
| --- | --- | --- |
| `Next.Procedure` | Texto | O nome do procedimento preparado. Somente leitura aqui: preparar é feito no cartão Execução do painel de unidade. |
| `Next.<Field>` | Texto | Um ponto por campo de metadados que o procedimento preparado pergunta; o ramo se remodela quando a unidade é preparada de novo, e um campo de outro procedimento se lê como lacuna. Um campo manual (de texto ou numérico) é um ponto de preparação gravável, que é o que um componente Input vinculado a ele escreve. Um campo sequencial é uma previsão somente leitura do identificador que o contador comporia agora; ler nunca o reserva. |

A preparação vale para a estação inteira, é em memória e é transitória: ela zera quando a aplicação
inicia e é consumida pelo Iniciar, não limpa por ele.

## Productivity {#productivity}

Dois períodos, `Today` (desde a meia-noite local) e `Rolling` (a janela declarada no modelo ou na
unidade), cada um com três ramos ([Produtividade](process-productivity)):

| Ramo | Pontos | Tipo |
| --- | --- | --- |
| `Summary` | `ProductivityPercent`, `YieldPercent`, `TypicalElapsedSeconds` | Número decimal; uma lacuna até o denominador existir. |
| `Summary` | `Finalized`, `OK`, `NOK`, `Indeterminate`, `Unclassified`, `Aborted`, `Failed` | Contagens inteiras. |
| `Outputs.<key>` | `Quantity`, `RatePerHour` | Número decimal; uma chave por quantidade nomeada, ou por procedimento produtivo quando o modelo não declara quantidade. |
| `Procedures.<key>` | `Quantity`, `RatePerHour` e os pontos de resumo acima | Como acima, por procedimento produtivo. |

As chaves derivam do id estável e da unidade de saída congelada, não do nome de exibição, então uma
renomeação nunca move uma expressão. Todo ponto é somente leitura, e a projeção é lida do índice de
históricos, nunca dos arquivos de execução.

## LastRun {#lastrun}

O registro da última execução que a unidade terminou: qual foi, como terminou, o que o operador
preencheu no Início e como foi cada critério. É o que lê uma ação da Logic disparada na Conclusão
([Ações](process-actions#logic-action-commands)), e qualquer outro consumidor o lê do mesmo jeito:
uma tela que mostra a última peça, um alarme, os servidores da estação. Toda execução gravada da
unidade conta, inclusive uma que terminou em falha e uma amostra ou um avaliar agora; uma execução
importada nunca conta.

| Ponto | Tipo | Significado |
| --- | --- | --- |
| `RunId` | Texto | O identificador da execução. |
| `Procedure` | Texto | O nome do procedimento como a execução o gravou. |
| `Status` | Texto | `Completed`, `Aborted` ou `Failed`, escritos exatamente assim. |
| `Verdict` | Texto | `Ok`, `Nok`, `Indeterminate` ou `None`, escritos como em `Procedure.Verdict`; uma execução que terminou em falha se lê `None`. |
| `StartedAt`, `FinishedAt` | Data e hora | Quando a execução começou e quando terminou. |
| `Elapsed` | Número decimal | Segundos do começo ao fim. |
| `CycleCount` | Inteiro | Os ciclos da execução (1 numa passagem única). |
| `FailedCycles` | Inteiro | Os ciclos julgados NOK. |
| `Metadata.<Field>` | Texto | Um ponto por campo de metadados do modelo: o valor que a execução congelou no Início. Um campo que a execução não perguntou se lê como lacuna; um campo deixado em branco se lê como texto vazio. |
| `Evaluations.<Evaluation>.<Criterion>.<point>` | Como abaixo | Uma pasta por avaliação do modelo e, dentro dela, uma por critério, com o nome do critério, ou com o do canal dele quando não tem nome. |

Cada critério traz um resultado, dobrado sobre todos os ciclos em que foi julgado, então o endereço
é o mesmo para uma passagem única e para uma execução de cem ciclos:

| Ponto | Tipo | Significado |
| --- | --- | --- |
| `Outcome` | Texto | `Ok`, `Nok` ou `Indeterminate`, escritos exatamente assim: um ciclo NOK dá `Nok`; senão, um ciclo Indeterminada dá `Indeterminate`; senão, `Ok`. |
| `Passed` | Booleano | Verdadeiro só quando `Outcome` é `Ok`. |
| `Value` | Número decimal | O valor medido do canal observado: a última amostra avaliada da janela, no modo Um ponto a julgada, do ciclo mais recente que mediu um valor. |
| `MinValue`, `MaxValue` | Número decimal | O menor e o maior valor avaliado, sobre todos os ciclos. |
| `Limits` | Texto | Os limites como foram gravados, como `5 .. 45`. |
| `WorstExcursion` | Número decimal | A maior distância além de um limite, sobre todos os ciclos. |
| `FailedCycles` | Inteiro | Os ciclos que julgaram este critério NOK. |

O ramo tem a forma do modelo, nunca a forma da última execução: todo campo de metadados do catálogo
e todo critério de toda avaliação é um ponto, então um script que nomeia um deles é validado antes
de qualquer execução, e depois de uma execução de um procedimento que julgou por outra avaliação.

| Situação | O que os pontos leem |
| --- | --- |
| Nenhuma execução da unidade terminou ainda | Lacuna com qualidade ruim, em todos os pontos. |
| Uma execução termina | O registro novo, já no lugar antes que o `Procedure.Status` da unidade diga que a execução terminou. |
| Outra execução da unidade está em curso | O registro anterior, até essa execução terminar. |
| A aplicação inicia de novo | A última execução terminada da unidade, lida de volta do arquivo dela pouco depois do início; lacuna até ser lida. |
| Um critério que a última execução não julgou (de outra avaliação, ou criado depois) | Lacuna em todos os pontos. |
| Duas avaliações, ou dois critérios, cujos nomes se leem iguais | Nada: o endereço não resolve para nenhum dos dois, e a página da avaliação diz isso ([Avaliações](process-evaluations#names-are-addresses)). |

Renomear um campo de metadados, uma avaliação, um critério ou o canal de um critério sem nome move
estes endereços como toda outra renomeação desta página.

## O que um script pode fazer {#what-a-script-may-do}

Scripts de variável, de alarme e de ação da Logic podem **ler** tudo o que está aqui: valores de
canal, estado da execução, prontidão de comando, valores preparados, a última execução e pontos de
produtividade. Eles não podem despachar um comando, escrever um campo de preparação nem acrescentar
um comentário; essas escritas pertencem aos consumidores explícitos de comando: os painéis de
operação, os Botões e os Inputs de um dashboard, a automação da unidade e as ferramentas do
agente.

Um ponto de canal se lê como a projeção tipada de [Canais](#channels); todo outro ponto daqui se lê
como o valor puro, sem `.Value` depois dele, ao contrário de uma variável:

```js
if (Process.Oven_soak.Oven_1.LastRun.Verdict === "Ok") {
  Variables.Last_serial = Process.Oven_soak.Oven_1.LastRun.Metadata.Serial;
}
```
