WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Automatisme d'un magasin de stockage commandé par ordinateur

( Télécharger le fichier original )
par Youssef MELLOUKI
ENSAM-Maroc - Stage Ingénieur 2006
  

Disponible en mode multipage

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

    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

    ,,,

    ,,,

    ,,,






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Ceux qui vivent sont ceux qui luttent"   Victor Hugo