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
- EX007 — Ampliando a tabela de tags. Acrescente a linha
TT-103,degC,20,130,130.0. O que o laboratório imprime para ela e por quê? Rubrica: 3 = ok, porque os limites são inclusivos; 2 = ok sem justificativa; 1 = diz fora da faixa; 0 = nada. - EX008 — Valores não interpretáveis. Descreva o que o script faz se uma célula de valor contiver
n/ae proponha uma correção. Rubrica: 3 = um ValueError interrompe a execução; capturá-lo e sinalizar BAD-VALUE; 2 = um dos dois; 1 = diz que vira zero; 0 = nada. - EX009 — Triagem de duas sinalizações. Explique por que TT-102 e FT-301 vão para pessoas diferentes. Rubrica: 3 = excursão plausível vs valor impossível, operador vs instrumentação; 2 = parcial; 1 = trata as duas da mesma forma; 0 = nada.
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.