Instruction de sortie impulsionnelle avec indication des voies (sortie MLI)
Cette instruction renvoie un signal de sortie avec modulation de largeur d’impulsions en fonction du DUT spécifié. Les impulsions sont renvoyées en sortie de la voie indiquée lorsque le drapeau de contrôle de cette voie est FALSE et la condition d’exécution est TRUE.
Entrée
Adresse de départ de la zone contenant le tableau de données
Voie de la sortie impulsionnelle :
FP-XH C30 T/P: 0–3
FP-XH C60 T/P: 0–5
FPS: 0,2
FP-X / FP-XH relais : 0,1
FP-X, FP-XH 16k transistor : 0–2
FP0R, FP0H, FP-X, FP-XH 32 transistor : 0–3
FP-XH 32k transistor : 0–5
Utilisez le DUT prédéfini suivant : F173_PulseOutput_PWM_DUT
Les paramètres suivants peuvent être indiqués dans le DUT :
Fréquence approximative
Rapport impulsion/pause
Rapport entre la largeur d’impulsions et la durée d’impulsions d’une forme d’onde rectangulaire. Pour un train d’impulsions dans lequel la largeur d’impulsions est de 1ms et la durée d’impulsions de 4ms, le rapport impulsion/pause est de 0,25 ou 25%.
Le rapport impulsion/pause, en particulier lorsqu’il est proche de la valeur minimale ou maximale, peut différer du rapport impulsion/pause indiqué en fonction de la tension ou du courant de charge.
Le rapport impulsion/pause peut être modifié à chaque scrutation.
La constante de fréquence K ne peut pas être modifiée pendant l’exécution de l’instruction. Si elle est modifiée, cela n’aura aucun effet sur la fréquence mais sur la résolution du rapport impulsion/pause.
Si le rapport impulsion/pause est modifié et sa valeur est en dehors de l’intervalle autorisé pendant l’exécution de l’instruction, le rapport impulsion/pause est modifié et ramené à la valeur maximale. En début d’exécution de l’instruction, un message d’erreur s’affiche.
Si la fréquence est modifiée et sa valeur est en dehors de l’intervalle autorisé pendant l’exécution de l’instruction, la résolution est ajustée à 100. En début d’exécution de l’instruction, aucun message d’erreur ne s’affiche.
Si le rapport impulsion/pause est modifié pour être égal à 100% ou plus pendant l’exécution de l’instruction, la fréquence est ajustée à la valeur maximale possible pour la résolution spécifiée. En début d’exécution de l’instruction, aucun message d’erreur ne s’affiche.
Si le programme principal et le programme d’interruption contiennent le code de la même voie, veillez à ce qu’ils ne soient pas exécutés simultanément.
FP-X, FP0R : Lorsqu’une instruction de sortie impulsionnelle est exécutée et lorsque des impulsions sont sorties, le drapeau de contrôle de la sortie impulsionnelle (par ex. sys_bIsPulseChannel0Active) de la voie correspondante est TRUE. Aucune autre instruction de sortie impulsionnelle ne peut être exécutée tant que ce drapeau est TRUE.
FPS : Le drapeau de contrôle du compteur rapide (par ex. sys_bIsHscChannel0ControlActive) et le drapeau de contrôle de la sortie impulsionnelle (par ex. sys_bIsPulseChannel0Active) sont affectés au même drapeau interne (par ex. R903A). Par conséquent, lorsqu’une instruction du compteur rapide ou de la sortie impulsionnelle est exécutée, le drapeau de contrôle du compteur rapide (par ex. sys_bIsHscChannel0ControlActive) et le drapeau de contrôle de la sortie impulsionnelle (par ex. sys_bIsPulseChannel0Active) pour la voie utilisée sont sur TRUE. Aucune instruction du compteur rapide ou de la sortie impulsionnelle ne peut être exécutée tant que ce drapeau est sur TRUE.
FPS : L’exécution de l’instruction de contrôle de l’interpolation circulaire F176_PulseOutput_Center définit le drapeau de contrôle de l’interpolation circulaire (sys_bIsCircularInterpolationActive) sur TRUE. L’état de ce drapeau est maintenu jusqu’à ce que la valeur de consigne soit atteinte (même si la condition d’exécution n’est plus TRUE). Pendant ce temps, les autres instructions de sortie impulsionnelle ne peuvent pas être exécutées.
FPS : Définissez un des compteurs rapides affectés à une voie de sortie impulsionnelle sur "Inutilisé" dans les registres système.
FP-X, FP0R : Définissez "Sortie MLI" pour la voie souhaitée dans les registres système.
Dans votre programme de positionnement, nous recommandons fortement de permettre un arrêt forcé.
L’état du drapeau de contrôle du compteur rapide ou du drapeau de la sortie impulsionnelle peut changer au cours d’une scrutation. Par exemple, si le nombre d’octets reçus est lu plusieurs fois, il peut y avoir plusieurs états au cours d’une scrutation.
Dans la liste des variables globales, vous définissez des variables qui sont accessibles par tous les POU dans le projet.
Le DUT F173_PulseOutput_PWM_DUT est prédéfini dans la bibliothèque FP Library.
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
X6_bEnablePWM: BOOL:=FALSE;
END_VAR
VAR
dutPWMControl: F173_PulseOutput_PWM_DUT:=iFrequencyValue := 1;
(*iFrequencyValue := 1: f=2.0 Hz, T=502.5 ms;
*)
iPulseWidthModulationDuty: INT:=500;
(*500 = 50% duty*)
@'': @'';
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,,X6_bEnablePWM,5,2,7,4,);
B(B_F,E_MOVE!,Instance,16,1,22,5,,?DEN?D?AENO?C);
B(B_VARIN,,iPulseWidthModulationDuty,14,3,16,5,);
B(B_VAROUT,,dutPWMControl.iPulseWidthModulationDuty,22,3,24,5,);
L(7,3,16,3);
L(1,3,5,3);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,F173_PulseOutput_PWM!,Instance,16,0,29,5,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_VARIN,,dutPWMControl,14,2,16,4,);
B(B_VARIN,,2,14,3,16,5,);
B(B_CONTACT,,X6_bEnablePWM,5,1,7,3,);
L(7,2,16,2);
L(1,2,5,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (X6_bEnablePWM) then
dutPWMControl.iPulseWidthModulationDuty:=iPulseWidthModulationDuty;
END_IF;
IF (X6_bEnablePWM) then
F173_PulseOutput_PWM(s_dutDataTable := dutPWMControl,
n_iPulseOutputChannel := 2);
END_IF;