3.1 Com LINA API Conso
3.1.1 EVT Conso dans l’API
Deux UDT :

Figure 45 : UDT_LINA_Gestion_evt Conso
L'UDT_LINA_Gestion_evt se retrouve dans les quatres évènements.

Figure 46 : UDT_LINA_EvtConso
Dans le DB500, clic [GEST_]EVT_CONSO_tasse ou bille :

Figure 47 : DB500_LINA_OF_CONV conso
Mnémonique à dupliquer pour la consommation des billes.
Pour le cas du convoyeur modulaire, on consomme 1 tasse et 3 billes par cycle pour produire une unité de « tasse 3 bille ».
Une section de code FC :

Figure 48 : SFC EVT Conso
Appel du FC260_EVT_Conso_tasse et FC261_EVT_Conso_bille liée au convoyeur Modulaire :
Dans le cas du convoyeur modulaire, on consomme 2 articles en simultanée : 1 tasse et 3 billes.
Si on souhaite consommé les 2 articles en même temps, il sera nécessaire de créer 2 sections de code FC.
Autre cas d’application : si on consomme le même article mais venant de deux zones différentes. Cependant pour les applications où l’on consomme 1 article par 1 article, une seule section de code peut suffire.
REGION INIT
//INIT SEQUENCE PAR AFFICHEUR
IF #RAZ_SEQ THEN #SEQ.NUM_ETAPE := 0; END_IF;L10:;
//RAZ DES VARIABLES
IF #SEQ.NUM_ETAPE = 0 THEN#SEQ.T_100MS := 0;
#SEQ.T_1S := 0;#SEQ.CMD1_0:=0; (* Consommation réalisée avec succès *)
#SEQ.CMD1_1:=0; (* Consommation en défaut *)
#SEQ.CMD1_2:=0; (* Consommation en cours *)
#SEQ.CMD1_3:=0; (* *)
#SEQ.CMD1_4:=0; (* *)
#SEQ.CMD1_5:=0; (* *)
#SEQ.CMD1_6:=0; (* *)
#SEQ.CMD1_7:=0; (* *)
#SEQ.CMD1_8:=0; (* *)
#SEQ.CMD1_9:=0; (* *)
#SEQ.CMD1_10:=0; (* *)
#SEQ.CMD1_11:=0; (* *)
#SEQ.CMD1_12:=0; (* *)
#SEQ.CMD1_13:=0; (* *)
#SEQ.CMD1_14:=0; (* *)
#SEQ.CMD1_15:=0; (* *)#SEQ.INT_1:=0;
#SEQ.INT_2:=0;END_IF;
L20:;
//SAUT SI AU POUR FIGER SEQUENCE
IF "AlwaysFALSE" THEN GOTO L999; END_IF;L30:;
//DEMARRAGE DE LA SEQUENCE
IF #SEQ.NUM_ETAPE = 0 AND "REPRISE_API_OK" THEN
#SEQ.NUM_ETAPE := 10;
END_IF;L40:;
//INCREMENTATION TEMPO
IF "BIT_100ms" AND #SEQ.T_100MS < 32766 THEN #SEQ.T_100MS := #SEQ.T_100MS + 1; END_IF;
IF "BIT_1s" AND #SEQ.T_1S < 32766 THEN #SEQ.T_1S := #SEQ.T_1S + 1; END_IF;
END_REGIONREGION Consommation
(* Preparation au demarrage *)
IF #SEQ.NUM_ETAPE=10 THEN#SEQ.CMD1_0:=0; (* Consommation réalisée avec succès *)
#SEQ.CMD1_1:=0; (* Consommation en défaut *)
#SEQ.CMD1_2:=0; (* Consommation en cours *)
#SEQ.CMD1_3:=0; (* *)
#SEQ.CMD1_4:=0; (* *)
#SEQ.CMD1_5:=0; (* *)
#SEQ.CMD1_6:=0; (* *)
#SEQ.CMD1_7:=0; (* *)
#SEQ.CMD1_8:=0; (* *)
#SEQ.CMD1_9:=0; (* *)
#SEQ.CMD1_10:=0; (* *)
#SEQ.CMD1_11:=0; (* *)
#SEQ.CMD1_12:=0; (* *)
#SEQ.CMD1_13:=0; (* *)
#SEQ.CMD1_14:=0; (* *)
#SEQ.CMD1_15:=0; (* *)#SEQ.INT_1:=0; (* *)
#SEQ.INT_2:=0; (* *)(* Conditions de lancement *)
IF #Dmd_Conso THEN
#SEQ.T_100MS:=0;
#SEQ.T_1S:=0;
#SEQ.NUM_ETAPE:=100;
END_IF;
END_IF;(* Ouverture et Actualisation des données lu en début d'évènement *)
IF #SEQ.NUM_ETAPE = 100 THEN#SEQ.CMD1_2:=1; (* Consommation en cours *)
"DB500_LINA_OF_CONV".GEST_EVT_CONSO_tasse.Declencheur := 1;
"DB500_LINA_OF_CONV".GEST_EVT_CONSO_tasse.Evt_termine := 0;"DB500_LINA_OF_CONV".EVT_CONSO_tasse.OF_SEQ_ID := #OF_SEQ_ID;
"DB500_LINA_OF_CONV".EVT_CONSO_tasse.ART_ID_CODE := #ART_ID_CODE;
"DB500_LINA_OF_CONV".EVT_CONSO_tasse.ORDRE_LIGNE_NOM := #ORDRE_LIGNE_NOM;#SEQ.CMD1_0:=0; (* Consommation réalisée avec succès *)
IF #SEQ.T_1S > 60 THEN #SEQ.CMD1_1:=1; END_IF; (* Consommation en défaut *)(* Evènement Consommation ouvert *)
IF "DB500_LINA_OF_CONV".GEST_EVT_CONSO_tasse.Evt_active = 1 THEN
#SEQ.CMD1_1:=0; (* Création d'OF en défaut *)
#SEQ.T_100MS := 0;
#SEQ.T_1S := 0;
#SEQ.NUM_ETAPE := 110;END_IF;
END_IF;(* Attente fin de consommation *)
IF #SEQ.NUM_ETAPE = 110 THEN(* Cloture intermédiaire de l'évènement *)
IF #Dmd_Conso_int THEN
#SEQ.T_100MS := 0;
#SEQ.T_1S := 0;
#SEQ.NUM_ETAPE := 200;
END_IF;
(* Cloture définitive de l'évènement *)
IF NOT #Dmd_Conso THEN
#SEQ.T_100MS := 0;
#SEQ.T_1S := 0;
#SEQ.NUM_ETAPE := 300;
END_IF;
END_IF;(* Actualisation des données lu en fin d'évènement *)
IF #SEQ.NUM_ETAPE = 200 THEN"DB500_LINA_OF_CONV".EVT_CONSO_tasse.QTE_POIDS := #QTE_POIDS;
"DB500_LINA_OF_CONV".EVT_CONSO_tasse.ZONE_STOCK := #ZONE_STOCK;
"DB500_LINA_OF_CONV".EVT_CONSO_tasse.ORDRE_LIGNE_NOM := -1;(* Tempo *)
IF #SEQ.T_100MS >= 0 THEN
#SEQ.T_100MS:=0;
#SEQ.T_1S:=0;
#SEQ.NUM_ETAPE:=210;
END_IF;
END_IF;(* Cloture intermediaire *)
IF #SEQ.NUM_ETAPE = 210 THEN"DB500_LINA_OF_CONV".GEST_EVT_CONSO_tasse.Declencheur := 0; (*CLOTURE EVENEMENT LINA*)
"DB500_LINA_OF_CONV".GEST_EVT_CONSO_tasse.Evt_active := 0;
#QTE_INTERMEDIAIRE := #QTE_POIDS;IF #SEQ.T_1S > 60 THEN #SEQ.CMD1_1:=1; END_IF; (* Consommation en défaut *)
(* Evènement Consommation terminé *)
IF "DB500_LINA_OF_CONV".GEST_EVT_CONSO_tasse.Evt_termine = 1 THEN
"DB500_LINA_OF_CONV".GEST_EVT_CONSO_tasse.Evt_termine:=0;
#SEQ.CMD1_1:=0; (* Consommation en défaut *)#SEQ.T_100MS := 0;
#SEQ.T_1S := 0;
#SEQ.NUM_ETAPE := 220;
END_IF;
END_IF;(* Attente fin cloture intermediaire *)
IF #SEQ.NUM_ETAPE = 220 THEN#SEQ.CMD1_0:=1; (* Consommation réalisée avec succès *)
(* Fin cloture intermediaire *)
IF NOT #Dmd_Conso_int THEN
#SEQ.T_100MS := 0;
#SEQ.T_1S := 0;
#SEQ.NUM_ETAPE := 100;
END_IF;
END_IF;(* Actualisation des données lu en fin d'évènement *)
IF #SEQ.NUM_ETAPE = 300 THEN"DB500_LINA_OF_CONV".EVT_CONSO_tasse.QTE_POIDS := #QTE_POIDS;
"DB500_LINA_OF_CONV".EVT_CONSO_tasse.ZONE_STOCK := #ZONE_STOCK;
"DB500_LINA_OF_CONV".EVT_CONSO_tasse.JETEE := #JETEE;(* TEMPO *)
IF #SEQ.T_100MS >= 0 THEN
#SEQ.T_100MS := 0;
#SEQ.T_1S := 0;
#SEQ.NUM_ETAPE := 310;
END_IF;
END_IF;(* Cloture definitive *)
IF #SEQ.NUM_ETAPE = 310 THEN"DB500_LINA_OF_CONV".GEST_EVT_CONSO_tasse.Declencheur := 0; (*CLOTURE EVENEMENT LINA*)
"DB500_LINA_OF_CONV".GEST_EVT_CONSO_tasse.Evt_active := 0;IF #SEQ.T_1S > 60 THEN #SEQ.CMD1_1:=1; END_IF; (* Consommation en défaut *)
(* Evènement Consommation terminé *)
IF "DB500_LINA_OF_CONV".GEST_EVT_CONSO_tasse.Evt_termine = 1 THEN
"DB500_LINA_OF_CONV".GEST_EVT_CONSO_tasse.Evt_termine:=0;
#SEQ.CMD1_1:=0; (* Consommation en défaut *)#SEQ.T_100MS := 0;
#SEQ.T_1S := 0;
#SEQ.NUM_ETAPE := 320;
END_IF;
END_IF;(* Attente fin cloture definitive *)
IF #SEQ.NUM_ETAPE = 320 THEN#SEQ.CMD1_0:=1; (* Consommation réalisée avec succès *)
(* Fin cloture definitive *)
IF #Dmd_synchro_fin THEN
#SEQ.T_100MS := 0;
#SEQ.T_1S := 0;
#SEQ.NUM_ETAPE := 10;
END_IF;
END_IF;
END_REGION
L999:;
3.1.2 EVT Conso dans Lina
Dans Editer Modèle structure :

Figure 53 : UDT_LINA_Gest_EVT Déclencheur Conso
La structure de gestion de l'évènement Consommation UDT_LINA_Gest_EVT est commune aux évènements.
Structure de consommation :

Figure 54 : UDT_LINA_Conso OF_SEQ_ID

Figure 55 : Mnémo EVT Conso
Dans Editer Evènement, 1er onglet Définition :

Figure 56 : Définition EVT Conso
Dans le 2e onglet Acquisition :

Figure 57 : Acquisition EVT Conso
Dans le 3e onglet Données associées :

Figure 58 : Données Asso ART_ID_CODE CONSO
⚠ Attention à l'inversion de nommage dans l'ID du Code de l'ARTicle.
- ART_ID_CODE dans colonne 1 "Nom" ;
- ID_CODE_ART dans colonne 2 "Mnémo de valeur" ;
Nom : ART_ID_CODE
Mnémo de valeur : API_CONV.DB500.EVT_CONSO_tasse[002].ID_CODE_ART
Type d'acquisition : Valeur API
Tableau à plat : 0
Dans Editer Données associées :

Figure 59 : Gestion DA Type EVT CONSO
Nom : Type
Valeur : 2
Type de trace : Type Action

Figure 60 : Gestion DA OF ID CONSO

Figure 61 : Gestion DA ART_ID_CODE CONSO
Nom : ART_ID_CODE
Mnémo de valeur : API_CONV.DB500.EVT_CONSO_tasse[002].ID_CODE_ART

Figure 62 : Gestion DA QTE_POIDS CONSO

Figure 63 : DA Zone de stock Code CONSO

Figure 64 : DA Evt_Actif CONSO

Figure 65 : DA Evt_terminée CONSO