Régulation PID avec sortie MLI en option
La régulation PID est exécutée pour maintenir la valeur courante PV le plus proche possible de la valeur de consigne SP. Contrairement à F355_PID_DUT, cette instruction permet une sortie MLI (sortie ON/OFF). La fonction de réglage automatique est également disponible. Elle permet de calculer automatiquement les données de régulation PID Kp, Ti et Td.
Entrée
Condition de départ
Données de contrôle
Paramètres de régulation PID
Valeur manipulée MV, paramètres de régulation supplémentaires, zone de réglage automatique et de travail
Lorsque vous exécutez cette instruction pour la première fois, c.-à-d. lorsque la condition d’exécution spécifiée par Run passe à TRUE, les valeurs par défaut sont écrites vers les éléments 1 à 9 du DUT.
Valeur courante (-30000–30000)
Sortie
Sortie largeur d’impulsions modulée (en option, au lieu de la valeur manipulée)
Au lieu d’utiliser cette instruction F, nous recommandons d’utiliser l’instruction FP7 correspondante : FP_PID
Abréviations utilisées pour décrire la régulation PID
Abréviation |
Signification |
Désignation |
---|---|---|
PV |
Valeur courante | Valeur courante, valeur mesurée |
SP |
Valeur de consigne | Valeur de consigne |
MV |
Valeur manipulée | Valeur de sortie, variable manipulée |
Ts |
Temps d’échantillonnage | Durée du cycle |
Ti |
Temps d’intégration | - |
Td |
Temps de dérivation | - |
Kp |
Gain proportionnel | - |
AT |
Réglage automatique | - |
Avant d’exécuter FP_PID la deuxième fois, les valeurs des éléments 1 à 9 du DUT doivent être remplacées par les valeurs requises.
Lorsque l’entrée Run est exécutée, les données dans l’argument ParametersNonHold sont initialisées. Si vous ne souhaitez pas que la valeur du DUT soit une valeur par défaut, écrivez les valeurs dans le DUT, par ex. à l’aide de l’instruction MOVE, qui doit être déclenchée en permanence par une condition TRUE.
F356_PID_PWM ne doit être exécutée qu’une seule fois par cycle. Par conséquent, l’instruction F356_PID_PWM ne doit pas être exécutée dans des programmes d’interruption ou des boucles.
La condition d’exécution ne doit pas passer à FALSE pendant la régulation PID. Sinon, la régulation PID sera désactivée.
Si vous ne voulez pas de sorties MLI en parallèle, par ex. pour réguler plusieurs objets, vous pouvez utiliser une instruction de temporisation par ex., pour retarder le départ de la régulation en conséquence.
Le cycle de la sortie MLI correspond à la durée de l’échantillonnage Ts (la fréquence de la sortie MLI est de 1/Ts) et le rapport impulsion/pause correspond à la valeur manipulée MV * 0,01%, par ex. MV = 10000 signifie un rapport impulsion/pause de 100%.
Si un paramètre de F356_Parameters_NonHold_DUT est en dehors de l’intervalle autorisé.
Si un paramètre de F356_Parameters_NonHold_DUT est en dehors de l’intervalle autorisé.
Si la zone spécifiée par UpperLimit ou LowerLimit est en dehors de l’intervalle autorisé.
Conditions de régulation : F356_Parameters_Hold_DUT
Valeur de consigne SP et paramètres de régulation : F356_Parameters_Hold_DUT
Remarques supplémentaires concernant le réglage automatique :
Les éléments AT_Progress dans F356_Parameters_Hold_DUT et b1_AT_Complete dans F356_Control_DUT sont supprimés en front montant du signal de réglage automatique.
Lorsque le réglage automatique est terminé et qu’il a été exécuté avec succès, l’élément b1_AT_Complete de F356_Control_DUT est activé et le code de fin de réglage automatique est sauvegardé dans l’élément AT_Progress de F356_Parameters_NonHold_DUT.
Lorsque le réglage automatique est interrompu, les paramètres de Kp, Ti et Td ne sont pas modifiés.
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
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);