Cahier 4 : Charly & GMI, Mémoire d’un BTS Industriel

Après une période de réflexion au sens de la vie (elle va souvent devant nous il parait, même si j’ai trouvé que le sens peut varier de 2°), je me suis dit pourquoi ne pas publier mes mémoires de fin de cycle ? Encore mieux pourquoi ne pas publier mes mémoires de fin d’étude en l’état ?

J’ai trouvé l’idée excellente et c’est par nostalgie et regard critique que je me lance à l’aventure pour vous faire découvrir comment je suis arrivé là où j’en suis aujourd’hui. Je pense alors que vous comprendrez mon évolution à travers le temps 🙂

Avant-Propos

Naturellement, le mémoire est repris en tant que tel. Je ne touche pas à son contenu. Les syntaxes et autres fautes d’orthographes resteront à la postérité. 🙂

Ce projet de fin de cycle est particulier car il a été réalisé à quatre main. Les deux mains de l’auteur ainsi que les deux mains de Robin GRIVET, camarade avec qui le projet a été un pur plaisir de collaboration si ce n’est plus. Cela sonne comme un petit air de remember 🙂

La thématique du projet était de développer un banc de test pour réaliser des contrôles non destructifs par Magnéto Impédance Géante (GMI1). En partenariat avec le LPP2 et le Lycée Eiffel de Dijon, (promotion 2012) et ARDPI3.

Le document ci-dessous se déroule en 3 parties. Une partie commune, une partie propre à chacun de nous sur des tâches bien précises. Afin de ne pas tronquer le document la partie de mon binôme sera également présenté. Son droit d’auteur lui appartenant et je me réserve sous son avis de retirer ce dernier.

Attention, vous voilà parti pour un voyage de 67 pages 🙂

Partie Commune

Analyse du cahier des charges

Présentation du projet

L’objectif de notre projet est de développer un système de contrôle non destructif (CND4) par magnétoscopie avec un capteur à effet de magnéto impédance géante (MIG ou GMI en anglais) afin de réaliser un scan de la cible ferromagnétique pour contrôler la qualité de cette dernière.

Le projet consiste à analyser par balayage les imperfections présentent dans les matériaux dans le domaine de l’industrie ou de localiser des tumeurs cancéreuses dans le domaine médical.

Nous réaliserons le banc de test de ce capteur. Le capteur quand a lui est conçu par 2 partenaires. L’un de nos partenariats est établit avec le Laboratoire de Physique de Plasma situé à PALAISEAU (F-91128) pour qui nous allons développer le banc de test pour qu’ils puissent tester leurs capteurs GMI. Le second partenaire est l’entreprise ARDPI situé à SELONGEY  (21260) qui commence à s’intéresser au développement de banc de test pour les capteurs de types CND et qui développe en même temps que nous un banc de test similaire. Seul le Laboratoire de Physique des Plasmas a pu nous fournir un capteur GMI. L’entreprise ARDPI, elle n’a pas encore eu le temps de développer son propre capteur. Nous nous baserons donc sur le capteur fourni par le LPP.

Partenaire

Laboratoire de Physique des Plasmas
Ecole Polytechnique
Route de Saclay
F-91128 PALAISEAU Cedex
Lycée Gustave Eiffel DIJON
15 Avenue Champollion 21000 DIJON
Agence pour la Recherche et le
Développement de Produits Industriels
39 Bis Rue de la Roche 21260 SELONGEY

Cahier des charges

Nous sommes contraints d’après un cahier des charges bien définies de traiter un certain nombre de spécification.

Objectif:
 
Faire une analyse de la pièce sans contact.
 
Fonctionnalités:
 
Paramétrage personnalisable : 
 
Cette fonctionnalité permet de pouvoir définir des paramètres comme les paramètres d’alimentation du capteur GMI, d’acquisition, de l’alimentation de l’émetteur de champ et des paramètres du Robot 3 axes  souhaitées. Ces données seront stockées dans un fichier au format XML.
 
Mode Manuel :
 
Ce mode doit permettre à l’utilisateur de pouvoir réaliser le paramétrage du capteur GMI par déplacement manuel (Joystick)  de façon précise en concordance avec le capteur Z. Dans le cas de capteur de type CND au parle de contrôle du lift-off.
 
Mode Automatique :
 
Une fois avoir définie les paramètres souhaitées, l’on peut démarrer la séquence de balayage de la pièce en ayant positionné le capteur sur le début de la cible ferromagnétique. Une fois la séquence terminée, les données seront enregistrées.
 
Surveillance Vidéo :
 
Permet de vérifier qu’il n’y est pas de contact entre
le capteur CND et la cible afin d’éviter toute détérioration des deux instruments.
 
Sauvegarde & Consultation des données :
 
Sauvegarde les données de l’acquisition ainsi qu’une copie de paramètres souhaités dans un fichier de type TXT. Le contenu de ce fichier doit être exploitable.
Lors d’une consultation de donnée, l’on doit pouvoir retranscrire dans un plot 3D les données et nous devons afficher les valeurs dans un tableau.
 
Affichage plot 3D :
 
Le plot 3D doit présenter une représentation du contenu de la pièce en affichant une image de la cible en fonction des données d’acquisition. De plus, les paramètres du Plot 3D doivent être modifiables par l’utilisateur.
Contraintes

Ce projet est définis selon un certain nombre de contraintes, que ce soit des contraintes dû au développement du programme (contraintes logicielles) ainsi que du matériel imposé ou spécifier par le client (contraintes matérielles). Mais le plus important reste la contrainte budgétaire imposé par le client ainsi que le temps impartie pour élaborer le développement du système.

  • Contrainte budgétaire :  2 500€.
  • Contrainte temporelle :  220 heures
Spécifications Logicielles
  • Le fichier de configuration système doit être au format de fichier XML.
  • L’enregistrement des données doit être au format TXT.
  • Doit comporter 2 modes de pilotage : Automatique et manuel. – Le pilotage doit être synchronisé avec l’acquisition.
Spécifications Matérielles

Matériels

Etat

Coûts

Capteur CND

(AMR-GMI)

POSSEDE

—–

Capteurs fin de course

(Axe X, Y)

NON POSSEDE

8,35 €

Capteur Analogique

(Axe Z)

NON POSSEDE

31 €

PC embarqué, contrôleur PXI

(NI PXI-1042)

POSSEDE

—–

Contrôleur embarqué
(NI PXI-8187)

POSSEDE

—–

Interface de connexion

(NI SCB-68)

POSSEDE

—–

GBF Agilent

(33220A)

POSSEDE

—–

Carte générateur de signaux arbitraires
(NI PXI-5412 avec câble SMB)

POSSEDE

—–

Carte numériseur haute fréquence d’échantillonnage
(NI PXI-5112 avec câble SMB)

POSSEDE

—–

Carte d’acquisition multifonctions

(NI PXI-6251)

POSSEDE

—–

Robot 3 axes

(Charlie Robot)

POSSEDE

—–

WebCam

NON POSSEDE

19,95 €

Joystick

NON POSSEDE

29,95 €

Convertisseur 24 V / 5V

NON POSSEDE

10,50 €

Besoins et fonctionnalités

Présentation Matérielle

Nous allons présenter dans cette partie, le matérielle ainsi que les logiciels et autres softwares dont nous avons besoin de manière générale. Une présentation plus poussée du matérielle sera faite dans chacune des partie individuelles.

Ressource Matérielle

PXI5 NI-1042Q qui est notre PC6 embarqué.
Ainsi que les que celui-ci comporte.
 
(cf Partie Individuelle)
Générateur Base Fréquence de nom Agilent 33220A. Pouvant être commandé à distance via le protocole GPIB7.
Le Charly Robot 3 axes et son contrôleur de puissance communicant via la liaison RS2328.
Webcan de marque Hercule et un Joystick de chez Logitech en interface de connexion USB.

(cf Partie Individuelle)
Capteurs fin de course pour le Charly Robot 3 axes. Capteur Analogique pour l’axe Z du Charly Robot 3 axes.
Différents capteurs CND de type GMI.

(Nous renvoyons pour plus d’information vers les parties individuelles)

Ressource Logicielle

Lecteur Média player sous licence GPL9 (gratuit). Permet d’afficher la WebCam dans l’application.
Logiciel de réalisation des diagrammes de type UML10.
Logiciel de réalisation des diagrammes de type UML et de dessin pour schéma électrique.
IDE11 Labview Version 8.0, nécessaire pour exécuter l’application.
OS12 Windows XP Pack SP213 présent sur le PC embarqué.

Analyse et distribution des taches

Répartition des taches

Analyse

Nous allons utiliser un boîtier de connexion National Instrument Scb-68 pour connecter les différents capteurs présent sur le robot.

Le déplacement de la colonne du robot se déroule sur 3 axes : X, Y, Z. Donc il est nécessaire d’ajouter des capteurs fin de course pour éviter de forcer le robot quand celui-ci arrive au maximum de sa position. Il nous faut donc :

  • 2 capteurs de positions de type TOR pour les axes X et Y.
  • 1 capteur de position de type ANALOGIQUE pour l’axe Z afin de pouvoir gérer le lift-off du capteur GMI.

Dans un premier temps, nous utiliserons un PC pour les phases de prototypages. Puis nous travaillerons avec un PXI 1042Q contenant un système embarqué (dont LabView  comme plateforme de développement (IDE)), un oscilloscope, un GBF14, 2 ports USB, un port RJ45, comportant 8 slots possible pour pouvoir rajouter des cartes d’acquisitions. La possibilité de pouvoir rajouter plusieurs cartes d’acquisitions et un choix déterminant qui explique pourquoi nous utilisons pour le projet un PXI avec PC embarqué, et non un PC.

Pour commander le robot, nous devons avoir un contrôleur de puissance pour faire l’intermédiaire entre le robot et le PXI, afin de pouvoir traduire les trames envoyées au Charlie Robot.

Conception Générale

Configuration
Ce diagramme de flots de données représente le fonctionnement de la fonctionnalité « Configuration » en expliquant de manière générale le fonctionnement de réglage et de commande des instruments.
De façon plus détailler, l’on voit le fonctionnement plus détaillé de la « Configuration Emetteur ».
Sauvegarde
Ce diagramme de flots de données représente le fonctionnement de la fonctionnalité « Sauvegarde» en expliquant de manière générale le fonctionnement d’enregistrement des données.
Mode Manuel
Ce diagramme de flots de données représente le fonctionnement de la fonctionnalité «Mode Manuel» en expliquant de manière générale le fonctionnement du contrôle du robot 3 axes (via un Joystick) ainsi que de l’affichage des données.
Mode Automatique
Ce diagramme de flots de données représente le fonctionnement de la fonctionnalité «Mode Automatique» en expliquant de manière générale le fonctionnement du contrôle du robot 3 axes ainsi que de l’affichage des données.
Synchronisation

Pour pouvoir réaliser l’acquisition suivant le mode de balayage automatique, nous devons réaliser une synchronisation entre ces deux fonctionnalités. Nous avons donc choisie de faire une synchronisation de type logicielle. C’est-à-dire que nous allons laisser le programme faire des acquisitions en continue. Mais si la position retournée par le Charly Robot est différente de la position actuelle, alors nous enregistrons la valeur acquise.

Nous avons représenté à travers ce diagramme d’activité le fonctionnement général de notre application logicielle.  Nous avons trois activités distinctes, qui sont les activités du Charly Robot 3 axes, les activités de l’application commandant le Charly Robot 3 axes et l’application qui commande l’acquisition.

Nous démarrons les 3 activités en même temps. 

Dans un premier temps, nous allons initialiser le Charly Robot en générant une trame que nous allons envoyés. Le Charly Robot dés que celui-ci à été mis sous tension attend de recevoir une trame. Une fois cette trame reçue, il va exécuter la trame reçue. Si l’opération a échouée, le Charly Robot retourne un acknowledge d’erreur, à l’application commandant le Charly Robot. Celui ne peut continuer sans la réception de l’acquittement. Sinon, dans le cas où l’opération à réussi, le Charly Robot retournera un acknowledge valide.  

Auparavant, nous avons initialisé les paramètres d’acquisition. Puis l’on lance l’acquisition. Nous attentons l’acknowledge valide du Charly Robot pour valider l’acquisition des données. Puis, l’on enregistrera ces valeurs avant de recommencer l’opération c’est-àdire la réception d’un acquittement valide renvoyé par le Charly Robot.

Consultation

Ce diagramme de flots de données représente le fonctionnement de la fonctionnalité «Consultation» en expliquant de manière générale le fonctionnement de la lecture et l’affichage du contenue des données sauvegardées.

Intégration Commune

Légende :
 
 
En vert les fonctionnalités développées par l’étudiant 1 : Robin GRIVET
 
En bleu les fonctionnalités développées par l’étudiant 2 : Erwan GUILLEMARD
 
En jaune les fonctionnalités principales de l’application
 
En rose : L’Application Générale
 
En saumon la fonctionnalité de navigation de l’application générale.

Développement

Interface

Voici le prototype de l’interface de notre application. La navigation dans cette application se passe sur une seule fenêtre. Nous avons caché les onglets de navigation, et choisie de naviguer dans l’interface à partir des boutons en haut de la fenêtre.

En sélectionnant l’un des boutons, nous allons changer d’onglet. Il en est de même pour les sous onglets de navigation, mais nous ne jugeons pas nécessaire de s’étendre sur ce point car la méthode de navigation est la même.

Mode User/Admin : Navigation

Comme dis plus haut, nous proposons un mode supplémentaire au cahier des charges. Nous voulons créer un mode utilisateur qui aurait accès a toutes les fonctionnalités décrites dans le cahier des charges, et créer un mode administrateur qui lui aurait accès à un onglet en plus, l’onglet OPTIONS il faut donc l’appeler autrement (voir commentaire plus haut).

Le contenu de cet onglet permet d’avoir accès à un affichage plus poussé et qui n’est pas nécessaire pour l’utilisateur. De plus, l’administrateur à la possibilité de configurer des paramètres de base de l’application auxquels l’utilisateur n’a pas l’utilité d’y avoir accès. 

C’est sur l’onglet ACCEUIL de notre application que nous sélectionnons le mode d’utilisation. Par défaut, le mode de connexion est paramétré pour se lancer en mode  « USER ». Pour changer de mode d’utilisation, il suffit de sélectionner le mode « Administrateur ». Un mot de passe est alors demandé. Si l’identification de marche pas, « l’Accès est refusé ». Si l’identification est valide, « l’Accès est autorisé ». Le mot de passe est password.

Au début, nous effectuons une identification avec une structure conditionnelle. Se qui se traduirait en langage C par un Switch case. Nous avons attribué la valeur de 0 pour l’identifiant Utilisateur, et 1 pour l’identifiant Administrateur.

L’on récupère l’état des boutons pour pouvoir savoir qu’elle onglet faire apparaitre. Nous utilisons ensuite un nœud de méthode du conteneur  MenuPrincipal qui va par la suite nous permettre dans le cas d’un accès autorisé de faire apparaitre le sixième onglet du conteneur MenuPrincipal par l’utilisation d’un nœud de propriété en rendant le bouton visible et en autorisant l’accès à cette onglet  « OPTIONS ».

Le code dans le cas ou l’identifiant choisie est Utilisateur, nous masquons avec les nœuds de méthodes et de propriété l’onglet « OPTIONS » ainsi que le champ demandant le mot de passe et le bouton pour soumettre l’accès. Cependant, la navigation des onglets ne change pas.

Conclusion

Pour parfaire cette partie commune, nous pouvons donc dire que la quasi-totalité du projet qui nous à été donné à été réalisé. Nous avons seulement quelques fonctionnalités qui ne sont pas complètes. 

La partie Synchronisation est en cours de recherche et nous à posé et nous pose encore des problèmes.

Pour ce qui est du Mode Automatique, il reste seulement à intégrer le code des capteurs fin de course du Charly Robot 3 axes. 

Le Mode Manuel est incomplet car nous ne traitons pas le positionnement du capteur Z pour contrôler le lift-off du capteur GMI. La fonction d’Acquisition est elle non complète du fait du problème d’interface de connexion entre la carte d’acquisition 6251 et l’oscilloscope 5112.

Et la fonctionnalité du Capteur Z n’est pas complète, car l’on ne contrôle pas le positionnement de l’axe Z en fonction du lift-off souhaité pour le capteur GMI.

Partie Individuelle : Travail Réalisé par GRIVET Robin

Analyse des Fonctionnalités

Pour pouvoir réaliser le déplacement du capteur magnétique (GMI : Giant Magneto Impédance), nous devons détacher les différentes fonctionnalités composant le système.

Je devrais réaliser les fonctions permettant le pilotage du robot, ainsi que son contrôle visuel :

  • Pilotage manuel du robot
    • Ce mode permet le déplacement du robot à partir d’un joystick
    • Il permet d’optimiser les paramètres du robot et a terme d’améliorer les acquisitions automatique
  • Scan magnétique automatique
    • Le scan sera effectué de façon automatique à partir des paramètres du mode manuel.
    • Les paramètres d’acquisition seront enregistrés dans un fichier XML (Etudiant 2) afin de garder une trace des paramètres de chaque acquisition.
  • Contrôle visuel caméra
    • Le contrôle visuel permettra de contrôler les déplacements du robot depuis le poste utilisateur.
    • Il sera possible de mettre en pause l’acquisition d’image.
  • Acquisition Distance Z et fin de course
    • Distance Z : L’acquisition du lift-off (distance entre le capteur et la pièce à scanner) sera nécessaire pour éviter la collision entre le capteur et la cible, ainsi que pour modifier la précision des acquisitions du capteur GMI.
    • Les capteurs fins de course seront utilisés pour protéger le robot : ils permettront d’avoir un contrôle logiciel des dépassements de la zone de déplacement du robot.

Les capteurs fins de course seront utilisés pour protéger le robot : ils permettront d’avoir un contrôle logiciel des dépassements de la zone de déplacement du robot.

  • Convertisseur 24V to 5V : Permet de réaliser l’alimentation de la carte interface des capteurs (Z et fin de course) en 5V depuis une alimentation 24V afin de réaliser l’acquisition des tensions des capteurs.
  • Webcam : Permet l’acquisition d’images pour le contrôle visuel
  • Joystick : Permet de faire l’acquisition des mouvements de l’utilisateur pour ensuite piloter le robot manuellement.
  • Capteur de position optique : Permet de mesurer la distance entre le capteur GMI et la cible à analyser. Il sera utilisé pour la sécurité du robot et pour paramétrer les acquisitions.
  • Interrupteur fin de course : Permet d’acquérir des signaux correspondant à un dépassement de la table du robot et à termes permettront de mettre hors tension le nouveau contrôleur du robot.

Pilotage manuel du Robot

Nous disposons d’un robot Charly pilotable sur 3axes. Il est alimenté par un module de puissance qui traduira les
commandes de l’utilisateur pour les  moteurs pas à pas du robot. Le module est piloté par des trames de chaines de caractères via RS232.
 
 
   Pour acquérir les déplacements que l’utilisateur désire réaliser, Nous devrons acquérir les données d’un joystick, pour ensuite traduire celles-ci en commande pour le robot.
 

Logitech Attack 3
 
11 Boutons programmables
USB
Faible coût (30€)

Scan magnétique automatique

Ce scan devra permettre l’acquisition d’une cible de façon totalement autonome. L’utilisateur devra auparavant utiliser le mode manuel afin de paramétrer l’acquisition automatique.  Pour cela, il faudra choisir plusieurs paramètres :

  • La distance Z entre le capteur et la cible
  • Le pas de déplacement du robot (résolution)
  • Un point de référence
  • La surface de la zone à scanner

Le mode manuel permettra à l’utilisateur de définir et d’optimiser ses paramètres. Plusieurs mesures pourront être effectuées pour être ensuite comparer. On déduira ainsi les meilleurs paramètres de l’acquisition pour la cible en question, dans le but d’améliorer la rapidité entre chaque acquisition.

Le scan va suivre une séquence de déplacement de type balayage :

Contrôle visuel caméra

L’utilisateur disposera d’un contrôle visuel en temps réel sur le robot grâce à une caméra. Celle-ci permettra de contrôler les déplacements depuis le poste de commande des l’utilisateur en mode manuel. Ce contrôle permet également de surveiller le bon déroulement des acquisitions avec une certaine distance de sécurité entre le poste de contrôle le banc d’acquisition (Dans le  cas de matériaux dangereux par exemple).

Ce contrôle sera effectué avec les fonctions activeX ainsi qu’avec un programme de traitement vidéo compatible avec activeX. Nous avons donc choisi VLC 1.0.1 car la dernière version de ce logiciel pose des problèmes de compatibilité avec le plugin activeX. L’acquisition des images ce fera de façon permanente et ce dès le lancement du programme. Il sera possible de mettre en pause l’acquisition, et également de la relancer.

Hercules Classic Silver
 
30 Images par seconde
Résolution vidéo 800×600
Pince de fixation
Faible coût (20€)
 
La qualité de l’image n’étant pas la priorité de notre contrôle, nous avons donc choisi une webcam bon marché.

Acquisition distance Z et fin de course

Nous disposons d’un capteur de type analogique sur l’axe Z, afin d’éviter que le capteur GMI entre en collision avec la cible à analyser ce capteur permettra de contrôler le lift-off. Pour faire l’acquisition de ce capteur, je devrai réaliser une carte d’interface.

Elle permet l’acquisition :

  • D’une tension analogique 0-3V du capteur Z
  • De 4 tensions logiques 0-5V des capteurs de fin de course

Les capteurs de fin de course tout-ou-rien (TOR15) sont disposé sur le robot de façon à traduire un dépassement sur les axes X et Y (min et max). Nous ferons ensuite l’acquisition de ses tensions avec la carte SCB68 afin de les faire intervenir dans le programme.


Interrupteur fin de course
Panasonic AZ7100
 
Grande résistance aux chocs
Faible coût (8€)
 
Les capteurs de fin de course on été choisie selon un critère de solidité afin que les déplacements du robot n’endommage pas les capteurs.

Capteur distance Z
Capteur optique Sharp
 
Plage de mesure ( 20 à 150cm )
Sortie analogique
Résolution : ± 1mm
Tension d’alimentation : 5V
 
Nous avons choisi ce capteur car utilise une technologie compatible avec nôtre projet (Optique).
Il dispose d’une plage de mesure assez courte, qui correspond a notre besoin, ainsi qu’une bonne résolution. 
Caractéristique de la carte :
 
Résolution 16 bits
16 voix analogiques/8 voix différentielles
Echantillonnage 1,25 M/s
 
Cette carte sera intégrée dans le PXI afin de faire l’acquisition de la carte scb-68.

SCB-68
Caractéristique de l’interface de connexion :
 
Communication I/O16 68 broches
Un capteur de température
5 Switches
Compatible RSE17 / Différentiel
 
L’acquisition des tensions des capteurs (Z et fin de course) sera réalisée grâce à la carte d’acquisition scb-68.

Codage des différentes fonctionnalités : Sous VI

Pour réaliser les différentes fonctions, nous devrons coder un programme Labview.

J’utiliserai dans un premier temps une version antérieure (7.2, faute de licence 8.0 sur les postes de développement) pour développer mes prototypes.

Ces prototypes ont pour but de prendre en main le logiciel de codage ainsi que ses nombreuses fonctions, mais également de mieux ce représenter comment réaliser les différentes fonctions pour optimiser chaque partie de code.

Mode Manuel

Acquisition joystick

Dans cette partie, nous devrons réaliser l’acquisition des données du joystick afin de retranscrire son mouvement pour le robot. Nous ferons l’acquisition des boutons du joystick ainsi que ses 3 axes :

  • Les 2 axes du manche représenteront les déplacements du robot sur les deux mêmes axes (XY).
  • De l’axes Z (roulette), Qui sera utiliser pour modifier la temporisation d’envoie de trame.
  • Les boutons, auxquelles nous attribuons des fonctions utiles tel que :
    • L’initialisation des axes du robot
    • Le marquage d’un point de référence
    • Un retour à l’origine
    • Fonction  d’envoie de trame manuelle.
Pour les axes :
Integer : [-32768 | 32768]

Pour les boutons :
Bouléen : [0 | 1]
Communication RS232

Nous devrons réaliser un code permettant la communication entre le module de puissance (robot) et le pc de développement.

Pour cela, Je suis parti d’un exemple donné dans labview, pour l’adapter à nos besoins. J’ai commencé par étudier le .vi exemple fournit avec labview, afin de comprendre son fonctionnement, et ainsi de récupérer les blocs fonctionnel dont nous avons besoin.

Blocs utilisés :

Création Communication Série

Ce bloc correspond à la fonction qui va ouvrir la ligne série. On lui envoie les paramètres de communication :

  • Parité – taille buffer – Bit de stop – bit de donnée – débit en baud

On peut désormais utiliser les fonctions série – Sortie d’erreur

Envoie Série

Ce bloc permet l’envoie de caractères sur la ligne série. (Write)
On spécifie la ligne série utilisée et la chaîne à envoyer.
Sortie d’erreur

Réception Série

Ce bloc réceptionne les caractères de la ligne série. (Read)
On lui indique la ligne série a lire et le nombre de caractère à récupérer.
On obtient le(s) caractère(s) en sortie, ainsi que la sortie d’erreur.

Une fois les blocs repérés, on crée un code simplifié avec les fonctions importantes afin d’alléger le code et de faciliter l’intégration avec les autres fonctions.

Test unitaire :

En Rouge : Les paramètres de la communication
En Vert : Spécifie un nom de ressource qui sera utilisé par les différentes fonctions de la ligne série
En Bleu : Affiche les informations circulant sur la ligne série

On test la communication en envoyant une commande au robot, et on attend qu’il envoie une réponse
On constate qu’il nous répond « 0 » qui correspond à l’exécution avec succès de la commande.

Générateur de trame

Ce générateur de trame aura pour but de crée une trame de chaîne de caractère constituant une commande pour le robot. Nous réaliserons un générateur de trame suivant le modèle de la commande suivante :

DistanceX | VitesseX | DistanceY | VitesseY | DistanceZ | VitesseZ | DistanceZ2 | VitesseZ2 | Fin trame

Cette commande (@0A) correspond a un déplacement relatif du robot, c’est-à-dire qu’il ce déplace suivant les mesures souhaitées à partir du point auquel il ce trouve. Le paramètre Z2 correspond au déplacement négatif en Z, c’est-à-dire quand la tête dur robot remonte.
Ce paramètre peu être utile lorsque le robot est utilisée pour percer, ainsi on peut spécifier une vitesse de perçage différente de la vitesse de remonter de la perceuse. Cette option permet de gagner du temps lors de l’usinage. Nous n’aurons pas besoin d’exploiter cette fonction.

  • Les variables DistanceX et DistanceY sont récupérées à partir de la position du manche du joystick. (On multipliera les valeurs acquises par un coefficient modifiable depuis l’interface).
  • La Distance Z sera définit manuellement dans l’interface, ou sera géré en fonction de la valeur du Capteur de distance optique sur l’axe Z.
  • La vitesse des axes est définit dans l’interface par l’utilisateur, elle sera la même pour tout les axes.
    • La vitesse de tous les axes (même Z2) doit être supérieure à 0, sinon la commande n’est pas validée.

On part d’une trame de base contenant la commande du robot en dur [1] pour ensuite concaténer les informations nécessaires.
Chaque séquence [2] correspond à une valeur (distance ou vitesse) convertie en chaîne de caractère puis concaténée avec la virgule qui sépare les différents champs.
On concatène ensuite les caractères CR18 (Carriage Return) et LF19 (Line Feed) pour achever la trame [3].

On obtient une chaîne de caractère correspondant à un déplacement relatif du robot qui prête à lui être envoyé.

On réalise ensuite un test.
 
On entre les paramètres, et on essaye de créer la trame. 
On constate que la trame correspond aux paramètres choisi, la fonction est donc réalisée avec succès.
Intégration des prototypes

Une fois les 3 fonctions de base réalisée, on va fusionner les codes afin d’obtenir un programme permettant le déplacement du robot par le joystick.

On commence par faire l’acquisition du joystick, et on convertie la valeur des axes X et Y pour créer les trames. Les valeurs sont ensuite récupérer pour créer les trames avec le générateur.

On crée ensuite une condition, si on appuie sur la gâchette du joystick, on rentre dans la boucle de condition qui contient la fonction d’envoie et de réception série. Ainsi, à chaque appuie de gâchette, on envoie une trame de déplacement correspondant à la position du joystick au moment de l’appuie et on récupère ensuite la réponse du robot.

En Rouge : Les paramètres de la communication série

En Jaune : Les données circulant sur la ligne

En Vert : Les données du joystick

En Bleu : Paramètres déplacement et info programme :

  • PasZ : On définit la distance minimum parcourue en Z
  • Coefficient : Modifie la distance à parcourir par rapport a la position du joystick
  • VitesseCharly : Modifie la vitesse de déplacement du robot sur les 3 axes.
  • Y Axis et X Axis : Position actuel du joystick (Int) • Tempo mS : Temps minimum entre chaque envoie de trame.

On test ensuite l’intégration des partie, on branche le joystick, et on essaye de déplacer le robot. Le test est un succès, le robot ce déplace suivant les instructions de l’utilisateur via le joystick.

Mode automatique

Pour réaliser la séquence d’acquisition, il faut :

  • La communication avec le robot
  • La séquence de déplacement

Le programme est composé en deux grandes parties exécutées successivement :

  • La première partie qui consiste à initialiser la communication RS232 entre le PC et le robot et à réinitialiser les variables du programme pour recommencer un balayage.
  • Dans la seconde partie, On génère les trames nécessaires pour le balayage, puis ses trames seront envoyées de façon à décrire le plan de déplacement.

Boucle séquentielle principale :

Initialisation communication série

Pour réaliser la communication, on commence par initialiser la liaison série :

  • En rouge : On crée la liaison série avec le numéro de port.
  • En vert : Paramètres pour la configuration de la liaison.
  • En bleu : Initialisation des variables local pour la suite de la séquence.
  1. On récupère les paramètres de l’utilisateur pour paramétrer la communication
    • Numéro de port – Vitesse de transmissions – Bits de données – Parité – Bits de stop – taille du buffer
  2. On utilise un nœud de propriété pour modifier les paramètres (le contrôle de flot de donnée)
  3. On indique la taille du buffer pour la réception.
Envoie des trames – Réalisation du balayage

Une fois la liaison établie, on peut envoyer les commandes au robot. Pour envoyer les trames, on utilisera toujours la même structure :

  • Boucle séquentielle : Envoie de la trame, puis réception de la réponse du robot.
Pour communiquer sur la liaison série, on utilise les fonctions VISA :

Ces blocs fonctionnels sont comparables à des drivers et permettent de réaliser des fonctions de base sur un même matériel. On commence par ouvrir une session sur le périphérique spécifié par Nom de ressource VISA (input refnum) et la fonction renvoie un identificateur de session qui sera récupérer par les différentes fonctions afin d’agir sur le même périphérique.

Le programme de déplacement est composé de 2 parties :

  • Balayage de la zone (1 à 4)
  • Fin de balayage et retour a l’origine (5 et 6)

L’envoie des trames réalise le déplacement ci-contre. Le
principe est de répéter cette séquence jusqu’à atteindre la

valeur maximal sur l’axe Y.

On ajoute donc une condition à la suite de ses 4 trames :


Si « DistanceActuelY = DistanceY »
Faire « Envoie trame fin de séquence »
Faire « Envoie trame retour origine »
Sinon
Recommencer la séquence

Une fois la distance maximal en Y atteinte,
on considère que la séquence est terminée, il ne reste plus
qu’a envoyer la dernière trame (Flèche bleu) qui finira le

balayage.

Cette dernière trame est la même que celle utilisé
précédemment pour l’incrémentation X (Flèche noir), On
reprend donc la même trame, que nous devrons envoyé le
même nombre de fois, afin de décrire le même déplacement.
Puis la trame de retour a l’origine du balayage, afin de

recommencer l’opération.

1 – Incrémentation X

1 : C’est le nombre de fois que la trame sera envoyée :
On calcul cette valeur :

NbrBoucleX = DistanceX / PasX


2 : C’est le PasX définit par l’utilisateur. Il est utilisé ici pour créer la trame de déplacement. Une fois la boucle de répétition terminée, on peut en déduire qu’on a atteint la distance X maximum du balayage, on peut donc incrémenter Y.

2 – Incrémentation Y

1 : C’est le PasY définit par l’utilisateur. Il est utilisé ici pour créer
la trame de déplacement.


Une fois l’incrémentation Y faite, on peut recommencer le déplacement sur l’axe X mais il sera négatif afin de revenir à la
position initiale (sur l’axe X).

3 – Incrémentation -X

1 : C’est le nombre de fois que la trame sera envoyée :
On calcul cette valeur :

NbrBoucleX = DistanceX / PasX


2 : C’est le PasX définit par l’utilisateur. Il est utilisé ici pour créer la trame de déplacement mais celle-ci doit être négative. On utilisera donc l’opposé de PasX pour créer la trame. Une fois la boucle de répétition terminée, on peut en déduire qu’on est revenu à la position X=0, on peut donc incrémenter Y.

4 – Incrémentation Y

On envoie a nouveau la trame d’incrémentation de l’axeY crée
précedement.

Test de fin de balayage


On ajoute donc le test après la séquence, qui permettra de valider
l’envoie de la dernière trame. Pour cela, à chaque déplacement Y, on
incrémente une variable ValeurBoucleY. On compare ensuite le
nombre de trames envoyées avec le nombre de trame à envoyer.


(NbrBoucleY = DistanceY / PasY)

5 – Déplacement final


Lorsque cette condition est vraie, on sait qu’on a atteint le
Ymax et que la séquence est terminée.
La boucle de condition validée et la dernière trame envoyée.

Le balayage est réalisé, il ne reste plus qu’a revenir au point d’origine de
l’acquisition.
On sort de la boucle de balayage et on
réalise un dernier test pour envoyé la
commande de retour :

  • Le balayage est terminé (PositionY>distanceY ? = Fin)
  • Le programme n’est pas terminé
    (BouclePrincipal)

La flèche correspond à un test :

L’envoie de la trame de retour est validé
lorsque le balayage est terminer, mais
pas la boucle principal.
On envoie la trame de retour, et on
modifie les variables afin que le
programme ce termine.

L’interface du prototype :
Dans un premier temps on définit
les paramètres du balayage :

  • La surface
    • DistanceX
    • DistanceY
  • La résolution
    • PasX
    • PasY
  • La vitesse de déplacement
    du robot
  • La tempo
    • Temps entre chaque
      envoie de trame

Les paramètres Z ne sont pas
utilisés dans ce prototype.
Dans un second temps on affiche
des informations utiles au
déroulement du programme tel que
les trames qui vont être envoyées,
ou le nombre de boucle à effectuer.

Le programme est fait de telle façon que, lorsqu’on l’exécute, il réalise une séquence de déplacement avec retour à l’origine et prend fin (afin de faciliter l’intégration).


On fait ensuite un test unitaire pour de valider le déplacement du robot :
Pour ce faire, on fixe un marqueur à la place du capteur GMI, et on maintient une feuille de papier avec du scotch sur le plateau du robot. On démarre ensuite le balayage, et on vérifie si le chemin parcouru correspond à celui désiré.

On crée un graphe XY représentant le déplacement du robot

On voit que les déplacements sont similaires.

Le 3eme essaie correspond bien au balayage demandé, le code est donc opérationnel, la fonction est validée.

Contrôle visuel par webcam

Pour faire l’acquisition des images de la webcam, nous avons besoins d’un logiciel de traitement vidéo.
Pour ça, on utilise le logiciel VLC media player (Gratuit). Nous utilisons la version 1.0.1 car la dernière version (1.2) est incompatible avec le contrôle activeX. L’installation de ce logicielle est précisé dans la notice d’utilisation.
La webcam est disposée sur le robot afin d’avoir un contrôle visuel sur ses déplacements.
Le flux vidéo est acquis et affiché dans l’interface utilisateur. Ce contrôle permettra de garder un œil sur les déplacements du robot pendant un balayage afin de prévenir tout
incident.
Nous aurons donc besoin d’une webcam afin de faire l’acquisition des images. Le programme d’acquisition de la webcam ce compose en 2 parties exécutées successivement :

  • Initialisation du contrôle ActiveX avec VLC et lancement acquisition
  • Arrêt acquisition
A l’origine, on crée un contrôle ActiveX vide.
On appel ensuite le programme d’acquisition vidéo souhaité.
Pour réaliser des modifications sur le contrôle ActiveX, on utilise des nœuds de propriétés permettant d’avoir accès aux propriétés et méthodes d’une application.
On indique au contrôle que nous allons utiliser le module VLC, avec le chemin local de la webcam.
On lance ensuite le mode « play », et on reste dans cette état jusqu’à ce que l’utilisateur appuis sur le bouton.
Ce mode va faire l’acquisition des images et afficher celle-ci dans le contrôle ActiveX de
l’interface.
Si le bouton est enfoncé, on démarre la
deuxième partie de la séquence, et on
demande le mode « stop ».
L’acquisition de la webcam est alors
suspendue, et on reste dans cette état jusqu’au prochaine appuie sur le bouton Play/Pause.
Si on appuie à nouveau, on sort de la boucle et on ferme le contrôle ActiveX.

Acquisition du capteur Z et des capteurs fin de course

Nous avons fixé les capteurs de fin de course aux extrémités du robot ainsi que des butées réglables. Le capteur Z est amarré à la tête du robot, et pointe en direction du plateau.

Nous disposons d’une alimentation 24V continu pour alimenter les capteurs.
Les fin de courses sont des interrupteurs, il n’y a donc pas de tension d’alimentation max.
Le capteur Z doit être alimenté en 5V pour fonctionner.

En Vert : Les capteurs fin de course
En Rouge : Le capteur Z
En Bleu : Les butées

La carte d’interface devra donc :

  • Transformer le 24V en 5V
  • Faire l’acquisition de 4 tensions logique 0 ou 5V des fins de courses
  • Faire l’acquisition d’une tension analogique variant entre 0 et 3V correspondant à la distance Z
  • Avoir un minimum de sécurité (ajout d’un fusible)

Choix des composants :

On utilise des résistances (1.5Kohms) afin de fixé un faible courant :

U=RxIU=5VOn prend des résistances 1.5Kohms.
I=U/RI=5/1500I=33mA


On a donc un courant d’environ 33mA, ce qui est suffisant au fonctionnement, sans trop consommer d’énergie.
On dessine un schéma de la carte à réaliser (Le fusible n’apparaît pas, il sera a la sortie du convertisseur de tension)

On utilise un bornier faisant office d’entrée et sorties.
Câblage du bornier :

On réalise ensuite la carte, et on branche les capteurs afin d’effectuer des tests unitaires.

Le test de la carte a été réalisé avec un voltmètre, Chaque tension à été testées avec succès.
Nous ferons ensuite l’acquisition de ces tensions avec la carte SCB68 pour intégrer ces informations dans le programme. Cette partie est traitée par mon binôme.


Après intégration, on réalise un test depuis labview afin de valider l’acquisition des données.

Sur le graphe de gauche :
La tension du capteur Z, correspondant au lift-off.
Entre 0 et 3V.

Sur le graphe de droite :
On a les 4 tensions des capteurs fins de courses.
Ici, on appuie sur l’un des capteurs, et on peut voir que la tension bleu correspondante est à 5V.

Partie Individuelle : Travail Réalisé par GUILLEMARD Erwan

Présentation des fonctionnalités à Réaliser

Pour pouvoir réaliser le banc de test du capteur GMI (Giant Magneto Impédance), nous devons détacher les différentes fonctionnalités composant le système.
Pour ma part, je devrais développer et réaliser les fonctionnalités suivantes du banc de test :

  • Acquisition du signal
  • Visualisation du signal
  • Configuration des paramètres
  • Capteurs de position Axe Z
  • Accessibilité aux données enregistrées

Acquisition du signal

Nous recherchons à déduire
l’impédance dégager par le capteur
CND. Pour cela, nous allons effectuer
plusieurs opérations sur les deux
tensions acquises.
Pour cela, nous allons déduire l’image
du courant à partir de la tension aux
bornes de la résistance. Puis avec la
tension aux bornes de la bobine, nous
pourrons l’impédance du capteur GMI.
Ensuite selon la fréquence
d’acquisition, l’on choisira d’orienté le
signal vers la carte d’acquisition 6251
(dans le cas de fréquence inférieur à
20MHz ou la carte d’acquisition 5112
(dans le cas de fréquence supérieur à
20MHz).

Visualisation du signal

Le signal une fois traité (de manière physique) doit être affiché dans un historique en fonction de ces coordonnées spatiales puis les valeurs seront affichées dans un graphique tridimensionnel.

Configuration des paramètres

L’utilisateur doit pouvoir configurer divers paramètres selon le type de pièce que le banc de test doit analyser.
Pour cela l’utilisateur doit pouvoir sélectionner le type de signal pour alimenter le capteur GMI (émetteur et récepteur) ainsi que la fréquence et la tension. L’utilisateur peut configurer les paramètres d’acquisitions de la carte d’acquisition 6251 et 5112 (Tension Max-Min, Fréquence, échantillonnage, noms voie physique d’acquisition). Il doit aussi pouvoir configurer l’emplacement de l’enregistrement des fichiers de données.
Le fichier de configuration doit être en format XML20 et une copie de ce fichier doit être présente en en-tête de chaque fichier de sauvegarde au format TXT21.

Capteurs de position Axe Z

Pour le lift-off, il est nécessaire d’installer un capteur de type analogique sur l’axe Z du Robot 3 axes à proximité du capteur GMI.
Cependant, la première fonction de ce capteur est de permettre d’obtenir une meilleure précision pour l’acquisition du capteur GMI en contrôlant la position verticale de ce dernier par rapport à la pièce à tester.

Accessibilité aux données enregistrées

L’utilisateur doit pouvoir charger et exploiter un fichier sauvegardé antérieurement. Restituant les données t’elle que les valeurs de l’acquisition ainsi que les paramètres de configurations propre à cette acquisition.

Présentation des périphériques et instruments utilisés

PC Embarqué : NI-PXI 1042Q

Pour notre projet de développement d’un banc de test par contrôle non destructif par magnétoscopie, il est imposé par le cahier des charges que nous devons utiliser un pc embarqué de chez National Instrument « NI-PXI 1042Q ».
Pour commencer le PC embarqué est imposé par le cahier des charges. Cependant, l’on aurait pu réaliser le banc de test à partir d’un simple PC. Mais l’avantage qu’offre le PC embarqué de chez National Instrument se situe au niveau du nombre de port PXI ainsi que son port GPIB et de la liaison série (RS232) directement intégré à l’appareil. Les cartes peuvent quant à elles communiquer par le bus PXI (routage de signaux en fond de panier).

PC Embarqué

Le PC embarqué contient le système
d’exploitation Windows XP SP2 et nous utilises
la version de développement 8.0 de LabView.
Il comporte :

  • 2 Ports RS 232 (1 entrée / 1 sortie)
  • 2 Ports USB
  • 1 Port GPIB
  • 1 Port PS2
  • 1Port VGA
  • 1 Port Eternet
  • 8 Slots Disponibles dont 7 Slots PXI
Carte d’Acquisition NI-PXI 6251

Caractéristique de la carte :

  • Résolution 16 bits
  • 16 voix analogiques/8 voix différentielles
  • Echantillonnage 1,25 M/s
Carte d’Acquisition NI-PXI 5412

Caractéristique de la carte :

  • Résolution 14 bits
  • Tension Max -6V à 6V
  • Plage de Fréquence 0 à 20 MHz
  • Signaux: Carre, Sinus, Triangle, Aléatoire, DC
Carte d’Acquisition NI-PXI 5112

Caractéristique de la carte :

  • Résolution 8 bits
  • 2 voix
  • Bande Passante Max 100Mhz
  • Echantillonnage 1M/s

GBF Agilent 33220A

APPLY: <fonction> [<fréquence>[,<amplitude>[,<décalage>] ]]

Par exemple, l’instruction suivante émise depuis l’ordinateur commande au générateur de fournir en sortie un signal sinusoïdal de 3 Vpp avec une fréquence de 5 kHz et une tension de décalage de -2.5V.

APPL:SIN 5 KHZ, 3.0 VPP, -2.5 V

Interface de Connexion : SCB-68

Caractéristique de l’interface de connexion :

  • Interface I/O 68 broches
  • Un capteur de température
  • 5 Switches
  • Compatible RSE (mode commun)/ Différentiel

Capteurs

Capteur CND
Définition

Les capteurs par contrôle non destructifs (CND) sont composés de deux parties. 

Une partie émettrice qui va générer un signale qui aura pour conséquence de créer une perturbation sur la cible, la pièce que l’on souhaite contrôler.

Et une partie réceptrice qui est chargé de récupérer les perturbations émis par la cible que l’on a excitée.  C’est le signal récupéré par la partie réceptrice du capteur qui nous intéresse. 

Dans l’industrie, il existe une multitude de capteur par contrôle non destructif. Ces capteurs ce départage en plusieurs familles chacun ayant ces avantages et inconvénients et des propriétés propres.

Il y a les capteurs par ultrasons, les capteurs par micro-ondes, les capteurs par thermographies, les capteurs par radiographies, les capteurs par courants de Foucault ou capteurs par magnétoscopies que nous utilisons comme capteur de notre banc de test. 

L’avantage qu’offrent les capteurs par contrôle non destructifs est assez intéressant d’un point de vue économique et technologique.

Ces capteurs permettent la caractérisation de l’état d’une pièce, d’un matériau sans l’endommager et permet la détection de défaut comme des microfissures, imperfections etc. Ils permettent aussi de mesurer des paramètres dimensionnels et ou constitutifs comme par exemple l’épaisseur, la longueur, la largueur d’une pièce ou d’un matériau. Ou encore de pouvoir définir ces états de contraintes. De plus ces capteurs, répondent à des enjeux de sécurité, de coûts, de précision sur les mesures etc. Ce qui justifie leurs applications et leurs utilisations dans des domaines varier comme les Transports, l’Industrie, l’Energétique, le Médical, etc

Capteur GMI (Giant Magneto Impedance)

Les capteurs par contrôle non destructifs (CND) sont composés de deux parties. 
Une partie émettrice qui va générer un signale qui aura pour conséquence de créer une perturbation sur la cible, la pièce que l’on souhaite contrôler.
Et une partie réceptrice qui est chargé de récupérer les perturbations émis par la cible que l’on a excitée.  C’est le signal récupéré par la partie réceptrice du capteur qui nous intéresse. 
 
Dans l’industrie, il existe une multitude de capteur par contrôle non destructif. Ces capteurs ce départage en plusieurs familles chacun ayant ces avantages et inconvénients et des propriétés propres.
Il y a les capteurs par ultrasons, les capteurs par micro-ondes, les capteurs par thermographies, les capteurs par radiographies, les capteurs par courants de Foucault ou capteurs par magnétoscopies que nous utilisons comme capteur de notre banc de test. 
 
L’avantage qu’offrent les capteurs par contrôle non destructifs est assez intéressant d’un point de vue économique et technologique.
Ces capteurs permettent la caractérisation de l’état d’une pièce, d’un matériau sans l’endommager et permet la détection de défaut comme des microfissures, imperfections etc. Ils permettent aussi de mesurer des paramètres dimensionnels et ou constitutifs comme par exemple l’épaisseur, la longueur, la largueur d’une pièce ou d’un matériau. Ou encore de pouvoir définir ces états de contraintes.
De plus ces capteurs, répondent à des enjeux de sécurité, de coûts, de précision sur les mesures etc. Ce qui justifie leurs applications et leurs utilisations dans des domaines varier comme les Transports, l’Industrie, l’Energétique, le Médical, etc

Il est important de savoir que même en l’absence d’une cible ferromagnétique, l’on peut avoir des variations dans les valeurs de notre Impédance. Cela est dû à la réception par le capteur GMI du champ magnétique terrestre.

Capteur Axe Z

Nous devons alors choisir un capteur selon plusieurs caractéristiques :

  • La plage de précision
  • Le coût
  • Le type de capteur
  • L’interface de communication

Pour la famille de capteur, nous avons après réflexion choisit de prendre un capteur de type « optique ». La raison de se choix se fait selon la logique suivante. Nous ne pouvons pas prendre un capteur de type magnétique, car cela pourrait créer des interférences magnétiques avec notre capteur.

Nous aurions pu choisir d’utiliser un capteur de type « sonore » basé sur le principe d’écho, mais cela nous paraissait moins précis que le capteur de type optique (infrarouge).

Nous avons donc cherché un capteur correspondant au critère demandé puis avons demandé un devis auprès du constructeur.

Nous avons donc trouvé un capteur optique d’une grande précision (20 mm) sur une plage de mesure convenant à notre système. De plus l’interface de communication est en liaison série ce qui ne pose aucun problème car le PXI possède de port RS 232.
Cependant, ce capteur étant très performant, son prix ne nous permet pas de le choisir du fait de la contrainte budgétaire.
Finalement, nous garderons dans notre choix le capteur fourni par la plateforme de distribution Conrad.
 
Bien que ce capteur soit moins performant que le capteur précédent, celui-ci reste abordable au niveau du prix. Il a une sorti de type analogique, et son interface de connexion peut être directement connecté à un PC, il ne nécessite pas d’interface de connexion pour fonctionner. Nous le connecterons par la suite à l’interface de connexion SCB-68

Codage des différentes fonctionnalités : Sous VI

Avant de commencer à coder directement l’application du banc de test du capteur, il est nécessaire développer chacune des fonctionnalités dont nous aurons besoin pour le fonctionnement de l’application. Pour cela, nous allons créer plusieurs dossiers dans notre dossier projet. Chaque dossier comportant exclusivement les codes nécessaires pour chaque fonction qui composera le logiciel notre banc de test.

Acquisition

Carte d’acquisition 6251

Cette carte de chez National Instrument va nous permettre d’acquérir directement le signal depuis l’interface de connexion SCB-68 de chez National Instrument. Nous utiliserons cette carte dans le cas où la fréquence d’acquisition est inférieure ou égale à 20 MHz.

Nous l’utiliserons aussi pour contrôler l’état des capteurs fin de course et le capteur de l’axe Z présent sur le Charly Robot 3 axes. Pour cela nous devons définir en fonction des différents capteurs les voies d’acquisition sur l’interface de connexion SCB-68 suivant le mode d’acquisition, c’est-à-dire Différentiel ou Commun (RSE) d’après les caractéristiques des capteurs.

Cette partie de code se déroule sur deux niveaux. Nous utilisons un assistant DaQmx en paramétrant les paramètres des voies d’acquisitions suivants les caractéristiques du tableau ci-dessus. Cependant nous devons laisser le choix à l’utilisateur de pouvoir modifier les paramètres d’acquisition pour le capteur GMI.
Pour cela, nous allons récupérer les valeurs entrées par l’utilisateur. Ces valeurs, vont être transmises grâce à des variables partagés, à l’assistant DaqMx que nous avons modifié, donc à notre sous-VI « Carte_6251 » qui est un VI-Standard (couleur Jaune).
 
La différence entre un VI-Express (couleur Bleu) et un VIStandard est que l’on peut modifier les paramètres de la fonction standard, se qui n’est pas possible lors de l’utilisation de la fonction express. (Identique à la surcharge de fonction).

Donc l’acquisition se fait en fonction des paramètres contenue dans les variables partagées que nous avons définis dans le fichier projet de notre code. De cette façon, l’on peut voir les variables partagées comme un espace mémoire partagé gérer par une machine virtuelle

(service sous LabView utilisant la MVP22 : Machine à variable partagé). Lors de la communication et du passage de variable entre les VI, l’on va charger dans la variable partagé nos valeurs, puis lors de la lecture de ces valeurs, le MVP va mettre à jour la variable partagée appelée et va fournir le contenu chargé précédemment.

L’avantage de l’utilisation des variables partagées est dans la transmission de valeur entre les VI.

Dans le corps du notre VI « Carte_6251 », nous définissons le nombre de voie, ainsi que la tension d’acquisition, le mode, le nom des voies etc. Puis l’on définit la fréquence d’acquisition ainsi que le taux d’échantillonnage.  Ensuite, nous appelons diverses fonctions afin de finaliser les paramètres de l’acquisition que nous allons faire.

Plusieurs capteurs sont acquis par la carte d’acquisition NI-PXI 6251. Nous nous intéressons seulement ici au capteur GMI. 

Donc une fois avoir acquis nos deux tensions, nous allons traiter les 2 signaux afin de pouvoir calculer l’Impédance.

Pour cela, nous allons dans un premier temps désassembler les signaux. Le premier signal qui est désassemblé correspond à Ugmi. Le second signal correspond lui à la tension Vr(t) = R*i(t).

Nous allons calculer la tension efficace du signal Ugmi grâce à la fonction « Mesures d’amplitudes et de niveau » que l’on configure pour que celui-ci applique le calcule de la moyenne Quadratique (RMS23).

Ensuite, nous allons traiter la seconde voie désassemblée afin de transformer le signal Vr(t) en i(t).

L’on sait que :

Vr(t)=Ri(t)          i(t)=Vr(t)/R        i(t)=Vr(t)/50

Une fois avoir calculé l’intensité, nous allons calculer le courant efficace grâce à la même fonction utilisé précédemment « Mesures d’amplitudes et de niveau » pour laquelle nous choisissons la fonctionnalité calcule de moyenne Quadratique (RMS).

Afin de pouvoir déterminer l’impédance, il suffit de fait le quotient de la tension efficace sur le courant efficace soit :

|Zgmi|  =  Ugmieff   /   Igmieff

Carte d’acquisition 5112

Cette carte de chez National Instrument va nous permettre comme précédemment d’acquérir le signal dans le cas où la fréquence d’acquisition est quant à elle supérieur à 20MHz afin d’obtenir une meilleur précision au niveau de l’acquisition.

Cependant, il était nécessaire d’après le cahier des charges de passée avant par la carte multiplexeur 2503. Cette carte de multiplexage ayant pour but d’orienter selon la fréquence d’acquisition voulue de basculer les 2 signaux du capteur GMI vers la carte d’acquisition 6251 ou la carte d’acquisition (oscilloscope) 5112.

Malheureusement, nous ne pouvons pas utiliser ce module multiplexeur du fait qu’il n’y a qu’un seul relai que l’on puisse commander.

Donc nous ne pouvons pas sélectionner le type de carte d’acquisition. La solution que nous avons retenue est de laisser à l’utilisateur de choisir lui-même la carte qu’il souhaite utiliser pour l’acquisition.

Il reste à revoir le schéma de connexion entre le capteur et la carte oscilloscope 5112. Et là se trouve un autre problème. Car l’acquisition des signaux fournit par le capteur GMI vers la carte d’acquisition 6251 se fait en mode Différentiel. Or comme nous souhaitons faire l’acquisition sur la carte 5112 qui n’est autre qu’un oscilloscope, les masses sont reliées (entrées en mode commun ou RSE). 

Pour le moment, nous ne somme pas en possession d’une solution qui nous permet de réaliser le schéma de câblage pour effectuer cette acquisition.  Cependant, comme précédemment, nous utiliserons une fonction express de LabView « NiScope – Express » que nous allons transformer en Fonction Standard pour que l’on puisse modifier les paramètres d’acquisitions de la carte.

Alimentation du Capteur GMI

Alimentation Emetteur
GBF Agilent 33220A

Le Générateur Base Fréquence (GBF) Agilent 33220A est un Générateur qui peut être utilisé directement par un technicien de manière direct ou qui peut être commandé à distance depuis un poste fixe. La communication du générateur est basé sur le protocole GPIB dans les commandes de contrôle sont spécifié dans la documentation fournit avec l’appareil.

Donc pour commander le GBF à via la liaison GPIB, il suffira de saisir la commande suivante :
APPL : Signal Frequence Tension
Comme type de signal nous pouvons choisir entre :

SINUSSIN
CARRESQR
TRIANGLERAMP
BRUITNOIS
CONTINUEDC


Pour la fréquence, il suffit d’envoyer la valeur. Par défaut, l’unité est en Hertz.
Pour la tension, comme pour la fréquence, il suffit d’entrer une valeur. L’unité par défaut est VPP24.

Contrôle Port GPIB

Sous LabView, nous réalisons le code qui permet de créer la séquence qui va permettre de contrôler le type de signal, la tension et la fréquence que nous voulons obtenir en sorti du GBF.

Cependant, il faudra pour la communication spécifier l’adresse de l’appareil. A la mise sous tension de celui-ci, l’adresse de connexion est indiquée sur l’interface du GBF (Si celui-ci est connecté à un PC).

Dans un premier temps nous allons construire la séquence qui va nous permettre de prendre le contrôle du GBF. En suivant  la syntaxe fournit par la documentation technique de l’appareil (voir parti ci-dessus).
Donc nous laissons  l’utilisateur  renseigner les paramètres de tension, fréquence et le type de signaux voulue.
Donc nous construisons la chaine de caractère suivante en concaténant les paramètres :
 
APPL : « TypeSignaux »_«Fréquence »,_«Tension »
 
Les valeurs de Fréquence et de Tension étant de type Double, il est nécessaire de les convertir en chaine de caractère. 
 
Attention : ‘_’ dans la syntaxe de la séquence que nous construisons est considérer comme le caractère espace.

Ensuite, nous rentrons dans une structure de type séquence.

Premièrement, nous utilisons une fonction GPIB de communication propre à LabView pour se connecter au GBF Agilent. Nous définissons l’adresse de l’appareil, et nous transmettons la syntaxe que nous avons crée auparavant. Nous ajoutons un « time out » de 5 secondes dans le cas d’une incapacité au PXI de se connecter au GBF.

Puis l’on récupère en sortie de cette fonction un booléen qui certifie le bonne envoie de la syntaxe à l’appareil ainsi que le bonne état de connexion.

Ensuite dans la seconde partie de notre structure séquentielle, nous ajoutons une temporisation d’une seconde.

Puis dans la dernière partie de notre séquentielle, nous récupérons l’acquittement en vérifiant si la syntaxe envoyé à bien été lu et interprété par le GPIB. Nous devons récupérer en cas de succès le message suivant :

Et en cas d’échec, ce type de message :

Alimentation du récepteur
Carte alimentation 5412

Pour alimenter le capteur GMI, nous utilisons la carte NI-PXI 5412 qui est un Générateur Base Fréquence (GBF). Pour cela, nous avons été confrontés à un problème assez important du fait que nous ne pouvons configurer le GBF de façon continue dû a des commutations intempestifs générer par la fonction d’initialisation de la carte. Les conséquences de vouloir configurer le GBF en continue, sont que sur le long terme nous risquons d’endommager la carte d’alimentation et deuxièmement, la carte ne délivre pas de courant car elle est s’initialise en boucle.

Pour parer ce problème et permettre à l’utilisateur de pouvoir gérer l’alimentation de la carte en tant réel, nous avons ajouté un bouton qui une fois activée transmet les paramètres au Sous VI « Carte_5412 ». Nous avons essayé de faire notre propre alimentation, mais cela n’a jamais été concluant. Alors nous avons utilisé une fonction LabView NI_FGEN EXPRESS que nous avons modifié. 

L’avantage de modifier un module EXPRESS de LabView nous permet de pouvoir passer des arguments en paramètre, et donc de changer les paramètres d’alimentation. Car un VI-Expresse ne contient que des paramètres prédéfinis par l’utilisateur et ne peux être changé via la face avant de notre programme.

Un VI-EXPRESS d’origine est de facilement reconnaissable par ça couleur bleue. Une fois modifier, celui-ci peut-être renommé et doit être enregistrer comme sous-vi indépendant. Sa couleur est jaune pastel.

Le code comporte deux niveaux :
 
Le premier niveau permet de recueillir les données saisies par l’utilisateur depuis l’interface de la face avant. Si l’utilisateur appuie sur le bouton d’alimentation,  les paramètres sont envoyés au second niveau du programme.

Le second niveau représente les fonctions de bas niveau de LabView permettant d’alimenter la carte d’alimentation NI-PXI 5412. Dans un premier temps, nous allons contrôler s’il existe des erreurs avant d’initialiser la carte. S’il existe des erreurs, un message s’affichera. Dans un second temps, nous récupérons les paramètres que nous avons transmis. 

Seulement à partir de maintenant, nous allons interagir avec la carte d’alimentation. Nous allons l’initialiser, puis la mettre en état d’arrêt. Cela est nécessaire du fait que l’étape qui suit définie la fonction standard de la carte ainsi que la définition d’une impédance interne (50 ohms par défaut).

Puis l’on va transmettre nos paramètres d’amplitude, fréquence et le type de signal que nous voulons avoir en sortie de notre carte. 

Avant de remettre la carte sous tension, l’on va configurer les propriétés niFgen du rapport cyclique de la carte d’alimentation NI-PXI – 5412.

Capteur Optique Axe Z

Les problèmes que nous avons rencontrés sur cette fonctionnalité se trouve au niveau de la traduction de la tension que nous fourni le capteur en distance. La documentation fournit par le fournisseur ne nous donne pas d’expression mathématique pour nous permettre de faire le lien entre la tension fournie et la distance entre le capteur et la cible.

Après avoir longtemps médité sur le meilleur moyens de déterminer cette valeur, nous avons décidé de crée un tableau de valeur afin de pouvoir vérifier l’allure de la courbe fournie par le constructeur et surtout pour avoir un tableau de référence de la tension fournie par le capteur en fonction de la distance.

Nous avons donc réalisé notre table en faisant varier un carton devant le capteur avec un pas de 1cm sur une plage de 0 à 60 cm.
L’acquisition des données nous a permis de confirmer la courbe
fournit par le fournisseur. 

Pour déterminer la position entre le capteur optique et la cible, nous avons utilisé le tableau de valeur déterminé précédemment comme valeur de référence.
Ayant un tableau bidimensionnel, nous allons désassembler ce tableau 2D en deux tableaux 1D. Le premier tableau contenant les distances, le second contenant les tensions. Ainsi, nous sommes sures que l’indexation des 2 tableaux est la même.
De cette façon, il suffit de comparer la valeur de la tension acquise avec les tensions contenues dans le tableau. De façon générale l’on recherche l’indexation de notre tableau via la condition :
 
(U Max > U Acqui) ET (U Acqui > U Min)
 
Soit de façon pratique :
 
(U(ref)[i] >U Acqui) && ((U Acqui >U (ref)[i+1] )
 
Si la condition n’est pas réalisée, nous continuons notre séquence qui va se répéter tant que la condition n’est pas réalisée (soit l’indice de notre tableau).
Une fois la condition réalisée, l’on va extraire la plage de distance grâce à notre tableau de référence. Il suffit pour cela d’utiliser les mêmes indices qui ont validés la condition. Ensuite, nous faisons la valeur moyenne des distances maximale et minimale. Nous venons donc de déterminer la distance entre la cible et le capteur Z.

Cependant, cette manière de déterminer la distance en fonction de la tension renvoyée n’est pas aussi précise qu’elle ne pourrait l’être. Notre capteur pouvant donner une précision de l’ordre du millimètre, nous ne donnons avec cette méthode qu’une précision de l’ordre du centimètre. Pour obtenir cette précision, il aurait été nécessaire d’établir un tableau de référence avec un pas de 1mm. Chose plutôt ardu et longue.

Il nous reste maintenant à gérer l’axe Z du Charly Robot 3 axes avec la position du Capteur Optique sur ce même axe pour le mode Manuel. Pour cela, nous allons laisser à l’utilisateur de choisir de gérer l’axe via le contrôle de l’axe Z par le joystick ou par un champ de commande. Dans le cas du contrôle de l’axe Z par un champ de commande, l’utilisateur devra saisir une distance comprise entre 33cm  et 38,5cm. Il nous suffira de comparer la distance souhaitée avec la distance lue.

Algorithme

DEBUT
        …
        LIRE « Distance Souhaitée par l’utilisateur »
        FAIRE TANT QUE « Distance souhaitée = ! Distance Calculée »

REPETER        
                   FAIRE « Calcule de la distance »
                   SI « Distance souhaitée > Distance Calculée »
                             FAIRE « Descendre l’Axe Z »
                   FIN SI
                   SI « Distance souhaitée < Distance Calculée »
                             FAIRE « Monter l’Axe Z »

FIN SI
                   SI « Distance souhaitée = Distance Calculée »
                             FAIRE « Ne pas bouger l’Axe Z »
                   FIN SI
           FIN TANT QUE
          …
FIN   

Malheureusement, nous ne sommes pas encore en état de pouvoir fournir une solution de codage pour gérer le lift-off du capteur GMI en fonction du déplacement de l’axe Z du Charly robot 3 axes.

Plot 3D

Les résultats doivent être affichés dans un graphique tridimensionnel afin de représenter la pièce scannée. Pour cela, nous devons tracer les points de coordonnée X ; Y ; Z. Les coordonnées de l’axe X et l’axe Y correspondent au positionnement du Charly Robot 3 axes. Les coordonnées de l’axe Z correspondent aux variations du capteur GMI.

Dans ce prototypage, nous simulons les variations des valeurs en X, Y  via deux potentiomètres. Les variations de l’axe Z sont obtenus en créant un tableau 2 dimensions des variations des variables X et Y.
Les valeurs simulées sont affichées dans un historique afin de pouvoir connaître les valeurs composant la surface représenté.
La représentation graphique des données comporte plusieurs choix d’ergonomie. L’utilisateur peut donc modifier la mise à l’échelle automatique, l’affichage des axes ainsi qu’une mise à l’échelle manuelle.
Il est aussi possible de choisir le style de courbe voulue (nuage de point,  surface pleine avec trait, etc) ainsi que le système de coordonnée souhaitée (Cartésienne, Cylindrique, Sphérique).

Fichier de Configuration XML

Les paramètres saisis par l’utilisateur doivent être sauvegardés dans un fichier portant l’extension .xml (Extensible Markup Language). La caractéristique de ce langage est basée sur l’arborescence et l’organisation des données dans le fichier. Ainsi, nous pouvons donc créer des balises personnalisées ayant pour contenu ce que nous souhaitons lui donner en guise de valeur.

Ecriture dans un fichier XML

Le problème rencontré dans cette partie, ce situe dans l’écriture des données à l’intérieur du fichier.

Car il existe plusieurs méthodes possibles pour écrire dans un fichier au format XML. 

La première méthode qui a été utilisé, était réalisable sous la version 8.0 de LabView alors que l’exemple était extrait d’une version supérieur.

Cependant, bien que la méthode soit bonne, elle ne permet pas d’exploiter le contenu du fichier. Car la méthode de lecture associée à cette écriture ne peut-être réalisée sous la version 8.0 de LabView. En conclusion la méthode d’écriture est basé sur l’exemple fournit par LabView version 8.0.

Il suffit d’aplanir les donnés d’un type en format XML. Dans notre cas, nous allons donc aplanir 18 fois des données puis  l’on va concaténer ces valeurs  et écrire ces dernières dans un fichier XML.

L’on peut voir ici le résultat de l’écriture des données dans le un éditeur de texte.
L’arborescence du fichier est faite de façon automatique. L’on voit que nous avons pour chaque valeur :
 
-Le type de donnée entre balise
 
-Le nom du champ
 
-La valeur que contient ce champ.
Lecture d’un fichier XML

Pour la lecture du fichier XML, nous devons dans la première phase renseigner le chemin où se trouve le fichier XML. Puis pour lancer la lecture, il suffit de cliquer sur le bouton « Ouvrir ».

L’on utilise la fonction lire dans un fichier XML. Puis dans une boucle conditionnel, si la lecture du fichier c’est passé sans erreur nous allons extraire les valeurs correspondants aux paramètres que nous souhaitons. Sinon, dans le cas d’une erreur dans la lecture du fichier, l’on affiche qu’une erreur est survenue lors de cette action. Dans le cas d’aucune erreur, nous allons afficher le contenu du fichier dans un indicateur de façon à pouvoir vérifier la présence de tous les champs. Les données fournies par le fichier XML vont être traités ensuite dans une structure séquentielle. Au totale, la structure séquentielle comporte autant d’étape qu’il y a de valeur à extraire. La méthode que nous utilisons pour extraire ces données consiste à rechercher les valeurs contenues entre les balises en utilisant l’indexation du fichier XML.

Donc dans un premier temps, nous recherchons dans les données extraites qu’elle information nous voulons en précisant son indexation. Puis l’on utilise la fonction « Redresser à partir d’un fichier XML » en indiquant le type de donnée que l’on souhaite redresser :

  • 0 de couleur Orange pour un DOUBLE
  • champ  vide de couleur Violet pour un string

Ensuite pour facilité la transmission des données entre les Sous VI, nous assemblons ces valeurs dans un cluster indicateur. Cependant, si lors du redressement une erreur subvient, l’on affiche un message d’erreur à l’utilisateur en lui spécifiant l’origine de l’erreur. 

Fichier de Sauvegarde TXT

Pour le fichier de sauvegarde. L’on va définir une structure pour le contenu de données composants le fichier. De plus, nous proposons une modification du cahier des charges en incluant dans le fichier de sauvegarde une copie de données composants le fichier XML afin que l’utilisateur puisse retrouver les paramètres choisies lors de l’acquisition effectuée par le passé.  Ainsi, nous proposons la structure suivante :

<Nombre d’Acquisition>
<TensionEmetteur>
<FrequenceEmetteur>
<TypeSignalEmetteur>
< TensionCapteur>
<FrequenceCapteur>
<TypeSignalCapteur>
<TensionMaxVoie1>
<TensionMinVoie1>
<NomVoie1>
<TensionMaxVoie2>
<TensionMinVoie2>
<NomVoie2>
<SeuilJoystick>
<PasZ>
<%ValeurAxe>
<VitesseRobot>
<TempoMs>

<HH:MM:SS___X___Y___Val>

L’on sait donc que notre fichier comporte en première ligne le nombre de point d’acquisition.
Puis nous avons les paramètres définis par l’utilisateur sur 18 lignes.
C’est seulement à partir de la 19 lignes que nous avons accès à nos données sous la forme :

HH:MM:SS___X___Y___ValHH    : correspond aux heures
MM  : correspond aux minutes
SS     : correspond aux secondes
___   : représente une tabulation
X : correspond à la position de l’axe X
Y : correspond à la position de l’axe Y
Val   : correspond à l’impédance du capteur
GMI

Attention, à la fin de chaque ligne, nous avons les caractères « Fin de ligne et Retour à la ligne ».

Cependant, nous ne connaissons pas le nombre de ligne car le nombre de ligne de data dépend du nombre d’acquisition.

Nous proposons comme nom de fichier par défaut le modèle suivant :

Acqui_JJ_MM_AAAA.txtJJ : correspond au jour de l’acquisition
MM : correspond au mois de l’acquisition
AAAA : correspond à l’année de l’acquisition
_ : représente un underscore

Après avoir définie la structure de notre fichier TXT ainsi que son nom, nous pouvons maintenant écrire dans ce fichier et lire ce fichier.

Ecriture dans un fichier TXT
Dans un premier temps, l’on récupère la date de la machine. Puis l’on crée la chaine de caractère correspondant à notre nom du fichier sous le format « Acqui_JJ_MM_AAAA ».
 
Attention, à la fin de chaque ligne, nous avons les caractères « Fin de ligne et Retour à la ligne ».
 
Puis nous utilisons une fonction « Boite de Dialogue Fichier » pour laisser le choix à l’utilisateur de modifier l’emplacement ou va être enregistré le fichier ainsi que de modifier le nom du fichier. Puis nous utilisons une fonction « Ouvrir/créer/remplacer un fichier » dans lequel nous spécifions que nous voulons Ouvrir ou créer un nouveau fichier avec seulement les droits d’écritures.
L’on rentre ensuite les paramètres de la pièce qui va définir le nombre de point d’acquisition qui va définir le nombre de ligne d’expression régulière. Nous convertissons ensuite la valeur de nombre d’acquisition en un type chaine de caractère que nous allons concaténer avec le caractère fin de ligne et retour charriot. Puis l’on utilise la fonction « Ecrire dans un fichier TXT » pour écrire la valeur du nombre d’acquisition en guise de première valeur de notre fichier.
 
Dans la seconde section de notre structure séquentielle, nous allons récupérer les valeurs de configurations souhaitées par l’utilisateur et convertir les valeurs de type entier ou double en type string. Puis nous allons concaténer ces valeurs en intercalant entre chaque valeur le caractère fin de ligne et retour chariot. Ce qui nous fait au total 18 valeurs donc ce qui va prendre 18 lignes au total dans notre fichier de la ligne 2 à la ligne 19. Il nous reste plus qu’à relier le contenu de la chaine créer vers une nouvelle fonction « Ecrire dans un fichier TXT » relié au même fichier.
 
Dans la dernière partie de notre boucle séquentielle, nous traitons et simulons l’enregistrement des valeurs acquissent d’une pièce ferromagnétique selon le modèle énoncé plus haut :
 
HH:MM:SS___X___Y___Val
 
Dans cette structure séquentielle, nous récupérons le nombre d’acquisition que nous allons réaliser et nous allons décrémenter cette valeur avant de faire entrer cette valeur dans une boucle DoWhile. La condition de fin de cette boucle est établie tant que la valeur d’itération de la boucle est supérieur ou égale au nombre d’acquisition que l’on décrémente.
Dans cette boucle DoWhile, nous avons mis une temporisation de 100 ms pour avoir des valeurs différentes et pour simuler une synchronisation. L’on réalise des traitements sur l’affichage de l’horodatage de façon à formaliser l’heure est la date sur le format que nous souhaitons.
Puis l’on va concaténer les valeurs HH:MM:SS avec les valeurs simulées en ajoutant entre les valeurs un caractère de tabulation et de finir la chaine avec les caractères de fin de ligne et de retour chariot. L’opération sera réalisée tant que nous n’avons pas atteint la condition de fin de boucle.
Une fois être sortie de la boucle DoWhile nous mettons fin à la structure séquentielle. Nous appelons la fonction « Fermer un fichier ».
Nous venons ainsi de générer notre fichier de sauvegarde d’on un exemple de contenu est visible ci-contre.

Lecture dans un fichier TXT

Pour la lecture d’un fichier d’acquisition, nous allons dans un premier temps ouvrir une boite de dialogue permettant à l’utilisateur de sélectionner le fichier qu’il souhaite consulter.
Pour cela avant de rentrer dans la structure séquentielle, nous utilisons une fonction « Boite de Dialogue Fichier » pour laisser le choix à l’utilisateur de choisir quel fichier consulter. Puis nous utilisons une fonction « Ouvrir/créer/remplacer un fichier » dans lequel nous spécifions que nous voulons seulement ouvrir un fichier seulement la lecture de disponible. Ensuite nous relions cette fonction à une fonction qui va nous fournir la taille du fichier texte que l’on souhaite ouvrir. Cette fonction est indispensable pour lire un fichier. Puis l’on va utiliser la fonction « Lire dans un fichier texte » en précisant la taille du fichier. Nous récupérons en sorti de cette fonction une chaine de caractère qui contient toutes les données contenu dans notre fichier texte. Ayant accès au contenu du fichier, nous pouvons maintenant refermer le fichier texte grâce à la fonction « Fermer un fichier ».
 
A partir de maintenant, nous allons traiter le contenu du fichier que nous venons de lire.
Dans un premier temps, nous allons lire les expressions qui ne sont de forme régulière. C’est-à-dire les 19 premières lignes qui contiennent le nombre d’acquisition ainsi que les configurations souhaitées lors de l’acquisition.
Pour cela nous allons utiliser la fonction « Balayer un fichier » en indiquant le chemin du fichier et en précisant le type des données que l’on veut extraire. Dans notre cas, nous recherchons des données de type chaine de caractère. Une fois ces données extraient, nous les affichons. Seule la donnée correspondante au nombre d’acquisition est converti en entier 32 bit.
 
Dans la seconde partie de notre structure séquentielle, nous allons traiter les expressions régulières, soit dans notre cas les données d’acquisition. Nous allons utiliser la fonction « Chaîne au format tableur en tableau » en indiquant que nous souhaitons avoir en sorti un tableau 2 Dimensions et que notre séparateur tableur est le caractère tabulation.
Ensuite, nous allons faire plusieurs opérations pour supprimer les expressions irrégulières. Pour cela nous allons supprimer les 19 premières lignes de notre tableau 2 dimensions. Ainsi, nous récupérons un tableau 2D contenant exclusivement des données :

Après avoir obtenue ce tableau, nous allons décimer celui-ci de

façon à obtenir 3 tableaux 1D contenant les valeurs de X, les valeurs de Y, les valeurs Val. Pour cela, nous utilisons la fonction « Sous ensemble d’un tableau » pour isoler les colonnes que l’on souhaite avoir, puis l’on va utiliser la fonction « Redimensionner un tableau » pour obtenir un tableau 1 dimension de nos valeurs. Une fois les tableaux 1D obtenue,  l’on convertie les tableaux de type string en tableau de type entier 32 bit, puis en type double.  Dans la dernière partie de notre séquence il ne reste plus alors à afficher le résultat du fichier dans un plot 3D à partir des tableaux. Seul les données de l’axe Z doivent être sous la forme d’une matrice, ou les données de l’axe Z sont exprimées en fonction des données de l’axe Y.

Intégration Individuelle

Conclusion

Pour faire un point sur cette partie individuelle, nous pouvons dire que cette dernière à été menée à environ 92% de l’objectif finale. Les phases qui ne sont pas réalisées se situent au niveau de l’intégration finale avec la partie individuelle de l’Etudiant 1 (Robin GRIVET).

Pour la fonctionnalité du Capteur Z tous a été réalisé au niveau du prototypage. Cette fonctionnalité est donc opérationnelle. Cependant, nous avons rencontré de nombreux dilemme dans la phase d’intégration intermédiaire avec la fonctionnalité Mode Manuel. Donc l’intégration à échouer, et nous ne sommes pas en mesure de réaliser le contrôle de l’axe Z du Charly robot en fonction du lift-off du capteur GMI.

L’intégration de la fonctionnalité de Sauvegarde n’est pas complète du fait que pour générer un fichier TXT, nous devons réaliser une Acquisition du capteur GMI en Mode Automatique. Or nous sommes en cours de recherche de solution pour créer la synchronisation entre ces deux fonctionnalités. Une fois la synchronisation réalisée, nous pourrons écrire le fichier de sauvegarde.

Cependant, la fonction d’écriture dans un fichier texte est bien opérationnel mais ne fonctionne quand simulant des valeurs.

Conclusion

C’est marrant de retomber sur ce projet de fin de cycle par hasard 14 ans plus tard. Avec le recul j’aurais choisi d’autres technologies 🙂 Les fautes d’orthographes sont légion et le style, parlons du style. C’est lourdingue à souhait. Mais ne faut il pas commencer quelque part ? 🙂 J’ai volontairement fait sauter les plannings car comme tout le monde le sait, les plannings sont bidons car saisie aux derniers moments et n’apporte aucune plus valu.

La nostalgie me reprend. Je revois le travail effectué avec mon binôme Robin, le temps passé chez lui et au labo. De notre machine à café qui finira par partir avec el grande Zini, café qui lorsqu’il était préparé par mes soins était tout simplement imbuvable. De l’engueulade qui nous avions pris lors de la présentation de notre projet à mi-parcours par Joël MOUTOUSSAMY, alors que pour nous notre rendu était correct. Le souvenir lors de notre soutenance du reboot le PC qui avait planté après le passage de Robin.

Ce projet m’aura rapporté la note de 14/20.

Au-delà de la note c’est à ce moment précis que j’ai compris mon projet professionnel. Je voulais m’orienter dans la R&D, rester dans le milieu industriel et devenir enseignant. Chose qui par la suite changera quelque peu 🙂

Le mot de la fin :

Vous convoitez ma banane Monsieur GRIVET ?

Un professeur à R. GRIVET durant un contrôle sur table

  1. GMI : Geant Magneto-Impedant ↩︎
  2. LPP : Laboratoire de Physique et Plasma ↩︎
  3. ARDPI : Agence pour la Recherche et le Développement de Produits Industriels ↩︎
  4. CND : Contrôle Non Destructif ↩︎
  5. PXI : Extension for Instrumentation ↩︎
  6. PC : Personal Computer ↩︎
  7. GPIB : General Purpose Interface Bus ↩︎
  8. RS232 : Recommended Standard 232 ↩︎
  9. GPL : General Public License ↩︎
  10. UML : Unified Modeling Language ↩︎
  11. IDE : Interface de DEveloppement ↩︎
  12. OS : Operating System ↩︎
  13. SP2 : Service Pack 2 ↩︎
  14. GBF : Générateur Base Fréquence ↩︎
  15. TOR : Tout Ou Rien ↩︎
  16. I/O : Input / Output ↩︎
  17. RSE : Referenced Single-Ended ↩︎
  18. CR : Cariage Return ↩︎
  19. LF : Line Feed ↩︎
  20. XML : eXtensible Markup Language ↩︎
  21. TXT : Texte ↩︎
  22. MVP : Machine à Variable Partagé ↩︎
  23. RMS : Root Main Square ↩︎
  24. VPP : Valeur Pic à Pic ↩︎