PID |
Top |
Control Proporcional Integral
BP Banda proporcional (relativa a SP) (16 bit)
#Mx Valor para salida al 100% (16 bit)
TI
Variable con el valor del
tiempo integral
(16 bit)
Vi Variable para uso
interno del
control
(32 bit)
Ri Variable para uso interno del
control
(32 bit)
Es un control
Proporcional Integral para controlar valores entre -32768 y 32767. El
control diferencial no es accesible para el usuario. Esta instrucción está
disponible a partir de CP121 BIOS 2.56, CP122 BIOS 2.04, CP123 BIOS 2.30, CP124 BIOS 1.03,
CP125 BIOS 1.00, CP126 BIOS 1.03, CP127 BIOS 1.00, CP128 BIOS 1.00, CP220
BIOS 1.00
Ejemplo:
LD
temperatura
;Valor de entrada (PV)
PID
SP, BP, Mx, TI, Vi, Ri
ST
salida
;Valor de salida
El acumulador lleva el dato de entrada (o PV) para el
control al momento de ejecutar la instrucción. El rango aceptado de valores va
desde -32768 a 32767. Una vez ejecutada, el acumulador tiene el
resultado. Todas las variables son enteros de 16 bit con signo menos Vi
(32 bit) y Ri (32 bit), por lo que se recomienda trabajar con rangos de
1/1000 para tener buena discriminación y evitar
desbordamientos.
SP (o SV) es la
variable (16 bit) que tiene el valor deseado. Puede ser temperatura,
peso, velocidad, etc. No existe un tipo definido para este dato o el
control. El rango aceptado de valores va desde -32768 a 32767.
Vi y Ri
son variables (32 bit) que el control usará para retener datos de
su operación. Poniendo a cero estas variables el control es reseteado.
Restaurar estos valores al iniciar permitiría retomar el control en el punto
en donde se lo dejó, pero es necesario que las condiciones sean las mismas,
para que realmente funcione.
Mx
es el valor (16 bit) máximo que debe adoptar la salida cuando el control está al
100%. Supongamos que la salida se usará en una salida analógica de 12
bit, solo hasta la mitad. Entonces Mx debe tener el valor de 2047
(equivale a 2¹¹ - 1). Puede ser una constante (valor numérico) o variable (que contenga el valor).
BP es una
variable (16 bit) que debe tener el valor de la banda proporcional. Esta
es relativa al SP (y usa misma unidad y escala que SP). Define el rango
de control proporcional (SP - BP → 100%,
SP → 0%). Con valor 0 el
control se comporta como un On/Off, y TI se puede usar como histéresis.
Debe tener el mismo signo que SP.
TI es una
variable (16 bit) que indica en cuantas ejecuciones de la instrucción
es realizada la integración, es decir el tiempo (o las veces) para compensar
el error del control proporcional. El valor a integrar es
(SP - entrada) / TI. El rango
de valores va desde 1 a 32767. Con valor 0 el control solo queda en modo
proporcional y las variables Vi y Ri son puestas en cero. El tiempo
integral nunca debe ser menor que el tiempo de respuesta del sistema, porque
haría inestable el control.
Uso
Como ejemplo se tomará un
control de temperatura. El sensor toma la lectura de temperatura (valor
de entrada) y actúa sobre el calefactor. Al momento de encender el
equipo se debe asignar valor cero a Vi y
Ri.
Aquí la solución se ve "lineal", pero en un control digital se necesita hacerlo de a intervalos regulares. Para esto en necesario experimentar con el medio para conocer los valores para el control. Estos son propios y exclusivos de cada medio, pues son sus propios parámetros físicos.
Para medir sus características se pone el control en modo On/Off. Se mide la distancia (o amplitud) ente picos (Pr) y el tiempo de un ciclo (ti):
Al realizar la prueba (con SP de 2 valores distintos, 80° y 160°) se obtuvo este resultado:
Prueba a 80°
.
Prueba a 160°
Kp se calcula (aproximadamente) usando los datos de la prueba con la siguiente formula:
Entonces:
22,2 / 80 = 0,278
0,278 - 1 = -0,722
|-0,722| = 0,722
0,72 * 100 = 72,2
BP = 722 (en el programa SP está en décimas por lo que BP también debe pasarse a décimas)
y
18,1 / 160 = 0,113
Ti debe ser un tiempo lo mas cercano posible a 330 segundos (según mediciones en la prueba). Como éste depende del período con que se ejecuta la instrucción, es necesario ver el ejemplo del programa para comprender.
; Temporizador para ejecutar la instrucción
PID periódicamente
LD
puls_c1seg
;En 1 solo una vuelta de programa cada segundo
LD 0
CTU cntPID,
10
;Cada 10" ejecuta el control
CMOV 0,
cntPID ;Reset
tiempo invocación periódica PID
CALC
CtrlPID
;LLama al control (cada 10") --->
; Conversión de la salida del
PID a modulación de ancho de pulso
LD
1
;Activa OSCV
OSCV tpSalPID, SalPID, 10.0 ;Convierte a tiempo
ST
PID_Out
;Relé de salida
END
CtrlPID LD Temperatura
;Control <---
PID SP, BP, 100, TI, Vi, Ri ;100 corresponde a un timer de
10" de tiempo
ST
SalPID
;SalPID es la salida del PID, que se convertirá a tiempo
RET
;Retorno --->
; Inicial se ejecuta solo una vez porque
depende
; de la variable de estados 'Init'
Inicial MOVE 800,
SP ;Temperatura
deseada en décimas de grado
MOVE 722,
BP ;Valor
calculado según mediciones
MOVE 33,
TI ;Valor
calculado según mediciones
END
Descargar ejemplo
La subrutina que tiene la instrucción PID se ejecuta una vez cada 10 segundos. Entonces para que Ti tenga los 330 segundos correspondientes a las mediciones en la prueba, se le asigna 33 (33 * 10 = 330). El valor de salida del PID es convertido a modulación de ancho de pulso usando un oscilador variable (OSCV).
Para saber si los valores son correctos o requieren ajustes, se procede a hacer la prueba:
El control se inició con los valores calculados. Como se ve, aun la BP no es la adecuada (debe agrandarse)
Nótese que el mismo dispositivo en dos valores distintos, calculados de la misma forma, responde de manera distinta; mientras que en el primer caso es necesario agrandar la BP, para el segundo debe ser achicada para mejorar la respuesta. De esta forma queda demostrado que es necesario corregir según la potencia del sistema.
Parámetros incorrectos
Cuando los parámetros no son
adecuados el control responderá "sin control". En la figura se ven las
respuestas a distintos (cinco) parámetros extremos:
Condiciones
En el área SM está PID_int_sat, que indica cuando el integral ha llegado al máximo (saturado). Si se ejecutan varios controles PID no se indica a cual corresponde. Requiere del análisis para determinar a cual corresponde. Este bit se debe poner en cero manualmente una vez atendido el asunto. La saturación ocurre cuando el valor integrado ha alcanzado el 50% del valor de SP. Esto es indicativo de que BP es grande o que al dispositivo que se controla "le falta fuerza".
Ejemplos varios
Calentamiento y enfriamiento
Para calentamiento es como se ha indicado hasta ahora. Pero supongamos que además se necesita enfriar por arriba de los 0. Las rutinas para cada uno de los controles sería:
Calentamiento:
exepidc ld PID_in
;Valor de entrada
PID SPc, BPc,
Mxc, TIc, Vic, Ric ;Control con parámetros de calentamiento
st PID_out
;Resultado
ret
Comportamiento
Enfriamiento:
exepide ld PID_in
;Valor de entrada
PID SPe,
BPe, Mxe, TIe, Vie, Rie ;Control con parámetros de enfriamiento
st PID_out
;Resultado parcial
ld Mxe
;Máximo para la salida
sub
PID_out
;Invierte comportamiento
st
PID_out
;Resultado
ret
Comportamiento
En ambos casos SP y BP son positivos, y el control se efectúa entre SP y BP. Por arriba o debajo adopta los valores indicados en las figuras de comportamiento de cada uno. Si fuese necesario que BP quede por arriba de SP para enfriamiento se deberá "engañar" al control:
exepide ld SPe
;SP real
add BPe
;BP real
st SP2
;Nuevo SP
ld PID_in
;Valor de entrada
PID SP2,
BPe, Mxe, TIe, Vie, Rie ;Control con parámetros de enfriamiento
st PID_out
;Resultado parcial
ld Mxe
;Máximo para la salida
sub
PID_out
;Invierte comportamiento
st
PID_out
;Resultado
ret
Comportamiento
Para comparar este último caso con el anterior (ambos enfriamiento por arriba de 0) supondremos que SP = 100, BP = 50 y MX = 100. Entonces en el primer enfriamiento los valores absolutos serían 100 para SP y 50 para BP, y en el segundo 100 para SP y 150 para BP.
Enfriamiento
Para enfriar por debajo de 0. los valores de SPe y BPe deben ser negativos.
exepide ld PID_in
;Valor de entrada
PID SPe, BPe,
Mxe, TIe, Vie, Rie ;Control con parámetros de enfriamiento
st PID_out
;Resultado
ret
Comportamiento
Por arriba de BP el control está al 100%, entre BP y SP actúa el control, y por debajo de SP está al 0%.
Calentamiento
Para calentar por debajo de 0 y mantener el valor también por debajo de 0 se usa la misma rutina que para enfriar con BP por arriba de SP, pero con valores negativos de SP y BP se obtiene el efecto buscado (calentamiento):
exepidc ld SPc
;SP real
add BPc
;BP real
st SP2
;Nuevo SP
ld PID_in
;Valor de entrada
PID SP2, BPc,
Mxc, TIc, Vic, Ric ;Control con parámetros de calentamiento
st PID_out
;Resultado parcial
ld Mxc
;Máximo para la salida
sub
PID_out
;Invierte comportamiento
st
PID_out
;Resultado
ret
Comportamiento
Si SP = -100 y BP = -50, el resultado será -100 para SP2 y -150 para BP.
Mínimo de salida
La instrucción no permite fijar un mínimo, pero se puede hacer modificando algunos valores:
exep ld Mx
;Valor máximo para la salida
sub Min
;Valor mínimo para la salida
st Mx2
;Nuevo máximo de salida
ld
PID_in
;Valor de entrada
PID SP, BP,
Mx2, TI, Vi, Ri ;Control con parámetros
de enfriamiento
add Min
;Salida = Salida + mínimo
st
PID_out
;Resultado
ret
Comportamiento
En la siguiente tabla se muestran los resultados de las pruebas:
Valores seteados | Entrada | Salida | |
SP | 100 | 0 | 100 |
BP | 10 | 90 | 100 |
Mx | 100 | 91 | 95 |
Min | 50 | 95 | 75 |
99 | 55 | ||
100 | 50 | ||
101 | 50 |
OSCV
LIN
Lista de instrucciones
Índice