Mapa de la lección
Lección 09 publicada. Mapa, ejemplo, EX025.
flowchart TD
N0["Resultados de aprendizaje"]
N1["9.1 El papel del historiador"]
N2["9.2 Un esquema mínimo"]
N3["9.3 Los agregados ocultan eventos"]
N4["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Ejemplo resuelto"]
EX --> Q["Ejercicio EX025"]
Dibujo lógico
flowchart LR
N0["Resultados de aprendizaje"]
N1["9.1 El papel del historiador"]
N2["9.2 Un esquema mínimo"]
N3["9.3 Los agregados ocultan eventos"]
N4["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX025"]
[Resultados de aprendizaje]
|
v
[9.1 El papel del historiador]
|
v
[9.2 Un esquema mínimo]
|
v
[9.3 Los agregados ocultan eventos]
|
v
[Síntesis del capítulo]
|
v
[Ejemplo resuelto] --> [Ejercicio EX025]
Resultados de aprendizaje
Usted podrá (1) modelar los datos del historiador como tiempo, etiqueta y valor; (2) agregar y filtrar con SQL en SQLite; (3) detectar huecos de muestreo; y (4) explicar por qué el historiador es a la vez un activo y un riesgo de seguridad.
9.1 El papel del historiador
Un historiador de proceso almacena series temporales de los controladores para tendencias, informes e investigaciones. Como se sitúa entre las redes de control y las de negocio, suele ser el puente que usa un intruso, y también el mejor registro del que dispone un investigador. NIST SP 800-82r3 recomienda colocar los datos que necesitan los usuarios de negocio en una copia en la DMZ, para que los usuarios corporativos nunca consulten directamente el historiador de la zona de control. En LDHP, HIST-1 está en el nivel 3 de Purdue. Los usuarios de facturación y analítica deberían leer una réplica en la DMZ, de modo que una cuenta de oficina comprometida nunca abra una sesión con el historiador que también recoge datos de PLC-H.
9.2 Un esquema mínimo
Tres columnas —marca de tiempo, etiqueta, valor— contienen la mayor parte del contenido de un historiador; los sistemas de producción añaden códigos de calidad y compresión. SQLite, integrado en Python, basta para aprender las consultas.
"""Lab 09: query a synthetic historian in an in-memory SQLite database."""
import sqlite3
db = sqlite3.connect(":memory:")
db.execute("create table h(ts integer, tag text, v real)")
rows = [(t, "TT-101", 90 + (t % 5)) for t in range(0, 60, 5)] + [(t, "PT-201", 9.5) for t in range(0, 60, 10)]
rows.append((35, "TT-101", 128.0))
db.executemany("insert into h values(?,?,?)", rows)
for tag, n, mx, mean in db.execute("select tag,count(*),max(v),round(avg(v),2) from h group by tag order by tag"):
print(f"{tag}: n={n} max={mx} mean={mean}")
print("excursions >120:", db.execute("select ts,v from h where tag='TT-101' and v>120").fetchall())
print("gap check PT-201 samples:", [r[0] for r in db.execute("select ts from h where tag='PT-201' order by ts")])
Ejecútelo con python3 lab_hist.py. Salida verificada:
PT-201: n=6 max=9.5 mean=9.5
TT-101: n=13 max=128.0 mean=92.92
excursions >120: [(35, 128.0)]
gap check PT-201 samples: [0, 10, 20, 30, 40, 50]
La tabla del laboratorio contiene muestras de TT-101 y PT-201 con marcas de tiempo enteras, suficientes para responder las dos preguntas que más hace un operador: cuál fue el extremo y si falta algo. La respuesta de Maya sobre la sobretemperatura salió de una sola consulta sobre esta tabla: select ts, v from h where tag='TT-101' and v > 120, que devolvió una fila en t = 35, 128 °C, de 13 muestras examinadas. El panel de medias horarias no había mostrado nada inusual para el mismo turno.
9.3 Los agregados ocultan eventos
La media de TT-101, 92,92 °C, parece normal; el máximo de 128,0 °C en t = 35, no. Acompañe siempre una media con un extremo y un recuento. La comprobación de huecos confirma que PT-201 se muestreó cada 10 unidades de tiempo sin pérdidas; una marca de tiempo ausente en esa lista sería la primera señal de un fallo de recogida o de una supresión deliberada. El informe de Maya enuncia las tres cosas: una desviación a 128,0 °C en t = 35, 13 muestras examinadas, y que no se alcanzó el punto de disparo de SIS-H, supuesto en 135 °C. El panel de medias horarias había respondido «sin sobretemperatura» a la misma pregunta.
Ejemplo resuelto (LDHP sintética)
A Maya le preguntan: «¿Hubo alguna sobretemperatura en el último turno?». Un panel con medias horarias dice que no. Su consulta select ts, v from h where tag='TT-101' and v > 120 devuelve una desviación en t = 35, 128 °C. Ella la comunica con el recuento de muestras examinadas (13) y señala que no se alcanzó el punto de disparo de SIS-H (supuesto en 135 °C en esta planta sintética).
Caso sintético — Lakeside District Heating Plant. Los valores, las etiquetas y el punto de disparo de 135 °C son inventados con fines didácticos.
Errores y límites
La compresión del historiador (banda muerta o puerta oscilante) puede descartar puntos que no cambiaron «lo suficiente», así que los picos breves pueden no aparecer. Las marcas de tiempo pueden provenir del historiador, no del controlador. Nunca conceda acceso de escritura a las tablas del historiador para trabajos de análisis.
Ejercicios — capítulo 9
- EX025 — Contar las muestras examinadas. ¿Por qué el laboratorio informa n = 13 para TT-101 y no 12?
Mostrar criterios de evaluación
Rúbrica: 3 = 12 muestras regulares (0–55 en pasos de 5) más la desviación insertada; 2 = menciona la fila extra; 1 = adivina; 0 = nada. - EX026 — Consulta para un hueco de muestreo. Escriba una consulta SQL que devuelva las marcas de tiempo de PT-201 en las que la muestra siguiente llega más de 10 unidades después.
Mostrar criterios de evaluación
Rúbrica: 3 = función de ventana LEAD (o autounión) con diferencia de ts > 10; 2 = idea correcta, error de sintaxis; 1 = solo cuenta filas; 0 = nada. - EX027 — Compresión por banda muerta y picos. Explique cómo la compresión por banda muerta podría ocultar una desviación breve.
Mostrar criterios de evaluación
Rúbrica: 3 = el punto solo se almacena ante un cambio mayor que la banda muerta o por excepción/latido, así que un pico corto entre puntos almacenados puede desaparecer; 2 = parcial; 1 = solo «la compresión pierde datos»; 0 = nada.
Síntesis del capítulo
Pida al historiador extremos, recuentos y huecos, no solo medias, y trate su ubicación y sus permisos como diseño de seguridad.
Siga estudiando — capítulo 09 de 40
← Capítulo 08 (borrador) · Índice de capítulos del curso · Capítulo 10 (borrador) →