KL5121 Pour activer des sorties en fonction de la position d'un codeur VERSION : 1.0 / PH DATE : 07 Février 2006
Sommaire Ce manuel explique de manière pratique les étapes successives pour mettre en œuvre rapidement un KL5121. Pour des renseignements plus précis, consulter la documentation complète : ftp://ftp.beckhoff.com/document/bustermi/bustermi/kl5121e.pdf. 1 Descriptions des fonctionnalités 4 1.1 Procédure en mode cames numériques 4 2 Câblage 5 3 Paramétrage 6 3.1 Registre 32 6 3.2 La table de position 7 3.3 Validation des sorties 7 4 Exemple de programme 8 Page 3 KL5121
1 Descriptions des fonctionnalités La borne KL5121 permet de gérer des cames numériques. Ainsi, elle lit la position d'un codeur incrémental ou d'un générateur d'impulsions, capture la position de la pièce (entrée Latch), et commutent les sorties en fonction de la position parcouru par la pièce, selon une table prédéfinie. 60 positions de commutations peuvent ainsi être définies pour les 4 sorties. Le temps de réaction est de 100µs. La lecture de la position est limitée à 16bits (65536). La capture de la pièce, mise à 0 la position actuelle, peut-être faite sur le front montant, sur front descendant ou les deux de l'entrée LATCH. L'entrée GATE permet d'autoriser la fonction de l'entrée Latch Une fonctionnalité alternative permet de générer un signal PWM en précisant la durée à ON et la période. Des LEDs indiquent l'état des entrées A et B (entrées codeur 24V), des entrées Gate et Latch (24V), et des 4 sorties. Des contacts permettent de connecter ces entrées/sorties ainsi que distribuer 4 contacts 24V et 4 contacts 0v pour l'alimentation extérieure (le codeur par exemple) 1.1 Procédure en mode cames numériques Pour faire fonctionner le module en mode commutation, procéder ainsi Définir le fonctionnement de l'entrée LATCH / le type de lecture de la position avec le registre 32 Mettre le bit 12 du registre 32 à 1 Ecrire la table des positions commutant les sorties. Valider les sorties en mettant 1 dans le champ de 4 bits correspondant (ProcDataOut) KL5121 Page 4
2 Câblage Toutes les entrées/sorties sont en 24V. Le 24V et 0V sont pris sur les contacts de puissance. Cette borne vous donne donc accès à 4 contacts de chaque potentiel pour votre utilisation personnelle (alimentation du codeur pas exemple) Page 5 KL5121
3 Paramétrage Comme toutes les bornes paramétrables, la configuration est faite par l'intermédiaire des registres internes à la borne. Cette configuration peut être faite par KS2000, les octets de contrôle et de status, ou par le bloc PLC ReadWriteTerminalReg. D'habitude un ensemble d'octets de contrôle et de statuts et de mots d'entrée et de sortie permettent de configurer une borne. Pour cette borne, un deuxième ensemble permet de définir la table de correspondance position / commutation des sorties. State / Ctrl / ProcDataIn / ProcDataOut sont à utiliser pour atteindre les registres de la borne. TabState / TabCtrl / TabDataIn / TabDataOut sont à utiliser pour atteindre la table de positions. 3.1 Registre 32 Le registre 32 spécifie le fonctionnement général des sorties. R32. Description Bit 0 0 : Lecture de la position par un codeur (4x) (défaut) 1 : Lecture de la position par un générateur d'impulsions (A:Pulse/B:Dir) Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7-11 Bit 12-15 Entrée LATCH 0 : Le front montant est ignoré 1 : Le front montant permet de mettre la position actuelle à 0 (défaut) Entrée LATCH 0 : Le front descendant est ignoré (défaut) 1 : Le front descendant permet de mettre la position actuelle à 0 0 : Logique positive pour la gestion des sorties (défaut) 1 : Logique négative pour la gestion des sorties 0 : Watchdog inactif (défaut) 1 : Watchdog actif : si le terminal ne reçoit pas de données pendant 100ms, les sorties sont mises à 0 1 : L'entrée LATCH est prise en compte si l'entrée GATE est à 1 (défaut) 1 : L'entrée LATCH est prise en compte si l'entrée GATE est à 0 (défaut) Non utilisés, ne pas changer 0000 : Les sorties sont utilisées comme générateur d'impulsion (défaut) 0001 : Les sorties commutent en fonction de la position du codeur KL5121 Page 6
3.2 La table de position Afin de définir les positions de commutations des sorties, on accède à une table par les variables TabState / TabCtrl / TabDataIn / TabDataOut La table permet de configurer 60 positions. Index Description 0 Nombre N de positions définies pour la première sortie 1 Nombre M de positions définies pour la première sortie 2 Nombre O de positions définies pour la première sortie 3 Nombre P de positions définies pour la première sortie 4 Première position commutant la sortie 1 N+4 Dernière position (N) commutant la sortie 1 N+5 Première position commutant la sortie 2 N+M+4 Dernière position (M) commutant la sortie 2 N+M+5 Première position commutant la sortie 3 N+M+O+4 Dernière position (O) commutant la sortie 3 N+M+O+5 Première position commutant la sortie 4 N+M+O+P+4 = 64 Max Dernière position (P) commutant la sortie 4 3.3 Validation des sorties En cours de fonctionnement, on peut agir sur le fonctionnement des sorties en manipulant la variable ProcDataOut. Bits Description 0000 Pas de fonctionnement valide. La sortie est mise à 0. 0001 Valide le fonctionnement de la sortie en mode commutation en fonction de la position du codeur 0111 Valide le fonctionnement de la sortie ne mode générateur d'impulsion 0011 Forçage à 1 de la sortie 0101 Forçage à 0 de la sortie En manipulant les bits 0..3 de ProcDataOut, on agit sur la première sortie. En manipulant les bits 4..7 de ProcDataOut, on agit sur la deuxième sortie. En manipulant les bits 8..11 de ProcDataOut, on agit sur la troisième sortie. En manipulant les bits 12.15 de ProcDataOut, on agit sur la quatrième sortie. Page 7 KL5121
4 Exemple de programme VAR k: INT; Reg_32 : WORD; R_TRIG_0: R_TRIG; ReadWriteTerminalReg_0: ReadWriteTerminalReg; Tab_totale : ARRAY [0..63] OF WORD; i: BYTE; END_VAR VAR_INPUT Start_Init: BOOL; (* Initialisation de la carte *) Enable_O1 : BOOL; (* Marche/Arret du fonctionnement des sorties *) Enable_O2 : BOOL; Enable_O3 : BOOL; Enable_O4 : BOOL; Mode_Compteur : BOOL; (*0: Codeur incremental / 1:Compteur *) FM_Latch_Actif : BOOL; (*Le front montant sur l'entrée Latch reset la position : 0: Actif / 1:Non actif *) FD_Latch_Actif : BOOL; (*Le front descendant sur l'entrée Latch reset la position*) Logique_Sorties : BOOL; (*Logique positive (0) ou negative (1) sur les sorties *) Watchdog : BOOL; (* Watchdog actif (1) ou non (0) *) Gate_Pos : BOOL; (* 1 : Entrée LATCH active s'il y a un signal 1 sur l'entrée gate *) Gate_Neg : BOOL; (* 1 : Entrée LATCH active s'il y a un signal 0 sur l'entrée gate *) Nbr_Pt_O1 : BYTE; (* Nombre de positions de commutations de la sortie 1 *) Tab_Pts_O1 : ARRAY [0..59] OF WORD; (* Table des positions de commutations de la sortie 1 *) Nbr_Pt_O2 : BYTE; Tab_Pts_O2 : ARRAY [0..59] OF WORD; Nbr_Pt_O3 : BYTE; Tab_Pts_O3 : ARRAY [0..59] OF WORD; Nbr_Pt_O4 : BYTE; Tab_Pts_O4 : ARRAY [0..59] OF WORD; KL5121_State : BYTE; (* Lien aux process data de la borne *) KL5121_ProcDataIn : WORD; KL5121_TabState : BYTE; KL5121_TabDataIn : WORD; END_VAR VAR_OUTPUT Done : BOOL; Busy : BOOL; Err : BOOL; ErrID : UDINT; KL5121_Ctrl : BYTE; (* Lien aux process data de la borne *) KL5121_ProcDataOut : WORD; KL5121_TabCtrl : BYTE; KL5121_TabDataOut : WORD; END_VAR KL5121 Page 8
R_TRIG_0(CLK:= Start_Init, Q=> ); CASE k OF 0 : Busy := FALSE; IF R_TRIG_0.Q THEN Done:=FALSE; Busy := TRUE; Err := FALSE; ErrID := 0; k:=k+1; IF Done=TRUE THEN KL5121_ProcDataOut:=0; IF Enable_O1 THEN KL5121_ProcDataOut:=KL5121_ProcDataOut+1; IF Enable_O2 THEN KL5121_ProcDataOut:=KL5121_ProcDataOut+16; IF Enable_O3 THEN KL5121_ProcDataOut:=KL5121_ProcDataOut+256; IF Enable_O4 THEN KL5121_ProcDataOut:=KL5121_ProcDataOut+4096; 1: REG_32.0 := Mode_Compteur; (* Modification du registre 32 *) REG_32.1 := FM_Latch_Actif; REG_32.2 := FD_Latch_Actif; REG_32.3 := Logique_Sorties; REG_32.4 := Watchdog; REG_32.5 := Gate_Pos; REG_32.6 := Gate_Neg; REG_32.12 := TRUE; ReadWriteTerminalReg_0 (STATE:=KL5121_State, DATAIN:=KL5121_ProcDataIn, CTRL=> KL5121_Ctrl, DATAOUT=>KL5121_ProcDataOut, TMOUT:=T#1s, REGNO:=32, READ:=FALSE, WRITE:=TRUE, NEWREGVALUE:=REG_32 ); IF NOT ReadWriteTerminalReg_0.BUSY THEN ReadWriteTerminalReg_0(WRITE := FALSE); IF NOT ReadWriteTerminalReg_0.ERR THEN k:=k+1; ELSE Err := TRUE; ErrID := k; k:=0; 2: IF Nbr_Pt_O1 +Nbr_Pt_O2+Nbr_Pt_O3+Nbr_Pt_O4<=60 THEN Tab_totale[0] := Nbr_Pt_O1; (* Création de la table de position *) Tab_totale[1] := Nbr_Pt_O2; Tab_totale[2] := Nbr_Pt_O3; Tab_totale[3] := Nbr_Pt_O4; IF Nbr_Pt_O1>0 THEN FOR i:=0 TO Nbr_Pt_O1-1 DO Tab_totale[i+4]:=Tab_Pts_O1[i]; END_FOR IF Nbr_Pt_O2>0 THEN FOR i:=0 TO Nbr_Pt_O2-1 DO Tab_totale[i+4+Nbr_Pt_O1]:=Tab_Pts_O2[i]; END_FOR IF Nbr_Pt_O3>0 THEN FOR i:=0 TO Nbr_Pt_O3-1 DO Tab_totale[i+4+Nbr_Pt_O1+Nbr_Pt_O2]:=Tab_Pts_O3[i]; END_FOR IF Nbr_Pt_O4>0 THEN FOR i:=0 TO Nbr_Pt_O4-1 DO Tab_totale[i+4+Nbr_Pt_O1+Nbr_Pt_O2+Nbr_Pt_O3]:=Tab_Pts_O4[i]; END_FOR k:=k+1; i:=0; ELSE Err := TRUE; ErrID := k; k:=0; 3: (* Ecriture de la table de position *) KL5121_TabCtrl:=i; KL5121_TabCtrl.6:=TRUE; KL5121_TabCtrl.7:=TRUE; KL5121_TabDataOut := Tab_totale[i]; test:= (KL5121_TabCtrl AND 191); END_CASE IF KL5121_TabState=(KL5121_TabCtrl AND 191) THEN i:=i+1; IF i>=4+ Nbr_Pt_O1+Nbr_Pt_O2+Nbr_Pt_O3+Nbr_Pt_O4 THEN KL5121_TabCtrl:=0; Done:=TRUE; k:=0; Page 9 KL5121
BECKHOFF AUTOMATION Sarl Immeuble "Le Montréal" ZA de Courtaboeuf 19 bis, Avenue du Québec 91951 COURTABOEUF Cedex Tél : 01 69 29 83 70 Fax : 01 69 28 40 55 www.beckhoff.fr info@beckhoff.fr