Instrucción de control de procesos con salida PWM opcional
El control PID se ejecuta para mantener el valor PV tan cercano como sea posible al valor de preselección SP. Al contrario que F355_PID_DUT, esta función permite una salida PWM (salida on-off). También es posible realizar un auto-tuning para calcular automáticamente los datos Kp, Ti y Td para el control PID.
Entrada
Condición de ejecución
Datos de control
Parámetros del control PID
Valor manipulado MV, área para el modo de control adicional, área para el auto-tuning y área de trabajo
Cuando se ejecuta la instrucción por primera vez, es decir, cuando la condición de ejecución especificada en Run pasa a TRUE, los valores por defecto se escriben en los miembros 1 a 9 de la DUT .
Valor actual (-30000–30000)
Salida
Salida de pulsos modulados en anchura (opcional, en lugar de la salida del valor manipulado)
En lugar de utilizar esta instrucción F, se recomienda utilizar la instrucción FP7 correspondiente: FP_PID
Abreviaturas utilizadas para describir el control PID
Abreviatura |
Nombre completo |
También conocido como |
---|---|---|
PV |
Valor actual | Valor actual, valor medido |
SP |
Valor de preselección | Valor de preselección |
MV |
Valor manipulado | Valor de salida, valor manipulado |
Ts |
Periodo de muestreo | Ciclo de scan |
Ti |
Constante integral | - |
Td |
Constante derivativa | - |
Kp |
Constante proporcional | - |
AT |
Autotuning | - |
Antes de la segunda ejecución de FP_PID, es necesario cambiar los miembros 1 a 9 de la DUT a los valores requeridos.
Cuando se ejecuta la entrada en Run, se inicializan los datos del argumento ParametersNonHold. Si se desea que un valor de la DUT use valores no predeterminados, se deberán escribir los valores en la DUT usando, por ejemplo, una instrucción MOVE, que debe ser activada continuamente por una condición TRUE.
F356_PID_PWM se debe ejecutar una sola vez por ciclo de scan. Por lo tanto, no introducir F356_PID_PWM dentro de programas de interrupción o de lazos.
No pasar la condición de ejecución a FALSE durante el control PID. En caso contrario, se deshabilitará el control PID.
Si no se van a realizar salidas PWM en paralelo, por ejemplo para controlar varios objetos, retrasar las condiciones de ejecución de las distintas instrucciones, utilizando por ejemplo una instrucción de temporización.
El periodo de la salida PWM es el ciclo de control Ts (la frecuencia de la salida PWM es 1/Ts) y el ciclo de trabajo es el valor manipulado MV en unidades de 0,01%, por ejemplo MV = 10000 implica un ciclo de trabajo del 100%.
si algún parámetro de F356_Parameters_NonHold_DUT está fuera de rango
si algún parámetro de F356_Parameters_NonHold_DUT está fuera de rango
si el área especificada con UpperLimit o LowerLimit está fuera de rango
Condiciones de control: F356_Parameters_Hold_DUT
Valor de preselección SP y parámetros de control: F356_Parameters_Hold_DUT
Notas sobre el auto-tuning:
Los elementos de AT_Progress en F356_Parameters_Hold_DUT y b1_AT_Complete en F356_Control_DUT se borran con el flanco de subida de la señal de auto-tuning.
Cuando el auto-tuning se ha ejecutado sin errores, se activa el elemento b1_AT_Complete de F356_Control_DUT, y en AT_Progress de F356_Parameters_NonHold_DUT se almacena el código de auto-tuning completo.
Cuando se cancela el auto-tuning, no se modifican los parámetros Kp, Ti, y Td.
En la Lista de Variables Globales, se definen las variables a las que pueden acceder todas las POUs del proyecto.
Todas las variables de entrada y de salida utilizadas para la programación de esta función han sido declaradas en la Cabecera de la POU. Se utiliza la misma cabecera de la POU para todos los lenguajes de programación.
_VAR
VAR
bStartAutoTuning: BOOL:=FALSE;
bRunPidControl: BOOL:=FALSE;
ControlData: F356_Control_DUT;
ParametersHold: F356_Parameters_Hold_DUT;
ParametersNonHold: F356_Parameters_NonHold_DUT;
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_CONTACT,,bStartAutoTuning,5,1,7,3,R);
B(B_COIL,,ControlData.b0_AT_Request,22,1,24,3,);
L(1,2,5,2);
L(7,2,22,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_F,F356_PID_PWM!,Instance,11,0,22,7,,?DRun?DControl?DParametersHold?DParametersNonHold?DProcessValue?APWM_Output);
B(B_VARIN,,ControlData,9,2,11,4,);
B(B_VARIN,,ParametersHold,9,3,11,5,);
B(B_VARIN,,ParametersNonHold,9,4,11,6,);
B(B_VARIN,,x_iTemperatureInput,9,5,11,7,);
B(B_VAROUT,,y_bPwmOutput,22,1,24,3,);
B(B_CONTACT,,bRunPidControl,4,1,6,3,);
L(1,2,4,2);
L(6,2,11,2);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
(* Auto Tuning: *)
if DF(bStartAutoTuning) then
ControlData.b0_AT_Request:=TRUE;
end_if;
y_bPwmOutput:=F356_PID_PWM( Run := bRunPidControl,
Control := ControlData,
ParametersHold := ParametersHold,
ParametersNonHold := ParametersNonHold,
ProcessValue := x_iTemperatureInput);