Programmation
(Traduction du document original anglais)
Introduction
Le module élabore la mesure de position à partir d'un codeur incrémental raccordé à ses entrées. En fonction de cette position et du programme came transféré qui décrit la recette, le module pilote ses sorties.
Nous utiliserons l’IODDT Channel_0 de type T_CCY_GROUP0 que nous associerons à la voie 0 du module TSX CCY situé dans l’emplacement 3 du rack de base.
Nous utiliserons une section pour effectuer le traitement préliminaire et une autre section pour effectuer le traitement postérieur.
Nous aurons également besoin d’une tâche événementielle.
Section préliminaire
(* Initialisation du Graphe SFC *)
IF NOT %M0 THEN SET(%S21);
END_IF;
(* arrêt immédiat cycle *)
IF %M3 THEN SET(%S21);RESET(Channel_0.Pcam_start_stop); Channel_0.ENAB_GROUP0_BITS:=0;RESET(%M3);RESET(%M0);
END_IF;
(* Gestion coupure secteur *)
IF %S1 THEN SET(%S21);RESET(Channel_0.Pcam_start_stop); Channel_0.ENAB_GROUP0_BITS:=0;RESET(Channel_0.OUTS_ENABLE);
			END_IF;
(* Gestion recettes *)
(* sauvegarde de la recette 1 dans les mots depuis %mw100 *)
IF %M11 THEN TRF_RECIPE (Channel_0, 1,100);RESET(%M11)
		END_IF;
(* Sauvegarde de la recette 2 dans les mots depuis %MW850 *)
IF %M12 THEN TRF_RECIPE (Channel_0,1,850);RESET(%M12);
		END_IF;
(* Restauration de la recette 1 depuis le mot %MW100 *)
IF %M13 THEN TRF_RECIPE (Channel_0,0,100);RESET(%M13);RESET(Channel_0.Pcam_start_stop);
		END_IF;
(* Restauration de la recette 2 depuis le mot %mw850 *)
IF %M14 THEN TRF_RECIPE (Channel_0,0,850);RESET(%M14);RESET(Channel_0.Pcam_start_stop);
		END_IF;
(* un restauration de la recette passe le processeur came en STOP donc il faut remettre à zéro sa commande *)
SFC
Cette illustration décrit le Graphe de l’exemple.
Etape 0 -> 1
(* départ cycle ? *)
%M0
Action à l’activation étape 1
(* Initialisation des paramètres de validation et d'affectation *)
(* affectation des pistes aux sorties du GRP '7 pistes / 7 sorties' *)
Channel_0.Group0_and_bits:=16#007F;
(* Reset du compteur de pièces *)
SET(Channel_0.Came_pieces_reset);
(* Autorisation de commander les sorties du groupe 0 *)
SET(Channel_0.OUTS_ENABLE);
(* Autorisation d'événement sur passage modulo angle *)
SET(Channel_0.Evt_ang_enable);
(* Acquittement des défauts lors de la phase de démarrage *)
SET(Channel_0.Came_ack_flt);
Etape 1 -> 2)
(* Défaut ? *)
NOT Channel_0.Ch_error;
Action à l’activation étape 2
(* Fonction de Type 1 donc recalage de l'angle *)
SET(Channel_0.Preset_ang_enable);
Action à la désactivation étape 2
(* Reset du recalage *)
RESET(Channel_0.Preset_ang_enable);
Etape 2 -> 3
(* Compteur recalé ? *)
Channel_0.Ang_ok;
Action à l’activation étape 3
(* Mise en run du processeur came *)
SET(Channel_0.Pcam_start_stop);
Etape 3 -> 4
(* processeur came en RUN ? *)
Channel_0.Pcam_on;
Action à l’activation étape 4
(* Validation du compteur de pièces *)
RESET(Channel_0.Came_pieces_reset);
SET(Channel_0.Pieces_enable);
Section postérieure
(* Gestion des défauts *)
IF Channel_0.Ch_error THEN SET(%S21); END_IF;
(* Acquittement des défauts *)
IF %M1	 THEN SET(Channel_0.Came_ack_flt);RESET(%M1);
		ELSE RESET(Channel_0.Came_ack_flt);	END_IF;
(* Lecture du type de défaut *)
IF %M2 THEN READ_STS(Channel_0);RESET(%M2);	END_IF;
ÉVÉNEMENT-EVT1
(* Gestion des modulos cycle pour démarrage *)
(* Détection des modulo nombre de angle *)
IF Channel_0.Evt_ang AND %M0 THEN INC(%MW0);END_IF;
(* Action sur détection des modulos cycle, validation des cames *)
IF(%MW0=1)AND %M0 THEN SET(Channel_0.ENAB_GROUP0_BITS.1);END_IF;
IF(%MW0=2)AND %M0 THEN SET(Channel_0.ENAB_GROUP0_BITS.2);END_IF;
IF(%MW0=3)AND %M0 THEN SET(Channel_0.ENAB_GROUP0_BITS.3);END_IF;
IF(%MW0=4)AND %M0 THEN SET(Channel_0.ENAB_GROUP0_BITS.4);END_IF;
IF(%MW0=5)AND %M0 THEN SET(Channel_0.ENAB_GROUP0_BITS.5);END_IF;
IF(%MW0>6)AND %M0 THEN %MW0:=6;END_IF;
(* Gestion des modulos cycle pour arrêt *)
(* Détection des modulo nombre de angle *)
IF Channel_0.Evt_ang AND NOT %M0 THEN DEC(%MW0);END_IF;
(* Action sur détection des modulos cycle, invalidation des cames *)
IF(%MW0=5)AND NOT %M0 THEN RESET(Channel_0.ENAB_GROUP0_BITS.0);END_IF;
IF(%MW0=4)AND NOT %M0 THEN RESET(Channel_0.ENAB_GROUP0_BITS.1);END_IF;
IF(%MW0=3)AND NOT %M0 THEN RESET(Channel_0.ENAB_GROUP0_BITS.2);END_IF;
IF(%MW0=2)AND NOT %M0 THEN RESET(Channel_0.ENAB_GROUP0_BITS.3);END_IF;
IF(%MW0=1)AND NOT %M0 THEN RESET(Channel_0.ENAB_GROUP0_BITS.4);END_IF;
IF(%MW0=0)AND NOT %M0 THEN RESET(Channel_0.ENAB_GROUP0_BITS.5);END_IF;
IF(%MW0<1)AND NOT %M0 THEN %MW0:=0;END_IF;
(* Gestion du debordement de la pile d'événements de la carte came *)
(* Détection du débordement *)
IF Channel_0.Direction_evt THEN SET(%M15);END_IF;
Variables utilisées
Tableau
Adresse
Symbole
Commentaire
%M0
Dcy
Démarrage cycle
%M1
Ack_def
Acquittement défaut
%M2
Read_def
Lecture défaut
%M3
Stop_imm
Arrêt immédiat machine
%M5
Counter_plein
%M11
Save_recipe1
Sauvegarde Recette 1
%M12
Save_recipe2
Sauvegarde Recette 2
%M13
Restore_recipe1
Restauration Recette 1
%M14
Restore_recipe2
Restauration Recette 2
%M15
(* Détection du débordement *)
%MW0
Comp_modulo_ang
Compteur Modulo Evt
%MW2
Comp_comp_pieces
%I0.3.0.Err
Channel_0.Ch_error
Bit erreur de la voie
%I0.3.0
Channel_0.Ang_ok
Mesure de l'angle valide
%I0.3.0.3
Channel_0.Pcam_on
Processeur came RUN/STOP
%IW0.3.0
Channel_0.Group0_strack
Etat des pistes i.0 à i.7
%IW0.3.0.12.0
Channel_0.Evt_ang
Événement de passage de modulo de la valeur de l'angle
%IW0.3.0.12.6
Channel_0.Evt_pieces_full
Événement de passage à la valeur limite du compteur de pièces
%IW0.3.0.12.15
Channel_0.Direction_evt
Sens de déplacement sur evt ANG_EVT ou TURN_EVT
%Q0.3.00.0
Channel_0.Preset_ang_enable
Valide la fonction de (re)calage sur la valeur de l’angle uniquement
%Q0.3.00.5
Channel_0.Pcam_start_stop
Set : démarrage du processeur came / Reset : arrêt du processeur came
%Q0.3.00.7
Channel_0.Pieces_enable
Valide la fonction Compteur de pièces
%Q0.3.00.8
Channel_0.Evt_ang_enable
Valide source d'événement ANG_EVT
%Q0.3.00.14
Channel_0.Evt_piece_full_enable
Valide source d'événement PIECES_FULL_EVT
%Q0.3.00.15
Channel_0.Came_ack_flt
Commande acquittement des défauts présents
%Q0.3.00.23
Channel_0.Came_pieces_reset
Reset du compteur de pièces
%Q0.3.0.25
Channel_0.OUTS_ENABLE
Validation globale des sorties pistes
%QW0.3.0
Channel_0.ENAB_GROUP0_BITS
8 bits de validation associés au groupe
%QW0.3.0.1
Channel_0.Group0_and_bits
8 bits d'affectation des pistes aux sorties du groupe