Convoyeur Modulaire

Tutoriel : GPAO - Com LINA Automate - 09/2024

3. Évènement Consommation

3.1 Com LINA API Conso

3.1.1 EVT Conso dans l’API

Deux UDT :

UDT_LINA_Gestion_evt Conso

Figure 45 : UDT_LINA_Gestion_evt Conso

L’UDT_LINA_Gestion_evt se retrouve dans les quatres évènements.

UDT_LINA_EvtConso

Figure 46 : UDT_LINA_EvtConso

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

DB500_LINA_OF_CONV conso

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 :

SFC EVT Conso

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.

Réseau 2 FC260_EVT_Conso_tasse

Figure 49 : Réseau 2 FC260_EVT_Conso_tasse

Réseau 3 FC261_EVT_Conso_bille

Figure 50 : Réseau 3 FC261_EVT_Conso_bille

prm FC260_EVT_Conso_tasse

Figure 51 : prm FC260_EVT_Conso_tasse

prm FC261_EVT_Conso_bille

Figure 52 : prm FC261_EVT_Conso_bille

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_REGION

REGION 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 :

UDT_LINA_Gest_EVT Déclencheur Conso

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 :

UDT_LINA_Conso OF_SEQ_ID

Figure 54 : UDT_LINA_Conso OF_SEQ_ID

Mnémo EVT Conso

Figure 55 : Mnémo EVT Conso

Dans Editer Evènement, 1er onglet Définition :

Définition EVT Conso

Figure 56 : Définition EVT Conso

Dans le 2e onglet Acquisition :

Acquisition EVT Conso

Figure 57 : Acquisition EVT Conso

Dans le 3e onglet Données associées :

Données Asso ART_ID_CODE CONSO

Figure 58 : Données Asso ART_ID_CODE CONSO

Attention à l’inversion de nommage dans l’ID du Code de l’ARTicle.

  1. ART_ID_CODE dans colonne 1 « Nom » ;
  2. 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 :

Gestion DA Type EVT CONSO

Figure 59 : Gestion DA Type EVT CONSO

Nom : Type
Valeur : 2
Type de trace : Type Action

Gestion DA OF ID CONSO

Figure 60 : Gestion DA OF ID CONSO

Gestion DA ART_ID_CODE 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

Gestion DA QTE_POIDS CONSO

Figure 62 : Gestion DA QTE_POIDS CONSO

DA Zone de stock Code CONSO

Figure 63 : DA Zone de stock Code CONSO

DA Evt_Actif CONSO

Figure 64 : DA Evt_Actif CONSO

DA Evt_terminée CONSO

Figure 65 : DA Evt_terminée CONSO