PID

Top 


 Control Proporcional Integral

 

PID SP, BP, #Mx, TI, Vi, Ri

 

SP        Variable con el valor deseado                      (16 bit)

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

    0,1131 -1 = -0,887

    |-0,887| = 0,887

    0,887 * 100 = 88,7

    BP = 887   (en el programa SP está en décimas por lo que BP también debe pasarse a décimas)




 

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)



El control se inició con los valores calculados. Como se ve, aun la BP no es la adecuada (debe achicarse)

 

 

  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