Mapa da aula
Aula 08 publicada. Mapa, exemplo, EX029.
flowchart TD
N0["8.1 Um catálogo de modos de falha"]
N1["8.2 Regras que se explicam"]
N2["8.3 Dentro da faixa não é verdadeiro"]
N3["8.5 Escolher limiares"]
N4["8.6 Atividade prática"]
N5["Síntese do capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5
N5 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX029"]
Desenho lógico
flowchart LR
N0["8.1 Um catálogo de modos de falha"]
N1["8.2 Regras que se explicam"]
N2["8.3 Dentro da faixa não é verdadeiro"]
N3["8.5 Escolher limiares"]
N4["8.6 Atividade prática"]
N5["Síntese do capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX029"]
[8.1 Um catálogo de modos de falha]
|
v
[8.2 Regras que se explicam]
|
v
[8.3 Dentro da faixa não é verdadeiro]
|
v
[8.5 Escolher limiares]
|
v
[8.6 Atividade prática]
|
v
[Síntese do capítulo]
|
v
[Exemplo resolvido] --> [Exercício EX029]
Objetivos de aprendizagem e conexão
Ao final deste capítulo, você deverá ser capaz de:
- nomear os modos de falha técnicos comuns da telemetria e do controle — lacuna, valor travado, pico, deriva, fora da faixa, timestamp desatualizado, perda da autoridade de controle — e as suas causas habituais;
- detectá-los numa série temporal com regras simples e explicáveis;
- explicar por que um valor dentro da faixa ainda pode ser falso, e por que um valor perfeitamente constante é suspeito;
- manter abertas, ao mesmo tempo, as hipóteses de falha e de ataque até que as evidências as separem.
O Capítulo 7 pôs os eventos em ordem. Este capítulo pergunta, de cada medição: ela é verdadeira? Muitos eventos de segurança aparecem primeiro como "dados ruins", e muitos eventos de dados ruins são falhas comuns. Um técnico precisa reconhecer ambos.
8.1 Um catálogo de modos de falha
Tabela da aula; deslize para ver todas as colunas →
| Modo | Aparência | Causas comuns | Causas relevantes para a segurança |
|---|---|---|---|
| Lacuna | Amostras ausentes | Queda do enlace, sobrecarga da varredura (Capítulo 1), reinício do dispositivo | Tráfego bloqueado ou descartado, negação de serviço |
| Travado / linha reta | Valores idênticos por mais tempo do que o processo permite | Sensor congelado, entrada analógica com falha, SCADA servindo o último valor conhecido | Valores reproduzidos ou congelados escondendo uma mudança real |
| Pico | Um salto mais rápido do que a física permite | Ruído elétrico, erro de escala, amostra ruim | Valor injetado |
| Deriva | Divergência lenta da realidade | Incrustação do sensor, idade da calibração | Manipulação lenta (rara, difícil de detectar) |
| Fora da faixa | Valor impossível | Falha de fiação, escala errada | Valor fabricado |
| Timestamp desatualizado | Valor com horário antigo ou futuro | Erro de relógio (Capítulo 7), dados em buffer | Reprodução (replay) |
| Perda da autoridade de controle | Comandos não executados ou executados por outra pessoa | Seletor local/remoto deixado em local, intertravamento | Escrita não autorizada |
O ponto da tabela não é que toda lacuna seja um ataque. É que o mesmo sintoma tem os dois tipos de causa; portanto, as detecções devem relatar o sintoma com precisão, e a investigação (Capítulo 13) separa as causas.
8.2 Regras que se explicam
Cada detecção deste capítulo é uma regra que uma pessoa consegue ler e verificar:
- Lacuna: mais de N amostras ausentes consecutivas, em que N é definido a partir do ciclo de varredura e da tolerância do processo.
- Travado: mais de M leituras consecutivas idênticas, em que M reflete quanto um sensor saudável varia naturalmente. Um analisador de cloro que informa exatamente 0,62 por vinte minutos é suspeito, porque analisadores reais oscilam no último dígito.
- Pico: uma mudança entre amostras consecutivas maior do que o passo máximo fisicamente plausível — um tanque de 12 m não sobe 6,8 m em um minuto. Isso pega valores que as verificações de faixa deixam passar.
- Faixa: fora dos limites do instrumento ou do processo (Capítulo 4).
Essas regras são grosseiras, mas transparentes: quando uma dispara, todos conseguem ver por quê. Detectores de anomalias estatísticos ou aprendidos podem acrescentar sensibilidade depois; não devem substituir regras que os operadores entendem.
8.3 Dentro da faixa não é verdadeiro
Um valor de 9,80 m num tanque de 12 m passa em toda verificação de faixa. Se o minuto anterior marcava 2,96 m e o seguinte 2,97 m, o 9,80 é impossível como medição. Inversamente, um valor constante está sempre "dentro da faixa". As verificações de faixa protegem contra o absurdo; as verificações de taxa e de variação protegem contra o falso de aparência plausível.
Use um passo máximo tirado do processo, como meio metro por minuto para o nível de um tanque, para que uma única amostra desvairada seja pega mesmo quando estiver dentro da faixa do instrumento. Escreva o limite de passo ao lado do limite de faixa no esquema da tag e revise os dois depois de cada alarme falso.
8.4 Exemplo resolvido: quatro tags, vinte minutos (sintético)
Laboratório 8 (salve como lab08.py e execute com python3 lab08.py):
# Lab 8 - classify telemetry failure modes (offline, standard library only)
# Synthetic one-minute readings from four Kestrel Water tags, 06:00-06:19Z on 2026-10-12.
series = {
"KW-01 LEVEL_M": [3.40,3.41,3.41,3.42,3.43,3.43,3.44,3.45,3.45,3.46,3.47,3.47,3.48,3.49,3.49,3.50,3.51,3.51,3.52,3.53],
"KW-02 CL2_MGL": [0.62,0.62,0.62,0.62,0.62,0.62,0.62,0.62,0.62,0.62,0.62,0.62,0.62,0.62,0.62,0.62,0.62,0.62,0.62,0.62],
"KW-05 FLOW_LS": [41.0,40.8,41.2,40.9,None,None,None,None,None,None,None,41.1,40.7,41.0,41.3,40.9,41.2,41.0,40.8,41.1],
"KW-07 LEVEL_M": [2.95,2.96,2.95,2.97,2.96,2.96,9.80,2.97,2.96,2.98,2.97,2.97,2.98,2.97,2.99,2.98,2.98,2.99,2.98,2.99],
}
LIMITS = {"LEVEL_M": (0.0, 12.0), "CL2_MGL": (0.0, 5.0), "FLOW_LS": (0.0, 400.0)}
MAX_STEP = {"LEVEL_M": 0.5, "CL2_MGL": 0.3, "FLOW_LS": 25.0} # physically plausible change per minute
STUCK_MIN, GAP_MIN = 15, 5
for name, xs in series.items():
tag = name.split()[1]; lo, hi = LIMITS[tag]; out = []
run, longest = 0, 0
for i in range(len(xs)): # gaps
run = run + 1 if xs[i] is None else 0; longest = max(longest, run)
if longest >= GAP_MIN: out.append(f"gap: {longest} consecutive missing minutes")
vals = [(i, v) for i, v in enumerate(xs) if v is not None]
same, best = 1, 1
for (i0, a), (i1, b) in zip(vals, vals[1:]): # stuck / flatline (exact repeats)
same = same + 1 if a == b else 1; best = max(best, same)
if abs(b - a) > MAX_STEP[tag] and i1 - i0 == 1:
out.append(f"spike: 06:{i1:02d}Z jump {a} -> {b} exceeds {MAX_STEP[tag]}/min")
if best >= STUCK_MIN: out.append(f"stuck: {best} identical readings in a row")
out += [f"range: {v} outside {lo}-{hi}" for _, v in vals if not lo <= v <= hi]
print(f"{name:<14} {'; '.join(out) if out else 'no failure mode detected'}")
Saída esperada (Python 3.13.5):
KW-01 LEVEL_M no failure mode detected
KW-02 CL2_MGL stuck: 20 identical readings in a row
KW-05 FLOW_LS gap: 7 consecutive missing minutes
KW-07 LEVEL_M spike: 06:06Z jump 2.96 -> 9.8 exceeds 0.5/min; spike: 06:07Z jump 9.8 -> 2.97 exceeds 0.5/min
A KW-01 se comporta como um tanque enchendo devagar — nenhuma constatação. O cloro da KW-02 é idêntico nas vinte leituras: ou o analisador congelou, ou a RTU está devolvendo um valor armazenado, ou o valor está sendo fornecido por algo que não é o analisador. A KW-05 tem uma lacuna de sete minutos — verifique primeiro o enlace e a varredura (Capítulo 13). A KW-07 mostra uma excursão de uma única amostra até 9,80 m e de volta: uma falha clássica de ruído ou de escala, mas também exatamente o que pareceria uma escrita injetada, isolada, num registrador de relatório. Cada linha é um sintoma com uma descrição precisa; nenhuma é ainda uma causa.
8.5 Escolher limiares
Defina os limiares a partir de evidências, não de palpites: examine uma semana de dados saudáveis por tag, encontre o maior passo natural e a mais longa sequência natural de valores idênticos e defina a regra acima deles, com uma margem. Registre o motivo ao lado do número e revise depois de cada alarme falso e de cada evento não detectado. Uma regra de valor travado numa tag que legitimamente fica em 0,00 (uma bomba desligada) precisa de uma condição — por exemplo, aplicá-la apenas enquanto a bomba funciona.
8.6 Atividade prática
Acrescente uma verificação de deriva ao Laboratório 8: compare a média de cada tag nos cinco primeiros minutos com a sua média nos cinco últimos e sinalize uma mudança maior do que um limite específico da tag. Discuta por que a subida constante da KW-01 não deve ser sinalizada, e que informação extra (estado da bomba, vazão de entrada) tornaria significativa a detecção de deriva.
A subida constante da KW-01 é comportamento do processo enquanto uma bomba enche o tanque; assim, uma comparação ingênua de médias a sinalizaria por engano. A deriva se torna significativa quando você conhece o estado da bomba ou a vazão de entrada, ou quando compara dois sensores que deveriam concordar. Defina o limite específico da tag a partir de uma semana de dados saudáveis e registre o motivo ao lado do número.
8.7 Erros comuns e limites
- Tratar todo valor ruim como ataque — ou nenhum.
- Apenas verificações de faixa.
- Regras de valor travado em tags que legitimamente ficam paradas.
- Limiares sem justificativa registrada.
-
O Laboratório 8 vê uma série de cada vez; uma investigação real compara tags relacionadas (uma bomba funcionando enquanto a vazão é zero é uma inconsistência entre tags).
-
Aplicar uma regra de valor travado a uma tag que legitimamente fica em zero enquanto uma bomba está desligada.
- Definir limiares a partir de um palpite em vez de dados saudáveis, com uma justificativa registrada.
- Investigar uma série isoladamente quando um bit de bomba funcionando e uma vazão zero mostrariam uma falha entre tags.
Exercícios — capítulo 8
EX029 — Nomeie o modo. Objetivo: classificar sintomas. Insumos: (a) o nível sobe 0,01 m/min enquanto a válvula de entrada informa fechada; (b) a vazão marca 0,00 por 40 minutos enquanto a bomba 1 informa funcionando; (c) o historiador mostra valores com timestamps de 03:00–03:10 que chegaram às 03:25; (d) a bomba 2 não liga depois de um comando da IHM, e a RTU informa "local". Passos: nomear o modo e duas causas candidatas para cada um. Evidência esperada: quatro linhas. Rubrica: 3 = (a) inconsistência entre tags/deriva — falha no retorno da válvula ou um vazamento/desvio; (b) travado ou inconsistência entre tags — medidor de vazão com falha ou valor congelado; (c) dados em buffer/desatualizados — queda do enlace com armazenamento e reenvio, ou reprodução; (d) perda da autoridade de controle — seletor local no local, ou intertravamento; 2 = modos certos, causas rasas; 1 = parcial; 0 = nada.
EX030 — Preveja uma mudança de regra. Objetivo: raciocinar sobre limiares. Insumos: o Laboratório 8 com STUCK_MIN = 25 e MAX_STEP["LEVEL_M"] = 7.0. Passos: prever a nova saída e depois executar. Evidência esperada: previsão e saída real. Rubrica: 3 = a KW-02 deixa de ser sinalizada (20 < 25), o pico da KW-07 deixa de ser sinalizado (6,84 < 7,0; 6,83 < 7,0), a lacuna da KW-05 continua sinalizada; explica o que se perde; 2 = quase tudo certo; 1 = palpites; 0 = nada.
EX031 — Regra condicional de valor travado. Objetivo: reduzir alarmes falsos. Insumos: uma tag de vazão marca legitimamente 0,0 quando a sua bomba está desligada. Passos: escrever a regra em pseudocódigo usando o estado da bomba. Evidência esperada: regra e um caso de teste. Rubrica: 3 = aplicar a detecção de valor travado apenas enquanto o estado da bomba = funcionando por pelo menos o intervalo de varredura; inclui um teste com a bomba desligada (sem alerta) e funcionando com vazão constante diferente de zero (alerta); 2 = sem teste; 1 = desativa a regra; 0 = nada.
EX032 — Plano de falha ou ataque. Objetivo: manter as duas hipóteses abertas. Insumos: a KW-02 travada em 0,62. Passos: listar três verificações que apontariam para uma falha e três que apontariam para manipulação, todas somente de leitura. Evidência esperada: seis verificações. Rubrica: 3 = falha: o display local do analisador, os diagnósticos da entrada analógica da RTU, os registros de manutenção; manipulação: escritas inesperadas no registrador de relatório nas capturas, logs de sessões de configuração, comparação com uma amostra manual feita pelas operações; 2 = um lado raso; 1 = apenas uma hipótese; 0 = nada.
Síntese do capítulo
A telemetria falha de um pequeno número de modos reconhecíveis, e cada sintoma tem causas comuns e maliciosas. Detecte os sintomas com regras transparentes — lacuna, travado, pico, faixa — cujos limiares venham de dados saudáveis e cujos motivos estejam escritos. Estar dentro da faixa não é o mesmo que ser verdadeiro. Relate o sintoma com precisão e deixe a causa para a investigação.