F165_HighSpeedCounter_Cam

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.

Paramètres

Entrée

iHscChannel* (INT)

Voie du compteur rapide : 0–5

s_dutDataTable (ANY_DUT)

Adresse de départ de la zone contenant le tableau de données

Exemple : F165_HighSpeedCounter_Cam_8_Values_DUT

Sortie

dutBitOutputs (ANY_DUT)

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.

Remarques

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

Contrôle de la valeur de consigne maximale

  • 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

Vue d’ensemble :

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 :

  • Le pointeur retourne vers la valeur de consigne 1

  • La sortie 0 passe à TRUE

  • La valeur courante est définie sur 0

Lorsque la valeur courante atteint la dernière valeur de consigne :

  • Le pointeur retourne vers la valeur de consigne 1

  • La sortie 0 passe à TRUE

  • Le comptage incrémental continue et la valeur courante redémarre à la valeur minimale du compteur annulaire

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 :

  • Le pointeur retourne vers la dernière valeur de consigne

  • La sortie correspondant à la dernière valeur de consigne passe à TRUE.

  • La valeur courante est définie sur la valeur de consigne maximale

Lorsque la valeur courante atteint la valeur de consigne -1 :

  • Le pointeur retourne vers la valeur de consigne n

  • La sortie correspondant à la dernière valeur de consigne passe à TRUE.

  • Le comptage décrémental continue et la valeur courante redémarre à la valeur maximale du compteur annulaire

NOTA

Condition : l’entrée reset ou la réinitialisation du logiciel ne doivent pas être utilisées.

Réinitialisation du matériel

Voie

Entrée reset du matériel

0

X2

1

2

X5

3

Opération d’interruption

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

Informations générales sur la programmation

  • 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.

Drapeaux d’erreur

sys_bIsOperationErrorHold (passe à TRUE et reste TRUE)
  • Si le numéro de voie ou les valeurs du tableau de données sont en dehors de l’intervalle autorisé.
  • Si le compteur rapide n’a pas été défini dans les registres système.
  • 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

sys_bIsOperationErrorNonHold (passe à TRUE pendant un cycle)
  • Si le numéro de voie ou les valeurs du tableau de données sont en dehors de l’intervalle autorisé.
  • Si le compteur rapide n’a pas été défini dans les registres système.
  • 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

Exemple avec le contrôle de la valeur de consigne maximale

DUT

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.

GVL

Dans la liste des variables globales, vous définissez des variables qui sont accessibles par tous les POU dans le projet.

En-tête du POU

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

Corps du POU

La fonction est exécutée lorsque la variable bStartCam passe à TRUE.

Corps en LD

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

Corps en ST

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;

Exemple sans contrôle de la valeur de consigne maximale

DUT

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.

En-tête du POU

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

Corps du POU

La fonction est exécutée lorsque la variable bStartCam est sur TRUE.

Corps en LD

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

Corps en ST

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;

Modifié le : 2022-06-28Feedback on this pagePanasonic hotline