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 FP_PID_BASIC, 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
Valor actual (-30000–30000)
Parámetros del control PID
Entrada/salida
Tabla de datos de parámetros PID
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 .
Antes de la segunda ejecución de FP_PID, es necesario cambiar los miembros 1 a 9 de la DUT a los valores requeridos.
Salida
Salida de pulsos modulados en anchura (opcional, en lugar de la salida del valor manipulado)
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%.
La instrucción tiene que ser ejecutada dos veces. La primera ejecución restablece los valores en PID_WORK_AREA_DUT, con lo que es necesario establecer los valores correctos para los miembros 1 a 9 de la DUT en PID_WORK_AREA_DUT de modo que la segunda ejecución de la instrucción utilice los valores correctos.
si el área especificada utilizando el modificador índice supera el límite.
si el valor especificado para un parámetro de PID_Parameters_DUT está fuera del rango permitido
si el área especificada utilizando el modificador índice supera el límite.
si el valor especificado para un parámetro de PID_Parameters_DUT está fuera del rango permitido
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
Automatic: BOOL:=TRUE;
dutControl: PID_Control_DUT;
PV: INT:=0;
ParametersHold: PID_Parameters_DUT;
ParametersNonHold: PID_Work_Area_DUT;
bPWMOutput: BOOL:=FALSE;
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_VARIN,,dutControl,15,2,17,4,);
B(B_VARIN,,ParametersHold,15,4,17,6,);
B(B_CONTACT,,Automatic,6,1,8,3,);
B(B_VARIN,,ParametersNonHold,15,5,17,7,);
B(B_F,FP_PID!,,17,0,30,7,,?DRun?Ds1_Control?Ds2_ProcessValue?Ds3_Parameters?Ds4_WorkArea?As4_WorkArea?APWM);
B(B_VARIN,,PV,15,3,17,5,);
B(B_VAROUT,,bPWMOutput,30,1,32,3,);
L(1,2,6,2);
L(8,2,17,2);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
bPWMOutput := FP_PID(Run := Automatic,
s1_Control := dutControl,
s2_ProcessValue := PV,
s3_Parameters := ParametersHold,
s4_WorkArea := ParametersNonHold);