OpenCyber Academy
Grado · Capítulo 3 · Español
Código del curso: OCA-114Capítulo 03: OCA-114-C003

Capítulo 3 — Programación I

Aprendizaje gratuito y abierto para quienes desean proteger a las personas y la tecnología. No se necesita una cuenta para estudiar ni consultar las respuestas.

Mapa de la lección

Lección 03 publicada. Mapa, ejemplo, EX007.

flowchart TD
  N0["Resultados de aprendizaje"]
  N1["3.1 Etiquetas como registros"]
  N2["3.2 Validación de rangos"]
  N3["3.3 Salida legible"]
  N4["Síntesis del capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Ejemplo resuelto"]
  EX --> Q["Ejercicio EX007"]

Dibujo lógico

flowchart LR
  N0["Resultados de aprendizaje"]
  N1["3.1 Etiquetas como registros"]
  N2["3.2 Validación de rangos"]
  N3["3.3 Salida legible"]
  N4["Síntesis del capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX007"]
[Resultados de aprendizaje]
    |
    v
[3.1 Etiquetas como registros]
    |
    v
[3.2 Validación de rangos]
    |
    v
[3.3 Salida legible]
    |
    v
[Síntesis del capítulo]
    |
    v
[Ejemplo resuelto] --> [Ejercicio EX007]

Resultados de aprendizaje

Usted podrá (1) leer datos estructurados con la biblioteca estándar de Python; (2) validar valores frente a rangos de ingeniería; (3) escribir salidas que un revisor pueda comprobar línea por línea; y (4) explicar por qué el código de validación es un artefacto relevante para la seguridad.

3.1 Etiquetas como registros

Una lista de etiquetas de TO es una tabla: nombre de la etiqueta, unidad de ingeniería, límites bajo y alto, valor actual. El módulo csv de Python lee estas tablas sin paquetes de terceros, lo que importa en portátiles de ingeniería bloqueados, donde instalar software requiere aprobación. Trate cada fila como un diccionario y mantenga el texto bruto separado de los números analizados, para que un fallo de análisis sea visible en lugar de convertirse silenciosamente en cero. En el laboratorio de etiquetas, conservar el texto bruto es lo que permite que la nota de Maya diga «FT-301 marcó −3,0 m³/h» en lugar de informar de un vacío o de un cero; el técnico de instrumentación puede entonces ver el valor exacto que envió el contador y decidir si el problema está en el escalado o en el cableado.

3.2 Validación de rangos

Una temperatura de 141 °C en una sonda calibrada para 20–130 °C es una desviación real, un sensor averiado o un valor manipulado. El código no puede saber cuál; puede marcar la fila e impedir que llegue a un informe etiquetado como «normal». Lo mismo vale para un caudal negativo, que es físicamente imposible en un contador unidireccional y, por tanto, siempre plantea una cuestión de calidad o de integridad de los datos. El laboratorio de etiquetas marca exactamente estas dos filas: TT-102 a 141,0 °C frente a un límite de 130 °C, y FT-301 a −3,0 m³/h. Maya envía la primera al operador de inmediato y la segunda a instrumentación como sospecha de fallo de cableado o de escalado.

3.3 Salida legible

Imprima una decisión por línea junto con la entrada que la causó. Los revisores de los comités de cambios de planta rara vez son programadores; confiarán en una salida que puedan rastrear hasta una fila.

"""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))

Ejecútelo con python3 lab_tags.py. Salida 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

En LDHP, las dos filas marcadas se imprimen como TT-102 141.0 degC OUT-OF-RANGE y FT-301 -3.0 m3/h OUT-OF-RANGE, con el valor de entrada en la misma línea que la decisión; dirigir cada marca al operador o a instrumentación es el criterio de Maya en su nota, no algo que decida el script. Un revisor del comité de cambios que sea ingeniero de control, no programador, puede contrastar cada línea con el índice de instrumentos en un minuto y no necesita leer el script. Si una línea no puede rastrearse hasta una fila, el revisor no tiene motivos para confiar en ella, así que la salida nunca debería imprimir un recuento resumido sin las filas que lo respaldan.

Ejemplo resuelto (LDHP sintética)

El laboratorio marca TT-102 (141,0 °C, por encima de 130) y FT-301 (−3,0 m³/h, por debajo de 0). La nota de Maya los separa: TT-102 podría ser una lectura alta genuina y va al operador de inmediato; FT-301 es físicamente imposible y va a instrumentación como sospecha de fallo de cableado o de escalado, con revisión de integridad si el fallo no puede explicarse.

Caso sintético — Lakeside District Heating Plant. La lista de etiquetas del laboratorio es inventada; los límites reales de LDHP provendrían del índice de instrumentos que mantienen los ingenieros de control.

Errores y límites

Las comprobaciones de rango detectan errores groseros, no una manipulación sutil dentro de la banda. La comparación en coma flotante en el límite necesita una regla explícita (aquí, inclusiva). El script lee una cadena, no un sistema en vivo.

Ejercicios — capítulo 3

Síntesis del capítulo

Programas pequeños y legibles, con la biblioteca estándar, que marcan en lugar de corregir son la primera herramienta en la que un estudiante de seguridad de TO debería confiar y que debería poder defender.

Siga estudiando — capítulo 03 de 40

← Capítulo 02 (borrador) · Índice de capítulos del curso · Capítulo 04 (borrador) →

Respuestas desarrolladas

EX007. TT-103 130.0 degC ok: la comparación lo <= v <= hi es inclusiva, así que una lectura exactamente en el límite alto pasa.

EX008. float("n/a") lanza un ValueError y el script se detiene con una traza antes de imprimir las filas restantes. Envuelva la conversión en try/except, imprima BAD-VALUE para esa etiqueta y añádala a la lista de marcadas, de modo que un valor ausente nunca se omita en silencio.

EX009. 141 °C es físicamente posible y puede ser un sobrecalentamiento real, así que el operador debe revisar el proceso ahora; −3 m³/h no puede darse en un contador unidireccional, así que apunta a cableado, escalado o manipulación y corresponde a instrumentación, con un seguimiento de integridad.