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
Sortie impulsionnelle : 0 ou 1
Utilisez le DUT prédéfini suivant : F170_PulseOutput_PWM_DUT
Les paramètres suivants peuvent être indiqués dans le DUT :
Fréquence approximative
Rapport impulsion/pause
Le 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%.
Dès que vous éditez un programme utilisant cette instruction en mode en ligne (c.à-d. en mode RUN), la sortie impulsionnelle s’arrête.
Définissez un des compteurs rapides affectés à une voie de sortie impulsionnelle sur "Inutilisé" dans les registres système.
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.
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.
La sortie peut être retardée lorsque le rapport impulsion/pause est proche de la valeur minimale ou maximale. Le rapport impulsion/pause peut ainsi différer de la valeur indiquée.
Le rapport impulsion/pause peut être modifié à chaque scrutation. La modification devient effective avec la sortie impulsionnelle suivante. Le paramétrage de la fréquence est effectif uniquement lorsque l’exécution d’une instruction démarre.
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.
Pour faire fonctionner le FP0R en mode de compatibilité FP0, vous pouvez transférer un programme FP0 vers le FP0R.
Numéros de voies et de sorties impulsionnelles
N° de voie | Sortie impulsionnelle | Type de sortie impulsionnelle |
0 |
Y0 |
Impulsion |
Y2 |
Sens de rotation | |
1 |
Y1 |
Impulsion |
Y3 |
Sens de rotation |
Variables système pour les zones mémoires utilisées. Les valeurs entre parenthèses sont valides pour FP0 T32.
Description |
Variable système |
|
---|---|---|
Sortie impulsionnelle : drapeau de contrôle pour la voie |
0 |
sys_bIsPulseChannel0Active |
1 |
sys_bIsPulseChannel1Active |
|
Sortie impulsionnelle : valeur courante pour la voie |
0 |
sys_diPulseChannel0ElapsedValue |
1 |
sys_diPulseChannel1ElapsedValue |
|
Sortie impulsionnelle : valeur de consigne pour la voie |
0 |
sys_diPulseChannel0TargetValue |
1 |
sys_diPulseChannel1TargetValue |
|
Compteur rapide ou sortie impulsionnelle : code de contrôle |
sys_wHscOrPulseControlCode |
Dans la liste des variables globales, vous définissez des variables qui sont accessibles par tous les POU dans le projet.
Le DUT F170_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: F170_PulseOutput_PWM_DUT;
(*iFrequencyValue := 1: f=2.0Hz, T=502.5ms;*)
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_F,E_MOVE!,Instance,15,1,21,5,,?DEN?D?AENO?C);
B(B_VARIN,,iPulseWidthModulationDuty,13,3,15,5,);
B(B_VAROUT,,dutPWMControl.iPulseWidthModulationDuty,21,3,23,5,);
B(B_CONTACT,,X6_bEnablePWM,4,2,6,4,);
L(6,3,15,3);
L(1,3,4,3);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_CONTACT,,X6_bEnablePWM,4,2,6,4,);
B(B_F,F170_PulseOutput_PWM!,Instance,13,1,26,6,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_VARIN,,dutPWMControl,11,3,13,5,);
B(B_VARIN,,2,11,4,13,6,);
L(1,3,4,3);
L(6,3,13,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (X6_bEnablePWM) then
dutPWMControl.iPulseWidthModulationDuty:=iPulseWidthModulationDuty;
END_IF;
IF (X6_bEnablePWM) then
F170_PulseOutput_PWM(s_dutDataTable := dutPWMControl,
n_iPulseOutputChannel := 2);
END_IF;