Proporcional + Integral (PI)
Esta información se aplica a los controladores
CompactLogix
5370, ControlLogix
5570, Compact GuardLogix
5370, GuardLogix
5570, CompactLogix
5380, ControlLogix
5580 y ControlLogix 5590.La instrucción PI proporciona dos métodos de funcionamiento. El primer método sigue el algoritmo PI convencional en el que la ganancia proporcional y la ganancia integral permanecen constantes en el rango de la señal de entrada (error). El segundo método utiliza un algoritmo no lineal en el que las ganancias proporcional e integral varían en el rango de la señal de entrada. La señal de entrada es la desviación entre el punto de ajuste y la retroalimentación del proceso.
Idiomas disponibles
Diagrama de lógica de escalera
Esta instrucción no está disponible en el diagrama de escalera.
Bloque de funciones

Texto estructurado
PI(PI_tag);
Operandos
Bloque de funciones
Operando | Tipo | Formato | Descripción |
|---|---|---|---|
PI tag | PROP_INT | estructura | Estructura PI |
Texto estructurado
Operando | Tipo | Formato | Descripción |
|---|---|---|---|
PI tag | PROP_INT | estructura | Estructura PI |
Consulte
Sintaxis de texto estructurado
para obtener más información sobre la sintaxis de las expresiones dentro de texto estructurado.Estructura PROP_INT
Parámetro de entrada | Tipo de datos | Descripción |
|---|---|---|
EnableIn | BOOL | Habilita la entrada. Si no está activada, la instrucción no se ejecuta y las salidas no se actualizan. Está establecido de forma predeterminada. |
In | REAL | La entrada de la señal de error del proceso. Esta es la diferencia entre punto de ajuste y retroalimentación. Válido = cualquier punto flotante Valor predeterminado = 0,0 |
Initialize | BOOL | El comando de inicialización de la instrucción. Cuando se establece, Out y el integrador interno se establecen igual al valor de InitialValue. Está borrado de forma predeterminada. |
InitialValue | REAL | La entrada del valor inicial. Cuando Initialize está establecido, Out y el integrador se establecen al valor de InitialValue. El valor de InitialValue se limita usando HighLimit y LowLimit. Válido = cualquier punto flotante Valor predeterminado = 0 |
Kp | REAL | La ganancia proporcional. Esto afecta al valor calculado para los algoritmos de control proporcional e integral. Si no es válido, la instrucción fija Kp en los límites y establece el bit apropiado en Status. Válido = cualquier número flotante > 0,0 Valor predeterminado = punto flotante positivo mínimo |
Wld | REAL | La frecuencia principal en radianes/segundo. Esto afecta al valor calculado del algoritmo de control integral. Si no es válido, la instrucción fija Wld en los límites y establece el bit apropiado en Status. Válido = consulte la sección Descripción a continuación para ver los rangos válidos Valor predeterminado = 0,0 |
HighLimit | REAL | El valor de límite alto. Esto es el valor máximo para Out. Si HighLimit LowLimit, la instrucción establece HighAlarm y LowAlarm, establece el bit apropiado en Status y establece Out = LowLimit.Válido = LowLimit < HighLimit punto flotante positivo máximoValor predeterminado = punto flotante positivo máximo |
LowLimit | REAL | El valor de límite bajo. Esto es el valor mínimo para Out. Si HighLimit LowLimit, la instrucción establece HighAlarm y LowAlarm, establece el bit apropiado en Status y establece Out = LowLimit.Válido = punto flotante negativo máximo LowLimit < HighLimitValor predeterminado = punto flotante negativo máximo |
HoldHigh | BOOL | El comando de retención de límite alto. Cuando está establecido, al valor del integrador interno no se le permite aumentar en valor. Está borrado de forma predeterminada. |
HoldLow | BOOL | El comando de retención de límite bajo Cuando está establecido, al valor del integrador interno no se le permite disminuir en valor. Está borrado de forma predeterminada. |
ShapeKpPlus | REAL | El multiplicador de ganancia de modelación Kp positiva Se utiliza cuando In es 0. Si no es válido, la instrucción fija ShapeKpPlus en los límites y establece el bit apropiado en Status. No se utiliza cuando NonLinearMode está desactivado.Válido = de 0,1 a 10,0 Valor predeterminado = 1,0 |
ShapeKpMinus | REAL | El multiplicador de ganancia de modelación Kp negativo. Se utiliza cuando In es < 0. Si no es válido, la instrucción fija ShapeKpMinus en los límites y establece el bit apropiado en Status. No se utiliza cuando NonLinearMode está desactivado. Válido = de 0,1 a 10,0 Valor predeterminado = 1,0 |
KpInRange | REAL | El rango de modelación de ganancia proporcional. Define el rango de In (error) sobre el que la ganancia proporcional aumenta o disminuye como una función de la relación de | In | / KpInRange. Si | In | > KpInRange, la instrucción calcula el cambio del error proporcional utilizando la ganancia de modelación Kp x (In - KpInRange). Si no es válido, la instrucción fija KpInRange en los límites y establece el bit apropiado en Status. No se utiliza cuando NonLinearMode está desactivado. Válido = cualquier número flotante > 0,0 Valor predeterminado = punto flotante positivo máximo |
ShapeWldPlus | REAL | El multiplicador de ganancia de modelación Wld positivo. Se utiliza cuando In es 0. Si no es válido, la instrucción fija ShapeWldPlus en los límites y establece el bit apropiado en Status. No se utiliza cuando NonLinearMode está desactivado.Válido = de 0,0 a 10,0 Valor predeterminado = 1,0 |
ShapeWldMinus | REAL | El multiplicador de ganancia de modelación Wld negativo. Se utiliza cuando In es < 0. Si no es válido, la instrucción fija ShapeWldMinus en los límites y establece el bit apropiado en Status. No se utiliza cuando NonLinearMode está desactivado. Válido = de 0,0 a 10,0 Valor predeterminado = 1,0 |
WldInRange | REAL | El rango de modelación de la ganancia integral. Define el rango de In (error) sobre el que la ganancia integral aumenta o disminuye como una función de la relación de | In | / WldInRange. Cuando |In| > WldInRange, la instrucción limita In a WldInRange cuando calcula el error integral. Si no es válido, la instrucción fija WldInRange en los límites y establece el bit apropiado en Status. No se utiliza cuando NonLinearMode está desactivado. Válido = cualquier número flotante > 0,0 Valor predeterminado = punto flotante positivo máximo |
NonLinearMode | BOOL | Habilita el modo de ganancia no lineal. Cuando está establecido, la instrucción utiliza el modo de ganancia no lineal seleccionado por ParabolicLinear para calcular las ganancias proporcional e integral reales. Cuando está desactivada, la instrucción inhabilita el modo de ganancia no lineal y utiliza los valores Kp y Wld como ganancia proporcional e integral. Está borrado de forma predeterminada. |
ParabolicLinear | BOOL | Selecciona el modo de ganancia no lineal. Los modos son lineal o parabólico. Cuando está establecida, la instrucción utiliza el método de ganancia parabólica de y=a * x 2 + b para calcular las ganancias proporcional e integral reales. Si está desactivada, la instrucción utiliza el método de ganancia lineal de y=a * x + b.Está borrado de forma predeterminada. |
TimingMode | DINT | Selecciona el modo de ejecución de temporización. 0 = Modo Periódico 1 = Modo Sobremuestreo 2 = Modo Muestreo en tiempo real Para obtener más información sobre los modos de temporización, consulte “Atributos del bloque de funciones”. Válido = de 0 a 2 Valor predeterminado = 0 |
OversampleDT | REAL | Tiempo de ejecución del modo de Sobremuestreo. Válido = de 0 a 4194,303 segundos Valor predeterminado = 0 |
RTSTime | DINT | Período de actualización de módulo para el modo de muestreo en tiempo real Válido = de 1 a 32.767 ms Valor predeterminado = 1 |
RTSTimeStamp | DINT | Valor del sello de tiempo del módulo para el modo de muestreo en tiempo real. Válido = de 0 a 32.767 ms Valor predeterminado = 0 |
Parámetro de salida | Tipo de datos | Descripción |
|---|---|---|
EnableOut | BOOL | Indica el estado de ejecución de la instrucción. |
Out | REAL | La salida calculada del algoritmo PI. Se establecen marcas de estado matemático para esta salida. |
HighAlarm | BOOL | El indicador de alarma del límite máximo. Se establece cuando el valor calculado de Out HighLimit y la salida y el integrador se fijan en HighLimit. |
LowAlarm | BOOL | El indicador de alarma del límite mínimo. Se establece cuando el valor calculado de Out LowLimit y la salida y el integrador se fijan en LowLimit. |
DeltaT | REAL | Tiempo transcurrido entre actualizaciones. Este es el tiempo transcurrido en segundos utilizado por el algoritmo de control para calcular la salida del proceso. |
Status | DINT | Estado del bloque de funciones. |
InstructFault (Status.0) | BOOL | La instrucción detectó uno de los siguientes errores de ejecución. No se trata de un error mayor o menor del controlador. Se comprueban los bits de estado restantes para determinar lo que ha ocurrido. |
KpInv (Status.1) | BOOL | Kp < mínimo o Kp > máximo. |
WldInv (Status.2) | BOOL | Wld < mínimo o Wld > máximo. |
HighLowLimsInv (Status.3) | BOOL | HighLimit LowLimit. |
ShapeKpPlusInv (Status.4) | BOOL | ShapeKpPlus < mínimo o ShapeKpPlus > máximo. |
ShapeKpMinusInv (Status.5) | BOOL | ShapeKpMinus < mínimo o ShapeKpMinus > máximo. |
KpInRangeInv (Status.6) | BOOL | KpInRange < mínimo o KpInRange > máximo. |
ShapeWldPlusInv (Status.7) | BOOL | ShapeWldPlus < mínimo o ShapeWldPlus > máximo. |
ShapeWldMinusInv (Status.8) | BOOL | ShapeWldMinus < mínimo o ShapeWldMinus > máximo. |
WldInRangeInv (Status.9) | BOOL | WldInRange < mínimo o WldInRange > máximo. |
TimingModeInv (Status.27) | BOOL | TimingMode no válido. Para obtener más información sobre los modos de temporización, consulte “Atributos del bloque de funciones”. |
RTSMissed (Status.28) | BOOL | Solo se utiliza en el modo de muestreo en tiempo real. Se establece cuando ABS | DeltaT - RTSTime | > 1 (0,001 segundos). |
RTSTimeInv (Status.29) | BOOL | Valor de RTSTime no válido. |
RTSTimeStampInv (Status.30) | BOOL | Valor de RTSTimeStamp no válido. |
DeltaT (Status.31) | BOOL | Valor de DeltaT no válido. |
Descripción
La instrucción PI utiliza el formato de posición del algoritmo PI. Esto significa que los términos de ganancia se aplican directamente a la señal de la entrada en lugar de al cambio en la señal de la entrada. La instrucción PI está diseñada para ejecutarse en una tarea en la que el índice de escaneado se mantiene constante.
En el algoritmo no lineal, las ganancias proporcional e integral varían a medida que cambia la magnitud de la señal de la entrada. La instrucción PI admite dos modos de ganancia no lineal: lineal y parabólico. En el algoritmo lineal, las ganancias varían linealmente a medida que cambia la magnitud de la entrada. En el algoritmo parabólico, las ganancias varían de acuerdo con una curva parabólica a medida que cambia la magnitud de la entrada.
La instrucción PI calcula Out con esta ecuación:

Siempre que el valor calculado para la salida no sea válido, NAN o
INF, la instrucción establece Out en el valor no válido y establece la marca de estado de desbordamiento matemático. Los parámetros internos no se actualizan. En cada uno de los escaneados posteriores, la salida se calcula utilizando los parámetros internos desde el último escaneado en el que la salida era válida.
INF, la instrucción establece Out en el valor no válido y establece la marca de estado de desbordamiento matemático. Los parámetros internos no se actualizan. En cada uno de los escaneados posteriores, la salida se calcula utilizando los parámetros internos desde el último escaneado en el que la salida era válida.Funcionamiento en modo lineal
En modo lineal, el modo de ganancia no lineal está deshabilitado. Los valores Kp y Wld son las ganancias proporcional e integral que utiliza la instrucción. La instrucción calcula el valor de Out con estas ecuaciones:
Value | Ecuación |
|---|---|
ITerm | ![]() donde DeltaT se expresa en segundos |
PTerm | Kp x In |
Salida | ITerm + PTerm |
con estos límites en Wld:
- Límite bajo > 0,0
- Límite alto = 0,7p/DeltaT
- WldInput = In
Funcionamiento en modo no lineal
En modo no lineal, la instrucción utiliza el modo de ganancia no lineal seleccionado por ParabolicLinear para calcular las ganancias proporcional e integral reales.
Las ganancias especificadas por Kp y Wld se multiplican por 1,0 cuando In = 0. Los algoritmos proporcionales e integrales independientes aumentan o disminuyen la ganancia proporcional o integral a medida que cambia la magnitud del error. Estos algoritmos utilizan el rango de entrada y forman los parámetros de ganancia para calcular las ganancias proporcional e integral reales. El rango de entrada define el rango de In (es decir, error) sobre el que se modela la ganancia. KpInRange y WldInRange establecen los rangos de entrada. La ganancia de modelación define el multiplicador de ganancia para el cuadrante controlado por el parámetro de ganancia de modelación. ShapeKpPlus, ShapeKpMinus, ShapeWldPlus y ShapeWldMinus establecen las ganancias de modelación.
La entrada ParabolicLinear selecciona el modo de ganancia no lineal. Si ParabolicLinear está desactivado, se selecciona el modo lineal. Si ParabolicLinear está establecido, se selecciona el modo parabólico.
Para configurar una curva de ganancia de modelación en concreto, introduzca una ganancia de modelación 0,0-10,0 para la modelación integral, una ganancia de modelación 0,1-10,0 para la modelación proporcional y el rango de entrada sobre el que se debe aplicar la modelación. Kp y Wld se multiplican por el ShapeMultiplier calculado para obtener las ganancias proporcional e integral reales. Al introducir una ganancia de modelación de 1,0 se inhabilita el algoritmo no lineal que calcula la ganancia proporcional o integral del cuadrante.
Cuando la magnitud de In (error) es superior a InRange, ShapeMultiplier es igual al valor calculado cuando | In | era igual a InRange.
En el siguiente diagrama se ilustra las curvas de ganancia máxima y mínima que representan las ecuaciones de ganancia parabólica y lineal.

La instrucción calcula el valor de Out con estas ecuaciones:
Value | Ecuación |
|---|---|
Multiplicador de ganancia de modelación Kp | ![]() |
Relación de entrada Kp | ![]() |
Relación Kp | ![]() |
Ganancia de modelación Kps | ![]() |
Salida proporcional | ![]() |
Ganancia de modelación Wld | ![]() |
Entrada Wld | ![]() |
Relación de entrada Wld | ![]() |
Relación Wld | ![]() |
Ganancia de modelación Wlds | ![]() |
Límites Wlds | ![]() |
Salida integral | ![]() |
Salida | ![]() |
Limitación
La instrucción detiene windup de ITerm basado en el estado de las entradas de retención.
Condición | Action |
|---|---|
![]() | ![]() |
![]() | ![]() |
La instrucción también detiene windup del integrador basado en los valores HighLimit y LowLimit.
Condición | Action |
|---|---|
Integrador > HighLimit | Integrador = HighLimit |
Integrador > LowLimit | Integrador = LowLimit |
Las instrucciones limitan el valor de Out basado en los valores HighLimit y LowLimit.
Condición | Action |
|---|---|
HighLimit LowLimit | Out = LowLimit ITerm = LowLimit Se establece HighLowLimsInv Se establece HighAlarm Se establece LowAlarm WldInput = 0 |
Out HighLimit | Out = HighLimit ITerm = ITerm n-1 Se establece HighAlarm |
ITerm > HighLimit | ITerm = HighLimit |
Out LowLimit | Out = LowLimit ITerm = ITerm n-1 Se establece LowAlarm |
ITerm < LowLimit | ITerm = LowLimit |
Afecta a las marcas de estado matemáticas
No
Fallos mayores/menores
No es específico para esta instrucción. Consulte los Atributos comunes para fallos relacionados con el operando.
Ejecución
Bloque de funciones
Condición | Acción realizada |
|---|---|
Pre-escaneado | EnableIn y EnableOut se desactivan en falsos. |
Tag.EnableIn es falso | Los bits EnableIn y EnableOut se establecen en falsos. |
Tag.EnableIn es verdadero | El bit de EnableIn y EnableOut se establece en verdadero. La instrucción se ejecuta. |
Primera ejecución de instrucción | Out n-1 = 0 El algoritmo utilizado para calcular Out no se ejecutará. |
Primer escaneado de instrucción | Out n-1 = 0 El algoritmo utilizado para calcular Out no se ejecutará. |
Post-escaneado | Los bits EnableIn y EnableOut se establecen en falsos. |
Texto estructurado
Condición/estado | Acción realizada |
|---|---|
Pre-escaneado | Consulte Pre-escaneado en la tabla Bloque de funciones. |
Ejecución normal | Consultar Tag.EnableIn es verdadero en la tabla Bloque de funciones. |
Post-escaneado | Consulte Post-escaneado en la tabla Bloque de funciones. |
Ejemplo
La instrucción PI es una instrucción de regulación con componentes de ganancia proporcional e integral. El usuario establece el componente de ganancia integral en radianes/s; esto establece la respuesta de frecuencia básica del regulador PI. La ganancia proporcional establece la ganancia global del bloque, incluidas la ganancia proporcional Y la ganancia integral del bloque.
Excluyendo la funcionalidad de inicialización y retención/fijación, en el siguiente diagrama se muestra el lazo de regulación básico del bloque PI mientras está en modo lineal.
Instrucción PI: Modo lineal

El siguiente ejemplo muestra la instrucción PI utilizada como un regulador de velocidad. En este ejemplo, el error de velocidad se crea substrayendo la señal de retroalimentación de velocidad (véase el ejemplo de instrucción PMUL) de la referencia de velocidad del sistema (a través de la instrucción SCRV). El error de velocidad se acciona directamente en la instrucción PI, que actúa sobre esta señal de acuerdo con la función que se muestra en el diagrama anterior.
Bloque de funciones

Texto estructurado
Reference_Select.In1 := Master_Machine_Ref;
Reference_Select.Select1 := Master_Machine_Select;
Reference_Select.In2 := Section_Jog;
Reference_Select.Select2 := Jog_Select;
SSUM(Reference_Select);
S_Curve.In := Reference_Select.Out;
S_Curve.AccelRate := accel_rate;
S_Curve.DecelRate := accel_rate;
SCRV(S_Curve);
PMUL_01.In := Resolver_Feedback;
PMUL_01.WordSize := 12;
PMUL_01.Multiplier := 100000;
PMUL(PMUL_01);
Speed_Feedback := PMUL_01.Out;
Velocity_Error := S_Curve.Out - Speed_Feedback;
PI_01.In := Velocity_Error;
PI_01.Initialize := Enable_Regulator;
PI_01.Kp := Velocity_Proportional_Gain;
PI_01.Wld := Velocity_Integral_Gain;
PI(PI_01);
Torque_Reference := PI_01.Out;
Entregue su opinión
LowLimit, la instrucción establece HighAlarm y LowAlarm, establece el bit apropiado en Status y establece Out = LowLimit.
0. Si no es válido, la instrucción fija ShapeKpPlus en los límites y establece el bit apropiado en Status. No se utiliza cuando NonLinearMode está desactivado.















