Ocorrências

Condições vigiadas da coisa sob teste, escritas como expressão JavaScript sobre os canais do modelo e julgadas durante uma execução ou sempre.

Ver como Markdown

Uma ocorrência registra que a coisa sob teste fez algo digno de nota. Onde um alarme vigia a planta e o equipamento, uma ocorrência pertence ao procedimento: as arestas dela ficam com a execução que as observou e também entram na linha do tempo persistente de Ocorrências da página Eventos. A condição dela é uma expressão JavaScript sobre os canais do modelo, com antirrepique nas duas arestas e condicionada pela qualidade do que ela lê. As ocorrências vivem em Process > Modelos

modelo > Preparação > Ocorrências e exigem a permissão Editar receitas e avaliações.

A pasta Ocorrências

Selecionar a linha Ocorrências abre a página da pasta ("Condições vigiadas da coisa sob teste. Toda aresta fica com a execução dela, quando aplicável, e também entra no histórico persistente de Ocorrências.") com um cartão por ocorrência, por nome; clicar num cartão o abre, e o X o remove. Sem nenhuma, a página diz "Nenhuma ocorrência ainda. Acrescente uma."

Comando O que faz Fica cinza quando (situação) Não é desenhado quando (papel)
Ocorrência (barra de detalhe, com a pasta selecionada; clique direito Adicionar ocorrência) Acrescenta Ocorrência <n>: severidade Alerta, armada durante procedimentos, habilitada, sem mensagem, condição vazia. E a seleciona. Alguma unidade tem uma execução, ou o runtime está parado. Sem Editar receitas e avaliações.

A página da ocorrência

O cabeçalho carrega o nome, uma pílula com a severidade (na cor da própria severidade) e uma pílula Desabilitada quando a ocorrência está desligada. Dois tipos de aviso podem ficar sob ele:

  • Uma nota de cautela quando a condição salva não valida (o rascunho continua salvo; a nota diz o que está errado, veja abaixo).
  • Um aviso Avaliação indisponível por unidade em que a condição ao vivo não pôde ser avaliada, como "<unit>: <error>". O diagnóstico de uma unidade é escrito uma vez por erro inalterado e limpo quando a avaliação volta a dar certo.

Identidade e comportamento

Campo O que é Valores / padrão Efeito
Nome O nome da ocorrência: a linha da árvore, o rótulo do evento no arquivo da execução, na linha do tempo de Eventos e nos relatórios. Texto livre; Ocorrência <n> na criação. Renomeia a linha e o que a lista de um procedimento chama assim.
Severidade O peso de uma ativação. O seletor mostra cada opção na tinta que a pílula dela vai carregar. Informação, Alerta (padrão), Crítica. Colore a pílula e o episódio onde quer que ele seja listado. Durante uma execução, uma ativação de uma ocorrência Alerta ou Crítica também pede uma notificação do sistema operacional enquanto a aplicação está escondida ou minimizada; Informação fica na janela.
Armada Quando a condição é julgada. Durante um procedimento (padrão): apenas enquanto uma execução de um procedimento que a arma está ativa, sobre as linhas gravadas. Sempre: também fora de execução, por um vigia de fundo que lê os vínculos da unidade ao vivo. Uma ocorrência do modo Sempre não precisa de procedimento para armá-la; uma do modo Durante um procedimento só é julgada pelos procedimentos que a marcam.
Atraso de liga (ms) Quanto tempo a condição precisa ficar verdadeira antes de Ativada ser confirmada, na resolução das amostras. Um número de milissegundos; 0 por padrão. O campo não aceita número negativo: a entrada é recusada, a nota diz isso embaixo do campo, e o valor anterior volta. Faz o antirrepique da aresta de subida.
Atraso de desliga (ms) Quanto tempo a condição precisa ficar falsa antes de Normalizada ser confirmada. O mesmo; 0 por padrão. Faz o antirrepique da aresta de descida.
Habilitada Se a ocorrência arma. Ligada por padrão. Uma ocorrência desabilitada nunca arma, dentro ou fora de execução, e nunca bloqueia o Iniciar.
Mensagem O texto gravado e anunciado com uma ativação. Texto livre; vazio por padrão. Viaja com toda aresta para o arquivo da execução e para o diário.

Condição

"Uma única expressão JavaScript que retorna Bool." O cartão tem um editor de código, a lista das referências que você pode usar ("Referências de canal disponíveis: Channels.Ch_1, Channels.Outlet_temperature, …") e o lembrete "Durante uma execução a condição lê as colunas gravadas do datalog; o vigia do modo Sempre lê os vínculos da unidade ao vivo. Erros de sintaxe, referências faltando e falhas de avaliação em tempo de execução são mostrados aqui sem serem tratados como falso nem como perda de sinal."

Um canal é referenciado como Channels.<identifier>, onde o identificador é o nome do canal higienizado: letras e dígitos sobrevivem, todo outro caractere vira _, e um nome que começa com dígito ganha um _ na frente. Channels guarda apenas os canais do modelo e nada mais, então um canal chamado Math, isNaN ou true continua sendo um nome de canal válido e não esconde nenhuma global do JavaScript. Um NaN presente e bom é dado que você pode testar com isNaN(Channels.Pv). Exemplos: Channels.Outlet_temperature > 80, Channels.Door_open && Channels.Heater_on.

O rascunho é validado enquanto você digita, contra valores de amostra do tipo de cada canal, e a nota de cautela sob o cabeçalho diz o que falha:

Nota Significado
"Erro de sintaxe: …" A expressão não é analisada.
"A referência de canal 'Channels.X' não existe neste modelo." Uma referência não nomeia canal nenhum.
"Mais de um canal mapeia para 'Channels.X'." Dois nomes de canal se higienizam no mesmo identificador; renomeie um na grade de Canais.
"A condição precisa retornar Bool, mas retornou <type>." A expressão rende algo que não é verdadeiro nem falso.
"Erro de avaliação: …" A expressão lança uma exceção.

Uma condição inválida ainda é salva como rascunho. Ela tem consequências em outros lugares: uma ocorrência habilitada que falha na validação e é armada por um procedimento (marcada nele, ou armada no modo Sempre) bloqueia o Iniciar daquele procedimento, e a página do procedimento mostra "A ocorrência '<name>' é inválida: …"; uma ocorrência inválida do modo Sempre não inicia o vigia de fora de execução dela e deixa um diagnóstico visível aqui, em vez de repeti-lo a cada leitura.

Cada avaliação corre num motor restrito (um limite de 500 ms, um número limitado de instruções e memória limitada), então uma expressão desgovernada falha na avaliação dela, não na estação.

Como uma ocorrência é julgada

Durante uma execução, a condição é julgada sobre as linhas que o datalog grava, então um canal que o datalog do procedimento não grava fica indisponível para ela. Um procedimento que arma uma ocorrência sobre um canal assim, ou que arma uma e não grava nada, é recusado na página dele e no Iniciar: a ocorrência nunca julgaria, e a nota de cautela a nomeia. Fora de execução, uma ocorrência do modo Sempre é julgada por um vigia que lê os vínculos da unidade ao vivo. Qualquer um dos dois juízes segura o último estado confirmado enquanto algum canal referenciado está indisponível: só um valor faltando ou uma qualidade ruim suspende o julgamento, e um valor presente e bom (um NaN inclusive) é dado avaliável. O juiz grava quatro transições: Ativada (depois do atraso de liga), Normalizada (depois do atraso de desliga), Indisponível (um canal referenciado perdeu o sinal dele) e Restaurada (todo canal referenciado voltou; a condição é julgada de novo e o atraso aplicável recomeça).

Durante uma execução, toda transição é escrita primeiro no arquivo da execução e depois copiada, com o contexto da execução, para o diário durável na página Eventos; fora de execução, o vigia escreve apenas no diário. Iniciar uma execução descarta o juiz de fora de execução da unidade, e sair da execução cria um novo, então nenhuma ativação atravessa uma fronteira não observada. Edições no nome, na mensagem ou na severidade afetam apenas as arestas posteriores; edições na condição, nos atrasos, no modo de armar ou no estado de habilitação começam uma observação nova.

Os episódios (da ativação até a normalização, com qualquer intervalo de perda de sinal contado à parte) são derivados dessas arestas onde quer que a aplicação os mostre: o cartão Ocorrências de um painel, a página Eventos, os Históricos e os relatórios. O tempo ativo de um episódio é exatamente o intervalo entre as duas arestas persistidas, então ele exclui o atraso de liga e inclui o atraso de desliga: o relógio começa quando a condição já se manteve pelo atraso de liga, e só para quando a normalização é escrita, depois de o atraso de desliga correr. É esse o número que um relatório entrega a um terceiro.

Onde uma ocorrência é usada

A página de um procedimento carrega o cartão Ocorrências armadas durante este procedimento, com uma pílula "<n> armadas" e uma caixa de seleção por ocorrência do modelo, por nome. Marcar uma a arma durante as execuções daquele procedimento; uma ocorrência armada no modo Sempre vigia de qualquer jeito e não precisa de marcação. Sem nenhuma ocorrência no modelo, o cartão diz "Nenhuma ocorrência neste modelo ainda. Acrescente algumas nas Ocorrências do modelo." Veja Procedimentos.

Renomear um canal reescreve as referências Channels.<identifier> daquele canal em toda condição do modelo; isso não toca em textos, comentários nem numa propriedade de mesmo nome em outro objeto.

Remover ocorrência

Remover ocorrência fica no grupo de perigo da barra de detalhe com a ocorrência selecionada, no menu de clique direito dela, e como o X no cartão da página da pasta. Ele pergunta antes ("Excluir ocorrência", "Isto remove a ocorrência do modelo.") e desarma a ocorrência de todo procedimento que a marcava. Ele exige Editar receitas e avaliações e fica cinza sob a trava de engenharia e o runtime parado.

O que uma ocorrência não faz

  • Ela não é um alarme: não é reconhecida, não tem prioridade e não vigia tags. Os alarmes da planta estão na página Logic.
  • Ela não dispara nada. Uma ativação é gravada e anunciada; nenhuma ação, etiqueta ou relatório está presa a ela.
  • Ela não consegue ler nada além dos canais do modelo: nenhuma tag, nenhuma variável, nenhum outro modelo.
  • Ela não é julgada de forma diferente por unidade: uma condição serve toda unidade, sobre os vínculos ou as linhas gravadas daquela unidade.