Programación de Sistemas de Control
Programación de Sistemas de Control
Programación en lenguaje C
El control secuencial
2
Indice
Introducción al control de procesos por computador
Programación en lenguaje C
El control secuencial
3
El Control de Procesos por Computador
Proceso o sistema
Conjunto de elementos físicos que cumplen un cometido común
Salidas del sistema: valores medibles cuya variación en el tiempo se desea controlar
Entradas al sistema: acciones que se pueden realizar para modificar los valores de las
salidas
Tensión +
aplicada
al motor -
(entrada) 4
El Control de Procesos por Computador
Control de un proceso o sistema
Variables principales involucradas:
Referencia o consigna: valor deseado para la salida en cada momento
Error: Valor referencia – Valor salida
Acción de control: valor a aplicar en la entrada para conseguir (idealmente) error cero
Todas las variables evolucionan en el tiempo
Computador
Accionadores
Sensores
Datos
Ent
5
El Control de Procesos por Computador
Elementos de un equipo Computador:
El “cerebro” del control
de control Programa y datos alojados en memoria
Sensores:
Interfaz Comunica- Almacena- Dan al computador información del estado de
operador ciones miento los sistemas, midiendo sus salidas.
Accionadores:
Permiten al computador generar cambios
sobre los sistemas, modulando la energía
Computador entregada por fuentes externas
A S1 Interfaz operador:
s Panel(es) que permite(n) al humano intervenir
en el control, generando órdenes y recibiendo
informaciones
A S2 Comunicaciones:
Programa Datos s Interconexión con otros computadores para
intercambio de informaciones y comandos
A S3 Almacenamiento:
s De configuraciones y resultados
Control manual:
Control Reemplaza las salidas del computador en
caso de error o alarma
manual 6
Ejemplos de sistemas
Control de temperatura en
horno-túnel Robot de encolado automático
Teléfono móvil
Computador
Datos
Ent datos del mundo real
8
Computadores para control
Microcontrolador
Computador embebido
Ordenador Industrial
Multipunto:
Serie (I2C, CAN, RS-485)
Red (Ethernet)
Inalámbrica (Wifi)
13
Niveles de control
Control secuencial:
Genera la secuencia de acontecimientos deseada
Determina los valores deseados (consignas) de las variables
a controlar
Diagrama de estados / transiciones
Cambio de estados por:
Tiempo máximo
Combinación de valores de entradas
Acciones del operador o de otros computadores
Lazo de control:
Asegura que las variables a controlar alcancen el valor de
sus consignas con precisión y velocidad
Compara la variable a controlar con la consigna, y
modifica la acción de control para que se igualen 14
Ejemplo de sistema de control
Control del posición de una carretilla
24VDC Panel mando
Amplif. Indicadores
DO luminosos
Computador
ON
DI Adap. Botones
OFF
señales
D/A A/D
Adap.
24VDC Amplif. señal
Móvil Sensor
Cilindro neumático ultrasónico
Aire a
presión Electro-válvula
neumática
Final de carrera
Pos carga Pos descarga
mecánico 15
Niveles de control
Ejemplo: Control secuencial
Cuando se pulsa el botón ON, la
carretilla debe repetir el ciclo
siguiente:
Moverse a la posición de carga
Permanecer 5 seg
Moverse a la posición de
descarga
Permanecer 2 seg
Si se alcanza el final de carrera
mecánico, activar alarma y
detener ciclo
Si el operador pulsa el botón
OFF, terminar último ciclo y no
repetir
16
Niveles de control
Ejemplo: Lazo de control
Cuando ordena el movimiento
de la carretilla a una posición,
se debe alcanzar la misma con
la precisión y velocidad
requeridas
Repetir hasta llegar al destino:
Leer posición actual del sensor
ultrasónico
Calcular aire a inyectar para
moverse hacia posición destino
Abrir electro-válvula para
inyectar el aire deseado
17
Indice
Introducción al control de procesos por computador
Programación en lenguaje C
El control secuencial
18
Variables continuas y discretas
En el mundo real, las variables son continuas y analógicas.
En el computador, las variables son discretas y digitales.
Se representa una señal analógica como x(t)
Se representa una secuencia de valores discretos como {xk}
En el computador sólo se dispone de valores discretos,
obtenidos en instantes separados Tm (periodo de muestreo).
Instante actual
x(t)
x xk-1 xk
Funcionamiento hasta t∞
No se pueden guardar ∞ valores
x0 x1
Tm de xk
t
t = K . Tm
0 1 2 3 4 5 k-2 k-1 k k
19
Variables temporales discretas
En el mundo real, el tiempo avanza…
x(t)
x xk-1 xk
x1 Tm t
x0
k
t = K . Tm
0 1 2 3 4 5 k-2 k-1 k t
20
Variables temporales discretas
Desde el punto de vista del programa de control, consideramos
siempre el momento actual como el instante k, el tiempo pasa
bajo él… x x(t)
xk-1 xk
xk-2
Tm tant
k-2 k-1 k
x x(t)
El nuevo valor de este
instante es ahora xk
Un instante Tm después: xk-1 xk
El anterior xk ahora es
xk-2 xk-1 (se ha retrasado 1
xk-3 Tm respecto al instante
actual)
Tm tant
El anterior xk-1 ahora
es xk-2
...
k-3 k-2 k-1 k
21
Programa básico de control
Un programa básico de control tendrá el aspecto
siguiente:
#include ...
int main()
{
// Declaración de variables necesarias, al menos:
float ref_k; // Valor de la consigna actual (instante k)
float y_k; // Valor de la salida actual
float u_k; // Valor de la acción de control a aplicar
// Inicializaciones necesarias
...
// Bucle de control
while (1)
{
ref_k=ValorDeLaReferencia(); // De operador, cálculo, medida, etc.
y_k=ValorDeLaSalida(); // Medida mediante sensor
u_k=CalculoAccionDeControl(y_k,ref_k); // Según algoritmo deseado
AplicarAccionDeControl(uk); // Enviar a accionador
Sleep(Tm); // No ejecutar código hasta el siguiente Tm
}
}
22
Programa básico de control
Si el programa necesita manejar valores actuales y
anteriores de una señal (ejemplo, acción de control
depende de crecimiento de yk : necesita yk e yk-1)
#include ...
int main()
{
float ref_k;
float y_k,y_k_menos_1; // Valor de la salida actual y la anterior
float u_k;
// Inicializaciones necesarias
. . .
// Bucle de control
while (1)
{
y_k_menos_1=yk; // La última yk (del instante anterior) es ahora yk-1
ref_k=ValorDeLaReferencia();
y_k=ValorDeLaSalida();
u_k=CalculoAccionDeControl(y_k,y_k_menos_1,ref_k);
AplicarAccionDeControl(uk);
Sleep(Tm);
}
} 23
Programa básico de control
Generalizando: el programa necesita el valor actual y
‘m’ anteriores de la señal v (vk,vk-1,…,vk-m)
v
#include ... Instante actual
#define M 6
v(t)
int main() vk-1 vk
{
float v_k[M+1]; // Desde 0 a m incluido
// Inicializaciones Tm
...
// Bucle de control
while (1) k-2 k-1 k k
{
v_k[M]=v_k[M-1]; Mundo
Computador
v_k[M-1]=v_k[M-2]; real
... Mejor función: v_k v_k[0] vk
v_k[2]=v_k[1]; Desplaza(v_k,M+1);
v_k[1]=v_k[0]; v_k[1] vk-1
v_k[0]=nuevo_valor();
v_k[2] vk-2
// Usar tabla v_k con la interpretación
...
Sleep(Tm);
} v_k[M] vk-M
} 24
Indice
Introducción al control de procesos por computador
Programación en lenguaje C
El control secuencial
25
Interfaz del computador con el exterior
El programa del computador maneja datos que son variables
alojadas en su memoria
Los datos manejados por el programa de control proceden o
tienen como destino el mundo “real”
Los computadores disponen de subsistemas electrónicos llamados
de Entrada y Salida (E/S ó I/O) para hacer el intercambio de
información entre mundo exterior y variables internas.
El interfaz se realiza mediante
pequeñas tensiones y Computador
corrientes (potencia de mW)
Programa Sal
Señales
Mundo
mW
“real”
Datos
Ent
26
Interfaz con el “mundo real”
Entradas del computador: convierten valores
continuos y analógicos (exterior) en valores discretos y
digitales (computador) que se almacenan en variables:
Conversores A/D
Entradas digitales (todo/nada).
Contadores de pulsos
Entradas numéricas
Salidas del computador: convierten valores discretos
y digitales almacenados en variables (computador) en
señales continuas y analógicas (exterior):
Conversores D/A
Salidas digitales (todo/nada)
Generadores PWM
Salidas numéricas
27
Interfaz con el “mundo real”
Entradas del computador: diversos dispositivos
electrónicos en función de la naturaleza del sensor y la
información a extraer de él:
Conversor A/D (ADC) :
Para sensores que generan una tensión analógica
Proporcionan al programa una variable de tipo entero proporcional a la
tensión a su entrada
Entrada digital (DI):
Para sensores que generan una tensión con únicamente 2 estados (0/1)
Proporcionan al programa un bit de una variable de tipo entero
Contador de pulsos (counter):
Para sensores que generan una tensión con únicamente 2 estados (0/1),
de la que no interesa el estado 0 ó 1, sino el número de transiciones 0→1
y/o 1→0
Proporcionan al programa una variable de tipo entero con el valor de la
cuenta
28
Obtención de valores analógicos
Obtención de valores analógicos: conversores A/D
Sensor: genera una pequeña tensión o corriente
directamente relacionada con una magnitud física
Mundo Magnitud Pequeña
real física Sensor UóI
29
Obtención de valores analógicos
Obtención de valores analógicos: conversor A/D
Conversor A/D: genera un valor numérico (variable de tipo
entero) relacionada con la tensión a su entrada
Características: umin, umax, n_bits
ad ad
2
1
0 u (V) 0
umin u umax u (V)
umin u umax 30
Obtención de valores analógicos
Conversor A/D
Funcionamiento del conversor A/D de n bits:
Divide un rango de tensión de entrada en 2n intervalos, asociando a cada
uno de ellos un valor numérico (0…2n-1).
Se realiza con electrónica mediante comparaciones sucesivas
El resultado de la conversión es un valor entero utilizable por el programa.
Valores típicos de n: 8, 10, 12, 16, 20, 24, 32.
Tipos: flash, aproximaciones sucesivas, etc
([Link]
Programa:
int adk;
float Vad_k,Vhc_k,Th_k;
float s=43e-6f; // V/ºC
float Tc=0;
adk=LeerAD();
s=43 μV/ºC (termopar tipo T) Vad_k=adk*5.0f/1023;
Vhc_k=Vad_k/500.0f;
Th_k=Vhc_k/s-Tc;
33
Entradas digitales
Algunos sensores generan información en forma de
todo/nada (true/false , 1/0), que serán capturadas
mediante entradas digitales (DI) del computador
Ejemplo: interruptor (switch)
+Vcc
Mundo real Computador
variable
Usens Valor Valor entero
(0 ó Vcc) DI numérico 0ó1
SW
U1 (0 ó Vcc)
bi ≡ estado Ui
U0 (0 ó Vcc)
36
Entradas tipo contador
Entrada contador:
Incrementa un contador (entero de n bits) cada vez que se
produce un pulso (de subida, de bajada, ambos) en la señal de
entrada (todo/nada).
El valor del contador es un valor entero utilizable por el
programa.
Se puede reiniciar el contador a 0 por programa.
Se necesita una entrada digital auxiliar para definir el 0 absoluto.
¡¡ Ojo con desbordamientos del contador !!
37
Entradas tipo contador
Ejemplo: entrada de pulsos de un encóder óptico:
Computador
Contador
Contador de
Tensión
pulsos
(0 a 5V)
Programa:
int count_k;
float pos_k; // grados de giro
int pulsos_rev=512;
ResetContador();
...
count_k=LeerContador();
pos_k=count_k*360.0f/pulsos_rev;
38
Entradas tipo contador
Entrada de pulsos: algunas consideraciones
Necesidad de referencia “home” para medidas absolutas
El sensor sólo mide variación respecto a la posición original. Se necesita
una referencia absoluta (mediante entrada digital), y mover posición a esa
referencia al comienzo
Señal en cuadratura para detección de sentido A
Con una sola señal no se puede distinguir
el sentido del movimiento
Con dos señales en cuadratura se puede
distinguir (habitualmente se integra en
el hardware del contador)
B
Sentido - Sentido +
A Contador
Hardware Contador
detecta orden: Sumar
B 00,10,11,01,00,…
A Contador
Hardware Contador
detecta orden: Restar
B 00,01,11,10,00,…
39
Interfaz con el “mundo real”
Salidas del computador: diversos dispositivos
electrónicos en función de la naturaleza de la acción a
generar:
Conversor D/A (DAC) :
Generan una tensión analógica proporcional a un valor entero
proporcionado por el programa
Salida digital (DO):
Generan una tensión con únicamente 2 estados (0/1 ≡ umin/umax) a partir de
un bit de una variable de tipo entero proporcionado por el programa
Salida modulada en ancho de pulso (PWM):
Generan una tensión en forma de tren de pulsos 0/1 cuyo valor promedio
proporcional a un valor entero proporcionado por el programa
u (V) u (V)
Aprox Real
umax umax
u u
umin umin
0 da vble vble
2n_bits-1 0 da 2n_bits-1 41
Generación de valores analógicos
Conversor D/A
Funcionamiento del conversor D/A de n bits:
Genera una tensión de salida en función de un valor numérico (0…2n-1)
generado por el programa.
Se realiza con electrónica mediante adiciones sucesivas
pct_k=apertura deseada(%);
Vservo_k=pct_k/100.0f*24.0f;
Vda_k=Vservo_k/5.0f;
dak=Vda_k/5.0f*255;
GND EscribirDA(dak);
Salidas digitales
Algunos accionadores sólo tienen dos acciones
posibles: todo/nada (true/false , 1/0)
Para ellos se utilizan salidas digitales (DO)
Ejemplo: lámpara LED (mW)
44
Salidas digitales
Si es necesaria mayor potencia, lo usual es utilizar
un relé (relay):
Electromagnético (bobina+interruptor)
De estado sólido (amplificador electrónico)
Load
Coil
Relay
45
Salidas digitales
Es habitual que varias salidas digitales se agrupen
en bits diferentes de una sola variable
Computador +12VDC
Programa:
Ton float V_k,Vpwm_k;
float duty_k,Tpwm,Ton_k;
Salida PWM
VPWM
Ampli
filtro
+
48
Programación de E/S digital
El interfaz con muchos dispositivos se realiza en
formato todo/nada (1/0).
Con estos dispositivos, se utilizan E/S digitales.
Las E/S digitales están formadas por valores enteros,
de los cuales cada bit está conectado a un
dispositivo externo.
+Vcc
Salida Digital Entrada Digital
0 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1
49
Operaciones con variables
Operaciones con el bit de peso P de la variable
entera X:
En la mayoría de ocasiones, de debe operar con un solo bit
(E ó S) sin alterar el resto.
int x,p;
int mascara;
…Dar valores a p y x…
mascara=1<<p;
¿Está activo el bit de peso P de la variable X?
if (x & mascara)
…
Poner a 1 el bit de peso P de la variable X:
x=x | mascara;
Poner a 0 el bit de peso P de la variable X:
x=x & ~mascara;
Cambiar el valor del bit de peso P de la variable X:
x=x ^ mascara;
50
Indice
Introducción control de procesos por computador
Programación en lenguaje C
El control secuencial
51
El lazo de control
Esquema típico del lazo de control por
computador (1 ent, 1 sal):
Computador p(t)
rk Fuente Energía
Cálculo
yk adk Ent
yk
ya(t) ym(t)
Adaptación
señal
52
Las matemáticas del control
El cálculo óptimo de uk=Fn(yk,rk) es crucial para
satisfacer las necesidades del control:
Precisión: la salida debe seguir fielmente a la referencia.
Velocidad: la salida debe seguir rápidamente las variaciones
de la referencia.
Robustez: las perturbaciones, ruidos, o variaciones del
sistema no deben modificar el comportamiento.
53
Las matemáticas del control
En las asignaturas de control se estudia la acción de
control a aplicar de forma matemática mediante
tranformadas de Laplace :
Regulador Sistema
C(s) E(s) U(s) Y(s)
+ R(s) G(s)
-
Ym(s)
H(s)
Sensor
55
Las matemáticas del control
Ejemplo 1: control de temperatura de un fluido
mediante una llama de gas.
Referencia: temperatura deseada del fluido (ºC)
Salida del sistema: temperatura medida del fluido (ºC)
Acción de control: apertura de la válvula de gas (0%-100%)
Perturbaciones: temperatura exterior (ºC), cantidad de fluido
(Kg), calor específico del fluido (J/Kg.ºK)
Tª y(t)
56
Las matemáticas del control
Ejemplo 2: control de posición de un móvil mediante
un motor DC.
Referencia: posición deseada del móvil (mm).
Salida del sistema: posición medida del móvil (mm).
Acción de control: tensión aplicada al motor (V).
Perturbaciones: peso del móvil (Kg), dirección del
movimiento (º respecto a la horizontal), …
y(t)
+
u(t)
-
57
Las matemáticas del control
Ejemplo 3: control de velocidad de un móvil mediante
un motor DC.
Referencia: velocidad deseada del móvil (mm/s).
Salida del sistema: velocidad medida del móvil (mm/s).
Acción de control: tensión aplicada al motor (V).
Perturbaciones: peso del móvil (Kg), dirección del
movimiento (º respecto a la horizontal), …
y(t)
+
u(t)
-
58
Las matemáticas del control
Un cálculo sencillo: control todo/nada
Si yk < rk uk = cte1
Si yk > rk uk = cte2
Si yk = rk no modificar uk
Se acciona el sistema con un valor constante, que depende
del signo del error.
Cálculo excesivamente simple: la acción de control no
depende del valor absoluto del error.
Ejemplo 1:
- Se abre la válvula de gas (100%) si
la Tª es menor que la referencia.
- Se cierra la válvula (0%) si la Tª
es mayor o igual que la referencia.
- La apertura es la misma para
error=0.1ºC ó error=100ºC
- Excesivas conmutaciones cuando
yk rk (se suele usar histéresis)59
Las matemáticas del control
Un cálculo sencillo: control proporcional
ek = rk - yk
uk = cte . ek
Cuando el error es 0, la acción de control es 0.
La acción de control es mayor (en valor absoluto) cuanto más
grande sea el error (en valor absoluto), y tiene el mismo signo
que el error.
El cálculo es muy simple
Ejemplo 1:
- Se abre más la válvula de gas cuanto
mayor sea el error.
- Se cierra la válvula (0%) si la Tª
iguala a la referencia.
- No se tiene en cuenta si la Tª estaba
subiendo o bajando previamente.
60
Las matemáticas del control
Control Todo/Nada Control P
rk (ºC) rk (ºC)
Tªamb Tªamb
t t
uk (%) uk (%)
t t
yk (ºC) yk (ºC)
Tªamb Tªamb
61
Las matemáticas del control
Un cálculo sencillo: control proporcional
ek = rk - yk
uk = cte . ek
Cuando el error es 0, la salida es 0.
La salida es mayor (en valor absoluto) cuanto más grande sea
el error (en valor absoluto), y tiene el mismo signo que el error.
El cálculo es muy simple: no tiene en cuenta la evolución que
llevaba el sistema anteriormente.
Ejemplo 2:
- Se da más tensión al motor cuanto
mayor sea la distancia al destino.
- Se para el motor (tensión 0) cuando
alcanza el destino (error 0).
- No se tiene en cuenta si el móvil se
está acercando o alejando del
destino.
62
Las matemáticas del control
Un cálculo sencillo: control proporcional
ek = rk - yk
uk = cte . ek
Cuando el error es 0, la acción de control es 0.
La acción de control es mayor (en valor absoluto) cuanto más
grande sea el error (en valor absoluto), y tiene el mismo signo
que el error.
En ciertos sistemas, no se puede llegar a error 0.
Ejemplo 3:
- Se aumenta la tensión del motor si
la velocidad es menor que la deseada.
- Si la velocidad fuese igual a la
deseada, la tensión aplicada sería 0V,
por tanto el motor tendería a pararse.
- Es necesario mantener un error para
que el sistema se estabilice.
63
Las matemáticas del control
Un cálculo sencillo: control proporcional-integral
ek = rk - yk
uk = uk_anterior + cte . ek
Cuando el error es 0, la acción de control se mantiene.
La acción de control se incrementa (en valor absoluto) tanto
más cuanto más grande sea el error (en valor absoluto), y el
incremento tiene el mismo signo que el error.
El cálculo necesita recordar un valor anterior de uk.
Ejemplo 3:
- Se aumenta la tensión del motor si
la velocidad es menor que la deseada.
- Si la velocidad es igual a la
deseada, se mantiene la tensión
aplicada.
- El error llega a 0.
64
Las matemáticas del control
rk (mm/s) Control P rk (mm/s) Control PI
rfinal rfinal
rinicial rinicial
t t
uk (V) uk (V)
yk (mm/s) t y (mm/s) t
k
rfinal rfinal
yincial yinicial
65
Las matemáticas del control
Control PI:
rk
En t=t1 y t=t2, la acción
de control es la misma
(mismo ek), aunque las
situaciones son
distintas: t
uk
- En t=t1 el error está
disminuyendo
- En t=t2 el error está
aumentando t1 t2
t
yk
Ejemplo 3:
- Se aumenta la tensión del motor si
la velocidad es menor que la deseada.
- Si la velocidad es igual a la
deseada, se mantiene la tensión
aplicada.
- El error llega a 0 más rápidamente,
al tenerse en cuenta su derivada.
67
Las matemáticas del control
Control PI Control PID
rk
rk
t t
uk
uk
t t
yk
yk
68
Las matemáticas del control
Cálculo general:
ek = r k - y k
uk= Fn(ek,ek-1,ek-2,…,ek-m,uk-1,uk-2,…,uk-n)
La función realiza un cálculo con los valores actual y
anteriores (hasta retraso m) del error, y los valores anteriores
(hasta retraso n) de la acción de control calculada.
Se pueden diseñar múltiples funciones, pero es adecuado
disponer de una teoría unificada para calcularlas.
La teoría unificada es más sencilla si se usan funciones
lineales, ya que se puede aplicar el principio de superposición:
uk= [Link]+[Link]-1+…+[Link]-2-…-[Link]-n
– Control proporcional:
» m=0, n=0, b0=cte
– Control proporcional-integral:
» m=0, n=1, b0=cte, a1=-1
– Control proporcional-integral-diferencial:
» m=1, n=1, b0=cte1-cte2, b1=cte2, a1=-1
69
Las matemáticas del control
Simplificación del lazo de control para
los cálculos (sistema híbrido con parte
p(t)
continua y discreta):
Bloqueador
{ck} {ek} {uk} u(t) y(t)
+ Regu- Sistema
- lador
{yk}
Tm
Muestreador
La teoría más sencilla se obtiene
(sistemas lineales):
Calculando la Transformada de Laplace t
X(s) L[ x(t )] x( ).e sτ .dτ
de las señales continuas τ 0
k
Calculando la Transformada en Z de las X(z) Z[xk ] x k -i .z i
i 0
señales discretas
70
Las matemáticas del control
Simplificación del lazo de control para los
cálculos:
Equivale a un bloqueador con ganancia 1
Computador p(t)
rk Fuente Energía
Cálculo
yk adk Ent
yk
ya(t) ym(t)
Adaptación
señal
Equivale a un muestreador con ganancia 1
La representación matemática de los valores
de las variables discretas a lo largo del tiempo
es una secuencia: {yk}
71
Las matemáticas del control
Transformada de Laplace, relación entre
transformada y señales temporales:
x(t) y(t)
Sist
X(s) Y(s)
G(s)
Plano s
Im
o
x
x Re
x
o
74
Las matemáticas del control
Transformada de en Z, relación entre
transformada y señales temporales:
{xk} {yk}
Sist
X(z) Y(z)
G(z)
Plano z
Im
o
x
Re
-1 x 1
x
o
77
Las matemáticas del control
Sistema continuo vs sistema discreto:
El semiplano de estabilidad Re(s)<0 se convierte en el interior de
la circunferencia de radio unidad |z| < 1
s=0 ≡ z=1
s=∞ ≡ z=0
Plano s Plano z Im
Im
o o
x x
Re
x Re
-1
x 1
x x
o o
78
Las matemáticas del control
El lazo de control híbrido en forma matemática:
P(s)
En el lado continuo:
G(s)=Y(s)/U(s) G(s) : función de transferencia del sistema continuo
En la parte discreta:
E(z)=C(z)-Y(z)
R(z)=U(z)/E(z) R(z) : función de transferencia del sistema discreto
Elección de Tm:
Suficientemente pequeño para que en el sistema realimentado se
puedan ‘seguir’ las variaciones: < 0.1 * Ԏsistema_realimentado 79
Las matemáticas del control
Dos aproximaciones:
Suponer sistema completo continuo, calcular regulador continuo
R(s) y discretizar:
C(s) E(s) U(s) Y(s)
+ R(s) G(s)
-
Y(s)
(En Matlab)
>> gs=tf([coefs numerador gs], [coefs denominador gs])
>> bgz=c2d(gs,Tm,'zoh')
81
Las matemáticas del control
¡¡¡¡ ATENCION !!!! Las
rk
matemáticas “admiten todo”,
la realidad no. Ejemplo :
En un sistema con un solo polo,
se puede realimentar con Kp
grande y conseguir una t
respuesta mucho más rápida Cadena abierta
que en cadena abierta. yk
Im
Plano s
Cadena cerrada t
yk
x Re
82
Las matemáticas del control
¡¡¡¡ ATENCION !!!! Las matemáticas “admiten todo”,
la realidad no:
Para conseguir mayor velocidad, el controlador calcula
acciones de control muy grandes al inicio, que son
imposibles de generar en el sistema físico real
uk uk
Cadena abierta Cadena cerrada
t
83
Las matemáticas del control
Si se desea simular el comportamiento real, hay que
añadir una saturación en el modelo que refleje los
límites del accionador (comportamiento no-lineal)
84
Indice
Introducción control de procesos por computador
Programación en lenguaje C
El control secuencial
85
Programación del lazo de control
Programación del lazo de control:
Computador
rk
Cálculo
yk adk Ent
yk
86
Programación del lazo de control
Programación del lazo de control:
Cada Tm (periodo de muestreo) se debe repetir el
mismo algoritmo.
El algoritmo debe poder ejecutarse hasta un tiempo
indefinido.
Ejecución de un paso del lazo de control:
Actualización de tablas temporales
Adquisición de datos
Cálculo de valores adquiridos en sus unidades
Cálculo de la acción de control (regulador)
Cálculo de los valores de salida
Escritura de los dispositivos de salida
Espera al siguiente Tm 87
Programación del lazo de control
Variables para almacenar
secuencias temporales: Instante actual
v(t)
No es posible almacenar v vk-1 vk
main()
{
float c_k,y_k,u_k[N_MAX+1],e_k[M_MAX+1];
otras variables necesarias (ej: m,n, tablas b[i],a[i])
while (1)
{
Desplazar Tablas de variables temporales (al menos u_k, e_k)
c_k=Nuevo valor consigna
y_k=Valor leído de sensor
e_k[0]=c_k-y_k;
u_k[0]=CalculoAccionRegulador(e_k,u_k,...);
AplicarAccionDeControl(u_k[0]);
Otras operaciones auxiliares (comu operador, [Link]., etc.)
Sleep(Tm);
}
}
89
Programación del lazo de control
Aspecto general de un programa de control
... Variables temporales (secuencias):
- Variable ‘normal’ si sólo es necesario
main() valor actual
{ - Array si son necesarios valores anteriores
float c_k,y_k,u_k[N_MAX+1],e_k[M_MAX+1];
otras variables necesarias (ej: m,n, tablas b[i],a[i]) Variables
atemporales
inicializaciones: m,n,b[i],a[i],e_k[i]=0,u_k[i]=0, etc.
while (1)
{
Desplazar Tablas de variables temporales (al menos u_k, e_k)
c_k=Nuevo valor consigna
y_k=Valor leído de sensor
e_k[0]=c_k-y_k;
u_k[0]=CalculoAccionRegulador(e_k,u_k,...);
AplicarAccionDeControl(u_k[0]);
Otras operaciones auxiliares (comu operador, [Link]., etc.)
Sleep(Tm);
}
}
90
Programación del lazo de control
Aspecto general de un programa de control
... Dar valores iniciales a todas las
variables antes de iniciar el bucle
main()
(para secuencias, típicamente 0)
{
float c_k,y_k,u_k[N_MAX+1],e_k[M_MAX+1];
otras variables necesarias (ej: m,n, tablas b[i],a[i])
while (1)
{
Desplazar Tablas de variables temporales (al menos u_k, e_k)
c_k=Nuevo valor consigna
y_k=Valor leído de sensor
e_k[0]=c_k-y_k;
u_k[0]=CalculoAccionRegulador(e_k,u_k,...);
AplicarAccionDeControl(u_k[0]);
Otras operaciones auxiliares (comu operador, [Link]., etc.)
Sleep(Tm);
}
}
91
Programación del lazo de control
Aspecto general de un programa de control
... Se ejecuta una pasada del bucle
cada Tm: cada ejecución del
main()
bucle corresponde a un nuevo instante
{
float c_k,y_k,u_k[N_MAX+1],e_k[M_MAX+1];
otras variables necesarias (ej: m,n, tablas b[i],a[i])
while (1)
{
Desplazar Tablas de variables temporales (al menos u_k, e_k)
c_k=Nuevo valor consigna
y_k=Valor leído de sensor
e_k[0]=c_k-y_k;
u_k[0]=CalculoAccionRegulador(e_k,u_k,...);
AplicarAccionDeControl(u_k[0]);
Otras operaciones auxiliares (comu operador, [Link]., etc.)
Sleep(Tm);
}
}
92
Programación del lazo de control
Aspecto general de un programa de control
... Si cada ejecución del bucle
corresponde a un nuevo instante,
main() los valores de las señales temporales
{ están ahora retrasados 1 Tm: actualizar
float c_k,y_k,u_k[N_MAX+1],e_k[M_MAX+1];
otras variables necesarias (ej: m,n, tablas b[i],a[i])
while (1)
{
Desplazar Tablas de variables temporales (al menos u_k, e_k)
c_k=Nuevo valor consigna
y_k=Valor leído de sensor
e_k[0]=c_k-y_k;
u_k[0]=CalculoAccionRegulador(e_k,u_k,...);
AplicarAccionDeControl(u_k[0]);
Otras operaciones auxiliares (comu operador, [Link]., etc.)
Sleep(Tm);
}
}
93
Programación del lazo de control
Aspecto general de un programa de control
... Obtener los valores actuales
(del nuevo instante) de las
main() diferentes señales
{
float c_k,y_k,u_k[N_MAX+1],e_k[M_MAX+1];
otras variables necesarias (ej: m,n, tablas b[i],a[i])
while (1)
{
Desplazar Tablas de variables temporales (al menos u_k, e_k)
c_k=Nuevo valor consigna
y_k=Valor leído de sensor
e_k[0]=c_k-y_k;
u_k[0]=CalculoAccionRegulador(e_k,u_k,...);
AplicarAccionDeControl(u_k[0]);
Otras operaciones auxiliares (comu operador, [Link]., etc.)
Sleep(Tm);
}
}
94
Programación del lazo de control
Aspecto general de un programa de control
...
Con los valores actualizados,
main() calcular la nueva acción de
{ control, y aplicarla al exterior
float c_k,y_k,u_k[N_MAX+1],e_k[M_MAX+1];
otras variables necesarias (ej: m,n, tablas b[i],a[i])
while (1)
{
Desplazar Tablas de variables temporales (al menos u_k, e_k)
c_k=Nuevo valor consigna
y_k=Valor leído de sensor
e_k[0]=c_k-y_k;
u_k[0]=CalculoAccionRegulador(e_k,u_k,...);
AplicarAccionDeControl(u_k[0]);
Otras operaciones auxiliares (comu operador, [Link]., etc.)
Sleep(Tm);
}
}
95
Programación del lazo de control
Aspecto general de un programa de control
... Ahora puede haber tiempo
para ‘ocuparse’ de tareas ‘menos
main()
importantes’
{
float c_k,y_k,u_k[N_MAX+1],e_k[M_MAX+1];
otras variables necesarias (ej: m,n, tablas b[i],a[i])
while (1)
{
Desplazar Tablas de variables temporales (al menos u_k, e_k)
c_k=Nuevo valor consigna
y_k=Valor leído de sensor
e_k[0]=c_k-y_k;
u_k[0]=CalculoAccionRegulador(e_k,u_k,...);
AplicarAccionDeControl(u_k[0]);
Otras operaciones auxiliares (comu operador, [Link]., etc.)
Sleep(Tm);
}
}
96
Indice
Introducción control de procesos por computador
Programación en lenguaje C
El control secuencial
97
Programación en lenguaje C
Ver presentación específica de lenguaje C
98
Indice
Introducción control de procesos por computador
Programación en lenguaje C
El control secuencial
99
Computadores para control
Microcontrolador
Computador embebido
Ordenador Industrial
102
Programación de E/S
Servicio de eventos:
Los dispositivos de E/S envían una interrupción a la CPU
cuando necesitan ser atendidos.
La interrupción provoca que la CPU abandone temporalmente
el programa que estaba ejecutando, pase a ejecutar el código
de la ISR, retornando al programa cuando ésta termina.
Ejemplo animado disponible en:
[Link]
IRQ
103
Implantación del control
Sistemas ‘pequeños’:
Sin soporte de Sistema Operativo
El programador accede directamente al hardware
Programación de puertos de E/S
Funciones para servicio de interrupciones
El programador debe realizar la planificación de la
ejecución temporal de las diferentes tareas:
Round-robin: chequeo ordenado de las tareas a realizar
en cada momento, sin uso de interrupciones.
Round-robin con interrupción: las tareas más prioritarias
o puntuales son lanzadas por interrupciones hardware y
servidas en Rutinas de Servicio de Interrupción (ISR).
Function-queue-scheduling: las ISR encolan las tareas a
realizar con sus prioridades. Un planificador round-robin
comprueba la cola y va sirviendo por orden de prioridad
104
Implantación del control
Sistemas ‘grandes’:
Una tarea especial Sistema Operativo (S.O.) se encarga de
dar servicio a:
Acceso al hardware (modo síncrono y asíncrono):
Nivel de S.O.
Nivel de driver
Planificación de tareas:
Cada vez que sucede un ‘evento’, el S.O. toma el control,
actualiza estado de tareas, y pasa a ejecutar la más prioritaria.
Gestión de memoria
El programador debe realizar llamadas a funciones del S.O.
para todos los servicios
El S.O. puede llamar a funciones del programador (callback)
para rutinas de servicio asíncrono
105
Implantación del control
Sistemas “pequeños” vs sistemas “grandes”:
La tarea S.O. requiere recursos (memoria y tiempo
de ejecución), que pueden no estar disponibles en
sistemas pequeños.
La tarea S.O. requiere ejecutarse en modo
privilegiado: la CPU debe disponer de 2 modos de
funcionamiento (usuario y privilegiado).
La tarea S.O. facilita operaciones que pueden ser
requeridas en sistemas grandes:
La programación de E/S (no hay que conocer todos los
puertos e interrupciones)
La gestión de tareas (prioridades, sincronización, memoria)
Las protecciones de seguridad basadas en privilegios y
claves.
Las comunicaciones 106
Sistemas “pequeños”
ISR_A() ISR_B()
Organización del
programa: Servicio evento A Servicio evento B
Un bucle principal con
la(s) tarea(s) de fondo.
Funciones de Servicio de main() Variables
Interrupción (ISR) para el globales
servicio de eventos. Inicializaciones
Las ISR detienen a la
tarea de fondo o a otras INT_A Establecer ISR
ISR: ejecución rápida y sin
esperas.
Tarea Fondo 1
Gestión de prioridades de
las ISR.
Las variables compartidas Tarea Fondo 2
por el programa y las ISR
deben ser globales.
107
Sistemas “pequeños”
Variables globales:
Se declaran al principio del programa, fuera de todas
las funciones.
Existen durante todo el programa, y son accesibles
por todas las funciones (incluidas las ISR).
Por ello, permiten el intercambio de datos entre
funciones que no se llaman directamente (código
principal e ISR).
¡¡¡ ATENCION !!!
Es recomendable usar un nombre adecuado para distinguir
las variables globales: comenzando por _ ( ej: int _v1; )
No abusar de las variables globales: utilizarlas sólo cuando
sea estrictamente necesario.
El acceso “concurrente” a variables globales puede dar
lugar a problemas de sincronización. 108
Sistemas “pequeños”
Ejemplo con interrupciones:
Realización de un control todo/nada temporizado,
con entrada de consigna por teclado.
#define TM_MS 100
... main()
float _ck; // La consigna es global para que {
// sea accesible por main() y la ISR ...
// Programa el dispositivo de E/S
void ISR_Control() // temporizador para generar una interrupción
// Se ejecuta por interrupción cada TM_ms: // cada TM_ms, y establece que la
// (1) Debe ejecutarse rápido y sin esperas // función de tratamiento será ISR_Control
// (2) Sus variables locales se crean y EstablecerISRTemporiz(TM_ms,ISR_Control);
// destruyen en cada llamada
// (3) Se comunica con main() mediante while (1)
// la variable global _ck {
{ // Este código será interrumpido cada
int adk; // TM_ms para hacer un paso del control,
float yk; // retornando después al mismo código.
printf("Introduzca consigna:");
adk=LeerCanalAD(...); scanf("%d",&_ck);
yk=ConvertirValor(adk,...); }
if (_ck – yk > 0) }
ActivarSalidaControl(...);
else
DesactivarSalidaControl(...);
}
109
Sistemas “pequeños”
Ejemplo con interrupciones:
Realización de un control R(z) con entrada de
consigna por teclado.
#define TM_MS 100
#define M 2 main()
#define N 3 {
... ...
float _ck; InicializacionVariables(...);
float _a[N+1],_b[M+1],_uk[N+1],_ek[M+1]; EstablecerISRTemporiz(TM_ms,ISR_Control);
112