Contrôle de cames pour FP0R
Cette instruction exécute un contrôle de cames en fonction des paramètres du DUT spécifié avec un maximum de 31 valeurs de consigne pour le compteur rapide. Un programme d’interruption peut être exécuté lorsque la valeur courante atteint une des valeurs de consigne.
Entrée
Voie du compteur rapide : 0–5
Adresse de départ de la zone contenant le tableau de données
Exemple : F165_HighSpeedCounter_Cam_8_Values_DUT
Sortie
Adresse de départ (WR) de la zone contenant l’adresse de sortie en mots, par ex. BOOL32_OVERLAPPING_DUT. Sélectionnez la taille (16 ou 32 bits) en fonction du nombre défini avec diNumberOfTargetValuesAndOutputRelays.
Créez votre DUT à l’aide de l’exemple de DUT suivant : F165_HighSpeedCounter_Cam_8_Values_DUT
Les paramètres suivants peuvent être indiqués dans le DUT :
Code de contrôle
Adresse de sorties en mots
Nombre de valeurs de consignes
Valeur de consigne1
...
Valeur de consignen
Valeur de consigne maximale
y |
Valeur courante du compteur rapide | 14000 |
Valeur de consigne maximale |
(1) |
Condition d’exécution | 10000 |
Valeur de consigne4 |
(2) |
Drapeau de contrôle du compteur rapide | 8000 |
Valeur de consigne3 |
(3) |
Sortie0-4 |
4000 |
Valeur de consigne2 |
2000 |
Valeur de consigne1 |
Lorsque la valeur courante est dans la zone de la valeur de consigne n à n+1 (comptage incrémental) ou n+1 à n (comptage décrémental), la sortie correspondante n est TRUE.
Dans l’exemple ci-dessus, le contrôle de la valeur de consigne maximale a été activé. Lorsque la valeur courante atteint la valeur de consigne maximale, la valeur courante est mise à 0 et le comptage recommence.
Indiquez l’adresse en mots des sorties dans un DUT avec éléments superposés, par ex. BOOL32_OVERLAPPING_DUT et appliquez ce DUT à dutBitOutputs.
31 valeurs de consigne maximales peuvent être indiquées.
Les valeurs de consigne peuvent être classées dans l’ordre croissant. Aucune valeur ne peut être utilisée deux fois.
Dès que l’exécution démarre, toutes les sorties sont FALSE, à l’exception de la sortie 0, qui passe à TRUE dès que la valeur courante est inférieure à la valeur de consigne 1. Autrement, la sortie correspondant à la zone de la valeur de consigne passe à TRUE. Exemple : Si la valeur courante est entre la valeur de consigne 2 = -4000 et la valeur de consigne 3 = +4000, la sortie 2 est TRUE. Dans l’exemple suivant, le contrôle de la valeur de consigne maximale a été désactivé. Lorsque la valeur courante atteint la dernière valeur de consigne, le comptage continue et la valeur courante n’est pas mise à 0.
y |
Valeur courante du compteur rapide | 8000 |
Valeur de consigne4 |
(1) |
Condition d’exécution | 4000 |
Valeur de consigne3 |
(2) |
Drapeau de contrôle du compteur rapide | -4000 |
Valeur de consigne2 |
(3) |
Sortie0-4 |
-10000 |
Valeur de consigne1 |
INT0 |
Programme d’interruption 0 |
L’instruction peut être exécutée à l’aide du contrôle de la valeur de consigne maximale pour réinitialiser la valeur courante sur 0 lorsque la valeur de consigne maximale a été atteinte. Le contrôle de la valeur de consigne maximale peut être activé dans le code de contrôle de F165_HighSpeedCounter_Cam_8_Values_DUT. Au lieu d’utiliser le contrôle de la valeur de consigne, la valeur courante peut aussi être réinitialisée à l’aide d’une entrée reset ou d’une réinitialisation du logiciel.
Pour exécuter un contrôle de la valeur de consigne maximale, des nombres entiers positifs doivent être spécifiés pour toutes les valeurs de consigne.
Comptage incrémental et décrémental avec le contrôle de la valeur de consigne maximale :
y |
Valeur courante du compteur rapide | 14000 |
Valeur de consigne maximale |
(1) |
Condition d’exécution | 10000 |
Valeur de consigne4 |
(2) |
Drapeau de contrôle du compteur rapide | 8000 |
Valeur de consigne3 |
(3) |
Sortie0-4 |
4000 |
Valeur de consigne2 |
2000 |
Valeur de consigne1 |
Contrôle de la valeur de consigne maximale : |
Activé |
Désactivé (voir nota) |
---|---|---|
Comptage incrémental : Le pointeur du tableau de données se déplace de la valeur de consigne 1 vers la dernière valeur de consigne. |
Lorsque la valeur courante atteint la valeur de consigne maximale :
|
Lorsque la valeur courante atteint la dernière valeur de consigne :
|
Comptage décrémental : Le pointeur du tableau de données se déplace de la dernière valeur de consigne vers la valeur de consigne 1. |
Lorsque la valeur courante atteint la valeur de consigne -1 :
|
Lorsque la valeur courante atteint la valeur de consigne -1 :
|
Condition : l’entrée reset ou la réinitialisation du logiciel ne doivent pas être utilisées.
Voie |
Entrée reset du matériel |
---|---|
0 |
X2 |
1 |
|
2 |
X5 |
3 |
Le programme d’interruption est exécuté lorsque la valeur courante correspond à la valeur de consigne. Toute interruption entrée dans la liste des tâches est activée automatiquement. Un numéro de programme d’interruption spécial est affecté à chaque numéro de voie.
Voie |
0 |
1 |
2 |
3 |
4 |
5 |
Programme d’interruption |
0 |
1 |
3 |
4 |
6 |
7 |
Sélectionnez l’entrée du compteur rapide pour la voie désirée dans les registres système.
Lors de l’exécution d’une instruction du compteur rapide, le drapeau de contrôle du compteur rapide (par ex. sys_bIsHscChannel0ControlActive) pour la voie utilisée passe à TRUE. Aucune autre instruction du compteur rapide utilisant la même voie ne peut être exécutée tant que le drapeau de contrôle est TRUE.
Pour annuler l’exécution d’une instruction, définissez le bit 3 du registre de données, dans lequel le code de contrôle du compteur rapide (sys_wHscOrPulseControlCode) est sauvegardé, sur TRUE. Le drapeau de contrôle du compteur rapide passe à FALSE. Pour que l’instruction puisse être à nouveau exécutée, définissez le bit 3 sur FALSE.
Réécrire la valeur courante pour la voie utilisée pendant que l’instruction est exécutée peut provoquer un fonctionnement inattendu.
Veillez à ce que l’écart de temps entre les valeurs de consigne adjacentes soit supérieur à 1ms.
Si l’instruction est exécutée dans le programme principal, veillez à ce que l’écart de temps minimum entre les valeurs de consigne adjacentes soit supérieur à la durée du cycle.
Si l’instruction est exécutée dans un programme d’interruption, veillez à ce que l’écart de temps minimum entre les valeurs de consigne adjacentes soit supérieur au temps d’exécution maximum du programme d’interruption.
Cette instruction peut être exécutée simultanément sur un maximum de deux voies.
Si vous utilisez l’entrée reset ou une réinitialisation du logiciel, veillez à ce que la valeur de consigne 1 soit un nombre entier ³ 1.
Lorsque le contrôle de la valeur maximale est utilisé avec une entrée reset ou une réinitialisation du logiciel, veillez à ne pas les utiliser en même temps.
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.
Si la valeur de consigne est > la valeur de consigne maximale.
Si la valeur de consigne = 0
Si les valeurs de consigne ne sont pas disposées dans l’ordre croissant
Si la valeur de consigne est > la valeur de consigne maximale.
Si la valeur de consigne = 0
Si les valeurs de consigne ne sont pas disposées dans l’ordre croissant
Le DUT F165_HighSpeedCounter_Cam_8_Values_DUT est prédéfini dans la bibliothèque FP Library et peut être utilisé en tant que modèle.
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
bStartCam: BOOL:=FALSE;
dut_F165_CAM_Example1: F165_Cam_Example1_4_Values_DUT;
END_VAR
VAR_EXTERNAL
WR0_bits_F165_CAM_Examples: BOOL16_OVERLAPPING_DUT;
END_VAR
La fonction est exécutée lorsque la variable bStartCam passe à TRUE.
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,,sys_bIsFirstScan,5,2,7,4,);
B(B_F,E_MOVE!,Instance,14,1,20,5,,?DEN?D?AENO?C);
B(B_VARIN,,0,12,3,14,5,);
B(B_VAROUT,,sys_diHscChannel0ElapsedValue,20,3,22,5,);
B(B_COMMENT,,Reset the elapsed value,1,0,21,1,);
L(1,3,5,3);
L(7,3,14,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_F,F165_HighSpeedCounter_Cam!,Instance,14,1,28,6,,?DEN?HiHscChannel?Ds_dutDataTable?AENO?CdutBitOutputs);
B(B_VARIN,,0,12,3,14,5,);
B(B_VARIN,,dut_F165_CAM_Example1,12,4,14,6,);
B(B_VAROUT,,WR1_dut_CAM1,28,3,30,5,);
B(B_CONTACT,,bStartCam,5,2,7,4,R);
B(B_COMMENT,,Start the cam control,1,0,21,1,);
L(1,3,5,3);
L(7,3,14,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (sys_bIsFirstScan) then
sys_diHscChannel0ElapsedValue:=0;
END_IF;
IF DF(bStartCam) then
F165_HighSpeedCounter_Cam(iHscChannel := 0,
s_dutDataTable := dut_F165_CAM_Example1,
dutBitOutputs => WR0_bits_F165_CAM_Examples);
END_IF;
Le DUT F165_HighSpeedCounter_Cam_8_Values_DUT est prédéfini dans la bibliothèque FP Library et peut être utilisé en tant que modèle.
VAR
bStartCam: BOOL:=FALSE;
dut_F165_CAM_Example2: F165_Cam_Example2_4_Values_DUT;
END_VAR
VAR_EXTERNAL
WR0_bits_F165_CAM_Examples: BOOL16_OVERLAPPING_DUT;
END_VAR
La fonction est exécutée lorsque la variable bStartCam est sur TRUE.
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,,sys_bIsFirstScan,5,2,7,4,);
B(B_F,E_MOVE!,Instance,14,1,20,5,,?DEN?D?AENO?C);
B(B_VARIN,,0,12,3,14,5,);
B(B_VAROUT,,sys_diHscChannel0ElapsedValue,20,3,22,5,);
B(B_COMMENT,,Reset the elapsed value,1,0,21,1,);
L(1,3,5,3);
L(7,3,14,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_F,F165_HighSpeedCounter_Cam!,Instance,14,1,28,6,,?DEN?HiHscChannel?Ds_dutDataTable?AENO?CdutBitOutputs);
B(B_VARIN,,0,12,3,14,5,);
B(B_VARIN,,dut_F165_CAM_Example2,12,4,14,6,);
B(B_VAROUT,,WR0_bits_F165_CAM_Examples,28,3,30,5,);
B(B_CONTACT,,bStartCam,5,2,7,4,R);
B(B_COMMENT,,Start the cam control,1,0,21,1,);
L(7,3,14,3);
L(1,3,5,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (sys_bIsFirstScan) then
sys_diHscChannel0ElapsedValue:=0;
END_IF;
IF DF(bStartCam) then
F165_HighSpeedCounter_Cam(iHscChannel := 0,
s_dutDataTable := dut_F165_CAM_Example2,
dutBitOutputs => WR0_bits_F165_CAM_Examples);
END_IF;