Laboratoires+logistique

Laboratoire - Logistique
Au début du cours, je devais configurer la communication avec les différents réseaux de l'usine pour pouvoir à partir de mon ordinateur, rentrer en communication avec l'automate.



Par la suite, j'ai fait l'installation et la configuration du logiciel CX - programmer selon les paramètres que notre professeur nous a donnés. Ce logiciel sert à faire la programmation de l'automate omron.


 * La gestion des phases** comprend les éléments suivants:
 * le contrôle du niveau du liquide
 * le contrôle de la température du liquide
 * la gestion des alarmes
 * la gestion de la détection des plaques
 * la gestion des échanges (communication) avec le bras manipulateur
 * la gestion des cas d'exception

__Voici la configuration du niveau et de l'alarme de niveau__
Le contrôle du niveau du liquide: ce module s'assure que le niveau d'eau dans le bac est au niveau approprié. Ce niveau est déterminé par l'activation d'un capteur de niveau (ouvert/fermé). Afin d'empêcher les oscillations momentanées du niveau de faire déclancer le système de gestion du niveau de l'eau, nous ajoutons un délai de 3 secondes lorsqu'un changement du niveau est détecté. À l'arrivée montante du niveau, un remplissage additionnel de 3 secondes est réalisé. À la condition descendante du niveau, un délai de 3 secondes est réalisé avant d'entreprendre le remplissage. Dans ce dernier cas, le délai est réamorçable (si l'action de changement du niveau est terminée avant l'arrivée à terme du délai, il ne se produit aucun effet et la valeur du délai est réinitialisée).



__Voici la configuration de la température et de l'alarme de température__
Le contrôle de température du liquide: ce module s'assure que la température du liquide contenu dans le bac demeure constante (32C). Dans un premier temps il faut déterminer la façon de programmer les convertisseurs analogue/numérique (3 sont utilisés). Se référer au manuel technique pour savoir comment programmer la case mémoire spéciale DM6611. Dans le cas de l'automate utilisé (Omron CQM1H), les valeurs inscrites à la case mémoire DM6611 sont lues au démarrage. Il est donc impossible de modifer les paramètres des convertisseurs analogue/numérique en fonctionnement. Il faut prendre note que nous avons une entrée de 4-20 ma qui est convertie en une valeur de 0-5V (1-5V pour être exact). Il faut donc tenir compte de cet écart dans nos calculs (1V pour 0C et 5V pour 100C). Une fois le convertisseur A/N configuré, c'est au tour du module PID de recevoir notre attention. Le manuel de référence technique présente la paramétrisation à effectuer. Il faut se rappeler que le module PID est une instruction spéciale et qu'il faut la sélectionner et la placer dans la mémoire de l'automate (cette restriction de la quantité des instructions spécialisées est causée par la mémoire limitée de l'automate utilisée). Lorsque le PID est correctement configuré (les paramètres PID optimisés font l'objet d'une démarche collaborative à distance avec le cégep de Lévis-Lauzon), il est nécessaire de développer une démarche pour contrôler l'élément chauffant (nous n'avons pas de convertisseur 4-20 ma pour contrôler cet élément chauffant). Une émulation programmée d'une générateur de pulses variables est développée.

Ensuite, nous devons paramétrer notre fonction PID. Pour ce faire, nous devons entrer 9 paramètres indispensables au fonctionnement de notre PID. Donc, dans ma section nommée Initialisation, j'ai fait une partie consacrée à la configuration de mon bloc PID. Nous devons envoyer dans différentes cases de mémoires, chacun des paramètres : La valeur de température que nous devons obtenir est 32 degrés C. Nous devons donc trouver, avec l'OFFSET, à quelle valeur entre 0 et 4095, correspond cette valeur. Voici les calculs pour trouver l'OFFSET : IR232 = Entrée analogique de l'automate pour la température (12 bits = 2 exposant 12 = 4096) 4096 / 5 = 820 (5 pour 5V) 4096 - 820 = 3276 3276 / 100°C = 32.76 pour 1°C 32.76 * 32°C = 1048.32 1048.32 + 820 = 1868.32 1868 en HXD = 74C (consigne pour le PID) J'ai inséré 74C dans le DM100 du paramètre //set value// du PID.
 * 1) Set Value : #708 (HXD) (DM100)
 * 2) Proportionnal : #20 pour la valeur 2 car il fonctionne en 0,10 (DM101)
 * 3) Derivated : #1 (DM102)
 * 4) Integrated : # 0 (DM103)
 * 5) Échantillonage : #10 pour valeur de 1s car il fonctionne en 0,10 (DM104)
 * 6) Opération et filtre : #0 (DM105)
 * 7) Output et Input range : #404 (DM106)
 * 8) Work area (DM107 à DM150)


 * Pulse Wide Modulation**

L'élaboration d'un générateur de pulses à largeur variable peut se créer de plusieurs façons. Une solution retenue, en fonction de nos contraintes est la suivante: Nous utilisons 2 temporisateurs. Le premier sert de référence et est cadencé à 52 secondes. Le deuxième sert à générer la pulse à largeur variable et varie de 0 à 51 secondes (nous avons 1 seconde d'arrêt à chaque cycle de 52 secondes pour nous permettre de vérifier le bon fonctionnement du circuit et permettre une ré-initialisation des temporisateurs). La valeur du cycle de base est obtenue en prenant la valeur du résultat de la sortie du PID, soit 4096, que nous divisons par 8 (en fait, nous obtenons 512, mais la précision du temporisateur est au dixième de seconde). Cette valeur binaire est convertie en format BCD, format nécessaire à la programmation des temporisateurs. Notre générateur à largeur de pulse variable est relativement simple de fonctionnement. La plage d'utilisation (cycle de 52 secondes) est suffisant car le processus est très lent. Le système d'acquisition de données enregistre à un rythme d'un échantillon de température à la seconde. Il est possible d'accéder à nos données en utilisant le serveur Web à l'adresse http://poste2006/suitevoyager. Actuellement, ce service n'est disponible qu'en mode local. Des démarches sont actuellement en cours afin de le rendre accessible via internet.

Dans mon cas, j'utilise la fonction Arithmetic Shift Right (mais d'autre utilise des divisions). À chaque fois que nous utilisons cette fonction, le nombre dans la mémoire est divisé par 2, car il est en binaire.

Prenons le cas ou il faudrait chauffer à fond. Le régulateur sort donc une valeur de 4096, de façon à chauffer à pleine puissance. 4096 @ASR = 2048 2048 @ASR = 1024 1024 @ASR = 512

En entrant cette valeur dans un timer, en se rappelant bien que le timer fonctionne en dixièmes, fixe une valeur de 51,2 secondes, arrondi à 52 secondes pour le timer, dans le cas ou l'élément chauffant doit chauffer à pleine puissance. Cela veut dire que les impulsions sur l'élément chauffant auront au maximum 52 secondes en largeur. C'est un "Duty Cycle" de 100 % La valeur de ce timer est variable, selon la consigne et l'erreur. De ce fais même, le "Duty Cycle" variera aussi.

L'autre timer, la période, aura une valeur fixe de 52 secondes.

En résumé, selon la consigne et l'erreur, nous jouerons sur la largeur des impulsions sur l'élément chauffant, et ce, pendant 52 secondes. Après ces 52 secondes, on recommence.

__**Dans le cas ou l'élément chauffant chauffe à plein puissance**__

4096 @ASR = 2048 2048 @ASR = 1024 1024 @ASR = 512

Donc, le timer pour les impulsions est de 52 secondes.

52 sec. / 52 sec. = D.C. de 100 %



__Gestion des alarmes (Niveau, température, pression, débit)__
La gestion des alarmes consiste à gérer les témoins lumineux des 4 variables suivantes: niveau, température, pression et débit. Si une variable change d'état durant 3 secondes consécutives, le témoin indique la nouvelle situation. Le témoin du niveau de l'eau allume si le bac n'est pas plein, celui de la température, de la pression et du débit si la variable est hors de sa plage de fonctionnement définie. J'ai procédé de la même façon pour le contrôle d'alarme de température, de pression et de débit.

L'alarme de niveau allume lorsque le bac n'est pas plein pendant 3 sec et la lumière éteint lorsque le niveau est correct pendant 3 sec. Nous mettons un délai pour ne pas que les remouds déclenche l'électro-vanne à tout moment. J'ai intégrer cette condition dans mon grafcet et ladder de contrôle de niveau. Le niveau est mesuré à l'aide d'une petite flotte contenant un interrupteur électromagnétique normalement ouvert. Lorsque la flotte monte à un niveau normal, l'interrupteur ferme et lorsque le niveau redescend, l'interrupteur. Le numéro d'entrée de ce contact est 000.05.
 * Niveau**

Dans le cas de la température, il fallait que l'alarme allume lorsque la température est dans un range dépassant de +/- 1°C de 32°C. Comme pour le niveau, la température doit être inférieure à 31°C ou supérieur à 33°C pendant plus de 3 sec. Si la température ne respecte pas une de ces conditions, le timer se reset à zéro. Cette stratégie est valable dans le sens inverse. La température doit être bonne pendant 3 sec pour que la lumière s'éteigne. Pour trouver les valeurs en HXD de mon minimum(31°C) et de mon maximum(33°C), j'ai pris le chiffre binaire correspondant à 32°C (1868) et j'ai soustrait et additionné le chiffre binaire correspondant à 1°C(32.76). Cela ma donné comme minimum 1835 et comme maximum 1900. J'ai du les convertir en HXD pour pouvoir les rentrer dans ma comparaison (1835 = 72B et 1900 = 76C).
 * Température**

La pression fonctionne avec le même principe que la température. Je dois comparer une valeur selon un minimum et un maximum. Dans le cas de la pression le minimum et le maximum est de +/-40% de la pression normal (valeur initiale). La pression normal dans mon cas était de 2670. La valeur initiale de la pression vient de IR233 que je move dans DM1009. 40% de 2670 = 1068 2670 - 1068 = 1602 (642 en HXD) 2670 + 1068 = 3738 (E9A en HXD) 642 dans DM1010 E9A dans DM1011
 * Pression**

Le débit fonctionne également comme la pression et la température. Je dois comparer une valeur initiale à un minimum et un maximum. Le débit aussi doit être comparer selon un minimum et un maximum de +/- 40% du débit normal (valeur initiale). Le débit normal dans mon cas était de 2700. La valeur initiale du débit provient de IR234 que je move dans DM1006 40% de 2700 = 1080 2700 - 1080 = 1620 (654 en HXD) 2700 + 1080 = 3780 (EC4 en HXD) 654 dans DM1007 EC$ dans DM1008
 * Débit**

Ce travail porte sur la communication de ma phase (#4) et de la phase #11 (phase maitresse). La phase #11 doit gérer le bras manipulateur et déplacer les plaques de phase en phase jusqu'à la fin du traitement. Chaque phase doit rentrer en communication avec la phase #11 pour confirmer ou pour interdire l'accès à la phase pour commencer le traitement. Hugo (phase#11) a réalisé un petit tableau pour nous aider à concevoir un grafcet de communication pour gérer les informations envoyé et les informations reçues.
 * Communication**

__Tableau explicatif__

 * DM200 || 0 || Phase X pas prête ||
 * DM200 || 65525 || Phase X prête ||
 * DM201 || 0 || --Erreur-- ||
 * DM201 || 65535 || Bras prêt ||
 * DM202 || 0 || Trop long (>10 sec) ||
 * DM202 || 65535 || Débit, pression correct ||
 * DM203 || 0 || Plaque absente ||
 * DM203 || 65535 || Plaque présente ||
 * DM204 || 0 || Traitement pas encore terminé ||
 * DM204 || 65535 || Traitement terminé ||
 * Voici le fonctionnement de la communication en général :**

Premièrement, j'ai créé une bit intermédiaire qui se nomme (Prêt 1) qui consiste à dire à la phase #11 que je suis prêt à recevoir une plaque si les conditions suivantes sont prêtes: Si mon prêt 1 est activé j'écris 1 dans DM200 sinon J'écris 0 dans DM200 avec la fonction MOVE
 * 1) Niveau d'eau correct
 * 2) Température correct ( environ 32°C )
 * 3) Plaque non-présente

Par la suite, la phase #11 va remplir DM201 de 1 pour me dire que le bras est prêt à déposer une plaque dans mon bac. Pour pouvoir lire le DM201 doit doit faire une comparaison dans mon ladder.

Ensuite, je dois démarrer ma pompe et lorsque la pression et le débit sont correct, je dois écrire dans le DM 202 de la phase #11 (grâce à la fonction send) des 1 (65535). Lorsque la phase #11 reçoit l'information, elle va descendre une plaque dans mon bac. Cette opération doit durer moins de 10 sec car si cela prends plus de 10 sec la phase #11 va faire un Timeout et va passer à la phase suivante et nous devons attendre le prochain cycle du traitement. Si la plaque est présente, la phase #11 va lire 1 dans le DM203 de ma phase. Si il n'y a pas de plaque pour une raison inconnu, la phase #11 doit lire des 0 et le bras revient au début.

Lorsque la plaque est déposé, je pars un timer de 10 sec pour la durée du traitement. Lorsque le traitement est terminé, Je dois écrire des 1 dans DM204 de la phase #11. Par la suite, le bras reprends la plaque et va la porter dans la phase suivante. Lorsque le bras reprend la plaque, la phase #11 va lire la valeur du DM203 et si ce n'est que des 0, la plaque n'est plu. Mais, si c'est encore des 1, c'est que la plaque est toujours là alors le bras retourne au début.



Acquisition de données pour mes paramètres PID
J'ai fait deux acquisitions de données pour trouver les paramètres PI de mon contrôle de température. J'ai fais un acquisition à 10% (5.2 secondes de chauffage) et l'autre à 20% (10.4 secondes de chauffages). Pour trouver les paramètres, j'ai pris la courbe entre les données de 10% et 20%. Cela ma données une différence de température entre 35 et 45.5 degré Celcius. Pour faire mon acquisition de donnée, j'ai changé le set value de mon timer 4 de température pour 10% et par la suite 20%. Pour l'instant, les résultats obtenus ne sont pas concluant. J'espère pouvoir vérifier mes données d'ici la fin du cégep. Kp = 5.37 Ti = 35 J'ai trouvé les résultat selon la méthode de Ziegler et Nichols (méthode 2) Durant la session, je pensais que le Cégep de Lévis aurait trouvé les résultats de ma courbe, mais le Cégep nous a abandonné et cela ma ralentit pour trouver les paramètres PI de mon contrôle de température.