Projet E=M6 Partie programmeurs

20
FALLET Laurent HURAY Guillaume MALLET Grégory Projet E=M6 Partie programmeurs Juin 2003

Transcript of Projet E=M6 Partie programmeurs

Page 1: Projet E=M6 Partie programmeurs

FALLET Laurent HURAY Guillaume MALLET Grégory

Projet E=M6 Partie programmeurs

Juin 2003

Page 2: Projet E=M6 Partie programmeurs

Objectifs Ami(s) programmeur(s), bonjour. Si tu lis ce rapport, c’est probablement que tu as décidé de participer à la fabuleuse aventure qu’est la coupe de France de Robotique. Nous ne pouvons que t’appuyer dans ton choix, puisque nous l’avons fait et ne sommes pas prêts de l’oublier. Dans cette épopée, la principale chose qui nous ait manquée est un historique des dernières coupes, ainsi qu’un guide pour prendre le projet en main. Il est dommage de perdre l’expérience des « anciens » à chaque nouvelle coupe. La majorité des autres écoles ont mis un système de rapport en place, ce qui est une composante de la réussite. Il est impossible de repartir "from scratch" chaque année. De nombreux éléments sont réutilisables, tant au niveau matériel que logiciel. Ainsi nous avions un petit tutoriel sur le logiciel FPWin Pro 4, qui permet de commander les automates Naïs FP0. Il nous a été bien utile pour commencer ; en effet, au départ on ne programme pas sur le robot lui-même (pas encore conçu) ni sur le programme du concours (pas de stratégie définie). Il faut s’entraîner à manipuler le logiciel, et à mieux connaître le langage Grafcet. Notre ultime but est que vous perdiez moins de temps dans la recherche d’informations, que vous puissiez être plus concentrés sur le programme. Pour notre part, nous étions en retard, et le programme résultant devait être simple : pas de temps pour le déboguage. C’est peut-être la simplicité qui nous a permis ce bon résultat. Nous vous conseillons donc la simplicité, ce qui vous évitera les mauvaises surprises (du style blocage soudain du robot au bout de 10 cm… ça s’est vu !). Bonne lecture ! Mini ROBI Mini ROBI est une base de test, comportant un automate, deux moteurs entraînant chacun une roue, une roue à bille à l’arrière et pouvant emporter plusieurs capteurs. Concernant notre projet il a été utile pour s’entraîner au déplacement du robot, et à observer les réponses aux ordres de l’automate. Les Automates Naïs Il en existe 2 sortes, à sorties relais ou logiques. Sur ceux à sorties logiques, les bornes Y0 et Y1 permettent un contrôle en fréquence, pouvant servir à l’asservissement de moteurs par exemple.

Page 3: Projet E=M6 Partie programmeurs

Programmer sous FPWin Pro

Avantages et inconvénients : Il y a de nombreux avantages à programmer avec un automate Naïs. En effet, les sorties sont directement reliées à l’automate, ce qui permet de les activer vraiment facilement. De plus ce matériel est fiable, tant au niveau électronique qu’informatique. Les différents langages :

On ne peut pas vraiment parler de langage informatique à part entière, mais plutôt d’informatique industrielle. En effet voici les langages que l’on peut utiliser :

- Liste d’instructions (LI) - Texte structuré (ST) - Grafcet (SFC) - Ladder (LD) - Diagramme de fonctions blocs (FBD)

Ceux que nous avons le plus utilisé sont le Grafcet, le Ladder et le Texte structuré.

Le Grafcet permet de faire l’architecture globale du programme. Le ladder est pratique pour les timers, les mises à jour de variables « Set et Reset »… Le texte structuré est utilisé si vous avez des conditions (IF … THEN … ENDIF). Nota : on ne peut faire des ELSE qu’avec (IF NOT(…) THEN … ENDIF).

Il est intéressant de noter que même si chaque langage a ses spécificités, il est possible de faire ce que l’on fait en un langage dans un autre. Ensembles de programmation :

POU Les Pous sont en fait des programmes indépendants qui s'exécutent tous en même temps

(en fait, cela revient à un système de tourniquet avec un temps de cycle si petit que l'on peut considérer qu'ils s'exécutent tous en même temps).

Tâche Ensemble de POUs exécutés lorsqu’une interruption arrive. Par défaut, les POUs sont mis

dans la tâche Programs associée à l’interruption TRUE (donc toujours effectué). A noter, les "Timer Interrupt", effectuées à

intervalles de temps réguliers, très pratiques car elles permettent par exemple d’avoir une idée de l’évolution dans le temps de l’état des entrées.

Actions Les actions sont appelées dans les étapes d'un Grafcet. Quand l'étape est activée (front

montant, elle appelle l'action qui lui est associée).

Corps Corps du POU : c'est là où se trouve le code du POU.

Page 4: Projet E=M6 Partie programmeurs

Gérer différentes tâches :

Alors là, les choses sérieuses commencent. Attention, c'est parti. Je pense que vous aurez vous aussi à faire face à ce problème embarrassant, à savoir : gérer plusieurs tâches en même temps. Il existe essentiellement 3 solutions avec notre cher programme NAIS :

Faire un gros Grafcet bien bourrin et prévoir après chaque étape tous les cas possibles dans une bonne grosse divergence. Cette technique marche (c'est celle qu'on a utilisé), mais elle est assez lourde et les modifications ne sont pas toujours évidentes (tout interagit avec tout).

Utiliser les interruptions. Bourrinage suprême. Pour chaque exceptions que vous trouvez (arrêt d'urgence, capteur de proximité, ...) vous mettez les instructions à effectuer dans une des interruptions. Attention, ces interruptions vont interrompre brutalement le Grafcet principal (celui présent dans programs) et vont se terminer tout aussi brutalement (le programme reprendra là où il en était). Technique non testée mais très prometteuse.

Essayer de diviser le Grafcet général en plein de petits Grafcet en les hiérarchisant au maximum. Une variable globale présente dans la première transition de chaque Grafcet élémentaire devrait permettre d'activer le bon Grafcet au bon moment. Attention, pour que cette technique ait une chance de fonctionner, les Grafcet terminaux (ceux qui gèrent les sorties de l'automate) doivent être exécuter dans un temps très court pour simuler une exécution simultanée (ie : interdiction de faire un Grafcet linéaire avec des tempos, utiliser les divergences en cas de besoin). Technique testée mais pas aboutie (les variables globales semblent se remettrent à FALSE après un cycle d’exécution, à voir...)

Les vieux trucs à savoir pour manier FPWin Pro 4.0

- Si vous voulez utiliser des tableaux de booléens pour les entrées ou sortie, le premier indice que vous indiquerez doit être X0 ou Y0. Un tableau ne peut commencer à X1 ou Y3…

- Si vous avez l’erreur « Machin (ou truc) non autorisé comme nom de transition » entrez le nom de la transition, et sans appuyer sur entrée cliquez avec le bouton gauche sur un endroit du Grafcet.

- Dans un schéma ladder, un contact est équivalent à une entrée et une bobine est équivalente à une sortie. Si la valeur du contact est à FALSE, la sortie sera à FALSE (la valeur sera recopiée, la variable de sortie risque de changer).

- Dans une suite de réseaux ladder, si un réseau met une variable à TRUE et qu'un autre met cette même variable à FALSE, le résultat est ... incertain. Dans le cas général, il faut essayer de regrouper les schémas qui gèrent les mêmes sorties en utilisant des opérateurs logiques (AND, OR,...).

- Les opérateurs logiques peuvent avoir plus de 2 entrées (bien pratique ;) ). - Cela parait évident, mais on ne répétera jamais assez qu'il est impératif d'avoir un

programme avec des noms d'étapes et de transitions les plus claires possibles (cela évite de trop se prendre la tête au déboguage).

Page 5: Projet E=M6 Partie programmeurs

Définir les entrées / sorties : Ceci est la première étape à la construction d’un Grafcet ou tout autre programme d’informatique industrielle. Cela permet de définir le système, et les entrées définissent la quantité d’informations que vous détenez pour faire réagir votre robot. Vous devez donc vous tenir au courant de toutes les avancés des autres équipes (capteurs, moteurs, systèmes de lancement du robot…). Ce n’est pas une étape difficile ni longue, mais elle est essentielle ! Entrées : Interagissant avec un humain : - Arrêt d’urgence - Choix de la couleur de départ - Départ Interagissant avec le robot : - 4 capteurs de ligne - Barrière - Capteur de couleurs - Pince en position haute - Pince en position basse - Capteur de couple ??? (à demander en début d’année !!!) - Capteur de proximité - Capteurs de contact Sorties : Interagissant avec un humain : - Diodes électroluminescentes Interagissant avec le robot : - Moteur1 avancer - Moteur1 reculer - Moteur2 avancer - Moteur2 reculer - Monter la pince - Baisser la pince - Activer les canons Ces entrées ou sorties seront reliées à l’automates, donc identifiables par une variable. On active ou non une sortie, cependant on ne peut écrire dans une entrée, on ne peut que la lire.

Page 6: Projet E=M6 Partie programmeurs

Maniement des variables globales

Il est quasiment impératif de définir les entrées sorties en variables globales pour notamment deux raisons :

- Il est ainsi possible de les renommer : en effet, les noms par défaut des entrées sont X0, X1, X2... et Y0, Y1, Y2...pour les sorties. Ces noms étant pour le moins peu explicites.

- Etant donné que les entrées et sorties sont les variables les plus utilisées, on sera obligé de les recopier dans les entêtes de chaque sous programme (appelés "POUs" : unité d’organisation des programmes). Or, quand une variable est déclarée en globale, il existe une commande permettant de l’exporter dans chaque POU existant (si un POU est crée par la suite, il faudra soit faire un copier coller des variables globales dans son entête, soit recommencer la précédente manipulation).

Une fois les variables globales ainsi définies, vous pouvez commencer à programmer plus

sereinement. Conseil : en plus d’un nom explicite, n’hésitez pas à commenter vos variables :

Page 7: Projet E=M6 Partie programmeurs

Les différents langages : - Le Grafcet

Vous êtes peut être déjà familier avec les Grafcet, suivant votre formation.

Un Grafcet est composé d’étapes et de transition. Au départ, l’étape initiale est active, dès que la transition suivante est vraie, c’est l’étape suivante qui est activée. Lors d’une divergence en "OU", l’étape qui sera activée sera celle qui suit la première transition qui sera à l’état vraie. Vous pouvez demander à Mr Haudiquet qu’il vous donne ses cours sur le Grafcet si vous voulez mieux comprendre. Vous pouvez avec ce logiciel, associer à une étape : - Des sorties : celles-ci seront activées tant que l’étape sera active - Des actions : celles-ci seront mises en route au début de l’étape (front montant). Pour associer actions ou sorties à une étape, il suffit de double cliquer dessus. Voici un exemple avec l’étape attente_detect : Pendant que cette étape sera active, les 2 moteurs iront en marche avant, et au début de l’étape l’action tempo_detection sera lancée.

Page 8: Projet E=M6 Partie programmeurs

Ceci nous amène maintenant au Ladder :

Le ladder est un langage visuel, comme le Grafcet on manipule des objets que l’on relie à l’aide de « fils », un peu comme un montage électrique : Ainsi, l’objet TM_1ms est une temporisation d’une milliseconde, affectée du multiple 50. (Num est un identifiant propre à l’objet). Ainsi, la variable booléenne fini_tempo_detec sera à vraie 50 millisecondes après le début de l’étape attente_detect. Retournons maintenant dans le corps du programme en Grafcet, et intéressons nous à la transition suivant l’étape attente_detect, en double cliquant dessus :

Le schéma précédent signifie que la transition fin_detection sera active une fois que la variable booléenne fini_tempo_detec sera à vraie. La temporisation est maintenant fonctionnelle.

Page 9: Projet E=M6 Partie programmeurs

Description des principaux éléments nécessaires à la réalisation de programmes en ladder

L’outil dessin de ligne sert à relier les différents éléments entre eux. L’outil objet sert à insérer des objets comme : - des temporisations - des opérateurs logiques (AND, OR, NOR, NOT, …) - des tests (test d’égalité,….) - etc.…

Relier un objet à la ligne de gauche le rend actif, seulement quand le programme en ladder est appelé (par une étape d’un Grafcet, par exemple).

Les contacts appellent une variable, selon l’état de cette variable le contact sera actif ou non, activant une variable de sortie. Pour l’exemple précédent :

Une fois que l’action à été appelée (ici par l’intermédiaire d’une transition) et que fin_detection est vraie, alors la variable booléenne fini_tempo_detec passe à vraie.

Page 10: Projet E=M6 Partie programmeurs

Le texte structuré Ce type de programmation est le plus proche de ce que vous connaissez si vous avez déjà fait de la programmation procédurale en C ou autre. Vous pouvez vous servir de tests, d’affectations, énumérations, boucles… Attention cependant : les boucles fonctionnent, mais les valeurs ne sont rafraîchies qu’à la fin de l’exécution de tout le code. Si votre programme comporte une boucle, qu’il buggue, et que vous ne comprenez pas… lisez la doc ! Dernière étape : la compilation ! Comme tout programme rédigé en langage "haut niveau", il est nécessaire de le compiler ! Vous avez donc plusieurs icônes disponibles :

Vérification du code : vérifier la syntaxe, les noms de variables… évite une compilation si vous n’avez pas besoin de transférer dans l’automate.

Compilation globale : nécessaire avec d’envoyer le programme vers l’automate. Si

vous ne le faites pas, une boite de dialogue vous le proposera.

Compilation incrémentale : évite de recompiler un programme de 400 étapes lorsque l’on a juste changé 3 variables ou changé un nom…

Le transfert

1. Brancher le câble de transfert (port série à l’ordinateur, port automate sur le dessus de l’automate. Attention au sens !). L’automate doit être alimenté, en mode "PROG".

2. Entrer dans le mode en ligne 3. Transférer le programme. 4. Si l’on veut exécuter en visualisant le déroulement, passer en mode "RUN" par le

logiciel. 5. Sinon débrancher, et passer en mode "RUN" grâce au taquet sur l’automate.

Attention, les câbles ne sont pas infinis… ne laissez pas partir le robot et tirer sur le

câble (risque de casser le câble, l’automate… qui coûte cher !)

Page 11: Projet E=M6 Partie programmeurs

Conseils pour l’ambiance générale - Bien lire les règles, les comprendre en détail ; - Savoir qui fait quoi et le déterminer au début du projet ; - Ne pas croire ce que l’équipe Méca raconte ; - Donc ne pas aller voir cricri, ni écouter ses salades sur H² ; - Ne pas croire que c’est facile d’être 22ème à la coupe de France de robotique (quoique); - Préférer une solution simple qui marche à une solution complexe qui marche moins

bien ; - Finir le robot 1 à 2 semaines avant le départ pour le concours, pour laisser à l’équipe soft

le temps de programmer et surtout, surtout, de s’apercevoir des bugs !!! (bugs matériels ou logiciels) ;

- Etre présent (équipe soft) et impliqué lors du positionnement des capteurs, c'est vous qui devrez gérer les problèmes à la fin;

- Penser à s'organiser avec les autres INSA (essayer de gérer des stands à proximité les uns des autres, prévoir une banderole communes,... un coup de fil c'est pas si dur. Attention, toutes n'ont pas un professeur attitré qui organise le concours, à vous de gérer au cas par cas).

Conseils sur le lieu du concours

- Essayer de n’avoir rien à faire sur le lieu du concours : vous n’aurez ni le temps, ni l’envie, ni le matériel, ni les heures de sommeil…

- Emmener des banderoles, drapeaux, tout ce qui peut représenter notre école ; - Si possible avoir une mascotte ; - Impératif d’avoir des T-shirts avec le logo de l’INSA, de ROBI. Vous pouvez aussi faire

des casquettes ou des bobs… - Penser à s'organiser avec les autres INSA (et oui encore), un petit coup de main ou l'outil

qu'on a oublié, ça rend bien service parfois et puis plus on est nombreux, plus on fait de bruit (surtout lors des phases finales si vous voulez passer à la télé. Note : se préparer bien avant, la salle est bondée, Mac Lesggy attire beaucoup de monde) ;

- Essayez d’être interviewés par des journalistes d’E=M6 ou de leur montrer qu’un reportage sur votre équipe serait intéressant.

- Emmenez des T-shirts en rab, au moins 5… Il faut penser à en donner un à Mac Lesggy (il citera le nom de l'école) et à M. Weichert (pour ne pas oublier qui paye ce délicieux sandwich aux rillettes), et à toutes les équipes que vous aimerez bien (un petit coucou à l'INSA de Toulouse serait souhaitable). Cela fait des souvenirs et des amis…

Bonne chance et bon courage à tous, L’équipe des programmeurs… PS : il est très probable que de nombreuses personnes viennent vous voir… surtout l’ancienne équipe, qui a passé un moment très agréable et plein d’émotion sur place… après de nombreuses heures, que dis-je, jours et nuits à travailler à l’INSA. PS 2 : si vous comprenez pas, RTFM… PS 3 : si vous ne comprenez toujours pas… contactez nous ;-)

Page 12: Projet E=M6 Partie programmeurs

Architecture des Systèmes d’Information de Rouen -1-

OPERATIONS ELEMENTAIRES SOUS CONTROL FPWIN VERSION ORIGINALE D’ISABELLE BONDOUX (ASI4) VERSION MODIFIEE PAR LE GROUPE E=M6 (ASI3)

Vocabulaire - Structure d’un projet : DUT : Data Unit Type. Permet de créer des structures de données. POUs : Unité d’Organisation de Programmes. Permet de hiérarchiser l’ensemble des programmes. Chaque programme (POU) se présente de la façon suivante :

En-tête : déclaration des variables locales au programme Corps : corps du programme Actions : « fonctions » appelées par le programme.

Variables globales : déclaration des variables communes à l’ensemble des POUs.

Créer un nouveau projet en grafcet :

Note à propos du type d’API : Si votre automate NAIS a les références suivantes :

NAIS FP0-T32 CONTROL UNIT

AFP02653C Ver 2.3 FP0-T32CP

Pour le FP0 C32P L’API est FP0,5k (mémoire moins grande)

Alors vous devez choisir une API FP0,10k De plus l’automate doit être alimenté en 24V.

Page 13: Projet E=M6 Partie programmeurs

Architecture des Systèmes d’Information de Rouen -2-

Description de la fenêtre : Chemin du projet : nom du projet et répertoire dans lequel vous voulez le stocker Nom : nom du programme créé par défaut dans le POUs. Langage : langage dans lequel est écrit le corps de ce programme. Ce tutorial est conçu pour un corps écrit en grafcet (SFC)

Renseignez le chemin du projet, son nom et le langage dans lequel vous souhaitez l’écrire (grafcet),

puis cliquez sur « créer un projet »

Premier programme : activer les sorties Y0 Y1 pendant 5 secondes, puis activer Y6 Y7 pendant 5 secondes

Ecrire une étape : En cliquant une fois sur l’étape « Initial », vous allez pouvoir en modifier le nom. Attention, deux étapes ne peuvent avoir le même intitulé. (ici on la renommera en début).

Page 14: Projet E=M6 Partie programmeurs

Architecture des Systèmes d’Information de Rouen -3-

En double cliquant sur l’étape « début », vous pouvez indiquer les actions appelées par l’étape. Ici on appelle l’action tempo1, et on active les sorties Y0 et Y1.

Attention : deux étapes différentes ne peuvent appeler la même action. Si une étape appelle plusieurs actions, celles-ci sont séparées par un retour chariot. Il faut maintenant créer l’action tempo1.

Créer une action En cliquant droit sur Actions, sélectionner « nouvelle action ».

Page 15: Projet E=M6 Partie programmeurs

Architecture des Systèmes d’Information de Rouen -4-

Appelez-la tempo1 (nom indiqué dans l’étape « debut », et choisissez un éditeur de type schéma à relais (LD).

Validez, puis double-cliquez dans l’arborescence de droite sur l’action tempo1 que vous venez de créer.

Cliquez sur l’icône mis en évidence ci-après.

Choisissez un timer d’une seconde, et insérez le dans le réseau 1 :

Page 16: Projet E=M6 Partie programmeurs

Architecture des Systèmes d’Information de Rouen -5-

Il faut à présenter définir le timer. - La variable Num* est une variable d’entrée qui sert d’identifiant au timer. Deux timer ne peuvent donc avoir

la même valeur pour Num*. - La variable d’entrée SV est le coefficient d’amplification du timer. Dans le cas présent, si SV vaut 5, alors le

timer réalisera une temporisation de 5 secondes. - Start déclenche le décompte du timer lorsqu’elle passe à « TRUE ». - T est la sortie du timer, qui ne passe à « TRUE » que lorsque la temporisation est écoulée.

Pour configurer le timer, utiliser les outils suivants :

Page 17: Projet E=M6 Partie programmeurs

Architecture des Systèmes d’Information de Rouen -6-

Vous devez obtenir le résultat suivant :

On va ajouter une variable nous permettant de savoir quand la temporisation est écoulée. Ajoutez donc avec la barre d’outils graphiques une variable intitulée tps1_ecoule. Il vous ait automatiquement demandé de la déclarer. Faite-le de la facon suivante. :

Retournez dans le corps principal du programme en sauvegardant les modifications.

Page 18: Projet E=M6 Partie programmeurs

Architecture des Systèmes d’Information de Rouen -7-

Créer une transition Cliquez sur la transition pour la renommer.

Double cliquez sur la transition, choisissez schéma à relais, validez.

Créez le schéma suivant :

Dans la fenêtre ci-dessus, tps1_ecoule apparaît sous forme de contact. Tant que tps1_ecoule ne prend pas la valeur TRUE , le contact n’est pas passé, et timer_ok (qui est le nom de la transition) n’est pas validé.

Refermez la fenêtre en sauvegardant les modifications, et retournez au corps du programme

Insérer une nouvelle étape On veut installer une étape avant l’étape finale. On se positionne donc sur l’étape finale, et on insére une nouvelle étape grâce à la barre d’outils suivante :

On accélère un peu… Créez l’étape suite et l’action tempo2 de manière à obtenir le résultat suivant :

Page 19: Projet E=M6 Partie programmeurs

Architecture des Systèmes d’Information de Rouen -8-

Créer la transition timer2_ok de manière à obtenir le résultat suivant :

Compilation et chargement du programme sur l’automate Effectuez une compilation totale du programme grâce à l’icône suivante :

S’il n’y a pas d’erreur, passez en mode en-ligne :

En mode en ligne, la barre d’outil suivante apparaît :

Page 20: Projet E=M6 Partie programmeurs

Architecture des Systèmes d’Information de Rouen -9-

Pour charger le programme dans l’automate, sélectionnez l’icône de gauche. Vérifiez au préalable que le port Com utilisé est bien celui paramétré.

Vous devez aussi accepter de passer l’API en mode PROG pour pouvoir transférer le programme, puis en mode RUN pour l’exécuter. Normalement, les diodes correspondant aux sorties Y0, Y1 et Y6, Y7 s’allument alternativement.

Trucs utiles : Les entrées de l’automate sont désignés dans Control FPWin par X0, X1 … et les sorties par Y0, Y1… Lorsque l’automate est en mode run, le programme est effectué en continu. Il est souvent nécessaire de mettre une temporisation dans un programme pour pouvoir vérifier à l’œil nu qu’une étape est bien validée. L’icône « lunette » qui apparaît en mode en ligne permet de suivre les étapes validées, à condition qu’une étape reste dans l’étape validée suffisamment longtemps pour que ce soit perceptible à l’œil. Si une transition langda n’est jamais validée, il faut vérifier qu’elle comporte bien dans son corps une variable du même nom langda qui peut prendre la valeur TRUE. Une action ne peut être appelée que dans une seule étape. Les variables doivent obligatoirement être déclarées, soit dans l’en tête du POU, soit dans les Variables Globales. Dans le cas contraire, on aboutit à une erreur de compilation.