Instructions de régulation PID
Cette instruction de régulation PID est utilisée pour réguler un processus (le chauffage, par ex.) en fonction de la valeur mesurée (la température, par ex.) et d’une valeur de sortie prédéterminée (20°C, par ex.).
Entrée
Pour en savoir plus sur les paramètres, voir : PID_DUT_31
Au lieu d’utiliser cette instruction F, nous recommandons d’utiliser l’instruction FP7 correspondante : FP_PID_BASIC
La fonction calcule un algorithme PID dont les paramètres déterminés dans un tableau de données (ARRAY) de 30 éléments sont transmis en entrée s.
Si les paramètres sont en dehors de l’intervalle autorisé.
Si les paramètres sont en dehors de l’intervalle autorisé.
Dans la liste des variables globales, vous définissez des variables qui sont accessibles par tous les POU dans le projet.
Toutes les variables d’entrée et de sortie utilisées pour programmer cette fonction ont été déclarées dans l’en-tête du POU. Le même en-tête de POU est utilisé pour tous les langages de programmation.
VAR_EXTERNAL
EnableAutoTuning: BOOL:=FALSE;
(*Switch Auto Tuning On *)
Set_Value_SP: WORD:=0;
(*A/D CH0*)
Process_Value_PV: WORD:=0;
(*A/D CH1*)
Output_Value_MV: WORD:=0;
(*D/A*)
END_VAR
VAR
PidParameters: PID_DUT_31;
(*PID Parameters*)
END_VAR
Lorsque la variable PidParameters du type de données PID_DUT_31 est initialisée, la limite supérieure MV est de 4000. Initialement, le gain proportionnel Kp est défini à 80 (8), Ti et Td à 200 (20s) et le temps d’échantillonnage Ts à 100 (1s).
La fonction standard MOVE copie la valeur 16#8000 dans le premier élément Control du DUT PidParameters, lorsque la variable EnableAutoTuning passe de FALSE à TRUE (activation du réglage automatique dans la fonction F355_PID_DUT).
Les variables Set_Value_SP et Process_Value_PV sont affectées aux éléments SP et PV du DUT PidParameters. Elles reçoivent leurs valeurs via les voies 0 et 1 du convertisseur A/D.
Le bloc fonction F355_PID_DUT ayant une sortie EN directement connectée à la barre d’alimentation, la fonction est exécutée lorsque l’automate est en mode RUN. Le résultat du calcul PID est sauvegardé dans l’élément MV du DUT PidParameters et transmis à la variable Output_Value_MV. Sa valeur est renvoyée de l’automate à la sortie du système, via un convertisseur N/A.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_F,E_MOVE,,10,2,17,6,,?DEN?Da_Num?AENO?C);
B(B_VAROUT,,PidParameters.Control,17,4,19,6,);
B(B_VARIN,,16#8000,8,4,10,6,);
B(B_CONTACT,,EnableAutoTuning,5,3,7,5,R);
B(B_COMMENT,,Enable Auto Tuning,2,1,12,2,);
L(1,4,5,4);
L(7,4,10,4);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 4 ;
NETWORK_BODY
B(B_VARIN,,Set_Value_SP,9,2,11,4,);
B(B_VAROUT,,PidParameters.SP,11,2,13,4,);
B(B_COMMENT,,Fill the DUT PID_DUT_31 with the corresponding values,2,1,24,2,);
L(1,0,1,4);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 2 ;
NETWORK_BODY
B(B_VARIN,,Process_Value_PV,9,0,11,2,);
B(B_VAROUT,,PidParameters.PV,11,0,13,2,);
L(1,0,1,2);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_VARIN,,PidParameters,8,5,10,7,);
B(B_F,F355_PID_DUT!,Instance,10,3,18,7,,?DEN?D@'s'?AENO);
B(B_COMMENT,,Carry out the PID arithmetic,2,1,21,2,);
L(1,5,10,5);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 4 ;
NETWORK_BODY
B(B_VARIN,,PidParameters.MV,9,2,11,4,);
B(B_VAROUT,,Output_Value_MV,11,2,13,4,);
B(B_COMMENT,,Write manipulated value to the output,2,1,21,2,);
L(1,0,1,4);
END_NETWORK_BODY
END_NET_WORK
END_BODY
(* Auto Tuning: *)
if DF(EnableAutoTuning) then
PidParameters.Control:=16#8000;
end_if;
(* Fill the DUT PidParameters with the corresponding input values: *)
PidParameters.SP:=Set_Value_SP;
PidParameters.PV:=Process_Value_PV;
(* Carry out the PID arithmetic: *)
F355_PID_DUT(PidParameters);
(* Write the manipulated value to the output: *)
Output_Value_MV:=PidParameters.MV;