Capítulo 17 — Fundamentos de control y realimentación
Mapa de la lección
Lección 17 publicada. Mapa, ejemplo, EX034.
flowchart TD
N0["Resultados de aprendizaje y conexión"]
N1["17.1 Realimentación"]
N2["17.2 Control PI"]
N3["17.3 Datos falsos y el controlador confiado"]
N4["17.4 Detección basada en residuos"]
N5["17.6 Actividad práctica: Lab 7"]
N6["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6
N6 --> EX["Ejemplo resuelto"]
EX --> Q["Ejercicio EX034"]
Dibujo lógico
flowchart LR
N0["Resultados de aprendizaje y conexión"]
N1["17.1 Realimentación"]
N2["17.2 Control PI"]
N3["17.3 Datos falsos y el controlador confiado"]
N4["17.4 Detección basada en residuos"]
N5["17.6 Actividad práctica: Lab 7"]
N6["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> Q["EX034"]
[Resultados de aprendizaje y conexión]
|
v
[17.1 Realimentación]
|
v
[17.2 Control PI]
|
v
[17.3 Datos falsos y el controlador confiado]
|
v
[17.4 Detección basada en residuos]
|
v
[17.6 Actividad práctica: Lab 7]
|
v
[Síntesis del capítulo]
|
v
[Ejemplo resuelto] --> [Ejercicio EX034]
Resultados de aprendizaje y conexión
Al terminar este capítulo, usted podrá (1) describir el control en lazo abierto y en lazo cerrado, las consignas, el error y los límites de los actuadores; (2) explicar el control proporcional-integral (PI) y la saturación del integrador (wind-up); (3) analizar cómo los datos de sensor falsos, una inyección de datos falsos, llevan a un controlador correcto a un estado inseguro; y (4) diseñar una detección basada en residuos con mediciones físicas independientes e indicar sus puntos ciegos. Se apoya en el capítulo 6 y prepara los capítulos 27 y 33.
17.1 Realimentación
Un controlador en lazo cerrado mide una variable de proceso, la compara con una consigna y ajusta un actuador para reducir el error. La realimentación hace que los sistemas sean robustos frente a las perturbaciones y los errores de modelo, y hace que confíen por completo en sus sensores. Feedback Systems, de Åström y Murray, disponible gratuitamente en línea, es el texto de referencia de este capítulo. En Hollin Hill, el controlador PI ajusta el caudal de entrada de PS3 para mantener el nivel del depósito en su consigna. Ve el depósito solo a través del transmisor de nivel, de modo que lo que informe ese transmisor es, para el controlador, la verdad. El resto de este capítulo sigue las consecuencias de esa confianza.
17.2 Control PI
Un controlador proporcional fija la salida del actuador en $u = K_p e$; deja un error en régimen permanente cuando debe compensarse una perturbación constante. Añadir un término integral, $u = K_p e + K_i\int e\,dt$, elimina el error en régimen permanente porque la integral sigue creciendo hasta que el error es cero. Los actuadores se saturan (una bomba no puede dar más que su caudal máximo) y, mientras están saturados, la integral sigue creciendo (saturación del integrador), lo que causa un sobreimpulso cuando el actuador sale de la saturación. El antisaturación (anti-wind-up) detiene la integración mientras dura la saturación.
17.3 Datos falsos y el controlador confiado
Si un atacante añade un sesgo $b$ a la medición de nivel, el controlador regula el nivel medido a la consigna, de modo que el nivel real se estabiliza en la consigna menos $b$. El controlador funciona perfectamente; el proceso no. Este es el núcleo de los ataques conscientes del proceso: Stuxnet, según el análisis de Langner (2011), manipuló las velocidades de las centrifugadoras mientras reproducía ante los operadores valores de apariencia normal. Las defensas no pueden basarse en el mismo flujo de datos del sensor que controla el atacante.
En Hollin Hill, un transmisor de nivel sesgado bajaría el nivel real mientras la pantalla del operador mostraba la consigna, así que la defensa debe venir de una medición independiente.
17.4 Detección basada en residuos
Un residuo es la diferencia entre lo que dice una medición y lo que predice un modelo independiente. Para un depósito, el balance de masa predice el cambio de nivel a partir de los caudales de entrada y de salida medidos de forma independiente: $\Delta h = (q_{in} - q_{out})\Delta t / A$. Dos detectores: un residuo por paso compara el cambio del nivel medido con el cambio predicho en un paso; un residuo acumulado compara el nivel medido con el nivel integrado a partir de los caudales desde la última calibración de confianza. El detector por paso detecta un sesgo abrupto, pero no una deriva lenta; el detector acumulado detecta la deriva, pero acumula el error de los medidores, así que necesita recalibraciones periódicas y un umbral por encima de la deriva normal de los medidores. Un atacante que también controle los caudalímetros anula ambos: la independencia de los caminos de medición es el verdadero control.
17.5 Ejemplo resuelto: ataque al nivel de Hollin Hill (sintético)
El Lab 7 simula durante 48 h el control PI de Hollin Hill (superficie en planta de 1.000 m², consigna de 3,0 m, caudal de salida de 300 m³/h, bomba de entrada de 0–600 m³/h). Un sesgo escalón de +1,5 m a las 10 h lleva el nivel real a 1,5 m; ambos detectores alarman a las 10,0 h. Un sesgo de +0,04 m, lo bastante pequeño para parecer un error del sensor, solo lo detecta el detector acumulado. Una rampa lenta de 0,05 m/h elude por completo al detector por paso; el detector acumulado alarma a las 10,6 h, cuando el sesgo es de unos 0,03 m. Sin detección, la rampa deja el nivel real en 1,1 m al cabo de 48 h.
17.6 Actividad práctica: Lab 7
# Lab 7 - PI level control under sensor-bias attacks, and two residual detectors (synthetic, offline)
def run(attack=None, hours=48, dt=0.1):
A = 1000.0 # m2 reservoir plan area: level h (m), volume A*h (m3)
h, integ, sp, kp, ki = 3.0, 7.5, 3.0, 400.0, 40.0 # integ preloaded so u = 300 at start
est = h # mass-balance estimate from independently metered flows
prev_meas, step_t, cum_t, hmin = h, None, None, h
for k in range(int(hours / dt)):
t = k * dt
b = attack(t) if attack else 0.0
meas = h + b
err = sp - meas
u = kp * err + ki * integ
q_in = min(max(u, 0.0), 600.0) # pump limits 0..600 m3/h
if 0.0 < u < 600.0: integ += err * dt # anti-windup
q_out = 300.0
if k > 0 and step_t is None and abs((meas - prev_meas) - (est - est_prev)) > 0.05: step_t = round(t, 1)
if cum_t is None and abs(meas - est) > 0.03: cum_t = round(t, 1)
prev_meas, est_prev = meas, est
h += (q_in - q_out) / A * dt; est += (q_in - q_out) / A * dt
hmin = min(hmin, h)
return round(h, 2), round(hmin, 2), step_t, cum_t
print("columns: true final level m, true min level m, step-detector alarm h, cumulative-detector alarm h")
print("no attack ", run())
print("step bias +1.5 m ", run(lambda t: 1.5 if t >= 10 else 0.0))
print("step bias +0.04 m", run(lambda t: 0.04 if t >= 10 else 0.0))
print("ramp 0.05 m/h ", run(lambda t: 0.05 * (t - 10) if t >= 10 else 0.0))
Salida esperada:
columns: true final level m, true min level m, step-detector alarm h, cumulative-detector alarm h
no attack (3.0, 3.0, None, None)
step bias +1.5 m (1.5, 1.4, 10.0, 10.0)
step bias +0.04 m (2.96, 2.95, None, 10.0)
ramp 0.05 m/h (1.1, 1.1, None, 10.6)
Lea las cuatro filas a la luz del ejemplo resuelto. Sin ataque, el nivel se mantiene en tres metros y ningún detector se activa. El sesgo escalón grande lo detectan ambos detectores a la vez, y el nivel real se estabiliza metro y medio por debajo. El escalón pequeño y la rampa lenta son los casos en que los detectores difieren: solo el detector acumulado los ve, y la rampa, si no se hace nada, arrastra el nivel real hasta alrededor de un metro. Recuerde que los caudalímetros del laboratorio son perfectos, de modo que los tiempos de detección reales serían más tardíos.
17.7 Errores comunes y límites
- Equiparar «el controlador funcionó» con «el proceso es seguro».
- Una detección que usa el mismo camino de datos que el lazo de control.
- Umbrales fijados sin medir el ruido y la deriva normales.
- Ignorar la saturación del integrador y del actuador en el razonamiento de seguridad funcional.
- Presentar resultados de simulación como comportamiento de la planta; el Lab 7 es un modelo simplificado con caudalímetros perfectos.
Para Hollin Hill, el EX034 muestra claramente el problema de la dependencia: el sensor de nivel y el caudalímetro de entrada están cableados ambos a la RTU3, de modo que comprometer una sola RTU anula los dos lados del residuo.
Ejercicios — capítulo 17
EX033 — Compromiso del umbral. Objetivo: ajustar un detector. Entradas: Lab 7. Pasos: (1) añada ruido gaussiano de desviación típica 0,01 m al nivel medido (semilla 17) y cuente las falsas alarmas del detector acumulado en el caso sin ataque con umbrales de 0,03 y 0,05; (2) informe el tiempo de detección de la rampa con ambos umbrales; (3) recomiende un umbral. Evidencia esperada: tabla y recomendación. Rúbrica: 3 = experimento implementado correctamente, compromiso explicado, recomendación ligada al tiempo de respuesta; 2 = un solo umbral; 1 = no ejecutado; 0 = nada.
EX034 — Argumento de independencia. Objetivo: argumentar la independencia de la detección. Entradas: la arquitectura de LRWA: el sensor de nivel y el caudalímetro de entrada, ambos cableados a la RTU3; el caudalímetro de salida en PS4, en la RTU4. Pasos: identifique qué posiciones del atacante anulan el detector de residuos y proponga un cambio de arquitectura que mejore la independencia. Evidencia esperada: media página. Rúbrica: 3 = el compromiso de la RTU3 anula tanto el nivel como el caudal de entrada, el cambio propone un camino separado (p. ej., un transmisor de nivel independiente hacia un registrador separado o una comprobación física con indicador de nivel); 2 = parcial; 1 = genérico; 0 = nada.
Síntesis del capítulo
La realimentación hace que los sistemas sean robustos y crédulos. Un sensor sesgado lleva a un controlador correcto a un estado físico incorrecto. Detecte con residuos construidos a partir de una física independiente, use pruebas por paso y acumuladas para los ataques abruptos y lentos, fije los umbrales a partir del ruido medido y recuerde que la independencia de los caminos de medición, y no la astucia del algoritmo, es lo que derrota a un atacante capaz.
Siga estudiando — capítulo 17 de 50
← Capítulo 16 · Índice de capítulos del curso · Capítulo 18 →
Continúe con la siguiente lección escrita.