2.2.1 EVT new OF dans API
Pour que l’automate puisse communiquer avec le logiciel Lina sur la création d’un OF, on aura besoin de deux UDT :
Figure 27 : UDT_LINA_Gestion_evt new OF
Figure 28 : UDT_LINA_EvtCreaOF
Le DB500 sera commun pour tout le poste de charge convoyeur modulaire.
Figure 29 : DB500_LINA_OF_CONV [DB500]
Dans le DB500 :
- Clic GEST_EVT_CREA_OF dans le premier cadre bleu ;
- Clic EVT_CREA_OF dans le second cadre en rouge.
Par la suite, ces deux clics seront notés sur une ligne :
Dans le DB500, clic [GEST_]EVT_<nom de l’EVT>.
Pour la communication du logiciel Lina avec l’automate, il faut une section de code FC. Dans ce FC, nous allons trouver la séquence SFC de création OF.
Figure 30 : SFC création OF
Nous avons vu dans ce chapitre que lors du lancement d’un OF, une procédure se rattache permettant de communiquer avec l’automate.
C’est pourquoi, lorsque c’est l’automate qui crée un OF, nous attendons ⌛ le retour d’information nomenclature créée.
Appel du FC250_EVT_CreaOF liée au convoyeur Modulaire :
L’avantage de créer des blocs FC paramétrés est d’avoir à copier-coller le FC et de remplacer le DB utilisé dedans. DB500_LINA_OF_CONV fait le lien entre le convoyeur modulaire et LINA.
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; (* Création d'OF réalisée avec succès *)
#SEQ.CMD1_1:=0; (* Création d'OF en défaut *)
#SEQ.CMD1_2:=0; (* Demande de création d'OF prise en compte *)
#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 Création d'un OF
(* Preparation au demarrage *)
IF #SEQ.NUM_ETAPE=10 THEN#SEQ.CMD1_0:=0; (* Création d'OF réalisée avec succès *)
#SEQ.CMD1_1:=0; (* Création d'OF en défaut *)
#SEQ.CMD1_2:=0; (* Demande de création d'OF prise en compte *)
#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_Création THEN
#SEQ.T_100MS:=0;
#SEQ.T_1S:=0;
#SEQ.NUM_ETAPE:=100;
END_IF;
END_IF;(* Vérification qu'aucun autre OF est en cours *)
IF #SEQ.NUM_ETAPE = 100 THEN#SEQ.CMD1_1:=0; (* Création d'OF en défaut *)
#SEQ.CMD1_2:=1; (* Demande de création d'OF prise en compte *)(* Pas d'OF en cours *)
IF "DB500_LINA_OF_CONV".NOMENCLATURE.OF_ID = 0 THEN
#SEQ.T_100MS := 0;
#SEQ.T_1S := 0;
#SEQ.NUM_ETAPE := 110;
ELSE
#SEQ.CMD1_1:=1; (* Création d'OF en défaut *)
END_IF;
END_IF;(* Ouverture et Actualisation des données lu en début d'évènement *)
IF #SEQ.NUM_ETAPE = 110 THEN"DB500_LINA_OF_CONV".GEST_EVT_CREA_OF.Declencheur := 1;
"DB500_LINA_OF_CONV".GEST_EVT_CREA_OF.Evt_termine := 0;"DB500_LINA_OF_CONV".EVT_CREA_OF.ID_PROCEDURE := #ID_PROCEDURE; (* 101 = Procédure convoyage modulaire *)
"DB500_LINA_OF_CONV".EVT_CREA_OF.ART_ID_CODE := #ART_ID_CODE; (* 3 = Tasse 3 bille *)
"DB500_LINA_OF_CONV".EVT_CREA_OF.QTE_POIDS := #QTE_POIDS; (* Nombre de tasse 3 bille à produire *)IF #SEQ.T_1S > 60 THEN #SEQ.CMD1_1:=1; END_IF; (* Création d'OF en défaut *)
(* Evènement Création d'OF ouvert *)
IF "DB500_LINA_OF_CONV".GEST_EVT_CREA_OF.Evt_active = 1 THEN
"DB500_LINA_OF_CONV".GEST_EVT_CREA_OF.Declencheur := 0;
#SEQ.CMD1_1:=0; (* Création d'OF en défaut *)#SEQ.T_100MS := 0;
#SEQ.T_1S := 0;
#SEQ.NUM_ETAPE := 120;
END_IF;
END_IF;(* Attente fin d'écriture de nomenclature *)
IF #SEQ.NUM_ETAPE = 120 THEN"DB500_LINA_OF_CONV".GEST_EVT_CREA_OF.Evt_active := 0;
IF #SEQ.T_1S > 60 THEN #SEQ.CMD1_1:=1; END_IF; (* Création d'OF en défaut *)
(* Evènement création d'OF terminé *)
IF "DB500_LINA_OF_CONV".GEST_NOMENCLATURE.LINA_FIN_ECRITURE <> 0 AND "DB500_LINA_OF_CONV".NOMENCLATURE.OF_ID <> 0 THEN
"DB500_LINA_OF_CONV".GEST_NOMENCLATURE.LINA_FIN_ECRITURE := 0;
#SEQ.CMD1_1:=0; (* Création d'OF en défaut *)#SEQ.T_100MS := 0;
#SEQ.T_1S := 0;
#SEQ.NUM_ETAPE := 130;
END_IF;
END_IF;(* Information OF créé avec succès *)
IF #SEQ.NUM_ETAPE = 130 THEN#SEQ.CMD1_0:=1; (* Création d'OF réalisée avec succès *)
#SEQ.CMD1_2:=0; (* Demande de création d'OF prise en compte *)(* Fin de création *)
IF #Dmd_synchro_fin THEN
#SEQ.T_100MS:=0;
#SEQ.T_1S:=0;
#SEQ.NUM_ETAPE:=10;
END_IF;
END_IF;
END_REGION
L999:;
2.2.2 EVT new OF dans Lina
La structure de Gestion d’évènement sera commune aux évènements :
- Création d’OF ;
- Consommation ;
- Production ;
- Clôture d’OF.
Cette structure d’échange permet le déclenchement et le suivi d’un évènement.
Dans Editer Modèle structure, onglet Général :
Figure 33 : UDT_LINA_Gest_EVT Déclencheur CreaOF
Nom : UDT_LINA_Gest_EVT
Variables : « Déclencheur »
Type : Entier
Val. défaut : 0
Mode Gestion : Consigne/Paramètres
Structure de création d’OF :
⚠ Attention : si la même structure de Gestion d’évènement se retrouvera dans chaque « EVT dans Lina », les variables et les mnémoniques sont spécifiques à l’EVT.
Figure 34 : UDT_LINA_CreaOF ID_CODE_ART CreaOF
Nom : UDT_LINA_CreaOF
Variables :
Nom : ID_CODE_ART
Il s’agit de l’IDentification du CODE de l’ARTicle.
Type : Double Entier
Val. défaut : 0
Mode Gestion : Consigne/Paramètres
Mnémoniques spécifiques à l’évènement de création d’OF :
Figure 35 : Mnémo EVT CreaOF
Évènement création d’OF
Dans Editer Evènement, 1er onglet Définition :
Figure 36 : Définition EVT_CREA_OF
Nom : EVT_CREA_OF
Purge des données au dela de : 365 jours
Dans le 2e onglet Acquisition :
Figure 37 : Acquisition Déclencheur CREA_OF
Mnemo de valeur : API_CONV.DB500.GEST_EVT_CREA_OF[001].Déclencheur
Valeurs : Val > 0,0000
Lecture des données associées : En début d’évènement : ☑
Dans le 3e onglet Données associées :
Figure 38 : Données associées Article Code CREA_OF
Nom : Article (Code)
Mnémo de valeur : API_CONV.DB500.EVT_CREA_OF[001].ID_CODE_ART
Type d’acquisition : Valeur API
Tableau à plat – N° … : 0
Dans Editer Données associées :
Figure 39 : Data associée Procédure ID CREA_OF
Nom : Procédure (ID)
Valeur : 101
Type de trace : Procédure
Figure 40 : Données associées Type CREA_OF
Nom : Type
Valeur : 5
Type de trace : Type Action
Figure 41 : Data associée Article Code CREA_OF
Nom : Article (Code)
Mnémo de valeur : API_CONV.DB500.GEST_EVT_CREA_OF[001]. ID_CODE_ART
Type de trace : Article
Figure 42 : Données associées Quantité CREA_OF
Nom : Quantité (Quantite)
Mnémo de valeur : API_CONV.DB500.GEST_EVT_CREA_OF[003]. QTE_POIDS
Type de trace : Quantite
Figure 43 : Data associée Evt_Actif CREA_OF
Nom : Evt_actif
Type d’acquisition : Valeur API
Mnémo de valeur : API_CONV.DB500.GEST_EVT_CREA_OF[001]. Déclencheur
Lecture début évènement : ☑
Dans l’onglet Ecriture API du bas :
Mnémo à écrire : API_CONV.DB500.GEST_EVT_CREA_OF[002].Evt_Active
Déclencheur d’écriture :
☑ Lorsque la valeur donnée associée = 1,00
Valeur à écrire : ◉ Valeur fixe 1,00
Figure 44 : Data associées Evt_terminé CREA_OF
Mnémo à écrire : API_CONV.DB500.GEST_EVT_CREA_OF[003].Evt_Termine
Déclencheur d’écriture : ☑ En fin d’évènement
Valeur à écrire : ◉ Valeur fixe 1,00