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é |
POSSEDE |
—– |
|
Interface de connexion (NI SCB-68) |
POSSEDE |
—– |
|
GBF Agilent (33220A) |
POSSEDE |
—– |
|
Carte générateur de signaux arbitraires |
POSSEDE |
—– |
|
Carte numériseur haute fréquence d’échantillonnage |
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 :
|
![]() |
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
|
![]() |
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 :
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) |
|
Réception Série ![]() |
Ce bloc réceptionne les caractères de la ligne série. (Read) |
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 |
On test la communication en envoyant une commande au robot, et on attend qu’il envoie une réponse |
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 :
|
![]() |
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.
- 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
- On utilise un nœud de propriété pour modifier les paramètres (le contrôle de flot de donnée)
- 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 valeur maximal sur l’axe Y. On ajoute donc une condition à la suite de ses 4 trames :
|
![]() |
Une fois la distance maximal en Y atteinte, balayage. Cette dernière trame est la même que celle utilisé recommencer l’opération. |

|
1 – Incrémentation X ![]() 1 : C’est le nombre de fois que la trame sera envoyée : NbrBoucleX = DistanceX / PasX
|
2 – Incrémentation Y ![]() 1 : C’est le PasY définit par l’utilisateur. Il est utilisé ici pour créer
|
|
3 – Incrémentation -X ![]() 1 : C’est le nombre de fois que la trame sera envoyée : NbrBoucleX = DistanceX / PasX
|
4 – Incrémentation Y ![]() On envoie a nouveau la trame d’incrémentation de l’axeY crée |

|
Test de fin de balayage
|
5 – Déplacement final
|
![]() |
Le balayage est réalisé, il ne reste plus qu’a revenir au point d’origine de
La flèche correspond à un test : ![]() L’envoie de la trame de retour est validé |
![]() |
L’interface du prototype :
Les paramètres Z ne sont pas |
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.
|
|
Choix des composants :
On utilise des résistances (1.5Kohms) afin de fixé un faible courant :
| U=RxI | U=5V | On prend des résistances 1.5Kohms. |
| I=U/R | I=5/1500 | I=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
|
![]() |
Carte d’Acquisition NI-PXI 6251
|
Caractéristique de la carte :
|
![]() |
Carte d’Acquisition NI-PXI 5412
|
Caractéristique de la carte :
|
![]() |
Carte d’Acquisition NI-PXI 5112
|
Caractéristique de la carte :
|
![]() |
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 :
|
|
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. |
![]() |
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 :
|
![]() |
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). |
![]() |
|
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 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. |
![]() |

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 REPETER FIN SI |
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. |
![]() |

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.
|
![]() |

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 :
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> |
L’on sait donc que notre fichier comporte en première ligne le nombre de point d’acquisition.
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.txt | JJ : 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. ![]() 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
- GMI : Geant Magneto-Impedant ↩︎
- LPP : Laboratoire de Physique et Plasma ↩︎
- ARDPI : Agence pour la Recherche et le Développement de Produits Industriels ↩︎
- CND : Contrôle Non Destructif ↩︎
- PXI : Extension for Instrumentation ↩︎
- PC : Personal Computer ↩︎
- GPIB : General Purpose Interface Bus ↩︎
- RS232 : Recommended Standard 232 ↩︎
- GPL : General Public License ↩︎
- UML : Unified Modeling Language ↩︎
- IDE : Interface de DEveloppement ↩︎
- OS : Operating System ↩︎
- SP2 : Service Pack 2 ↩︎
- GBF : Générateur Base Fréquence ↩︎
- TOR : Tout Ou Rien ↩︎
- I/O : Input / Output ↩︎
- RSE : Referenced Single-Ended ↩︎
- CR : Cariage Return ↩︎
- LF : Line Feed ↩︎
- XML : eXtensible Markup Language ↩︎
- TXT : Texte ↩︎
- MVP : Machine à Variable Partagé ↩︎
- RMS : Root Main Square ↩︎
- VPP : Valeur Pic à Pic ↩︎


















































































