◇ OpenCyber Academy
Graduação · Capítulo 3 · Português

Capítulo 3 — Programação I

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Capítulo 3 — Programação I

Mapa da aula

Aula 03 publicada. Mapa, exemplo, EX007.

flowchart TD
  N0["3.1 Tags como registros"]
  N1["3.2 Validação de faixa"]
  N2["3.3 Saída legível"]
  N3["Síntese"]
  N0 --> N1 --> N2 --> N3
  N3 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX007"]

Desenho lógico

flowchart LR
  N0["3.1 Tags como registros"]
  N1["3.2 Validação de faixa"]
  N2["3.3 Saída legível"]
  N3["Síntese"]
  N0 --> N1 --> N2 --> N3 --> Q["EX007"]
[3.1 Tags como registros]
    |
    v
[3.2 Validação de faixa]
    |
    v
[3.3 Saída legível]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX007]

Objetivos de aprendizagem

Você vai (1) ler dados estruturados com a biblioteca padrão do Python; (2) validar valores contra faixas de engenharia; (3) escrever saídas que um revisor consiga conferir linha a linha; e (4) explicar por que o código de validação é um artefato relevante para a segurança.

3.1 Tags como registros

Uma lista de tags de TO é uma tabela: nome da tag, unidade de engenharia, limites inferior e superior, valor atual. O módulo csv do Python lê essas tabelas sem pacotes de terceiros, o que importa em laptops de engenharia bloqueados, onde instalar software exige aprovação. Trate cada linha como um dicionário e mantenha o texto bruto separado dos números interpretados, para que uma falha de interpretação fique visível em vez de virar zero em silêncio. No laboratório de tags, é guardar o texto bruto que permite que a nota de Maya diga "FT-301 leu −3,0 m³/h" em vez de relatar um campo vazio ou um zero; o técnico de instrumentação pode então olhar o valor exato que o medidor enviou e decidir se a culpa é da escala ou da fiação.

3.2 Validação de faixa

Uma temperatura de 141 °C numa sonda calibrada para 20–130 °C é uma excursão real, um sensor com defeito ou um valor manipulado. O código não sabe dizer qual; ele pode sinalizar a linha e impedir que ela chegue a um relatório rotulado como "normal". O mesmo vale para uma vazão negativa, fisicamente impossível num medidor unidirecional e, portanto, sempre uma questão de qualidade ou de integridade dos dados. O laboratório de tags sinaliza exatamente essas duas linhas: TT-102 a 141,0 °C contra um limite de 130 °C, e FT-301 a −3,0 m³/h. Maya envia a primeira imediatamente ao operador e a segunda à instrumentação, como suspeita de falha de fiação ou de escala.

3.3 Saída legível

Imprima uma decisão por linha, junto com a entrada que a causou. Os revisores dos comitês de mudança da planta raramente são programadores; eles vão confiar numa saída que consigam rastrear até uma linha.

"""Lab 03: validate a synthetic LDHP tag list (no plant access)."""
import csv, io
RAW = """tag,unit,lo,hi,value
TT-101,degC,20,130,96.5
TT-102,degC,20,130,141.0
PT-201,bar,0,16,9.8
FT-301,m3/h,0,250,-3.0
LT-401,pct,0,100,57
"""
bad = []
for row in csv.DictReader(io.StringIO(RAW)):
    v, lo, hi = float(row["value"]), float(row["lo"]), float(row["hi"])
    ok = lo <= v <= hi
    print(f"{row['tag']:7} {v:7.1f} {row['unit']:5} {'ok' if ok else 'OUT-OF-RANGE'}")
    if not ok: bad.append(row["tag"])
print("flagged:", ", ".join(bad))

Execute com python3 lab_tags.py. Saída verificada:

TT-101     96.5 degC  ok
TT-102    141.0 degC  OUT-OF-RANGE
PT-201      9.8 bar   ok
FT-301     -3.0 m3/h  OUT-OF-RANGE
LT-401     57.0 pct   ok
flagged: TT-102, FT-301

Na LDHP, as duas linhas sinalizadas são impressas como TT-102 141.0 degC OUT-OF-RANGE e FT-301 -3.0 m3/h OUT-OF-RANGE, com o valor de entrada na mesma linha da decisão; encaminhar cada sinalização ao operador ou à instrumentação é um julgamento de Maya na sua nota, e não algo que o script decide. Um revisor do comitê de mudanças que é engenheiro de controle, e não programador, consegue conferir cada linha contra o índice de instrumentos em um minuto e não precisa ler o script. Se uma linha não pode ser rastreada até um registro, o revisor não tem motivo para confiar nela; por isso a saída nunca deve imprimir uma contagem-resumo sem as linhas que a sustentam.

Exemplo resolvido (LDHP sintética)

O laboratório sinaliza TT-102 (141,0 °C, acima de 130) e FT-301 (−3,0 m³/h, abaixo de 0). A nota de Maya separa as duas: TT-102 pode ser uma leitura alta genuína e vai imediatamente para o operador; FT-301 é fisicamente impossível e vai para a instrumentação como suspeita de falha de fiação ou de escala, com revisão de integridade se a falha não puder ser explicada.

Caso sintético — Lakeside District Heating Plant. A lista de tags do laboratório é inventada; os limites reais da LDHP viriam do índice de instrumentos mantido pelos engenheiros de controle.

Erros e limites

Verificações de faixa pegam erros grosseiros, não manipulações sutis dentro da faixa. A comparação em ponto flutuante no limite exige uma regra declarada (aqui, inclusiva). O script lê uma string, não um sistema ao vivo.

Exercícios

Síntese

Programas pequenos e legíveis, feitos só com a biblioteca padrão, que sinalizam em vez de corrigir, são a primeira ferramenta em que um estudante de segurança de TO deve confiar e que deve ser capaz de defender.

Continue estudando — capítulo 03 de 40

← Capítulo 02 · Índice de capítulos do curso · Capítulo 04 →

Siga para a próxima lição escrita.