RAPPORT DE STAGE
De formation
Sujet : A utomatisme d'un magasin de stockage
commandé par ordinateur.
"EnCADRE" PAR : M. HAMID ZEGGUI
AAAEE UAIVERSITAIRE : 2006/2007
PAR : YOUSSEF MELLOUKI
Monsieur Hamid ZEGGUI, PDG de la société Mindeq,
m'ayant fait confiance en m'accueillent dans sa société.
Monsieur Mahmoud ARRIFI, technicien en informatique pour ses
conseils et ses indications relatives à la partie informatique de mon
travail.
Madame Madeleine ZEGGUI, directrice administrative, m'ayant
fourni la documentation nécessaire à la présentation de la
société et éclairci le secteur d'activité.
Mademoiselle Bouchra CH ERI F, secrétai re à Mi
ndeq, pour son aide permanente durant toute la durée du stage.
Introduction 1
I - La société Mi ndeq 2
1 - Vocation et stratégie 2
2 - Organisation de l'entreprise 2
3 - Organigramme de l'entreprise 3
4 - Moyens de production 3
II - Le magasin automatique (Généralités)
4
1 - Généralité 4
2 - U n magasi n de stockage oui, mais pourquoi automatique ?
4
III - Machine à déplacement unidi rectionnel 6
1 - Schéma de la machine 6
2 - Introduction au fonctionnement de la machine 6
3 - Connexions et synoptique de la machine 7
4 - Grafcet général de la machine 10
Explications et Commentaires 11
5 - Description technique détaillée de la machine
18
6 - Grafcet capteurs'actionneurs 23
7 - Application Visual Basic 27
IV - Machine à déplacement bidirectionnel 33
1 - Schéma de la machine 33
2 - Introduction au fonctionnement de la machine 34
3 - Connexions et synoptique de la machine 34
4 - Description technique détaillée de la machine
37
5 - Grafcet capteurs'actionneurs 40
6 - Application Visual Basic 45
Annexes
|
54
|
I - Fonctions de l'application Visual Basic
|
54
|
1 - Lecture du compteur
|
54
|
2 - Module nécessaire aux opérations
|
|
d'Ecriture/Lecture dans l'automate
|
55
|
3 - Lecture d'un bit d'un registre de l'automate
|
58
|
4 - Ecriture dans un bit d'un registre de l'automate
|
. 59
|
II - Langage de programmation de l'automate - Tutorial
WPLSoft 2.08
|
61
|
1 - Introduction
|
61
|
2 - Création d'un programme sur WPLSoft 2.08
|
61
|
3 - Chargement, exécution et simulation du
|
|
programme
|
70
|
4 - Communication à travers le port RS-485
|
74
|
5 - Utilisation des extensions des Entrée/Sorties
|
76
|
Introduction
u début du XXème siècle, et avec
le développement
technologique notamment des industries
électronique et informatique, l'homme commença
à voir la robotique et l'automatisme comme un outil très pratique
de manipulation pouvant remplacer le travail manuel dans le cas du danger ou
lorsque une rapidité ou fiabilité extrêmes sont
recherchées«
M i ndeq (Société de M aintenance Industrielle
et d'Equipements), la société où j'ai passé mon
stage de formation, aborde justement la conception, la fabrication et
l'automatisme de machines diverses, que ce soient des machines de repassage
destinées à l'industrie textile, des générateurs de
vapeur ou encore des magasins de stockage automatiques dont l'automatisme a
fait l'objet de mon sujet de stage.
M on rapport de stage donnera un bref aperçu sur la
soci été puis expliquera le fonctionnement d'un magasin
automatique, son utilité, ses types et les étapes de son
automatisation.
I - La société Mindeq :
1 - Vocation et stratégie :
Mi ndeq (Société de Maintenance Industrielle et
d'Equipement) est une entreprise familiale créée en 1991 au
capital de 1.500.000,00 Dirhams. Elle est située à la Zone
Industrielle SIDI BOUZEKRI 50000 Meknès. Actuellement Mindeq est
fabriquant de machines automatiques et de machines industrielles desti
née à l'industrie Textile dans les domaines suivants :
Secteur thermocollage ; Secteur convoyage ;
Secteur repassage, etc«
2 - Organisation de l'entreprise :
Fig. 1 : Organisation de
l'entreprise
(Tiré à partir d'une source interne
à l'entreprise)
3 - Organigramme de l'entreprise :
Fig. 2 : Organigramme de l'entreprise (Année
2006)
4 - Moyens de production :
L'entreprise possède toutes les machines
nécessaires pour satisfaire à ses besoins en matière de
fabrication. Il est à noter aussi qu'une dominance de la tôlerie
peut facilement être remarquée et par la suite un manque quasi
absolu dans le domaine de la fabrication par usinage à commande
numérique par exemple ou la fonderie, ce qui limite
considérablement le champ d'action de l'entreprise car finalement
toutes
les machines qu'elle fabrique, sont à base de tôles
pliées, découpées, soudées«
Les moyens de production de l'entreprise peuvent être
citées dans la liste suivante :
|
Deux machines de découpe Laser avec chargement automatique
;
Deux Plieuses à commande numérique ;
Une Cisaille 6 mm ;
Trois tours conventionnels ; Une Fraiseuse ;
Une taraudeuse pneumatique ; Un poste de soudure traditionnel ;
Un poste de soudure par points ;
Un atelier de traitements de surfaces ; Un atelier de peinture
Epoxy ; Un atelier de montage-assemblage ;
|
:
II - Le magasin automatique
(Généralités)
1 - Généralité :
Un magasin automatique est une machine qui stocke des
pièces qu'on peut chercher d'une manière automatique.
C'est-à-dire qu'au lieu de stocker des articles dans des rangée
ou des plateaux et que l'opérateur vi endra récupérer
manuellement, la machine est équipée d'un système
automatique qui pourra nous faire sortir les pièces voulues en la
commandant à partir d'un ordinateur de bureau.
2 - Un magasin de stockage oui, mais
pourquoi automatique ?
Les principaux avantages d'un magasin automatique, peuvent
être cités comme suit :
1 - Sûreté et Contrôle total des
flux d'entrées/sorties :
Avec une telle machine, on pourra connaître parfaitement
à n'importe quel instant l'état de tous les stocks, car d'une
part, toutes les commandes de sorties et d'entrées de pièces
passent par ordinateur et par la suite tout est enregistré dans une base
de donnés, et d'autre part parce que la probabilité qu'un ouvrier
vole ou prenne plus que la quantité
désirée d'un certain type de pièces est
pratiquement nulle, car encore une fois l'heure, la date de l'opération
de prise de pièce, la quantité prise ainsi que l'ouvrier ayant
effectué l'opération sont des informations enregistrées
elles aussi dans la même base de données
2 - Minimisation de l'espace de stockage
:
Un autre intérêt de cette machine de l'extrrme
importance l ui aussi, est le gain d'espace de stockage.
Explications :
Dans un magasin de stockage habituel, les ouvriers s'occupent
de la récupération des articles voulus et par la suite des
échel les seront nécessai re si on dépasse, en hauteur, 2
ou 3 mètres ce qui n'est pas très ergonomique. D'autant plus
qu'un ouvrier sur une échelle, n'est pas très en
sécurité, et par conséquent dans ces magasins habituels,
on ne peut pas s'investir trop en hauteur. Ceci dit qu'il faudra stocker en
surface ce qui fera plus que doubler la surface de stockage (Ce qui va
être stocké dans une colonne verticale de n de
rangées occupant une surface S, occupera plus que (2* S)
s'il est stocké dans deux colonnes de rangées n/2
chacune, car il faut pas oublier les couloirs de passage devant exister
entre ces deux colonnes).
Par contre dans un magasin de stockage automatique, le
problème de hauteur n'est pas posé, car finalement tout, ne va
dépendre que de la résistance de la structure et par la suite on
pourra atteindre pl usieurs mètres de hauteur (14 - 16 m voir plus)
chose impossible dans l es magasi ns de stockage traditionnels.
3 - Absence d'une personne responsable du magasin
:
Un magasin automatique est géré automatiquement
donc il n'a besoin de personne pour être
?surveillé? ce qui revient à compter un
salaire en moins pour l'entreprise. Sauf naturel lement dans le cas de panne ou
de rajout de nouvelles pièces, là c'est une personne qui devra le
faire.
III - Machine à déplacement
unidirectionnel :
1 - Schéma de &a machine :
Fig. 3 : Schéma (2D) de la machine
à
déplacement unidirectionnel
2 - Introduction au fonctionnement de &a
machine :
Le magasin automatique comporte des cases dans l esquelles
sont rangées les plateaux contenant l es articles stockés (voir
schéma en dessus). Lors du fonctionnement de la machine, le chariot se
déplace verticalement jusqu'à la position du plateau
recherché, puis il le fait sortir jusqu'à sa sortie
complète et il le fait descendre vers ce qu'on a appelé « la
position de travail ».
La position de travail est le niveau dans lequel s'arrrte le
chariot portant le plateau pour qu'un ouvrier vienne y chercher les articles
voulus sans, ni s'incliner, ni utiliser une échelle, ceci
évidement pour des raisons d'ergonomie de la machine. La position de
travail a été fixée à 1 m20 à parti r du
sol.
3 - Connexions et synoptique de la
machine :
La machine est commandée par un API, qui est
commandé à son tour par une application exécutée
sur ordinateur grâce à une connexion à travers le port
RS-485. L'automate, jouant le rôle d'interface entre l'ordinateur et les
actionneurs, il traduit les ordres de l'ordinateur envoyés à
travers les registres « M » de l'automate en des sorties vers les
moteurs électriques qui vont, en fonctions des ordres transmis, faire
monter, descendre, sortir une rangée, la faire entrer ou encore, ouvrir
la porte de la machine. L'application sur ordinateur liée à une
base de données contenant les positions verticales de chaque plateau, et
avant de donner n'importe quel ordre de déplacement, elle compare la
position du plateau voulue avec la position actuelle du chariot donnée
par un codeur connecté à l'ordinateur et qui lit en permanence la
valeur de la position du chariot. Donc finalement la raison d'existence du
codeur installé sur le chariot n'est rien d'autre que la livraison
permanente d'une information précise (au millimètre près)
relative à sa position verticale.
Fig. 4 : Schéma de transmission de
données de la machine à
déplacement
unidirectionnel
Dans ces conditions de travail, l'automate ne travaille que
sous les ordres de l'ordinateur, néanmoins l'initialisation*
de la machine au début, notamment la descente à la position
zéro au démarrage et l'initialisation du compteur se font
automatiquement sans intervention de l' ordinateur.
* Initialisation : Lors du fonctionnement normal de la
machine, il se peut qu'il y ait une coupure de courant brusque on un
disfonctionnement inattendu« puis un arrrt de la machine là
où elle était sans que l'ordinateur connaisse sa position. Donc
une initialisation de la machine est indispensable pour mettre en phase
l'ordinateur et l'automate au départ. L'initialisation de la machine
consiste en un déplacement du chariot vers la position la plus basse de
la machine appelée position zéro et la remise à
zéro du compteur afin qu'elle soit prrte.
Remarque :
Afin d'éviter les problèmes d'inertie dans le
système, tous les mouvement verticaux sont dotés de deux phases
de déplacement en ralenti : une phase d'accélération au
début du mouvement et une autre de décélérati on
à la fin. Et si jamais, lors de l'arrivée du chariot, il ne
s'arrrte pas à la position voulue pi lepoil, l'ordinateur va
déclencher un ordre de déplacement dans le sens inverse
jusqu'à ce que la différence entre la position du chariot et la
position voulue soit inférieure à une certaine tolérance
près spécifiée par l'utilisateur de l'application.
Synoptique du foncti onnement de la machine
:
Après l'initialisation de la machine, l'automate attend
les ordres de l'ordinateur pour déplacer le chariot. L'ordinateur envoie
premièrement un ordre de déplacement vertical vers la position du
plateau voulu, puis un ordre de sortie du plateau. Une fois le plateau bien
sorti, il envoie encore un ordre de déplacement vers la position de
travail puis un ordre d'ouverture de la porte de la machine. Après la
récupération des pièces contenues dans le plateau
apporté et la fermeture manuelle* de la porte, l'ordinateur
envoie pour une troisième fois un ordre de déplacement vertical
pour rendre le plateau à sa position. Et finalement un dernier ordre
pour faire entrer le plateau à sa place (voir fig. 5).
Fermeture manuelle* : la fermeture de la porte se
fait par appui sur un bouton poussoir pour des raisons de
sécurité (l'ordinateur ne peut pas savoir à quel moment
les articles ont été pris pour envoyer un ordre de fermeture de
la porte).
Ordre de déplacement vertical vers
la
position du plateau
Phase 2
Ordre de sortie du plateau
Phase 3
Ordre de déplacement vertical vers
la
position de travail
Phase 4
Ordre de déplacement vertical vers
la
position initiale du plateau
Phase 5
Ordre d'ouverture de la porte
Phase 6
Fermeture manuelle de la porte
Ordre d'entrée du plateau
Phase 1
Phase 7
Reboucler
Fig. 5 : Phases d'un cycle de fonctionnement de la
machine
à déplacement unidirectionnel
4 - Grafcet général de la machine
:
Fig. 6 : Grafet général de la
machine
Explications et Commentaies :
1 - Démarrage et initialisation de la
machine :
Au début de l'exécution du programme de l'automate,
une mise en marche manuel le est nécessai re.
Fig. 7 : Grafcet de démarrage et
initialisation
de la machine
Après cette mise en marche commence la phase
d'initialisation de la machine. Dans cette phase on va tester troi s cas :
|
1er cas : Si le plateau est mal placé sur le chariot
sans qu'un partie ne soit à l'intérieur de la rangée (fig.
8), l'automate va le faire sortir jusqu'à ce qu'il soit bien
placé sur le chariot, puis faire descendre le chariot chargé
à la position zéro.
|
Fig. 8 : Premier cas du positionnement du plateau sur le
chariot lors de l'initialisation
2ème cas : Si le plateau est mal placé sur
chariot avec une partie à l'intérieur de la rangée (fig.
9), l'automate va le faire entrer à l'intérieur de la
rangée, puis faire descendre le chariot vide à la position
zéro.
Fig. 9 : Deuxième cas du positionnement du plateau
sur le chariot lors de l'initialisation
|
3ème cas : Si le plateau est soit bien placé sur
le chariot ou complètement à l'intérieur de la
rangée, la machine va passer directement à la phase de descente
à la position zéro.
|
2 - Fin de l'initialisation et conditions de
sécurité :
Fig. 10 : Grafcet de fin de l'initialisation
et
conditions de sécurité
Les conditions de passage pour les deux premiers cas sont
respectivement : la sortie de la rangée et son entrée
complètes.
La CS 1 NV (Condition de Sécurité 1 Non
Vérifiée), représente les cas où la machine ne doit
faire aucun mouvement pour des raisons de sécurité. Ces
conditions peuvent être citées dans la liste suivante :
La porte doit être fermée durant tous les
mouvements de déplacement sauf dans la phase d'ouverture de la porte
pour récupérer l'article voulu.
Tous les plateaux doivent être bien placés dans
leurs rangées ou sur le chariot mais pas dans une position i
ntermédiaire.
Le chariot ne doit pas sorti r de sa course verticale
permise.
Remarques :
- Ces conditions de sécurité sont
présentes dans toutes les phases du fonctionnement de la machine. Et si
une d'elles n'est pas vérifiée, il survient immédiatement
un arrêt complet puis un déclenchement de l'alarme (étape
S22 sur le Grafcet).
- Après une initialisation réussie de la
machine, tous les plateaux sont bien placés, donc la raison d'existence
de la deuxième condition est assez floue car avant de passer à un
cycle de fonctionnement normal de la machine, il y avait déjà eu
satisfaction de cette condition. Or lors du fonctionnement normal de la
machine, il se peut qu'il ait une sortie d'un plateau de sa rangée ou
des vibrations anormales qui pourront faire que les plateaux ne soient plus
à leurs places, donc la vérification de cette condition en
permanence en fonctionnement normal est très raisonnable et même
obligatoire pour diminuer le risque d'accidents.
3 - Descente vers la position zéro en ralenti et
remise à zéro
du compteur :
Fig. 11 : Grafcet de descente vers la position
zéro
en ralenti et remise à zéro du
compteur
Après les trois tests que fait l'automate pour
vérifier le bon placement des plateaux, il fait descendre la machine
jusqu'à la position la position zéro (la position la plus basse
de la machine), puis envoie un signal d'initialisation du compteur.
4 - Déplacements verticaux :
Fig. 12 : Grafcet du déplacement vertical
de
la machine
Dans cette phase (phase de déplacement verticaux), si
l'automate reçoit un ordre de déplacement vertical de
l'ordinateur il procède au mouvement vertical en testant naturellement
deux cas : si le déplacement sera vers le haut ou vers le bas. Le
déplacement est maintenu jusqu'à ce que l'automate ne
reçoit plus d'ordre de déplacement dans le même sens. Si le
sens change, on reboucle à l'étape S9.
Les conditions de sécurité sont toujours
présentes, si une d'elles n'est pas satisfaite, on un passage direct
à l'étape S22 puis déclenchement de l'alarme.
5 - Sortie de I a rangée :
Fig. 13 : Grafcet de sortie de la
rangée
Après I es dépI acements verticaux
nécessaires, vient I a phase de sortie de I a rangée si un ordre
de sortie de I a rangée envoyé par ordi nateur a
été détecté.
6 - Entrée de I a rangée :
Fig. 14 : Grafcet d'entrée de la
rangée
Dans cette phase se fait la détection des ordres
d'entrée de
I a rangée.
Fig. 15 : Grafcet d'ouverture de la porte
7 - Ouverture de la porte :
De même que les autres parties du Grafcet, là se
fait l'ouverture de la porte.
Dans cette partie les conditions de sécurité
qui doivent être vérifiées ne vont pas être les
mêmes car on peut pas parler de condition de sécurité
relative à la fermeture de la porte dans une phase où se fait
l'ouverture de cette dernière. Ainsi les conditions de
sécurité devant êtres satisfaites vont être :
Tous les plateaux doivent être bien placés dans
leurs rangées ou sur le chariot mais pas dans une position i
ntermédiaire.
Le chariot ne doit pas sortir de sa course verticale permise.
8 - Fermeture de la porte :
Fig. 16 : Grafcet de fermeture manuelle de la
porte
De même que la partie relative à l'ouverture de la
porte les conditions de sécurité sont :
Tous les plateaux doivent être bien placés dans
leurs rangées ou sur le chariot mais pas dans une position i
ntermédiaire.
Le chariot ne doit pas sortir de sa course verticale permise.
9 - Alarme :
Fig. 17 : Grafcet de déclenchement de l' alar
me
C'est la phase à laquelle mène toute
insatisfaction d'une des conditions de sécurité durant toutes les
phases de fonctionnement de la machine. L'alarme est déclenchée
jusqu'à une nouvelle satisfaction de toutes les conditions de
sécurité puis survient une initialisation du programme.
5 - Description technique détaillée de la
machine :
Tous les mouvements de la machine peuvent se faire soit
automatiquement, à partir de l'ordinateur ou manuellement à
partir du pupitre de commande (voir Fig. 18). La manipulation manuelle de la
machine est faite pour être utilisée lors d'une panne par exemple
ou lors d'un arrrt de l'ordinateur commandant la machine.
- Emplacement des capteurs sur la machine :
Fig. 18 : Emplacement des capteurs
sur la machine
à déplacement unidirectionnel
Remarque :
L'application Visual Basic commandant la machine ne peut pas
lire les entrées de l'automate néanmoins, elle peut lire les
valeurs des bits du registre « M ». Ainsi toutes les entrées
de l'automate sont stockées dans ce mrme registre afin qu'elles soient
interprétables par l'application sur ordinateur.
- Entrées de la machine et leurs
équivalents dans le registre « M » de l'automate
:
X0 (M5) : Fin de course niveau zéro.
X1 (M6) : Fin de sortie de la rangée.
X2 (M7) : Fin d'entrée de la rangée.
X3 (M8) : Présence d'un plateau sur le côté
gauche de la
table.
X4 (M9) : Présence d'un plateau au centre de la table.
X5 (M10) : Sécurité haut.
X6 (M11) : Sécurité bas.
X7 (M17) : Bouton de mise en marche.
X20 (M 18) : Bouton d'arrrt d'urgence.
X21 (M19) : Photocellule détection plateaux mal
placés.
X22 (M 13) : Commande manuelle déplacement vers le
haut.
X23 (M 14) : Commande manuelle déplacement vers le
bas.
X24 (M 15) : Commande manuelle entrée de la
rangée.
X25 (M 16) : Commande manuelle sortie de la rangée.
X26 (M31) : Commande manuelle d'ouverture de la porte.
X31* : Commande manuelle fermeture de la porte.
X27 (M29) : Fin de course d'ouverture de la porte.
X30 (M28) : Contact de détection de fermeture de la
porte.
(*) : L'entrée de commande manuelle de fermeture de la
porte n'a pas son équivalent dans le registre « M » car la
fermeture de la porte ne peut se faire que manuellement et NON à partir
de l'ordinateur.
- Sorties de l'automate :
Y1 : Déplacement vers le haut.
Y2 : Déplacement vers le bas.
Y3 : Ralenti.
Y20 : Entrée de la rangée.
Y21 : Sortie de la rangée.
Y22 : Remise à zéro du compteur.
Y23 : Alarme.
Y24 : Ouverture de la porte.
Y25 : Fermeture de la porte.
- Bits des ordres de l'ordinateur :
M0 : Déplacement vers le haut.
M1 : Déplacement vers le bas.
M2 : Déclenchement du ralenti.
M3 : Sortie de la rangée.
M4 : Entrée de la rangée.
M30 : Ouverture de la porte.
M40 : Bit de détection du cycle en cours.
Pourquoi X4 existe alors que X3 et X1 sont suffisants
pour détecter la présence d'un plateau sur le
chariot ?
En regardant le schéma de la machine (Fig. 18) en
remarque bien qu'il y a quatre différents cas de position du plateau au
départ.
1er cas : X2 est activé c'est-à-dire que le
plateau est entièrement à l'intérieur de sa
rangée.
2ème cas : X1 et X3 sont tous les deux activés
et dans ce cas le plateau est entièrement sorti sur le chaiot.
Il reste encore deux autres cas i ntermédiaires
notamment si le plateau est mal positionné sur le chariot et une partie
est à l'intérieur de la rangée ou encore s'il est mal
positionné sur le chariot mais à l'extérieur de la
rangée. C'est l'information qu'on peut avoir grkce à X4.
3ème cas : X3 est activé et X4 non. Avec la
condition de distance a, si X4 n'est pas activé donc automatiquement une
partie du plateau est à l'intérieure de la rangée. Dans ce
cas là lors de l'initialisation de la machine et avant le
déplacement vers la position zéro, l'automate va faire entrer le
chariot jusqu'à ce que X2 soit activé et c'est là que sont
mouvement de descente va commencer.
4ème cas : X3 et X4 sont tous les deux activés
et X1 non ce qui veut dire que le plateau est mal positionné mais il
n'est pas à l'intérieur de la rangée donc l'automate va le
faire sortir jusqu'à ce que X1 soit activé pour le faire
descendre dans la phase d'initialisation.
6 - Grafcet capteurs/actionneurs :
Fig. 19 : Grafcet détaillé de la machine
à déplacement undirectionnel
7 - Application Visual Basic :
Fenêtre de l 'appli cati on Visual Basic :
Fig. 20 : Application Visual Basic de la
machine
à déplacement unidirectionnel
Algorithme de l'application :
Phase : variable contenant la valeur de la phase en cours.
Phase = 0 : Phase repos.
Phase = 1 : Phase déplacement vertical allée.
Phase = 2 : Phase sortie de la rangée.
Phase = 3 : Phase déplacement vertical retour vers
position de travail.
Phase = 31 : Phase d'ouverture de la porte afin de
récupérer les pièces voul ues.
Phase = 4 : Phase déplacement vertical allée.
Phase = 5 : Phase entrée de la rangée.
Phase = 6 : Phase exécutée si, lors de
l'initialisation de la machine, il y a un plateau sur le chariot. Elle fait le
même travail que la Phase 3 (déplacement vers la position du
travail et elle attend la lecture de l'emplacement du chariot.
Phase = 61 : Phase d'ouverture de la porte correspondante
à la Phase 6.
Pos_départ (Position de départ) :
variable contenant la position de départ de chaque
mouvement
vertical.
Pos_Actuelle (Position actuelle) : Variable
contenant la position actuelle du chaiot
donnée en permanence par le
codeur.
Pos_Arrivée (Position d'arrivée) :
variable contenant la position d'arrivée du
chariot.
D_AccRlt (Distance
d'accélération/ralentissement) : variable contenant la
valeur de
distance d'accélération et de
ralentissement).
Pre_Pos (Précision de positionnement) :
variable contenant la valeur de l'incertitude
du positionnement du
chariot.
Répéter
Si M18 = 1 et Phase <> 0 alors
M0 = 0
M1 = 0
M2 = 0
M3 = 0
M4 = 0 M30 = 0
Répeter
Message «Attention ! Boutton d'arrêt d'urgence
enfoncé ! Désactivez le pour continuer ! » Jusqu'à
M18 = 0
Pos_Départ = Pos_Actuelle
Fin Si
Si Phase = 1 Alors
Si (Abs(Pos_Actuelle - Pos_Arrivée) <= D_AccRlt) Ou
(Abs(Pos_Actuelle - Pos_Départ) <= D_AccRlt) Alors
M2 = 1
Si non
M2 = 0
Fin Si
Si (Pos_Actuelle > Pos_Arrivée + Pre_Pos) Alors
M0 = 0 M1 = 1
Fin Si
Si (PosActuelle < PosArrivée - PrePos) Alors
M1 = 0 M0 = 1
Fin Si
Si (Abs(Pos_Actuelle - Pos_Arrivée) <= Pre_Pos)
Alors
M0 = 0 M1 = 0
Fin Si
Si stabilité pendant 2 secondes Alors
Phase = 2
M0 = 0 M1 = 0
Fin Si
Fin Si
Si Phase = 2 Alors
Si M6 = 0 Alors
M3 = 1
Si non
M3 = 0 Phase = 3
Fin Si
Fin Si
Si Phase = 3 Alors
Si (Abs(Pos_Actuelle - Y_Travail) <= D_AccRlt) Ou
(Abs(Pos_Actuelle - Pos_Arrivée) <= D_AccRlt) Alors
M2 = 1
Si non
M2 = 0
Fin Si
Si (Y_Travail - Pre_Pos > Pos_Actuelle) Alors
M1 = 0 M0 = 1 Fin Si
Si (Y_Travail + Pre_Pos < Pos_Actuelle) Alors
M0 = 0 M1 = 1
Fin Si
Si (Abs(PosActuelle - YTravail) <= PrePos) Alors
M0 = 0 M1 = 0
Fin Si
Si stabilité pendant 2 secondes Alors
Phase = 31
M40 = 0 M0 = 0 M1 = 0
Fin Si
Fin Si
Si Phase = 31 Alors
Si M29 = 0 Alors M30 = 1
Si non
M30 = 0
Message « Prendre la pièce X, Fermer la porte de la
machine et cliquer sur ok ! »
Message « La porte de la machine doit être
fermée »
Jusqu'à M28 = 1
Fin Si
M40 = 1 Phase = 4
Fin Si
Fin Si
Si Phase = 4 Alors
Si (Abs(Pos_Actuelle - Y_Travail) <= D_AccRlt) Ou
(Abs(Pos_Actuelle - Pos_Arrivée) <= D_AccRlt) Alors
M2 = 1
Si non
M2 = 0
Fin Si
Si (Pos_Actuelle > Pos_Arrivée + Pre_Pos) Alors
M0 = 0 M1 = 1
Fin Si
Si (PosActuelle < PosArrivée - PrePos) Alors
M1 = 0 M0 = 1
Fin Si
Si (Abs(Pos_Actuelle - Pos_Arrivée) <= Pre_Pos)
Alors
M0 = 0 M1 = 0
Fin Si
Si stabilité pendant 2 secondes Alors
Phase = 5
M0 = 0 M1 = 0
Fin Si
Fin Si
Si Phase = 5 Alors
Si M7 = 0 Alors
M4 = 1
Si non
M4 = 0
M40 = 0 Phase = 0
Fin Si
Si Phase = 6 Alors
Si (Abs(Pos_Actuelle - Y_Travail) <= D_AccRlt) Ou
(Abs(Pos_Actuelle - 0) <= D_AccRlt) Alors
M2 = 1
Si non
M2 = 0
Fin Si
Si (Y_Travail - Pre_Pos > Pos_Actuelle) Alors M1 = 0
M0 = 1
Fin Si
Si (Y_Travail + Pre_Pos < Pos_Actuelle) Alors M0 = 0
M1 = 1
Fin Si
Si (Abs(PosActuelle - YTravail) <= PrePos) Alors
M0 = 0 M1 = 0
Fin Si
Si stabilité pendant 2 secondes Alors
Phase = 61
M0 = 0 M1 = 0
Fin Si
Fin Si
Si Phase = 61 Alors
Si M29 = 0 Alors M30 = 1
Si non
M30 = 0
Message « Présence d'un plateau sur le chariot !
Entrez la position du plateau et fermez la porte » Lire
Pos_Arrivée
Message « La porte de la machine doit être
fermée »
Jusqu'à M28 = 1
Fin Si Phase = 4
Fin Si
Fin Si
Jusqu'à Arrêt de la machine
PV - Machine à déplacement
bidirectionnel :
1 - Schéma de la machine :
Là, à la différence par rapport à
la machine à déplacement unidirectionnel, il s'agit d'une machine
qui livre les articles stockés dans des boites qu'on peut chercher
séparément et non pas dans des rangées entières.
(voir schéma Fig. 21)
Fig. 22 : Schéma de la machine à
déplacement
bidirectionnel
2 - Introduction au fonctionnement de la
machine :
Le fonctionnement de la machine à déplacement
bidirectionnel est le même que celle à déplacement
unidirectionnel sauf que là, on rajoute d'autres phases relatives aux
déplacements horizontaux. Et ainsi on aura deux positions de travail :
une verticale et une autre horizontale.
3 - Connexions et synoptique de la
machine :
La partie commande de la machine ne change pratiquement pas
par rapport à la première machine. La seule différence
réside dans la présence d'un autre codeur lié aux
déplacements horizontaux et la présence de nouvelles phases dans
les cycles de travail de l'automate
Fig. 23 : Schéma de transmission de
données de la machine
à déplacement
bidirectionnel
Synopti que du foncti onnement de la machine
:
De mrme après l'initialisation de la machine,
l'automate attend les ordres de l'ordinateur pour déplacer le chariot.
L'ordinateur envoie premièrement un ordre de déplacement vertical
vers la position de
la boite voulue, ensuite un autre ordre vers
la position horizontale de la boite voulue
puis un ordre de sortie de la boite. Une fois la boite bien sorti, il
envoie encore un ordre de déplacement vers la position de travail
horizontale, ensuite un autre ordre de déplacement vers la position de
travail verticale, puis une ouverture de la porte de la machine. Après
la récupération des pièces contenues dans la boite
apportée et la fermeture manuelle de la porte, l'ordinateur envoie pour
une troisième fois un ordre de déplacement jusqu'à la
position verticale du plateau puis un pour rendre la boite à sa position
initiale et finalement un dernier ordre pour faire entrer la boite à sa
place.
Ordre de déplacement vertical vers
la
position de la boite
Phase 1
Ordre de déplacement horizontal vers
la
position de la boite
Phase 2
Ordre de sortie de la boite
Phase 3
Phase 4
Ordre de déplacement horizontal vers
la
position de travail horizontale
Phase 5
Ordre de déplacement vertical vers
la
position de travail verticale
Phase 6
Ordre d'ouverture de la porte
Phase 7
Fermeture manuelle de la porte
Phase 8
Ordre de déplacement vertical vers la position
verticale initiale du plateau
Phase 9
Ordre de déplacement horizontal vers
la
position initiale du plateau
Ordre d'entrée de la boite
Phase 10
Rebouclage
Fig. 24 : Phases d'un cycle de fonctionnement
de la
machine à déplacement bidirectionnel
4 - Description technique détaillée de
la machine :
- Emplacement des capteurs sur la
machine :
Fig. 25 : Emplacement des capteurs
sur la machine
à déplacement bidirectionnel
- Entrées de la machine et leurs
équivalents dans le registre « M » de l'automate
:
X0 (M5) : Fin de course verticale niveau zéro.
X26 (M22) : Fin de course horizontale niveau zéro.
X1 (M6) : Fin de sortie du chariot.
X2 (M7) : Fin d'entrée du chariot.
X3 (M8) : Présence d'un plateau sur le côté
gauche de la
table.
X4 (M9) : Présence d'un plateau au centre de la table.
X5 (M10) : Sécurité haut.
X6 (M11) : Sécurité bas.
X27 (M23) : Sécurité droite.
X20 (M24) : Sécurité gauche.
X7 (M17) : Bouton de mise en marche.
X30 (M 18) : Bouton d'arrrt d'urgence.
X31 (M19) : Photocellules (*) détection
plateaux mal placés.
X32 (M 13) : Commande manuelle déplacement vers le
haut.
X33 (M 14) : Commande manuelle déplacement vers le
bas.
X34 (M 15) : Commande manuelle entrée de la
rangée.
X35 (M 16) : Commande manuelle sortie de la rangée.
X21 (M25) : Commande manuel le déplacement vers la
droite.
X22 (M26) : Commande manuelle déplacement vers
la
gauche.
X23 (M31) : Commande manuelle d'ouverture de la porte.
X36 (**) : Commande manuel le fermeture de la
porte.
X25 (M29) : Fin de course d'ouverture de la porte.
X24 (M28) : Contact de détection de fermeture de la
porte.
(*) : L'entrée X3 1 est une entrée dans
laquelle sont branchées toutes les photocellules de détection des
boites mal placées qu'elles soient horizontales ou verticales. Ça
ne veut en AUCUN cas dire qu'une seule photocellule qui est branchée
à l'automate.
(* *) : L'entrée de commande manuelle de fermeture de
la porte n'a pas son équivalent dans les registres « M » car
la fermeture de la porte ne peut se faire que manuellement et NON à
partir de l'ordinateur.
- Sorties de l'automate :
Y1 : Déplacement vers le haut.
Y2 : Déplacement vers le bas.
Y3 : Ralenti vertical.
Y20 : Entrée de la boite.
Y21 : Sortie de la boite.
Y22 : Remise à zéro du compteur vertical.
Y23 : Alarme.
Y24 : Déplacement vers la droite.
Y25 : Déplacement vers la gauche.
Y26 : Remise à zéro du compteur horizontal
Y27 : Ralenti horizontal
Y30 : Ouverture de la porte
Y31 : Fermeture de la porte
- Bits des ordres de l'ordinateur :
M0 : Déplacement vers le haut.
M1 : Déplacement vers le bas.
M2 : Déclenchement du ralenti vertical.
M3 : Sortie de la boite.
M4 : Entrée de la boite.
M20 : Déplacement vers la droite.
M21 : Dépl acement vers la gauche.
M27 : Déclenchement du ralenti horizontal
M30 : Ouverture de la porte.
M40 : Bit de détection du cycle en cours.
5 - Grafcet capteurs/actionneurs :
Fig. 26 : Grafcet détaillé de la machine
à déplacement bidirectionnel
Rapport de stage de formation
6 - Application Visual Basic :
Fenêtre de l'application :
Fig. 27 : Application Visual Basic de la
machine
à déplacement vector iel
Algorithme :
Phase = 0 : Phase repos
Phase = 1 : Phase déplacement vertical allée
Phase = 2 : Phase dépl acement horizontal allée
Phase = 3 : Phase sortie de la rangée
Phase = 4 : Phase dépl acement horizontal vers poste de
travail
Phase = 5 : Phase déplacement vertical vers position de
travail
Phase = 51 : Phase d'ouverture de la porte afin de
récupérer les
pièces voul ues
Phase = 6 : Phase déplacement horizontal allée
Phase = 7 : Phase déplacement vertical allée
Phase = 8 : Phase entrée de la rangée
Phase = 9,10 : Phases exécutées si lors de
l'initialisation de la machine, il y avait un plateau sur le chariot. Elles
font le même travail que les Phases 4 et 5 (déplacement vers la
position du travail et attente de la lecture de l'emplacement du chariot)
Phase = 101 : Phase d'ouverture de la porte correspondante
aux
phases 9 et 10.
X_Départ, Y_Départ : variables
contenant les positions respectivement horizontale et
verticale de
départ de chaque mouvement.
Pos_Actu_X, Pos_Actu_Y :
Variables contenant l es positions respectivement horizontale
et
verticale actuel les du chariot donnée en permanence par les
codeurs.
X_Arrivée, Y_Arrivée : Variables
contenant les positions d'arrivée respectivement
horizontale et
verticale du chariot.
D_AccRlt_X, D_AccRlt_Y : variables
contenant les valeurs des distances d'accélération et
de
ralentissement.
Pre_Pos_X, Pre_Pos_Y : variables contenant
les valeurs de l'incertitude du positionnement
du chariot.
Répéter
Si M18 = 1 Et Phase <> 0 Alors
M0 = 0
M1 = 0
M2 = 0
M3 = 0
M4 = 0
M20 = 0
M21 = 0 M27 = 0 M30 = 0
Répéter
Message « Attention ! Bouton d'arrêt d'urgence
enfoncé ! Désactiver le pour continuer »
Jusqu'à M18 = 0
Y_Départ = Pos_Actu_Y X_Départ = Pos_Actu_X
Fin Si
Si Phase = 1 Alors
Si (Abs(Pos_Actu_Y - Y_Arrivée) <= D_AccRlnt_Y) Ou
(Abs(PosActuY - YDépart) <= DAccRlntY) Alors
M2 = 1
Si non
M2 = 0
Fin Si
Si (PosActuY > YArrivée + PrePosY) Alors
M0 = 0 M1 = 1
Fin Si
Si (Pos_Actu_Y < Y_Arrivée - Pre_Pos_Y) Alors
M1 = 0 M0 = 1
Fin Si
Si (Abs(PosActuY - YArrivée) <= PrePosY) Alors
M0 = 0 M1 = 0
Fin Si
Si stabilité pendant 2 secondes Alors
Phase = 2
M0 = 0 M1 = 0
Fin Si
Fin Si
Si Phase = 2 Alors
Si (Abs(Pos_Actu_X - X_Arrivée) <= D_AccRlnt_X) Ou
(Abs(Pos_Actu_X - X_Départ) <= D_AccRlnt_X) Alors M27 = 1
Si non
M27 = 0
Fin Si
Si (Pos_Actu_X > X_Arrivée + Pre_Pos_X) Alors M21 =
0
M20 = 1
Fin Si
Si (Pos_Actu_X < X_Arrivée - Pre_Pos_X) Alors
M20 = 0
M21 = 1
Fin Si
Si (Abs(Pos_Actu_X - X_Arrivée) <= Pre_Pos_X)
Alors
M20 = 0
M21 = 0
Fin Si
Si stabilité pendant 2 secondes Alors
Phase = 3
M20 = 0
M21 = 0
Fin Si
Fin Si
Si Phase = 3 Alors
Si M6 = 0 Alors
M3 = 1
Si non
M3 = 0
Phase = 4
Fin Si
Fin Si
Si Phase = 4 Alors
Si (Abs(Pos_Actu_X - X_Travail) <= D_AccRlnt_X) Ou
(Abs(Pos_Actu_X - X_Travail) <= D_AccRlnt_X) Alors
M27 = 1
Si non
M27 = 0
Fin Si
Si (X_Travail - Pre_Pos_X > Pos_Actu_X) Alors
M20 = 0
M21 = 1
Fin Si
Si (X_Travail + Pre_Pos_X < Pos_Actu_X) Alors M21 = 0
M20 = 1
Fin Si
Si (Abs(Pos_Actu_X - X_Travail) <= Pre_Pos_X) Alors
M20 = 0
M21 = 0
Fin Si
Si stabi lité pendant deux secondes Alors
Phase = 5
M20 = 0
M21 = 0
Fin Si
Fin Si
Si Phase = 5 Alors
Si (Abs(Pos_Actu_Y - Y_Travail) <= D_AccRlnt_Y) Ou
(Abs(PosActuY - YTravail) <= DAccRlntY) Alors
M2 = 1
Si non
M2 = 0
Fin Si
Si (PosActuY > YTravail + PrePosY) Alors M0 = 0
M1 = 1
Fin Si
Si (Pos_Actu_Y < Y_Travail - Pre_Pos_Y) Alors M1 = 0
M0 = 1
Fin Si
Si (Abs(PosActuY - YTravail) <= PrePosY) Alors
M0 = 0 M1 = 0
Fin Si
Si stabilité pendant 2 secondes Alors Phase = 51
M40 = 0
M0 = 0
M1 = 0
Fin Si
Fin Si
Si Phase = 51 Alors
Si M29 = 0 Alors M30 = 1 Si non
M30 = 0
Message « Prendre la pièce X et Fermer la porte de
la machine »
Si M28 = 0 Alors
Répéter
Message « La porte de la machine doit être
fermée ! »
Jusqu'à M28 = 1
Fin Si
M40 = 1 Phase = 6
Fin Si
Fin Si
Si Phase = 6 Alors
Si (Abs(PosActuX - XArrivée) <= DAccRlntX) Ou
(Abs(Pos_Actu_X - X_Travail) <= D_AccRlnt_X) Alors
M27 = 1
Si non
M27 = 0
Fin Si
Si (Pos_Actu_X > X_Arrivée + Pre_Pos_X) Alors
M21 = 0 M20 = 1
Fin Si
Si (PosActuX < XArrivée - PrePosX) Alors
M20 = 0
M21 = 1
Fin Si
Si (Abs(Pos_Actu_X - X_Arrivée) <= Pre_Pos_X)
Alors
M20 = 0
M21 = 0
Fin Si
Si stabilité pendant 2 secondes Alors
Phase = 7
M20 = 0
M21 = 0
Fin Si
Fin Si
Si Phase = 7 Alors
Si (Abs(Pos_Actu_Y - Y_Arrivée) <= D_AccRlnt_Y) Ou
(Abs(Pos_Actu_Y - Y_Travail) <= D_AccRlnt_Y) Alors
M2 = 1
Si non
M2 = 0
Fin Si
Si (Pos_Actu_Y > Y_Arrivée + Pre_Pos_Y) Alors
M0 = 0 M1 = 1
Fin Si
Si (Pos_Actu_Y < Y_Arrivée - Pre_Pos_Y) Alors
M1 = 0 M0 = 1
Fin Si
Si (Abs(Pos_Actu_Y - Y_Arrivée) <= Pre_Pos_Y)
Alors
M0 = 0
M1 = 0
Fin Si
Si stabilité pendant 2 secondes Alors
Phase = 8
M0 = 0
M1 = 0
Fin Si
Fin Si
Si Phase = 8 Alors
Si M7 = 0 Alors
M4 = 1
Si non
M4 = 0 M40 = 0 Phase = 0
Fin Si
Fin Si
Si Phase = 9 Alors
Si (Abs(Pos_Actu_Y - Y_Travail) <= D_AccRlnt_Y) Ou
(Abs(Pos_Actu_Y - 0) <= D_AccRlnt_Y) Alors
M2 = 1
Si non
M2 = 0
Si (Y_Travail - Pre_Pos_Y > Pos_Actu_Y) Alors M1 = 0
M0 = 1
Fin Si
Si (Y_Travail + Pre_Pos_Y < Pos_Actu_Y) Alors M0 = 0
M1 = 1
Fin Si
Si (Abs(Pos_Actu_Y - Y_Travail) <= Pre_Pos_Y) Alors
M0 = 0 M1 = 0
Fin Si
Si stabilité pendant 2 secondes Alors
Phase = 10
M0 = 0 M1 = 0
Fin Si
Fin Si
Si Phase = 10 Alors
Si (Abs(PosActuX - XTravail) <= DAccRlntX) Ou (Abs(Pos_Actu_X
- 0) <= D_AccRlnt_X) Alors
M27 = 1
Si non
M27 = 0
Fin Si
Si (X_Travail - Pre_Pos_X > Pos_Actu_X) Alors
M20 = 0
M21 = 1
Fin Si
Si (XTravail + PrePosX < PosActuX) Alors M21 = 0
M20 = 1
Fin Si
Si (Abs(Pos_Actu_X - X_Travail) <= Pre_Pos_X) Alors
M21 = 0 M20 = 0
Fin Si
Si stabilité pendant 2 secondes Alors
M20 = 0
M21 = 0 Phase = 101
Fin Si
Si Phase = 101 Alors
Si M29 = 0 Alors M30 = 1
Si non
M30 = 0
Message « Boite présente stir le chariot ! Entrer
les positions verticale et horizontale de la boite »
Lire les positions
Si M28 = 0 Alors
Répéter
Message « La porte de la machine doit être
fermée ! »
Jusqu'à M28 = 1
Fin Si
Phase = 6
Fin Si
Fin Si
Jusqu'à Arrêt de la machine
ors de ma période de stage, les machines sur lesquel
les j e travai llais étaient encore en phase de conception, ce qui
justifie l'absence de dessins d'ensemble de leurs constituants ainsi que leurs
architectures.
Il faut dire que le grand gain pour l'entreprise,
n'était pas l'automatisation de deux machines pouvant être
vendues, la première à 20 millions de centimes et la
deuxième à 35 millions (si on attei nt 10 étages avec un
poids de 200 Kg par étage à titre d'exemple pour la machine
à déplacement unidirectionnel ou 20 Kg par case, 15 cases par
rangées pour la machine à déplacement vectoriel) et qui
ont été déjà commandées aux nombre de trois
jusqu'à la fin de la durée de mon stage. Le grand gain
était de savoir comment utiliser des nouveaux automates qu'on vient
d'acheter et qu'on jamais utilisé au sein l'entreprise, notamment
l'automate Delta DVP 12-SA mais surtout surtout
la commande de cet automate par ordinateur, chose j ugée la
bête noire des automaticiens d'après le patron de l'entreprise
(expert en automatisme avec plus de 25 ans d'expérience en
industrie).
Il faut savoir aussi que sans la présence du stagiaire
Ensamien, ce travail sera très difficilement achevé ou, au moins,
pas dans une telle durée. Car à titre d'exemple, pour commander
une simple carte électronique par ordinateur, il leur a fallut 6 mois de
travail pour la simple raison que ni l'automaticien (le patron) ni
l'informaticien (programmeur en Visual Basic) ne comprend se qui se passe chez
l'autre (l'automate et l'ordinateur n'ont pas la mrme base de temps), ce qui
rendait la communication très floue alors que maintenant les deux
rapports des machines 10 fois plus compliquées que la carte
électronique, un tutorial de la commande par Visual Basic et un autre
tutorial du logiciel de programmation de l'automate sont désormais entre
les mains de l'entreprise. Ceci n'est pas d€ finalement à mes
compétences personnelles, car de base l'automatisme n'est pas le domaine
où je suis vraiment le maître des maîtres mais c'est d€
pl utôt à la formation Arts et Métiers qui vise à
former des i ngénieurs aptes à s'adapter à
«toutes» les situations nouvelles.
Plus que trois mois pour le Projet de Fin d'Etudes tant
attendu, le statut étudiant à l'ENSAM touche bientôt
à sa fin pour sorti r vers une industrie marocaine où
règne encore, les entreprises familiales et les expressions genre :
« Recrutons celui là, c'est le cousin d'Ahmed ».
Annexes
I - Fonctions de l'application Visual
Basic
1 - Lecture du compteur
Code
Public Sub tComptage()
'Procedure de lecture du compteur On Error Resume Next
Dim Buffer$
Dim Comptage As String
MSComm2.Output = Chr$(2) + "0001" + Chr$(3) Buffer$ =
MSComm2.Input
Comptage = Mid(Buffer$, 7, Len(Buffer$) - 8) Compteur =
Val(Mid(Buffer$, 7, Len(Buffer$) - 8))
'La valeur lue est stockée dans la variable «
Compteur » MSComm2.InputLen = 0
End Sub
Commentaires
Ici le composant MSComm correspondant à la communication
avec le compteur est appelé MSComm2.
La valeur récupérée à parti r du
compteur est stockée dans une variable entière globale
appelée Compteur.
Pour une lecture permanente de la valeur du compteur, il suffit
d'appeler cette procédure en permanence dans un Timer.
2 - Module nécessaie aux opérations
d'Ecriture/Lecture dans l'automate
Pour pouvoir lire et écrire dans l'automate à
partir d'une application Visual Basic, il faut avoir dans le projet, un module
contenant le code suivant :
Option Explicit
Public Function GetCoil DevAddr(ByVal Coil_name As String) As
String
Dim DevAddr$
- Les registres S sont repóés
à partir de l'adresse 0000 en hexadéci mal
- Les registres X sont repérés
à partir de l'adresse 0400 en hexadéci mal
- Les registres V sont repérés
à partir de l'adresse 0500 en hexadéci mal
- Les registres M sont repérés
à partir de l'adresse 0800 en hexadéci mal
Pour pouvoir communiquer avec d'autres bits des registres
S,X,V,M il suffit d'ajouter au code
Case "Regitrenuméro_du_bit"
DevAddr$="La_valeur_de_déprart_du_registre + Num&o du
bit en hexadécimal"
Exemple 1 : Ajout de M34
Case "M34"
DevAddr$= "0822" Exemple 2 : Ajout de Y27
Case "Y27"
DevAddr$= "051 B"
Select Case Coil name
Case "S0"
DevAddr$ = "0000" Case "S1"
DevAddr$ = "0001" Case "S10"
DevAddr$ = "000A" Case "S11"
DevAddr$ = "000B" Case "S16"
DevAddr$ = "0010"
Case "X0"
DevAddr$ = "0400" Case "X1"
DevAddr$ = "0401" Case "X10" DevAddr$ = "040A" Case "X11"
DevAddr$ = "040B" Case "X16" DevAddr$ = "0410"
Case "Y0"
DevAddr$ = "0500" Case "Y1"
DevAddr$ = "0501" Case "Y10"
DevAddr$ = "050A" Case "Y11"
DevAddr$ = "050B" Case "Y16"
DevAddr$ = "0510"
Case "M 0"
DevAddr$ = "0800" Case "M 1"
DevAddr$ = "0801" Case "M 10"
DevAddr$ = "080A" Case "M 11"
DevAddr$ = "080B" Case "M 16"
DevAddr$ = "0810"
End Select
GetCoilDevAddr = DevAddr$ End Function
Public Function Check_LRC(ByVal Check_data As String)
Dim Dummy$(), Dummy_data, Index, i As Integer
Dim result _lrc$ Index = 1
Dummy_data = 0 Erase Dummy$
ReDim Dummy$(1 To Int(Len(Check_data) / 2 - 0.5) + 1)
Do
Dummy$(Index) = Left(Check_data$, 2) Check_data$ = M
id(Check_data$, 3) Index = Index + 1
Loop Until Len(Check_data$) = 0
For i = 1 To Index - 1
Dummy_data = Dummy_data + Val ("&H" + Dummy$(i)) Next i
result _lrc$ = Hex(256 - (Dummy_data M od 256)) result_lrc$ =
IIf(L en (result_l rc$) = 1, "0" & result_l rc$,
result_lrc$)
Check_LRC = I If(Len(result_lrc$) > 2, Right(result_lrc$,
2),
result_lrc$)
End Function
Public Function Send_To_PLC(ByVal objMSCOMM As MSComm, ByVal
send_string$) As String
send_stri ng$ = send_stri ng$ + Check_L RC(send_stri ng$)
send_string$ = Chr(& H3A) + send_string$ + Chr(& HD)
+
Chr(& HA)
If objMSCOMM.PortOpen = False Then objMSCOMM.PortOpen = True
obj MSCOMM.Output = send_stri ng$
Send_To_PLC = send_string$ End Function
Public Function Receive_to_PLC(ByVal objMSCOMM As MSComm,
Optional Delay_time = 20000) As String
Dim Request_times As Long, Buffer$
Do Until Request _times > Delay_time
If objMSCOMM.InBufferCount <> 0 Then Buffer$ = Buffer$ +
objMSCOMM.Input
Request_times = Request _ti mes + 1 DoEvents
If Left(Buffer$, 1) = Chr(& H3A) And InStr(Buffer$,
vbCrLf) Then
Receive toPLC = Buffer$
End Function
3 - Lecture d'un bit d'un registre de
l'automate
Code :
Public Function Lecture(M_Register As String) As Boolean
'Fonction de lecture d'un bit d'un registre quelconque.
Résultat => 0 ou 1
string$, sDevAddr$, sSlaveAddr$,
On Error Resume Next Dim DevName$, send
sPoint$, Receive_String$
Dim nSlaveaddr As Integer, nNumPoints As Integer Dim Bin_Index
As Integer, Data_String$, bONOFF As Boolean, nCheckData As Integer
nSlaveaddr = 1
sSlaveAddr$ = String(2 - Len(Hex(nSlaveaddr)), "0") +
Hex(nSlaveaddr)
nNumPoints = 8
DevName$ = M Register
sDevAddr$ = GetCoilDevAddr(DevName$)
send_string$)
Receive_Stri ng$ = Receive_to_PLC(Me.MSComm1)
If Receive_String$ = "" Then Exit Function
End If
nCheckData = CInt("& H" + Mid(Receive_String$, 8, 2 * Val
("& H" + Mid(Receive_String$, 6, 2))))
bONOFF = nCheckData Mod (2)
Select Case bONOFF Case False
Lecture = False
Case True
Lecture = True End Select
End Function Commentaires
Ici le composant MSComm correspondant à la communication
avec l'automate est appelé MSComm1.
nSlaveaddr est une variable entière contenant
l'adresse de l'esclave (voir Paragraphe 2 du Chapitre IV du Tutorial WPLSoft
2.08 : Exemple de programme communication entre automate esclave et PC avec
Visual Basic 6 sur le port RS-485)
La fonction Lecture retourne la valeur d'un bit d'un
registre à l'intérieur de l'automate
M_Register est une chaîne de caractère
contenant le nom du registre et le numéro du bit à lire.
Exemple : Lecture("M0") va retourner
la valeur du bit 0 du
registre M.
4 - Ecrittire dans tin bit d'tin registre de
l'atitomate
Code
Public Sub Forçage(M_Register As String, OnOff As
Boolean)
'Procédure de forçage d'un bit de registre
quelconque à une valeur booléenne : 0 ou 1
On Error Resume Next
Dim DevName$, send_string$, sDevAddr$, sSlaveAddr$,
sPointStatus$, Receive_Stri ng$
Dim nSlaveaddr As Integer, nNumPoi nts As Integer
nSlaveaddr = 1
sSlaveAddr$ = String(2 - Len(Hex(nSlaveaddr)), "0") +
Hex(nSlaveaddr)
If OnOff = True Then sPoi ntStatus$ = "FF00" Else
sPoi ntStatus$ = "0000" End If
DevName$ = M_Register
sDevAddr$ = GetCoilDevAddr(DevName$)
send_string$ = sSlaveAddr$ + "05" + sDevAddr$ +
sPointStatus$
send_string$ = Send_To_PLC(Me.MSComm1,
send_string$)
Receive_Stri ng$ = Receive_to_PLC(Me.MSComm1)
End Sub Commentaires
Ici le composant MSComm correspondant à la communication
avec l'automate est appelé MSComm1.
nSlaveaddr est une variable entière contenant
l'adresse de l'esclave (voir Paragraphe 2 du Chapitre IV du Tutorial WPLSoft
2.08 : Exemple de programme communication entre automate esclave et PC avec
Visual Basic 6 sur le port RS-485)
M_Register est une chaîne de caractère
contenant le nom du registre et le numéro du bit à forcer et
OnOff est la valeur du forçage (variable booléenne 0 ou
1)
Exemple : Call Forçage("M5",1) va forcer
le bit 5 du registre M à la valeur
1.
II - Langage de programmation de l'automate
- Tutorial
WPLSoft 2.08
1 - Introduction
WPLSoft 2.08 est le logiciel de programmation des automates
Delta ES/EX/SS Series, EP/SA/SX/SC Series et EH
Series. Ce tutorial a pour objectif de montrer comment créer
des programmes pour des systèmes commandés par les automates
précités et simuler leur fonctionnement. Il faut noter que les
informations existantes dans ce tutorial n'englobent en aucun cas toutes les
fonctionnalités données par le logiciel, néanmoins elles
sont largement suffisantes pour créer une application qui tourne sans
aucune anomalie.
2 - Création d'un programme sur WPLSoft
2.08
1 - Création d'un nouveau programme.
- Dans le menu File cliquer sur
New.
Une fenrtre de sélection du type de l'automate
utilisé s'ouvre.
- Choisir un titre de programme dans Program Title
;
- Sélectionner l'automate utilisé dans PLC
Type (Dans le cas des automates DVP - 12SA, choisir
EP/SA/SX/SC Series);
- Entrer le nom qu'aura votre fichier une fois enregistré
sur disque dur dans File Name
- Cliquer sur OK.
Fenêtre du programme Ladder
Fenêtre des instructions
La fenêtre du programme Ladder est ouverte ainsi que la
fenêtre des instructions en arrière.
- Pour enregistrer le programme cliquer sur Save
dans le menu File puis spécifier le
répertoire d'enregistrement.
2 - Elaboration d'un programme Ladder su WPLSoft 2.08.
Supposons que l'on veut créer le programme correspondant
au Grafcet suivant sur WPLSoft 2.08
S2
S0
S1
S3
Le programme Ladder des automates Delta ES/EX/SS Series,
EP/SA/SX/SC Series et EH Series commence par un contact ouvert lié au
bit M 1002 de l'automate qui se met à 1 une
seule fois après le démarrage du programme de
l'automate. Une fois le bit M 1002 est à 1, la
première étape du programme est activée.
Pour insérer un contact ouvert dans le programme
Ladder,
cliquer dans la barre d'outil Ladder Diagram,
sur l'icône ou sur la touche
F1.
(Si la barre d'outil Ladder Diagram n'est pas
visible, dans le menu View, pointer sur Toolbars
puis sur Ladder Diagram.)
Une fenêtre de séI ection de contact est ouverte.
Dans Device Name, pointer sur M, et dans
Device Number entrer 1002. On peut ajouter un
com mentai re sur I e contact qu'on veut insérer en le tapant dans
Comment.
CI iquer sur OK pour valider l'insertion du
contact dans le
Ladder.
A cette étape on doit avoi r I a suivante :
Maintenant pour insérer l'étape à partir de
laquelle le programme va commencer cI iquer sur l'icône ou sur I a touche
F7.
Dans Device Name, sélectionner
S, dans Device Number entrer 0,
dans Comment, taper Etape de démarrage
du programme (Vous pouvez aussi ajouter un commentaire après
avoir inséré les contacts par sélection du contact
concerné puis un clic Bouton droit de la souris sur ce
même contact puis clic sur Edit Device Comments).
Par défaut les commentaires ne sont pas affichés.
Pour les
afficher cliquer sur l'icône ou aller dans le menu
View puis cliquer sur
Show Comments.
Jusqu'à maintenant, ce qu'on a spécifié
au programme c'est que une fois le bit M 1002 est à
1, l'étape S0 est activée.
Là on doit dire au programme que une fois l'étape S0
est activée, il doit tester l'entrée X0
pour passer à l'étape 1.
Pour ce faire, cliquer sur une nouvelle ligne, le curseur (le
rectangle en bleu) va se positionner quelque part au dessous de M
1002.
( *1 ) Cliquer sur l'icône ou sur la
touche F5 avec les
paramètres suivants :
Device Name : S
Device Number : 0
Pour le commentaire de S0, il a été
déjà spécifié et il n'est pas nécessai re de
le réécri re.
Cliquer ensuite sur l'icône pour i nsérer le contact
ouvert X0.
Taper en suite, sans déplacer le curseur,
SET S1
Répéter l'étape ( * 1 )
avec les paramètres suivants :
Device Name : S
Device Number : 1
Comment : Activation de la Sortie Y0
Taper, encore une fois sans déplacer le curseur,
OUT Y0 ou cliquer sur avec
Device Name : Y
Device Number : 0
Comment : Sortie Y0
Cliquer sur une nouvelle ligne puis sur la touche F5 :
Dev Name : S
Dev Num : 2
Taper OUT Y1
Sur le Grafcet pour passer l'étape S1, on peu passer
travers M1 vers S2, ou à travers M2 vers S3 ou bien les deux.
Donc pour programmer ceci sur le Ladder, on fera comme suit :
Se positionner sur la case adjacente à S1 (voir le curseur
sur la figure ci-dessous) et cliquer sur l'icône ou sur la touche
F9.
Se placer sur la ligne juste en dessous et répéter
l'étape ( *1 ) avec les paramètres suivants :
Device Name : M Device Number : 1
Valider puis taper SET S2
Se placer encore une autre fois sur la ligne juste en dessous et
répéter l'étape ( * 1 ) avec les
paramètres suivants :
Devic Name : M Device Number : 2
Valider et taper SET S3
Ajouter des commentaires aux contacts et aux étapes
suivants :
M 1 : Condition d'activation de S2
M 2 : Condition d'activation de S3
S2 : Activation de la sortie Y1
S3 : Activation de la sortie Y2
Faire un retour au début d'une nouvelle ligne, cliquer sur
la touche F5, choisir S3, valider.
Taper OUT Y1 et ajouter à la sortie
Y1 le commentaire Sortie
Y1
Se placer dans la case adjacente à S2 et
cliquer sur la touche F9 Insérer un contact
fermé par un clic sur la touche F2 puis
choisir M1
Taper ensuite SET S0
Placer le curseur encore une fois au début d'une nouvelle
ligne et cliquer sur la touche F5 avec, comme
paramètres d'entrée S3
Taper ensuite OUT Y2
Ajouter un commentaire à la sortie Y1
Se placer sur la case adjacente à l'étape
S3 et cliquer sur la
touche F9
Se placer sur la case juste en dessous et cliquer sur la touche
F2 pour i nsérer le contact fermé
M2
Taper ensuite SET S0
A cette phase, le programme principal est terminé, il
faut maintenant clôturer le programme. Pour ce faire, on va se placer
encore une fois à la case du contact fermé M2 puis
cliquer sur la touche F9.
Placer le curseur ensuite à la case juste en dessous et
taper RET Finalement placer le curseur à la ligne en
dessous et taper END
(Voir figure)
.
3 - Chargement, exécution et simulation
du programme 1 - Communication avec l'automate
Pour pouvoir communiquer avec l'automate, une vérification
des paramètres de communication est nécessaire.
Dans le menu Option, cliquer sur
Communication Settings.
Dans COM Port, spécifier le port COM de
l'ordinateur sur lequel l'automate est branché.
Dans Station Adress, mettre l'adresse esclave
de l'automate. Si on n'a pas encore changé l'adresse esclave de
l'automate, la valeur par défaut est 1.
Laisser les autres paramètres aux valeurs par
défaut
Pour vérifier la communication avec l'automate, aller
dans le menu Communication et cliquer sur Baud Rate
Auto-Detect l'écran suivant doit s'afficher
Suivi de l'écran :
2 - Chargement du programme dans l 'automate
Avant de charger n'importe quel programme dans l'automate il
est très recommandé de formater l'automate afin d'éviter
les erreurs d'actualisation du programme par la suite.
Dans le menu Communication pointer sur
Format PLC
Memory
Une nouvelle fenrtre s'affiche. Sélectionner
Clear All Program Memory et valider en cliquant sur OK
puis confirmer le formatage de l'automate.
Maintenant la mémoire de l'automate est formatée,
on compile le programme pour le charger.
Dans la barre d'outil PLC, cliquer sur
l'icône pour compiler
le programme
Dans la même barre cliquer sur l'icône pour charger
le
programme dans l'automate.
La fenrtre de transfert s'ouvre, spécifier les
paramètres comme suit puis cliquer sur Execute
Le programme est désormais chargé dans l'automate,
on peut si muler le fonctionnement du système.
3 - Exécution et Simulation du
fonctionnement
Pour simuler l'exécution du programme, cliquer d'abord sur
exécuter , confirmer, puis cliquer sur l'icône Monitoring
.
Le programme maintenant est en cours d'exécution et on
peut voir les étapes et les contacts actifs en vert.
Pour tester le programme, on peut activer manuellement
l'entrée X0 de l'automate et voir ce qui se passe.
Dans le Grafcet du système, les
réceptivités M1 et M2 ne sont
pas des entrées externes mais plutôt des registres internes de
l'automate. Donc pour passer de l'étape S1 à
l'étape S2 ou S3, il va falloir
impérativement forcer M1 ou M2
à 1.
Pour forcer un bit du registre M (dans ce cas
M0 ou M1), aller dans Communication
puis pointer sur Set Device On/Off.
Dans Device Name, taper M1,
puis cocher Set On pour forcer en fait M1
à la valeur 1. Valider en cliquant sur OK et
le programme, touj ours en cours d'exécution, passe à
l'étape S2 et active la sortie Y1.
Pour passe à l'étape S0, il suffit
encore de forcer M1 à 0
Pour tester l'autre passage (de S1 à
S3) on peut, quand l'étape S1 est
active, au lieu de forcer M1 à 1,
forcer M2 à 1 pour avoir
l'activation de l'étape S3.
Pour arrêter la simulation du programme, cliquer encore une
fois su l'icône Monitoring puis sur l'icône
Stop .
4 - Communication à travers le port
RS-485
L'intérrt principal de la communication à
travers le port de communication RS-485 est de pouvoir communiquer entre un
maître et plusieurs esclaves, et ceci à travers une seule sortie
du maître (2 fils) grâce aux adresses des esclaves. Donc si on veut
communiquer entre un ordinateur maître et plusieurs automates par
exemple, chaque automate esclave doit avoir son adresse et, à partir de
l'ordinateur, en jonglant avec les adresses des esclaves, on peut communiquer
avec les différents automates connectés.
1 - Affectation d'une adresse à un automate
esclave
Pour affecter à un automate esclave une adresse, 3 par
exemple, il suffit d'ajouter, à l'entrte de son programme Ladder le code
suivant :
Adresse de l'esclave
Attention !
Une fois une nouvelle adresse de l'automate esclave y est
chargée, la communication entre WPLSoft et l'automate
n'est plus possible (le formatage de l'automate, le chargement de programme, le
forçage de bits« ne sont plus possible) Car l'adresse de l'automate
a changé et il faut impérativement changer les paramètres
de communication de WPLSoft pour pouvoir com muniquer à
nouveau.
Dans le menu Option, cliquer sur
Communication Settings, puis mettre l'adresse de l'esclave qui
y a été chargé dans Station Adress pour
pouvoir com muniquer à nouveau.
2 - Exemple de programme communication entre automate
esclave et PC avec Visual Basic 6 sur le port RS-485
On suppose que l'on a chargé dans l'automate esclave
l'adresse : 3
L'écriture d'un registre dans l'automate peut se faire
par la procédure VB suivante où M_Register le registre
à forcer (exemple "M0") et OnOff, la valeur du
forçage.
Public Sub Forçage(M_Register As String,
OnOff As Boolean)
'Procédure de forçage d'un bit de registre à
une valeur booléenne : 0 ou 1
On Error Resume Next
Dim DevName$, send_string$, sDevAddr$, sSlaveAddr$,
sPointStatus$, Receive_String$
Dim nSlaveaddr As Integer, nNumPoints As
Integer
'Adresse de l'esclave = 3
nSlaveaddr = 3
sSlaveAddr$ = Stri ng (2 - Len (Hex (nSlaveaddr)),
"0") + Hex (nSlaveaddr)
If OnOff = True Then sPointStatus$ = "FF00"
Else
sPointStatus$ = "0000" End If
DevName$ = M_Register
sDevAddr$ = GetCoil DevAddr(DevName$)
send_string$ = sSlaveAddr$ + "05" + sDevAddr$
+
sPointStatus$
send_string$ = Send_To_PLC(M e.M SComm1,
send_string$) Receive_String$ = Receive_to_PLC(M e.M SComm1)
End Sub
5 - Utilisation des extensions des
Entrée/Sorties :
Certaines applications nécessitent un nombre important
d'Entrées/Sorties qui peut rtre supérieur au nombre
d'Entrées/Sorties de l'automate. On utilise alors des extensions
d'Entrées/Sorties qui peuvent avoir un adressage différent. Dans
notre cas, l'automate DV P - 1 2SA, il y a 8
entrées (X0 ~ X7) et 4
sorties (Y0 ~ Y3). Si on ajoute des extensions
Entrées/Sorties à l'automate : la première entrée,
et la première sortie des extensions seront nommées
respectivement X20 et Y20 (voir tableau
ci-dessous).
|
N dans la
carte d'extension
|
N correspondant dans le programme de
l'automate
|
Carte d'extension 8E/8S 1
|
0
|
20
|
1
|
21
|
2
|
22
|
3
|
23
|
|
4
|
24
|
5
|
25
|
6
|
26
|
7
|
27
|
Carte d'extension 8E/8S 2
|
0
|
30
|
1
|
31
|
2
|
32
|
3
|
33
|
4
|
34
|
5
|
35
|
6
|
36
|
7
|
37
|
,,,
|
,,,
|
,,,
|