13.07.2013 Views

Conception et réalisation d'un syst`eme d'instrumentation ... - CoDE

Conception et réalisation d'un syst`eme d'instrumentation ... - CoDE

Conception et réalisation d'un syst`eme d'instrumentation ... - CoDE

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

UNIVERSITE LIBRE DE BRUXELLES<br />

Faculté des Sciences appliquées<br />

Ecole Polytechnique<br />

Année académique 2000-2001<br />

<strong>Conception</strong> <strong>et</strong> <strong>réalisation</strong> d’un système<br />

d’instrumentation distribuée basé sur l’architecture<br />

Jini<br />

Promoteurs :<br />

Prof. Francis Grenez<br />

Prof. Hugues Bersini<br />

Philippe De Doncker<br />

Travail de fin d’études présenté par<br />

Jean-Michel Dricot en vue de l’obtention<br />

du grade d’ingénieur civil<br />

informaticien


Remerciements<br />

Je tiens à remercier ici tout ceux qui de près ou de loin ont contribué à la <strong>réalisation</strong><br />

de ce mémoire. Même si ce travail est avant tout l’oeuvre d’une seule personne, je n’aurais<br />

pu aboutir sans les conseils avisés <strong>et</strong> les encouragements de mes promoteurs.<br />

J’aimerais d’abord remercier tout particulièrement le Professeur Francis Grenez ainsi<br />

que Mr. Philippe De Doncker pour leur aide, leur disponibilité <strong>et</strong> le soutien dont ils ont fait<br />

part tout au long de c<strong>et</strong>te année. J’ai été fort touché par leurs initiatives à mon égard <strong>et</strong><br />

leurs encouragements qui ont permis la publication <strong>et</strong> la présentation de ce travail, m’offrant<br />

de par là même un atout considérable au moment d’entamer une carrière académique.<br />

Je voudrais également remercier le Professeur Hugues Bersini de m’avoir offert la possibilité<br />

de découvrir la technologie Jini, marriant si subtilement l’Informatique à l’Electronique.<br />

Je tiens à remercier personellement Mr. Esteban Zimányi, à la fois Professeur <strong>et</strong> ami,<br />

qui a su prendre le temps de me conseiller à de nombreuses reprises quant la redaction de<br />

c<strong>et</strong> ouvrage.<br />

Il va sans dire que je remercie les membres du Service d’Electricité Générale pour leur<br />

sympathie <strong>et</strong> leur acceuil chaleureux, une année durant, dans leurs locaux.<br />

J’ai une pensée pour tous mes camarades de promotion dont l’optimisme, la bonne<br />

humeur <strong>et</strong> la fraternité m’ont permis de vivre pendant toutes ces années une amitié extraordinairement<br />

épanouissante.<br />

Je ne voudrais pas non plus oublier mon Amoureuse qui a toujours trouvé la force <strong>et</strong><br />

la patience de me soutenir lorsque j’en avais besoin.<br />

Enfin, j’aimerais faire plus que de simples remerciements à mes Parents qui ont traversé<br />

avec moi toutes ces années d’étude à l’Université. Les épreuves que j’ai traversées ont été les<br />

leurs également, <strong>et</strong> la moindre des choses que je puisse faire pour leur prouver ma gratitude<br />

est de leur dédier ce mémoire.<br />

1


Table des matières<br />

I Étude théorique 6<br />

1 Instrumentation Virtuelle 7<br />

1.1 Introduction <strong>et</strong> Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

1.2 Le contrôle local des appareils de mesure . . . . . . . . . . . . . . . . . . . 9<br />

1.2.1 GPIB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

1.2.2 La programmation visuelle . . . . . . . . . . . . . . . . . . . . . . . 12<br />

1.3 Instrumentation distribuée . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

1.3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

1.3.2 IEEE 1451 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

1.3.3 GPIB-En<strong>et</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />

1.3.4 Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

2 CORBA 20<br />

2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

2.2 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

2.2.1 IDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />

2.2.2 l’ORB <strong>et</strong> l’IIOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

2.2.3 Le mécanisme de marshallisation . . . . . . . . . . . . . . . . . . . 25<br />

2.2.4 Les Obj<strong>et</strong>s standards . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />

2.3 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

3 JAVA <strong>et</strong> RMI 29<br />

3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

3.2 La technologie Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

3.3 RMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />

3.3.1 Le modèle proposé par Java : RMI . . . . . . . . . . . . . . . . . . 33<br />

3.3.2 Le transfert dynamique de code mobile . . . . . . . . . . . . . . . . 34<br />

3.4 Java hardware : le PicoJAVA . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

4 Architecture Jini 38<br />

4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />

4.2 Architecture <strong>et</strong> principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

4.3 Le modèle d’interaction dynamique . . . . . . . . . . . . . . . . . . . . . . 42<br />

2


4.3.1 Interrogation du Lookup par les clients . . . . . . . . . . . . . . . . 42<br />

4.3.2 Le concept de Leasing . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />

II Réalisation d’un système d’instrumentation distribuée 48<br />

5 Positionnement de JINI par rapport aux solutions actuelles 49<br />

5.1 CORBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />

5.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />

5.1.2 Aspects communs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />

5.1.3 Éléments de distinction . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

5.1.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

5.2 UPNP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

5.2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

5.2.2 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

5.2.3 Éléments de distinction . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />

5.3 IEEE 1451 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />

5.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54<br />

6 Contrôle local des instruments de mesure en Java 55<br />

6.1 Contrôle local des instruments GPIB . . . . . . . . . . . . . . . . . . . . . 55<br />

6.2 l’interface standard IEEE 488 pour Java . . . . . . . . . . . . . . . . . . . 56<br />

7 Utilisation de JINI dans le cadre de l’instrumentation virtuelle 61<br />

7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />

7.2 Interfaçage des instruments de mesure . . . . . . . . . . . . . . . . . . . . 62<br />

7.2.1 Interfaces standardisées . . . . . . . . . . . . . . . . . . . . . . . . . 62<br />

7.2.2 Introspection dynamique des capacités des instruments . . . . . . . 65<br />

7.3 Exploitation du réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

7.3.1 Les domaines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

7.3.2 Instrumentation distante . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

7.4 Les apports propres à Jini . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />

7.4.1 Robustesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />

7.4.2 Interfaces graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />

8 Intégration de Jini dans les solutions actuelles 71<br />

8.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />

8.2 Implantation d’une interface de programmation visuelle intégrant Jini . . . 72<br />

8.3 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />

9 Conclusion <strong>et</strong> perspectives 80


Introduction<br />

Contexte de travail<br />

Le développement <strong>et</strong> l’utilisation des instruments de mesure programmables sont actuellement<br />

largement exploités, tant dans le monde académique que dans les industries,<br />

menant à des résultats <strong>et</strong> à des mises en oeuvre prom<strong>et</strong>teuses. Ceci découle principalement<br />

de la possibilité d’utilisation d’architectures programmables présentant actuellement des<br />

performances élevées à un coût raisonnable. En particulier, la capacité de modifier le processus<br />

de prise de mesure en repensant uniquement l’algorithme exécuté par l’ordinateur<br />

de contrôle <strong>et</strong> ce, sans remplacer la moindre pièce matérielle, rend l’expérimentation plus<br />

modulaire, réutilisable <strong>et</strong> flexible. Le développement de composants d’acquisition de mesure<br />

génériques <strong>et</strong> réutilisables, notamment par une approche orientée obj<strong>et</strong>, a permis de<br />

réduire drastiquement les coûts de développement <strong>et</strong> de mise à niveau des laboratoires de<br />

mesure.<br />

Un certain nombre de standards existent afin de perm<strong>et</strong>tre le contrôle de senseurs<br />

ou d’actuateurs depuis des stations de travail ordinaires. A ces standards éléctriques sont<br />

associés des outils logiciels facilitant la mise en oeuvre, souvent fastidieuse, de ces appareils.<br />

Problématique<br />

L’introduction de c<strong>et</strong>te approche <strong>et</strong> l’élaboration des moyens logiciels qui les accompagne<br />

remonte à près de vingt ans. L’Informatique <strong>et</strong> l’Electronique ont connu, au cours de<br />

ces deux dernières décénies, des évolution majeures. Les ordinateurs présentent des puissances<br />

de calcul croissantes <strong>et</strong> sont actuellement presque toujours intégrés dans des réseaux<br />

locaux ou globaux, à l’instar d’Intern<strong>et</strong>.<br />

De telles capacités, en terme de traitement des mesures, de stockage de données issues<br />

d’interaction entre appareils, sont peu ou pas utilisées dans le cadre de l’instrumentation.<br />

Les modèles mis en oeuvre dans les solutions actuelles ne peuvent tirer un bénéfice de c<strong>et</strong>te<br />

explosion de nouvelles technologies, privant ainsi l’ingéniérie de la mesure <strong>et</strong> du signal<br />

d’outils précieux.<br />

4


Contributions<br />

Le présent travail tente d’apporter une solution à ce problème sous la forme de l’utilisation<br />

d’un nouvelle technologie connue sous le nom de Jini. Jini propose un modèle<br />

d’interaction dynamique tirant bénéfice de la plateforme orientée obj<strong>et</strong> Java. Ainsi, nous<br />

avons été à même de créer un réseau d’instrumentation distribué dans lequel les appareils,<br />

actuateurs ou senseurs, sont à même d’interragir entre eux <strong>et</strong> avec des logiciels clients de<br />

manière totalement transparente.<br />

Les contraintes de robustesse, vis-à-vis des pannes ou de la qualité du réseau, ont pu<br />

être intégrées dans c<strong>et</strong>te technologie au moyen d’une étude de Jini attachée spécifiquement<br />

à répondre aux besoins de l’instrumentation. Une intégration de c<strong>et</strong>te solution dans les<br />

logiciels existants, tels que LabVIEW, est également possible.<br />

Cheminement de l’exposé<br />

Le présent manuscrit comporte deux parties. Une introduction théorique initie le cheminement.<br />

Dans un premier temps nous situerons le contexte de la prise de mesure ainsi<br />

que les technologies utilisées jusqu’à présent pour réaliser celle-ci. Nous exposerons ensuites<br />

certaines techniques d’interaction entre obj<strong>et</strong>s à travers le réseau qui nous perm<strong>et</strong>trons<br />

dans le début de la seconde partie de justifier le choix de Jini comme solution à la<br />

problématique spécifique des instruments distribués. Nous poursuivrons en détaillant la<br />

<strong>réalisation</strong> complète d’un système d’instrumentation distribuée se basant sur la plateforme<br />

Java <strong>et</strong> l’architecture Jini. Enfin, il sera montré comment il est possible d’intégrer la solution<br />

proposée dans les logiciels existants.<br />

Un cédérom complète le présent travail. Il contient l’ensemble des annexes,le programme<br />

de contrôle JiniLab ainsi que le code source des services Jini développés. Ce média a été<br />

remis au Professeur Grenez <strong>et</strong> est conservé dans la bibliothèque du Service d’Electricité<br />

Générale.


Première partie<br />

Étude théorique<br />

6


Chapitre 1<br />

Instrumentation Virtuelle<br />

Sommaire<br />

1.1 Introduction <strong>et</strong> Motivation . . . . . . . . . . . . . . . . . . . . . 7<br />

1.2 Le contrôle local des appareils de mesure . . . . . . . . . . . . 9<br />

1.2.1 GPIB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

1.2.2 La programmation visuelle . . . . . . . . . . . . . . . . . . . . . 12<br />

1.3 Instrumentation distribuée . . . . . . . . . . . . . . . . . . . . . 14<br />

1.3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

1.3.2 IEEE 1451 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

1.3.3 GPIB-En<strong>et</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />

1.3.4 Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

1.1 Introduction <strong>et</strong> Motivation<br />

Le concept d’instruments virtuels [26] a été introduit à la base pour simplifier la conception,<br />

l’implantation <strong>et</strong> l’utilisation de systèmes d’instrumentation programmables en adoptant<br />

une interface visuelle. La programmation visuelle perm<strong>et</strong> une <strong>réalisation</strong> avant tout<br />

conceptuelle du processus de prise de mesure, perm<strong>et</strong>tant ainsi aux personnes peu versées<br />

dans la programmation de m<strong>et</strong>tre au point rapidement des algorithmes performants. Le programme<br />

y est décrit de manière graphique en sélectionnant <strong>et</strong> en assemblant des blocs fonctionnels<br />

présents dans des bibliothèques de développement. Ce type d’approche, présentant<br />

des interfaces graphiques ressemblant aux instruments réels, rend ainsi l’utilisation <strong>et</strong> la<br />

compréhension de l’instrumentation virtuelle plus aisée pour les personnes expertes en<br />

expérimentation ”réelle”.<br />

7


1.1. INTRODUCTION ET MOTIVATION<br />

l’utilisation du réseau a depuis peu été incorporée aux processus de prise de mesure<br />

avec beaucoup de succès. C<strong>et</strong>te nouvelle approche fonctionnelle perm<strong>et</strong> en eff<strong>et</strong> non seulement<br />

d’interconnecter des instruments entre eux, mais également de créer des zones de<br />

post-traitement des données, comme des bases de données ou des logiciels de DSP. C<strong>et</strong>te<br />

configuration est particulièrement rentable, tant d’un point vue économique que du point<br />

de vue de l’utilisation efficace des ressources disponibles sur le réseau local du laboratoire,<br />

mais peut également se révéler nécessaire lorsque les points de mesure sont fortement<br />

disséminés ou distants <strong>et</strong> qu’il deviendrait donc financièrement inabordable d’y adjoindre<br />

un post-traitement informatique.<br />

Fig. 1.1 – l’utilisation de l’instrumentation virtuelle perm<strong>et</strong> l’exploitation d’une large<br />

variété de ressources, notamment celles fournies par les ordinateurs de contrôle <strong>et</strong> plus<br />

récemment, l’intégration des réseaux locaux industriels ou de l’Intern<strong>et</strong><br />

Enfin, le développement de systèmes embarqués présentant des puissances de calcul<br />

pour un coût acceptable <strong>et</strong> l’émergence de technologies d’interconnexion perm<strong>et</strong>tant de<br />

créer spontanément des réseaux ”nomades” offrent des possibilité nouvelles qui perm<strong>et</strong>tent<br />

l’introduction efficace d’une composante logicielle à même le système ou situé dans un<br />

proche voisinage.<br />

8


1.2. LE CONTRÔLE LOCAL DES APPAREILS DE MESURE<br />

1.2 Le contrôle local des appareils de mesure<br />

Les systèmes classiques de contrôle local des appareils par un PC offrent l’avantage<br />

de pouvoir confiner en un même lieu les composants matériels d’expérimentation chargés<br />

de l’acquisition ainsi que les éléments chargés du contrôle des instruments <strong>et</strong> de la mise<br />

à jour des données. Toutes les opérations relatives à la prise de la mesure sont effectuées<br />

par un logiciel spécialisé. Ce schéma de conception <strong>et</strong> de déploiement a conduit à standardiser<br />

les cartes d’ entrées/sorties dévolues à l’acquisition <strong>et</strong> la mise à jour du signal,<br />

tout en diminuant le coût global du processus entier d’expérimentation (e.g. l’acquisition,<br />

la maintenance mais aussi le développement logiciel <strong>et</strong> la prise en charge de la formation<br />

des techniciens).<br />

De nombreuses initiative relatives à la standardisation <strong>et</strong> l’interfaçage ont été entreprises<br />

depuis longtemps par les industriels. Cependant, l’analyse des solutions existantes<br />

sur le marché montre qu’il n’ existe pas de standard ouvert universellement adopté mais<br />

uniquement deux systèmes propriétaires embrassés par une partie extrêmement importante<br />

des utilisateurs. Il s’ agit d’une part de l’utilisation du bus GPIB afin de perm<strong>et</strong>tre<br />

la connexion cohérente d’appareils de mesure <strong>et</strong> d’appareils de contrôle, PC par exemple.<br />

d’autre part, du point de vue de l’interfaçage <strong>et</strong> de la programmation visuelle, LabVIEW<br />

de la société National Instruments sera évoqué ici afin de bien montrer comment on peut<br />

utiliser les concepts proposés par le modèle de l’instrumentation virtuelle.<br />

1.2.1 GPIB<br />

Le bus GPIB, standardisé sous les références IEEE 488.1 <strong>et</strong> IEEE488.2 est un système<br />

d’interconnexion des instruments imaginé par Hewl<strong>et</strong>t-Packard en 1975. Anciennement<br />

connu sous la dénomination HPIB, ce modèle de bus est constitué d’un certain nombre<br />

d’éléments standardisés :<br />

1. une interface électrique perm<strong>et</strong>tant l’envoi d’information <strong>et</strong> du statut actuel des<br />

périphériques de la ligne.<br />

2. la possibilité de connecter des appareils sans les différencier au vu de leur rôle<br />

spécifique : envoi ou réception de données. Chaque appareil est vu comme un noeud<br />

du système à même d’ém<strong>et</strong>tre ou de recevoir une information à un moment donné.<br />

3. un modèle de communication basé sur l’envoi de messages entre les appareils sous<br />

forme de chaînes de caractères. Chaque appareil est capable de répondre aux sollicitations<br />

par renvoi d’un message <strong>et</strong> par l’ ajustement du statut de la ligne afin de<br />

refléter l’état actuel du bus ou signaler une erreur.<br />

Notons enfin que 14 appareils sont ainsi connectables sur un bus GPIB sur une longueur<br />

totale ne dépassant pas 20 mètres.<br />

Le concept du contrôleur <strong>et</strong> des périphériques proposé par le IEEE 488.1 est illustré aux<br />

figures 1.2 <strong>et</strong> 1.3. Les contrôleurs ont la capacité d’envoyer des commandes, de présenter<br />

9


1.2. LE CONTRÔLE LOCAL DES APPAREILS DE MESURE<br />

des données sur le bus <strong>et</strong> d’écouter les messages envoyés par les périphériques. Le contrôle<br />

du bus peut passer à tout moment du Contrôleur en Charge (CIC : Controller In Charge)<br />

actif à n’ importe quel autre périphérique ayant la capacité d’être un contrôleur. Un <strong>et</strong> un<br />

seul contrôleur du système est défini comme étant le Contrôleur Système global (System<br />

Controller) est sera désigné à l’instant initial comme Contrôleur en Charge.<br />

Controller Device #1<br />

Control,<br />

Talk, Listen<br />

Piggyback<br />

Cables<br />

Talk, Listen<br />

Device #n<br />

Talk, Listen<br />

Fig. 1.2 – Schématisation du bus IEEE 488.1<br />

Fig. 1.3 – Le chaînage des appareils IEEE 488.1 sur le bus s’ effectue sans disposition<br />

particulière.<br />

Les périphériques sont identifiés sur la chaîne via un adresse unique qu’ils doivent<br />

posséder lors de la mise en service de l’appareil. C<strong>et</strong>te adresse est usuellement imposée par<br />

l’expérimentateur au moyen du panneau frontal de l’appareil. Les adresses sont faites de<br />

deux parties : un adresse primaire, comprise entre 0 <strong>et</strong> 31 <strong>et</strong> une adresse secondaire utilisée<br />

pour adresser des éléments particuliers internes à l’appareil considéré. Par exemple,<br />

un appareil utilisé pour interfacer plusieurs ports série aura une adresse secondaire pour<br />

10


1.2. LE CONTRÔLE LOCAL DES APPAREILS DE MESURE<br />

chaque canal de transmission contrôlé. Notons que bien que 31 adresses soient disponibles,<br />

GPIB limite à 14 le nombre d’appareils adressables sur un même bus à un moment donné.<br />

Lors de l’utilisation, certains appareils sont dédiés uniquement à écouter <strong>et</strong> d’autre à<br />

parler. On parle de modèle talker–listener. Ceci perm<strong>et</strong> de réaliser une communication sans<br />

nécessiter l’existence d’un contrôleur global pour tout le système : lorsqu’un appareil parle,<br />

tous les autres écoutent. Lorsqu’un appareil désire parler, il le signale sur le bus <strong>et</strong> devient<br />

l’unique Contrôleur en Charge du bus. Lorsqu’un instrument ém<strong>et</strong>, les messages peuvent<br />

êtres envoyés pour toute la ligne ou adressés à un appareil particulier.<br />

IEEE 488.1 : Interface électrique<br />

L’interface électrique présentée par les appareils compatibles GPIB repose sur un modèle<br />

de transmission des informations en parallèle. Les 16 lignes utiles sur le connecteur se divisent<br />

comme suit : 8 bits sont alloués à la transmission bidirectionnelle des informations,<br />

3 au handshake <strong>et</strong> 5 perm<strong>et</strong>tent la signalisation de l’état du bus <strong>et</strong> l’envoi d’évènements.<br />

C<strong>et</strong>te interface est largement décrite dans les documents [6], notons seulement qu’il est<br />

toujours possible de réinitialiser un périphérique ou le bus entier via une des lignes ainsi<br />

que détecter les erreurs éventuelles par le changement d’état de la ligne correspondante.<br />

IEEE 488.2 : Messages<br />

La normalisation IEEE 488.1 décrit un modèle de mise en oeuvre d’un bus d’interconnexion<br />

pour les instruments mais ne fournit aucune information quant à la normalisation<br />

des messages entre appareils. Certains détails, tels l’utilisation ou non du r<strong>et</strong>our à la ligne<br />

comme fin de communication, pouvait m<strong>et</strong>tre à mal l’interopérabilité voulue par GPIB. De<br />

même, les commandes les plus utiles ou les plus courantes (remise à zéro, extinction, identification,<strong>et</strong>c.<br />

) ont souvent été implantées par les constructeurs de manière non uniforme,<br />

m<strong>et</strong>tant ainsi au point un s<strong>et</strong> de commande propre à chaque compagnie, voire à chaque<br />

appareil. Afin de standardiser la mise au point de logiciels de contrôle, Tektronix a proposé<br />

en 1985 une formalisation standard qui fût adoptée en 1987 sous la norme IEEE 488.2.<br />

Le nouveau standard spécifie un format unique d’envoi de messages, un s<strong>et</strong> de commandes<br />

de base commun ainsi qu’une structure générique perm<strong>et</strong>tant d’interroger l’appareil sur<br />

son statut. Par exemple, l’envoi de la commande ’ *IDN ?’ indique à l’appareil qu’il doit<br />

renvoyer son identification.<br />

Conclusion<br />

L’utilisation d’un standard électrique <strong>et</strong> la définition d’un format commun d’envoi de<br />

messages ont permis la mise au point de bibliothèques de fonctions accélérant ainsi le<br />

développement de logiciels de contrôle. Ces bibliothèques existent en accès libre [2] <strong>et</strong> ont<br />

ainsi pu servir de base au contrôle des instruments utilisés pour la mise en oeuvre <strong>et</strong> la<br />

commande des appareils, selon un schéma décrit dans la seconde partie de l’ouvrage.<br />

11


1.2. LE CONTRÔLE LOCAL DES APPAREILS DE MESURE<br />

1.2.2 La programmation visuelle<br />

l’idée même de développer des outils de programmation visuelle afin d’asservir des<br />

systèmes de mesure a été introduite en 1985 par la firme National Instruments. Son logiciel<br />

LabVIEW est actuellement largement utilisé par nombre de milieux académiques <strong>et</strong> industriels.<br />

Il a pour but de faciliter la mise en oeuvre de l’acquisition <strong>et</strong> du post-traitement des<br />

mesures prises en laboratoire. Il utilise à c<strong>et</strong>te fin les capacités graphiques des ordinateurs<br />

d’entrée de gamme actuels. Les interfaces graphiques qu’il m<strong>et</strong> en oeuvre sont basées sur<br />

un ensemble organisé de fenêtres <strong>et</strong> d’icônes interagissant entre elles afin de présenter à<br />

l’utilisateur une schématisation du processus expérimental ainsi qu’un certain nombre de<br />

grandeur de sortie.<br />

Fig. 1.4 – Une session LabVIEW standard présentant le résultat d’une acquisition sous<br />

forme d’un graphe<br />

12


1.2. LE CONTRÔLE LOCAL DES APPAREILS DE MESURE<br />

Sur la fenêtre de base d’une telle application se trouvent des représentations graphiques<br />

(icônes) de contrôleurs conventionnels (e.g. boutons, sélecteurs, potentiomètres)<br />

<strong>et</strong> d’indicateur de sortie (e.g. oscillogrammes, lumières, valeurs numériques) familiers des<br />

expérimentateurs. La présentation sélective <strong>et</strong> organisée des données <strong>et</strong> des commandes<br />

offre le double avantage de spécifier les interactions avec les appareils <strong>et</strong> de minimiser<br />

les informations présentées à l’utilisateur , le laissant ainsi se focaliser pleinement sur les<br />

éléments importants de la prise de mesure. l’utilisateur agit sur l’icône comme il agirait<br />

sur l’instrument réel, en particulier, l’utilisation de la souris perm<strong>et</strong> d’agir avec des composants<br />

symboliques de la même manière que les doigts de la main agiraient sur des boutons<br />

présents sur la face de l’appareil.<br />

l’utilisation d’un modèle de programmation graphique, que nous avons déjà évoqué,<br />

fut importé de l’informatique théorique afin de simplifier la conception des procédures<br />

d’expérimentation en se basant sur des concepts fortement orientés-obj<strong>et</strong>. Il est ainsi possible<br />

de décrire le processus de mesure sans devoir passer par un langage conventionnel<br />

de programmation procédurale. Dans un langage classique, les séquences d’opération sur<br />

les données doivent être spécifiées selon une syntaxe peu accessible <strong>et</strong> souvent réservée<br />

aux seuls informaticiens ou ingénieurs. En programmation visuelle, les données <strong>et</strong> les<br />

opérations sont représentées par des icônes. Le programme lui-même est obtenu en dessinant<br />

un diagramme procédural restant à un niveau fort conceptuel. Les noeuds de ce graphe<br />

sont des opérations de haut niveau, typiquement du traitement de signal, des opérations<br />

arithmétiques, mais ils peuvent également être associées à des opérations de visualisation<br />

des données ou à un contrôle des instruments de mesure. Chaque noeud a des connecteurs<br />

d’entrées <strong>et</strong> des connecteurs de sortie auxquels il suffit d’attacher les bons fils afin de<br />

réaliser une opération donnée.<br />

Les éléments de base étant trop simples pour la plupart des expérimentations, des<br />

diagrammes préétablis peuvent être importés aisément, menant ainsi à une conception modulaire<br />

des programmes <strong>et</strong> à la mise à disposition de larges bibliothèques d’instrumentation<br />

virtuelle appelées VI (Virtual Instrumentation element). Il existe des VI pour à peu près<br />

tous les instruments contrôlables depuis un PC. Ces VI servent donc bien souvent de gestionnaire<br />

de périphérique quasi-universels pour autant que l’instrument soit connectable<br />

au PC de contrôle via un connecteur de type RS-232, parallèle ou GPIB.<br />

Notons enfin que l’utilisation massive d’une telle technique a un impact psychologique<br />

important sur la catégorie d’utilisateurs amenés à utiliser ce produit : en eff<strong>et</strong>, relier un<br />

appareil à un affichage présentant le résultat de la mesure prise par c<strong>et</strong> appareil revient<br />

simplement à tirer un fil de la sortie de l’icône de l’appareil <strong>et</strong> à le connecter sur une borne<br />

d’entrée de l’icône représentant l’afficheur ; c’ est pourquoi les systèmes d’instrumentation<br />

virtuels sont devenus aujourd’hui un élément incontournable lorsqu’il s’ agit d’intégrer les<br />

techniques informatiques à la prise de mesure.<br />

13


1.3. INSTRUMENTATION DISTRIBU ÉE<br />

1.3 Instrumentation distribuée<br />

1.3.1 Introduction<br />

Tant dans la littérature [21] [7] [15] que dans la pratique, de nombreux exemples<br />

montrent l’utilisation des réseaux afin d’étendre les capacités de mesure <strong>et</strong> de traitement<br />

des systèmes de mesure exploités dans des environnements d’instrumentation virtuelle. Ce<br />

besoin découle d’un certain nombre de limitations inhérentes à l’utilisation des architectures<br />

m<strong>et</strong>tant en oeuvre des ordinateurs.<br />

La première limitation provient souvent du nombre de signaux qu’il faut acquérir simultanément.<br />

Il arrive souvent en eff<strong>et</strong> que le nombre d’entrées des cartes d’acquisition<br />

sur une même machine ne soit pas suffisant ou que la machine ne puisse fournir à elle<br />

seule la puissance nécessaire à la prise de mesure. l’utilisation du réseau perm<strong>et</strong> ici le<br />

déploiement de sous-systèmes de mesure, étendant ainsi la capacité de traitement de l’unité<br />

d’expérimentation. Des standards tels que Fastbus, GPIB, <strong>et</strong>c. ont été proposés il y a longtemps<br />

<strong>et</strong> sont maintenant utilisés à grande échelle dans l’industrie, tout particulièrement<br />

lorsque des systèmes <strong>et</strong> des processus complexes doivent pouvoir être vérifiés <strong>et</strong> contrôlés<br />

en temps réel.<br />

Une seconde restriction découle de l’aire d’opération accessible par une même unité de<br />

traitement. Il suffit de penser par exemple aux fabriques chimiques ou pétrolières dont les<br />

différents processus sont disséminés sur une superficie élevée <strong>et</strong> présentant un besoin de<br />

sécurité globale important. Quel que soit l’environnement, les senseurs <strong>et</strong> les cartes d’acquisition<br />

ne peuvent être situés trop loin d’une source, sous peine de voir le signal entaché de<br />

fortes perturbations. De même, le contrôle local d’appareil impose une distance maximale<br />

entre l’appareil <strong>et</strong> l’unité en charge du traitement : typiquement 20 mètres pour GPIB.<br />

Si le signal doit être acquis sur une source distante, l’exploitation d’un réseau perm<strong>et</strong> de<br />

rapprocher les instruments, les sources <strong>et</strong> les sous-systèmes d’expérimentation, garantissant<br />

ainsi une qualité optimale pour le signal acquis de la source.<br />

Enfin, une troisième limitation est liée au traitement qui sera effectué sur le signal.<br />

Plus la complexité de calcul de l’algorithme de post-traitement sera élevée, plus grandes<br />

seront les ressources prélevées sur le PC, rendant éventuellement impossible tout contrôle<br />

en temps réel. Pour palier à cela, des cartes de traitement de signal (DSP) sont adjointes<br />

au processeur de base, augmentant ainsi le coût ou la gamme de processeur requis. Une<br />

autre solution consiste à utiliser massivement les machines présentes sur le réseau pour<br />

distribuer les besoins de calcul <strong>et</strong> optimiser l’utilisation des possibilité de traitement local.<br />

La promiscuité des interconnexions rend les communications entre noeuds de mesure<br />

quasi instantanées. Pour un réseau dédié uniquement à l’acquisition, le trafic global généré<br />

sur un réseau commercial de faible coût (e.g. 10Mbps) est assez peu élevé, <strong>et</strong> il en résulte<br />

que pratiquement aucun r<strong>et</strong>ard n’ est introduit suite à une éventuelle contention.<br />

14


1.3. INSTRUMENTATION DISTRIBU ÉE<br />

1.3.2 IEEE 1451<br />

IEEE 1451 [15] est une nouvelle norme dont le but est de fournir un cadre cohérent <strong>et</strong><br />

ouvert perm<strong>et</strong>tant la mise en relation d’appareillages de faible capacité mémoire <strong>et</strong> dont<br />

les possibilités se réduisent à opérer des prises de mesure en un point donné. La philosophie<br />

générale du développement de ce standard repose sur la création d’une volonté d’uniformiser<br />

les interfaces des appareils <strong>et</strong> ce en ajoutant, de manière incrémentale, des capacités<br />

à celles déjà existantes, tout en conservant le coût de la transition accessible à tous les<br />

vendeurs de l’industrie. Le standard envisagé propose également l’indépendance vis-à-vis<br />

de la couche réseau mise en oeuvre ainsi que l’indépendance vis-à-vis du type de microprocesseur<br />

embarqué sur le système.<br />

La famille 1451P consiste en la proposition <strong>et</strong> le développement de 4 standards :<br />

1. IEEE 1451.1, N<strong>et</strong>work Capable Application Processor (NCAP)<br />

2. IEEE 1451.2, Transducer to Microprocessor and Transducer Electronic Data She<strong>et</strong><br />

(TEDS) Format<br />

3. IEEE 1451.3, Digital Communication and Transducer Electronic Data She<strong>et</strong> (TEDS)<br />

Format for Distributed Multidrop Systems<br />

4. IEEE 1451.4, Mixed Mode Communication Protocols and TEDS Formats<br />

La figure 1.5 présente les différents composants présents dans un système de transducteurs<br />

compatibles avec la spécification que nous venons d’évoquer.<br />

Fig. 1.5 – Architecture d’un système de transducteurs IEEE 1451.<br />

Le premier groupe de travail (1451.1) a été chargé de définir un modèle d’information<br />

pour la mise en réseau de transducteurs intelligents. Il définit également les spécifications<br />

15


1.3. INSTRUMENTATION DISTRIBU ÉE<br />

de l’interface logique. Le second groupe a défini le TEDS ainsi que l’interface <strong>et</strong> les protocoles<br />

de communication à m<strong>et</strong>tre en oeuvre afin de perm<strong>et</strong>tre la communication entre le<br />

transducteur <strong>et</strong> le contrôleur responsable de la prise en charge de la composante réseau. Le<br />

TEDS est stocké dans une EEPROM 1 <strong>et</strong> contient des champs décrivant complètement le<br />

type, les opérations accessibles, la calibration <strong>et</strong> les attributs secondaires du transducteur.<br />

La taille typique que peut représenter ces informations en mémoire est de l’ordre de 256<br />

oct<strong>et</strong>s. LE TEDS doit être physiquement relié au transducteur, réalisant ainsi un ensemble<br />

toujours cohérent <strong>et</strong> rendant donc conceptuellement l’auto-identification sur le réseau possible,<br />

sans risque d’erreur possible ; ce qui aurait été plus caduque si un tiers participant<br />

avait à se charger de c<strong>et</strong>te opération ou si un opérateur devait manuellement définir les<br />

propriétés de l’appareil à chaque mise en service. Le fait également de considérer que ce<br />

bloc est séparé de celui en charge de la couche réseau perm<strong>et</strong> le remplacement ou la mise<br />

à jour de l’instrument par le simple remplacement du transducteur <strong>et</strong> de son TEDS associé.<br />

Cependant, il est parfois peu aisé, voire impossible, de déployer en un même lieu le<br />

TEDS <strong>et</strong> le senseur proprement dit : c’ est pourquoi le document 1451.3 précise-t-il comment<br />

on peut connecter en un même noeud des transducteurs physiques multiples <strong>et</strong> le<br />

TEDS de description associé. C<strong>et</strong>te configuration perm<strong>et</strong> de réaliser un ”micro-réseau”<br />

interne au transducteur, tout en conservant une même interface externe. Enfin, nous avons<br />

supposé jusqu’à présent que les communications externes tant qu’internes se passent sur<br />

base d’une transmission digitale. Certains groupes d’appareils (piézoélectriques, capteurs<br />

de contraintes,<strong>et</strong>c.) tirent un meilleur parti de la transmission interne de l’information<br />

sous forme de signaux analogiques. Ce besoin a induit la formation d’une dernière recommandation,<br />

IEEE 1451.4, relative à la standardisation de l’envoi, en interne, de signaux<br />

analogiques avant conversion en digital pour présentation sur le réseau.<br />

La taille fort réduite de l’EEPROM contenant la description du TEDS ainsi que l’interopérabilité<br />

voulues ont poussé le groupe de standardisation à évoquer l’utilisation de<br />

langages semi-structurés ou peu structurés, comme XML, afin d’offrir une flexibilité, une<br />

interopérabilité maximales lors de l’implantation des descriptions des fonctions standards<br />

ou plus spécifiques des capteurs. Notons qu’actuellement aucune forme de message standard<br />

n’ a été avancée comme finale, seule l’existence de messages sous forme de texte semble<br />

avoir la préférence du groupe de travail dévolu à c<strong>et</strong>te tâche.<br />

1.3.3 GPIB-En<strong>et</strong><br />

Une solution proposée pour le contrôle réseau des instruments de mesure est l’utilisation<br />

d’une extension de GPIB connue sous le nom de GPIB-En<strong>et</strong>. GPIB-En<strong>et</strong> est un appareillage<br />

électronique portable se connectant sur le réseau <strong>et</strong> perm<strong>et</strong>tant de prendre en charge jusqu’à<br />

14 appareils compatibles GPIB. La Figure 1.6 illustre l’architecture typique des réseaux<br />

hybrides GPIB / Ethern<strong>et</strong>.<br />

1 Electricly Erasable Read Only Memory<br />

16


1.3. INSTRUMENTATION DISTRIBU ÉE<br />

Fig. 1.6 – Architecture <strong>et</strong> déploiement typique d’une installation utilisant GPIB-En<strong>et</strong>. Le<br />

réseau se subdivise en 2 composantes principales : le Thin Ethern<strong>et</strong> global, à large rayon<br />

d’action, <strong>et</strong> les bus locaux GPIB qui forment les noeuds du réseau global.<br />

GPIB-En<strong>et</strong> se déploie typiquement sur des LAN ou des WAN via une interface 10Base-<br />

T Thin Ethern<strong>et</strong> ou 100Base-T. l’exploitation du protocole IPX est également possible,<br />

bien que dans la pratique, seul le protocole IP soit utilisé. Chaque concentrateur GPIB<br />

possède donc une adresse unique qui doit être fixée dès la mise sur réseau. Pour se faire<br />

deux scénarios sont possibles.<br />

Le premier scénario de configuration consiste en l’utilisation d’un ordinateur tiers. Celuici<br />

adressera l’instrument au moyen des adresses MAC qu’il sait être présentes à un moment<br />

donné sur le réseau. Le PC procède par une approche d’”essais erreur” jusqu’à ce qu’il<br />

trouve un appareil valide. Ayant reconnu les instruments disponibles sur le sous-réseau<br />

local, il peut communiquer avec eux au moyen d’un protocole de bas niveau <strong>et</strong> imposer<br />

une configuration reflétant la structure du réseau local : adresse IP, passerelle, <strong>et</strong>c.<br />

Une deuxième approche consiste à laisser l’appareil interroger un serveur DHCP présent<br />

sur le sous-réseau <strong>et</strong> laisser celui-ci lui fournir des données valides perm<strong>et</strong>tant l’autoconfiguration.<br />

La technique DHCP a été mise au point afin d’apporter une solution au<br />

problème de la configuration des paramètres réseau d’une machine mise soudainement<br />

en connexion sur ce dernier. La machine apparaissant ém<strong>et</strong> des paqu<strong>et</strong>s de propagation<br />

(broadcast pack<strong>et</strong>s) signalant sa présence <strong>et</strong> comportant une information faisant part de<br />

17


1.3. INSTRUMENTATION DISTRIBU ÉE<br />

son souhait de bénéficier de l’aide d’un serveur DHCP pour se configurer. Si une telle machine<br />

est présente à ce moment, elle établira, en fonction de règles de décision quant à la<br />

gestion du lot d’adresses disponibles, une liste de paramètres qu’elle renverra à la machine<br />

demandeuse. Ces informations sont notamment : une adresse IP, celle de la passerelle du<br />

réseau, l’adresse du serveur de nom utilisable, le masque de sous-réseau, ainsi qu’un temps<br />

de prêt au bout duquel il faudra recontacter le DHCP afin de renouveler les informations.<br />

La combinaison hybride ainsi obtenue en m<strong>et</strong>tant en oeuvre des noeuds GPIB-En<strong>et</strong> sur<br />

un réseau de type Thin Ethern<strong>et</strong> perm<strong>et</strong> des débits pratiques d’information maximum de<br />

l’ordre de 800 kB/s depuis un élément de la chaîne GPIB jusqu’à un autre noeud réseau.<br />

Un tel débit est relativement équivalent à ce que l’on peut observer entre un appareil <strong>et</strong><br />

une carte dédiée d’une chaîne GPIB purement locale. Il apparaît donc que l’utilisation<br />

des concentrateurs GPIB-En<strong>et</strong> est totalement transparente pour autant que le réseau soit<br />

fort peu sollicité par d’autres types d’activité, non liées à la prise de mesure. Il est donc<br />

évident qu’il y a un manque de maîtrise du débit maximal d’information qui va pouvoir<br />

être acquis en temps réel depuis la source. L’ampleur du réseau local ainsi que son architecture<br />

conditionneront grandement la disposition des appareils <strong>et</strong> l’étendue maximale utile<br />

de l’expérimentation.<br />

Notons enfin qu’aucun mécanisme ne nous perm<strong>et</strong> de garantir l’état de bon fonctionnement<br />

des éléments du réseau GPIB-En<strong>et</strong>. Seuls des mécanismes logiciels supplémentaires,<br />

intégrés par dessus la couche matérielle, perm<strong>et</strong>traient de fournir à tout moment des<br />

renseignements relatifs au bon état de marche des appareils. C<strong>et</strong>te solution générant du<br />

trafic supplémentaire, croissant exponentiellement avec le nombre de noeuds à contrôler,<br />

réduit d’autant plus la largeur de bande passante disponible au transport de l’information,<br />

détériorant la qualité globale du système.<br />

1.3.4 Limitations<br />

l’utilisation de réseaux d’instruments, quoique résolvant un nombre non négligeable de<br />

problèmes soulevés par l’instrumentation locale <strong>et</strong> intégrant efficacement c<strong>et</strong>te nouvelle dimension<br />

de l’informatique que sont les intran<strong>et</strong>s <strong>et</strong> l’Intern<strong>et</strong>, fait apparaître des problèmes<br />

de mise en oeuvre spécifiques. En eff<strong>et</strong>, la latence fort faible présentée par les réseaux locaux<br />

peut s’ avérer critique lors de la généralisation de la mise en oeuvre d’expériences<br />

d’instrumentation à distance telles que celles décrites dans [21], [5] <strong>et</strong> [16]. C<strong>et</strong>te utilisation<br />

des possibilités de l’Intern<strong>et</strong> n’est en fait qu’une généralisation ou plutôt une globalisation<br />

des techniques sous-tendant l’instrumentation locale. Lors d’une telle expérience, la latence<br />

induite par le transfert de l’information ainsi que l’apparition asynchrone des résultats prohibent<br />

la conception d’un système de mesure en temps de réel. Une solution efficace [17]<br />

consiste à segmenter l’installation en cellules de traitement <strong>et</strong> à assigner le contrôle de chacune<br />

de celles-ci à une unité de traitement spécialisée. Ces unités servent d’interface avec<br />

les éléments distants du système <strong>et</strong> sont à même de prendre en charge les décisions <strong>et</strong> une<br />

partie du post-traitement, rendant ainsi le contrôle en temps réel possible dans chacune des<br />

18


1.3. INSTRUMENTATION DISTRIBU ÉE<br />

cellules <strong>et</strong> préparant les données pour envoi vers les machines lointaines. Il n’ empêche que<br />

les données arrivant des contrôleurs de cellules n’ en restent pas moins peu cohérentes dans<br />

le temps <strong>et</strong> donc peu exploitables à distance. On perçoit donc bien ici le besoin de disposer<br />

d’une composante logicielle forte dans les cellules de prise de mesure, composante logicielle<br />

qui serait éventuellement ”induite” localement pour les seuls besoins de l’expérimentation.<br />

L’utilisation tant d’un réseau local que global présuppose que chaque acteur prenant<br />

part à l’expérience est à même de s’ identifier sur ce réseau. Ceci signifie, par exemple<br />

pour un réseau TCP/IP, que chaque machine doit disposer d’une adresse IP unique mais<br />

également avoir connaissance du routeur local perm<strong>et</strong>tant le branchement le cas échéant<br />

au réseau global. De plus, le contrôle des expériences par réseau suppose une géométrie<br />

relativement statique au vu du manque d’interopérabilité des appareils. En eff<strong>et</strong>, chaque<br />

appareil pris en charge par un ordinateur aura nécessité l’installation <strong>et</strong> la configuration<br />

d’un gestionnaire propriétaire, quel que soit le système actuel utilisé, e.g. GPIB-En<strong>et</strong>. Modifier<br />

un appareil, changer un voltmètre par un autre provenant d’un constructeur différent,<br />

ou déplacer les appareils impose de réévaluer une partie non négligeable de la configuration.<br />

La robustesse du système de mesure est un élément également souvent peu ou pas<br />

intégré à l’architecture de l’expérimentation. Il faut donc parallèlement m<strong>et</strong>tre en oeuvre<br />

un ensemble de techniques perm<strong>et</strong>tant l’évaluation de l’état courant des appareils. Un tel<br />

système sera donc forcément peu réutilisable <strong>et</strong> interopérable avec d’autres systèmes de<br />

surveillance du bus, puisqu’il s’ agit de m<strong>et</strong>tre en oeuvre des solutions commerciales ou<br />

développées sur mesure.<br />

Enfin, le désir de faire communiquer des instruments <strong>et</strong> des ordinateurs selon un schéma<br />

homogène <strong>et</strong> portable impose l’utilisation de protocoles standardisés qui présentent le<br />

double désavantage de ne pouvoir évoluer dans le temps <strong>et</strong> de ne pas tirer bénéfice des<br />

techniques de développement actuelles, notamment l’utilisation de langages de très haut<br />

niveau orientés-obj<strong>et</strong> <strong>et</strong> de techniques de mise en oeuvre d’obj<strong>et</strong>s distribués.<br />

Constituer des points de mesures mobiles, dynamiques voire collaboratifs est donc actuellement<br />

fort peu aisé, voire impossible au vu de ces limitations.<br />

19


Chapitre 2<br />

CORBA<br />

Sommaire<br />

2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

2.2 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

2.2.1 IDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />

2.2.2 l’ORB <strong>et</strong> l’IIOP . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

2.2.3 Le mécanisme de marshallisation . . . . . . . . . . . . . . . . . . 25<br />

2.2.4 Les Obj<strong>et</strong>s standards . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />

2.3 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

Nous détaillerons brièvement dans ce chapitre les concepts <strong>et</strong> les mécanismes mis en<br />

oeuvre par la Common Object Request Broker Architecture (CORBA) afin de mieux la<br />

positionner par rapport à Jini. Nous présentons également dans le chapitre cinq, lors de la<br />

justification du choix de l’architecture utilisée pour la <strong>réalisation</strong> du système d’instrumentation<br />

distribuée, une comparaison des mécanismes utilisés par CORBA d’une part <strong>et</strong> la<br />

combinaison RMI/Jini d’autre part.<br />

2.1 Introduction<br />

Les systèmes d’obj<strong>et</strong>s distribués sont actuellement incontournables pour le développement<br />

<strong>et</strong> le déploiement de logiciels par dessus une couche réseau de plus en plus importante.<br />

Leurs avantages découlent de l’utilisation de langages de programmation orientés obj<strong>et</strong> :<br />

ces systèmes en tirent une réusabilité de code accrue, ce qui était quasi impossible dans<br />

une logique fortement protocolisée, mais également une transparence complète quant à la<br />

localisation des obj<strong>et</strong>s lors du déploiement. Un système distribué développé en un langage<br />

de haut niveau offre l’avantage d’être,à peu de choses près, conçu comme s’ il devait être<br />

20


2.2. ARCHITECTURE<br />

exécuté en local. De nombreux procédés existent afin de m<strong>et</strong>tre en oeuvre des obj<strong>et</strong>s distribués<br />

<strong>et</strong> le plus connu de tous est sans nul doute CORBA, la solution de prime abord la<br />

plus efficace <strong>et</strong> la plus standardisée à ce jour.<br />

CORBA est avant tout une norme [25] [27], c’ est-à-dire un ensemble de spécifications<br />

<strong>et</strong> de recommandations émises par l’Object Management Group (OMG) [4]. l’OMG est un<br />

groupe de travail indépendant au sein duquel siègent plus de sept cent partenaires issus<br />

de tous horizons : développeurs de logiciels, fabricants de matériel <strong>et</strong> grands utilisateurs.<br />

l’objectif de CORBA est avant tout d’assurer une interopérabilité entre des applications<br />

orientées obj<strong>et</strong> hétérogènes tant du point du vue de leur langage de développement que<br />

du système d’exploitation sur lesquels celles-ci seront amenées à être déployées. Ces applications<br />

reposent sur un modèle de mise en relation d’obj<strong>et</strong>s distribués sur un réseau <strong>et</strong><br />

interopérant entre eux de manière totalement transparente du point de vue de l’utilisateur.<br />

Pour parvenir à ses fins, CORBA définit <strong>et</strong> implémente plusieurs concepts. Tout d’abord<br />

un modèle de communication entre les obj<strong>et</strong>s distribués à travers le réseau. Ensuite, elle<br />

définit une couche de transport commune à tous les logiciels : l’ORB (Object Request Broker).<br />

l’OMG m<strong>et</strong> également à disposition un langage de description des interfaces présentées<br />

par chacun des acteurs du bus d’obj<strong>et</strong>s distribués : l’IDL (Interface Definition Language).<br />

Enfin, des services <strong>et</strong> des obj<strong>et</strong>s élémentaires sont introduits afin de faciliter le déploiement<br />

<strong>et</strong> l’utilisation de CORBA : il s’ agit, entre autres, des Common Object Services, des<br />

CORBA Facilities <strong>et</strong> des Domain Interfaces.<br />

Chacun des éléments formant le bus est simplement spécifié par l’OMG <strong>et</strong> celle-ci n’<br />

impose donc aucun langage ni aucune plateforme lors de l’implantation <strong>et</strong> du déploiement<br />

final. La plupart des langages actuels sont à même d’exploiter les standards de l’OMG <strong>et</strong><br />

bon nombre de constructeurs ont développé leur ORB, offrant ainsi une diversité quant<br />

aux possibilités accessoires que chacune des implantations offre, mais autorisant également<br />

la <strong>réalisation</strong> d’application hautement interopérables. Seule la fonction <strong>et</strong> la nature même<br />

des applications développées forcera le choix de tel ou tel autre logiciel CORBA.<br />

2.2 Architecture<br />

Les interactions entre obj<strong>et</strong>s sur un bus CORBA suivent un modèle classique client–<br />

serveur. Les applications clientes ém<strong>et</strong>tent des requêtes vers les obj<strong>et</strong>s serveurs, ceux-ci les<br />

exécutent de leur côté <strong>et</strong> enfin ils renvoient le résultat éventuel à l’appelant. Ce modèle<br />

présuppose que la méthode invoquée <strong>et</strong> implantée dans le serveur soit connue du client<br />

<strong>et</strong> que celui-ci possède tout le matériel nécessaire à la prise de contact avec le serveur <strong>et</strong><br />

l’envoi des paramètres. A c<strong>et</strong> eff<strong>et</strong>, quatre éléments importants sont mis en jeu :<br />

– l’Interface reprenant toutes méthodes accessibles sur l’obj<strong>et</strong> distant. C<strong>et</strong>te interface<br />

est implantée par le serveur <strong>et</strong> connue du client. L’IDL offre une formalisation de<br />

la définition de c<strong>et</strong>te interface, de manière indépendante du langage mais selon une<br />

21


2.2. ARCHITECTURE<br />

structure fortement inspirée de l’orienté obj<strong>et</strong>.<br />

– Le Stub conservé par le client. Il est obligatoirement cohérent avec l’interface du<br />

serveur puisqu’il s’ agit de la partie d’un obj<strong>et</strong> délégué par le serveur <strong>et</strong> à même de<br />

prendre en charge de manière totalement transparente la communication avec l’obj<strong>et</strong><br />

lointain.<br />

– Le Skel<strong>et</strong>on situé côté serveur. Il s’ agit ici de l’implantation proprement dite des<br />

méthodes déclarées au moyen de l’interface <strong>et</strong> activées à travers le stub.<br />

– l’ORB qui est la couche de transport des requêtes <strong>et</strong> des références sur le bus CORBA.<br />

Il s’ agit d’un middleware situé entre l’application <strong>et</strong> la plateforme. Celui-ci doit donc<br />

être implanté pour chacune des plateformes existantes.<br />

La figure 2.1 indique le positionnement relatif de chacun des éléments d’une architecture<br />

CORBA de base. L’IIOP (Intern<strong>et</strong> Inter Orb Protocol) perm<strong>et</strong> de connecter deux ORB<br />

de vendeurs éventuellement différents à travers l’Intern<strong>et</strong>. Il est important de noter ici que<br />

les flèches ne représentent pas un mouvement de données du client vers le serveur, mais<br />

modélisant le jeu de pointeurs qui perm<strong>et</strong> de référencer chaque obj<strong>et</strong> en CORBA. En eff<strong>et</strong>,<br />

CORBA fait abondamment usage de références distantes ou locales tant pour les obj<strong>et</strong>s<br />

serveurs que pour les arguments des méthodes. Ces arguments sont donc toujours passés<br />

par référence <strong>et</strong> non par valeur, bien que ceci semble changer dans les versions de CORBA<br />

ultérieures à la deuxième.<br />

2.2.1 IDL<br />

Client Server<br />

Server Object Reference<br />

g<strong>et</strong>Voltage() m<strong>et</strong>hod<br />

ORB ORB<br />

IIOP<br />

Server Object<br />

Implémentation<br />

Fig. 2.1 – Éléments de base d’une architecture CORBA<br />

Le langage de définition d’interface est un élément clef du bus de distribution d’obj<strong>et</strong>s<br />

CORBA. IDL est utilisé afin de décrire formellement chacun des obj<strong>et</strong>s selon des conventions<br />

non liées au langage final utilisé pour l’implantation. Ces interfaces seront ensuite<br />

développées au moyen d’un outil approprié afin de fournir un squel<strong>et</strong>te d’application pou-<br />

22


2.2. ARCHITECTURE<br />

vant servir de base à la <strong>réalisation</strong> concrète du système distribué, aussi bien client que<br />

serveur. De plus, IDL masque complètement les processus de communication entre obj<strong>et</strong>s,<br />

rendant ainsi le développement de l’architecture client-serveur totalement transparente. Il<br />

s’agit donc ici de définir ce que l’obj<strong>et</strong> est à même de proposer comme service en le situant<br />

dans une hiérarchie de services ainsi qu’en énumérant les méthodes qu’il m<strong>et</strong> à disposition.<br />

L’exemple suivant présente une définition réalisé au moyen de IDL. Il s’agit ici de créer un<br />

module, semblable à la notion de package en Java, contenant un obj<strong>et</strong> ”Amm<strong>et</strong>er” <strong>et</strong> un<br />

obj<strong>et</strong> ”Voltm<strong>et</strong>er”. Chacun de ces obj<strong>et</strong>s implante des méthodes qui seront accessibles via<br />

le Stub généré par les outils de compilation spécifique à chaque langage.<br />

module TestModule –<br />

interface Ammm<strong>et</strong>er<br />

–<br />

void res<strong>et</strong>();<br />

float g<strong>et</strong>Current();<br />

˝;<br />

interface Voltm<strong>et</strong>er<br />

–<br />

void res<strong>et</strong>();<br />

float g<strong>et</strong>Voltage();<br />

˝;<br />

˝;<br />

Il est important ici de noter c<strong>et</strong>te structure fortement hiérarchisée de packages disposés<br />

selon un arbre. C<strong>et</strong> élément sera fondamental dans la comparaison que nous offrons de<br />

CORBA vs. JINI dans le chapitre 5.<br />

Le langage IDL propose également un mécanisme d’héritage entre <strong>et</strong> depuis les interfaces.<br />

C<strong>et</strong> héritage peut être simple, multiple ou répété. La notion d’héritage répété a été<br />

introduite en raison de la possibilité d’implanter un héritage multiple tout en respectant la<br />

contrainte de non répétition des noms. C<strong>et</strong>te contrainte spécifie qu’au sein d’un même module,<br />

la surcharge – c’est-à-dire définir plusieurs méthodes dont la signature est différente<br />

mais dont le nom est identique – est interdite.<br />

2.2.2 l’ORB <strong>et</strong> l’IIOP<br />

L’ORB est le composant central de la répartition des obj<strong>et</strong>s sur le bus CORBA. Il assure<br />

le transport des requêtes entre les clients <strong>et</strong> les serveurs ou, pour être plus précis, entre les<br />

stubs des clients <strong>et</strong> les implantations correspondantes présentes dans les skel<strong>et</strong>on des obj<strong>et</strong>s<br />

serveurs. Il s’agit d’un middleware qui se déploie entre la couche application proprement<br />

dite où vivent les obj<strong>et</strong>s <strong>et</strong> le système d’exploitation qui gère les fonctionnalités réseau du<br />

23


2.2. ARCHITECTURE<br />

système local. Son existence marque la volonté de s’abstraire de l’hétérogénéité qui existe<br />

entre différentes implantations d’un même obj<strong>et</strong>, hétérogénéité qui puise sa source dans le<br />

choix du langage de programmation, du système d’exploitation r<strong>et</strong>enu pour le déploiement<br />

final ou encore dans le formalisme de représentation de données des machines. Les stubs<br />

désireux d’effectuer une requête l’adressent premièrement à l’ORB qui se charge de la poursuivre<br />

jusqu’au skel<strong>et</strong>on correspondant. Du point de vue du serveur, l’ORB accueille les<br />

invocations distantes <strong>et</strong> les traduit en des appels de méthodes sur des obj<strong>et</strong>s locaux.<br />

L’ORB comporte neuf blocs fonctionnels, présentés à la figure 2.2, perm<strong>et</strong>tant de réaliser<br />

pratiquement les interconnexions nécessaires entre obj<strong>et</strong>s. Afin de ne pas entrer dans les<br />

détails du fonctionnement de l’ORB, seuls 3 éléments fondamentaux pour la suite de l’exposé<br />

seront abordés ici.<br />

Fig. 2.2 – Structure de l’ORB. Les référentiels des interfaces <strong>et</strong> des implantations gardent<br />

trace des obj<strong>et</strong>s mis à disposition sur le bus.<br />

L’interface d’invocation statique<br />

L’interface d’invocation statique est le résultat de la projection des descriptions IDL<br />

dans le langage d’implantation. A travers la SII (Statical Invocation Interface), les stubs<br />

clients peuvent invoquer les méthodes sur les obj<strong>et</strong>s distants de manière totalement transparente<br />

: la SII se charge du transfert de l’invocation à l’obj<strong>et</strong> distant via la couche de communication<br />

réseau constituée par le coeur de l’ORB (Core ORB). Son principal désavantage<br />

est sa staticité intrinsèque : le stub doit impérativement être fourni au programme client,<br />

ce qui implique que tout changement dans le contexte de déploiement du client (langage,<br />

24


2.2. ARCHITECTURE<br />

hardware) requiert la génération d’un nouveau stub, compatible avec la nouvelle configuration.<br />

Le référentiel des interfaces<br />

Le référentiel des interfaces garde trace des obj<strong>et</strong>s déployés sur l’ORB en utilisant la<br />

description de l’Interface Definition Language. C<strong>et</strong>te base de données contient les modules,<br />

méthodes, attributs, exceptions, types de données accessibles <strong>et</strong> facilite ainsi l’introspection<br />

de l’ORB afin de perm<strong>et</strong>tre pratiquement le mise en relation des références des stubs clients<br />

<strong>et</strong> de leur skel<strong>et</strong>on correspondant.<br />

L’interface d’invocation dynamique<br />

L’interface d’invocation dynamique offre une plus grande souplesse dans l’envoi de<br />

requêtes vers les serveurs. Son mécanisme est plus flexible <strong>et</strong> consiste à localiser dans<br />

un premier temps l’obj<strong>et</strong> distant désiré en spécifiant le nom de la méthode devant être<br />

invoquée, les paramètres désirés ainsi que la classe d’obj<strong>et</strong> que l’on désire ainsi adresser.<br />

Suite à c<strong>et</strong>te requête, <strong>et</strong> pour peu qu’un tel obj<strong>et</strong> existe, un stub <strong>et</strong> un skel<strong>et</strong>on sont générés<br />

respectivement du côté client <strong>et</strong> du côté serveur, perm<strong>et</strong>tant l’appel de méthodes distantes,<br />

au moyen de mécanismes similaires à ceux d’une invocation statique.<br />

Chaque implantation de l’ORB, avec plus ou moins de possibilités annexes, est laissée<br />

à la discrétion des vendeurs. Afin de rendre possible l’exploitation de CORBA sur des<br />

réseaux de grande échelle ou dans des environnements où sont déployés des implantations<br />

différentes de l’ORB, l’OMG définit un certain nombre d’adapteurs inter-ORB dont le plus<br />

important est IIOP : Intern<strong>et</strong> Inter-Orb Protocol. IIOP définit simplement comment un<br />

ORB est à même d’échanger des informations avec un autre ORB.<br />

2.2.3 Le mécanisme de marshallisation<br />

L’activation de méthodes distantes suppose la possibilité de fournir à ces méthodes <strong>et</strong><br />

de recevoir de celles-ci des obj<strong>et</strong>s. IDL définit deux modes de transfert des obj<strong>et</strong>s : IN<br />

<strong>et</strong> OUT, un obj<strong>et</strong> IN allant du stub vers le skel<strong>et</strong>on <strong>et</strong> un obj<strong>et</strong> OUT représentant une<br />

valeur de r<strong>et</strong>our. Ce transfert d’obj<strong>et</strong>, totalement transparent pour l’utilisateur, s’effectue<br />

au moyen d’un mécanisme dit de marshallisation.<br />

25


2.2. ARCHITECTURE<br />

La marshallisation est le procédé par lequel l’état d’un obj<strong>et</strong> ou un obj<strong>et</strong> même est<br />

transformé afin d’être transféré sur le bus d’obj<strong>et</strong> distribué. Dans le cas de CORBA, les<br />

obj<strong>et</strong>s arguments ne pouvant être passés par valeur, l’ORB devra gérer un jeu de références<br />

perm<strong>et</strong>tant d’un côté de la transaction d’énumérer les valeurs des attributs d’un obj<strong>et</strong> <strong>et</strong>,<br />

à l’autre bout du transport, de reconstituer un obj<strong>et</strong> cohérent à l’interface IDL de l’obj<strong>et</strong><br />

marshallisé <strong>et</strong> présentant le même état, à savoir : les mêmes attributs. L’obj<strong>et</strong> transféré<br />

n’est pas réellement transporté dans son intégralité, comme c’est le cas, nous le verrons<br />

plus loin, lors de l’utilisation du modèle RMI de Java.<br />

La marshallisation n’induit donc pas un vrai polymorphisme en ce sens que si un obj<strong>et</strong><br />

dérivé d’une classe donnée est transféré sur un canal du bus dévolu au transport d’un<br />

membre de la classe mère ; il commencera le processus comme obj<strong>et</strong> dérivé de la classe<br />

mère <strong>et</strong> sera reconstitué plus tard comme un obj<strong>et</strong> membre de la classe mère. En eff<strong>et</strong>,<br />

l’autre côté du canal est à même de reconstruire des obj<strong>et</strong>s de la classe mère, au vu de sa<br />

spécification IDL, <strong>et</strong> n’ aucune connaissance de ce qu’il s’agit en fait d’un obj<strong>et</strong> dérivé qui<br />

a en réalité transité sur l’ORB.<br />

Fig. 2.3 – CORBA ne perm<strong>et</strong> pas l’exploitation d’un vrai polymorphisme.<br />

Pour prendre un exemple plus ludique <strong>et</strong> plus simple (Fig. 2.3), imaginons une classe<br />

Chat, dérivant d’Animal, <strong>et</strong> qu’il existe un obj<strong>et</strong> serveur dont nous désirons activer une<br />

méthode. C<strong>et</strong>te méthode accepte en argument un membre de la classe Animal. Si nous<br />

envoyons un Chat, ce qui est cohérent du point de vue de l’IDL de la classe distante, le<br />

serveur recevra en fait, après reconstitution, un Animal car le processus de marshallisation<br />

examinera les attributs du Chat, vu comme un Animal, pour reconstituer un Animal du<br />

côté serveur, dégradant ainsi l’information. Ce point de vue peut se justifier par le fait que<br />

la spécialisation en Chat de l’obj<strong>et</strong> Animal peut n’être connu que par le client seul.<br />

26


2.2. ARCHITECTURE<br />

Nous verrons que ceci n’est pas du tout le cas de RMI, <strong>et</strong> donc de Jini, car un mécanisme<br />

supplémentaire, appelé code mobile, perm<strong>et</strong> la mise en commun des classes entre le client<br />

<strong>et</strong> le serveur, y compris celles qui ne sont connus que par un de deux protagonistes. Dans<br />

ce cas, l’envoi d’une sous-classe perm<strong>et</strong>tra de récupérer un membre de c<strong>et</strong>te sous-classe en<br />

bout de marshallisation même si à l’origine seule la super-classe est connue du serveur.<br />

2.2.4 Les Obj<strong>et</strong>s standards<br />

L’OMG a spécifié un ensemble d’obj<strong>et</strong>s standardisés à même d’être déployés sur le bus<br />

CORBA de manière à offrir des services spécifiques à de nombreux scénarios d’utilisation.<br />

Il s’agit d’abstractions aux fonctions systèmes de base, telles que la dénomination (Naming<br />

Service), la persistance des obj<strong>et</strong>s, le cycle de vie, la sécurité, la gestion des licences d’utilisation<br />

des obj<strong>et</strong>s,les événements, <strong>et</strong>c. L’ensemble formé de ces services ne sont pas toujours<br />

implémentes de manière complète par les ORB disponibles actuellement. Dans le cadre de<br />

la <strong>réalisation</strong> de réseaux de terrains <strong>et</strong> d’instrumentation distribuée, seuls trois services importants<br />

sont à même de remplir des fonctionnalités clés dans les processus d’interaction<br />

<strong>et</strong> de coopération intervenant entre les appareils d’une part <strong>et</strong> les clients logiciels d’autre<br />

part. Il s’agit des Naming Service, Trader Service <strong>et</strong> Event Service.<br />

Le Naming Service<br />

Ce service fournit un système de désignation perm<strong>et</strong>tant d’obtenir les références des<br />

obj<strong>et</strong>s répondant à un nom d’enregistrement donné. Les noms sont structurés selon un<br />

graphe de contextes de dénominations interconnectées, perm<strong>et</strong>tant ainsi la création d’un<br />

espace de nom réparti <strong>et</strong> éventuellement fort vaste. A l’intérieur de chaque contexte, chaque<br />

nom symbolique doit être unique, mais un même obj<strong>et</strong> peut utiliser plusieurs noms. Ceci<br />

perm<strong>et</strong> aux obj<strong>et</strong>s de s’enregistrer multiplement : sur base de noms différents ou dans des<br />

contextes différents. Ce mécanisme est en réalité assez pauvre dans un cadre dynamique,<br />

car un nom seul ne peut refléter les capacités des obj<strong>et</strong>s <strong>et</strong> rien ne précise si un obj<strong>et</strong> se<br />

présentant sous un nom donné est susceptible d’implanter une interface recherchée.<br />

Le Trader Service<br />

Le Trader Service présente un mécanisme plus puissant <strong>et</strong> plus exploitable que le Naming<br />

Service. Les serveurs s’y enregistrent en détaillant l’ensemble des propriétés qui les<br />

caractérisent, sous forme d’un ensemble d’associations clef-valeur, ainsi qu’en fournissant<br />

l’interface IDL qu’ils implantent. Les clients utilisent ce service en indiquant le type d’interface<br />

recherchée <strong>et</strong> des critères annexes : type des obj<strong>et</strong>s arguments, nombre d’arguments,<strong>et</strong>c.<br />

Le Trader Service résout les requêtes en parcourant l’ensemble du référentiel<br />

des enregistrements qu’il a collectés. Le client ayant obtenu ainsi l’ensemble des références<br />

des obj<strong>et</strong>s qu’il désire utiliser, la transaction peut commencer avec le serveur, par exemple<br />

en exploitant la Dynamic Invocation Interface.<br />

27


2.3. CONCLUSION<br />

l’Event Service<br />

Notons enfin l’existence d’un service de gestion des événements basé sur un modèle<br />

producteur–consommateur. Ce service perm<strong>et</strong> une propagation asynchrone des événements<br />

au moyen d’un canal réservé : le canal évènements. Les obj<strong>et</strong>s peuvent jouer deux rôles dans<br />

c<strong>et</strong>te interaction : ils sont soit producteurs <strong>et</strong> génèrent des évènements, soit consommateurs<br />

<strong>et</strong> cherchent à les acquérir. Les évènements sont transmis selon deux modes sur le canal : pull<br />

<strong>et</strong> push. Le mode de dépôt (push) est utilisé par les producteurs pour envoyer un événement<br />

vers les consommateurs. Les obj<strong>et</strong>s consommateurs concernés sont dès lors avertis de la<br />

présence d’un nouvel événement disponible sur le canal. Le mode de r<strong>et</strong>rait (push) perm<strong>et</strong><br />

à un obj<strong>et</strong> consommateur d’interroger le canal événement quant à l’existence d’un nouvel<br />

événement. Ainsi, par un mécanisme de scrutation, un obj<strong>et</strong> peut avoir une connaissance<br />

à tout moment de l’état actuel de la pile événements du canal local.<br />

2.3 Conclusion<br />

L’exploitation des mécanismes de base de CORBA, combinée aux services standards<br />

d’invocation dynamique, de collaboration avec le Trader Service <strong>et</strong> le Event Service perm<strong>et</strong><br />

la <strong>réalisation</strong> de systèmes distribués sur un modèle service–consommateur. Nous verrons<br />

plus loin dans ce mémoire que Jini propose la même démarche mais portée c<strong>et</strong>te fois dans<br />

le monde de Java. Il nous faut cependant apporter un bémol à c<strong>et</strong>te vision idyllique de<br />

CORBA en constatant qu’actuellement aucun vendeur d’ORB ne fournit simultanément<br />

l’ensemble des services requis pour le déploiement d’un système d’instrumentation flexible<br />

<strong>et</strong> présentant une fiabilité élevée.<br />

28


Chapitre 3<br />

JAVA <strong>et</strong> RMI<br />

Sommaire<br />

3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

3.2 La technologie Java . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

3.3 RMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />

3.3.1 Le modèle proposé par Java : RMI . . . . . . . . . . . . . . . . . 33<br />

3.3.2 Le transfert dynamique de code mobile . . . . . . . . . . . . . . 34<br />

3.4 Java hardware : le PicoJAVA . . . . . . . . . . . . . . . . . . . 36<br />

La solution que nous proposons pour l’implantation de réseaux d’instruments distribués<br />

est l’utilisation d’un nouveau modèle d’architecture distribuée connue sous le nom de Jini.<br />

d’un point de vue logiciel, Jini est une sur-couche de la plateforme Java <strong>et</strong> utilise massivement<br />

le système d’obj<strong>et</strong>s distribués de Java : RMI. Afin de présenter au mieux les possibilités<br />

étendues d’utilisation que perm<strong>et</strong> Jini, nous nous devons dans un premier temps<br />

de détailler ce qu’est la plateforme Java ainsi que de présenter de manière détaillée les<br />

mécanismes présents dans RMI.<br />

3.1 Introduction<br />

Le développement de la plateforme Java [13] est certainement une des grandes révolution<br />

de l’informatique actuelle. Le langage Java est apparu en 1995. Il est le fruit des recherches<br />

des ingénieurs de Sun Microsystems, désireux de m<strong>et</strong>tre en oeuvre un langage de haut<br />

niveau afin de programmer des périphériques embarqués. Très rapidement confrontés aux<br />

limitations de langages orientés obj<strong>et</strong>s tels que C++ <strong>et</strong> ADA, ceux-ci ont opté pour le<br />

développement d’un nouveau langage baptisé Oak, extrêmement lisible, purement orientéobj<strong>et</strong><br />

<strong>et</strong> surtout indépendant autant que possible du matériel sur lequel il serait amené à<br />

être déployé.<br />

29


3.2. LA TECHNOLOGIE JAVA<br />

3.2 La technologie Java<br />

La technologie Java regroupe deux concepts : Java est à la fois un langage de programmation<br />

<strong>et</strong> une plateforme. La plupart des langages perm<strong>et</strong>tent soit leur interprétation, soit<br />

leur compilation sur une machine donnée en vue de réaliser une exécution. Java a cela de<br />

singulier qu’il est à la fois compilé <strong>et</strong> à la fois interprété dans la plus grande majorité des<br />

cas. Avec le compilateur, il est possible de transformer le code écrit en langage Java en<br />

bytecode. Le bytecode Java est un code indépendant de la plateforme qui sera injecté dans<br />

un interpréteur présent sur le système local. La compilation n’ est requise qu’une fois, alors<br />

que l’interprétation aura lieu à chaque fois que le programme est exécuté. La figure 3.1<br />

illustre ce mécanisme.<br />

Fig. 3.1 – Schéma classique de mise en oeuvre de Java. Le code est compilé sous un format<br />

indépendant de la plateforme <strong>et</strong> est ensuite exécuté sur un interpréteur lié au système.<br />

La génération d’un bytecode qui sera par la suite interprété perm<strong>et</strong> de développer des<br />

applications sans se soucier de la plateforme finale de déploiement : il suffit en eff<strong>et</strong> qu’un<br />

interpréteur Java, connu sous le nom de Java Virtual Machine, soit présent sur la plateforme<br />

cible. De tels interpréteurs existent actuellement pour quasi toutes les combinaisons de<br />

système d’exploitation <strong>et</strong> de composante matérielle : du PC sous Windows jusqu’à la<br />

station multi-processeurs utilisant des CPU SPARC en passant par toutes les versions<br />

de Linux (x86,Alpha,Sparc, <strong>et</strong>c.). La figure 3.2 illustre le déploiement d’une application<br />

compilée en bytecode Java.<br />

On comprend donc tout l’intérêt d’un tel langage dans un environnement hétérogène de<br />

machines interconnectées entre elles au moyen d’une couche réseau. Nous verrons également<br />

dans le chapitre suivant que l’existence sur chaque machine d’un code commun, le bytecode,<br />

ouvre des perspectives nouvelles quant à l’utilisation d’obj<strong>et</strong>s distribués <strong>et</strong> aux possibilités<br />

de transfert de code d’une machine virtuelle à une autre. Enfin, un autre aspect non<br />

négligeable de nos jours est la possibilité de réaliser de manière extrêmement facile des<br />

interfaces graphiques (GUI : Graphical User Interfaces) au moyen d’un ensemble de classes<br />

prédéfinies en Java. On peut ainsi réduire drastiquement le temps consacré à l’élaboration<br />

de l’interface homme-programme puisque le canevas d’élaboration est le même quelle que<br />

soit la plateforme, évitant ainsi de devoir recourir à des bibliothèques propriétaires peu<br />

portables <strong>et</strong> souvent fort lourdes à maîtriser.<br />

30


3.2. LA TECHNOLOGIE JAVA<br />

Fig. 3.2 – Le bytecode produit par la compilation pourra être interprété sur une JVM sans<br />

se soucier des composantes matérielles du système.<br />

Portabilité<br />

Le choix du langage Java pour le développement des applications d’instrumentation<br />

distribuée est souvent mis en évidence dans la littérature [22] [23]. En eff<strong>et</strong>, de telles architectures<br />

sont caractérisées par la mise en présence de systèmes d’exploitation forts différents<br />

selon qu’il s’ agisse de stations client conviviales ou de machines noeuds du système de mesure<br />

choisies plutôt pour leur robustesse. Java perm<strong>et</strong> de réaliser des applications portables,<br />

interopérables entre toutes ces machines en utilisant un même modèle de développement,<br />

les mêmes outils <strong>et</strong> surtout en faisant appel à des compétences semblables, quel que soit<br />

l’aspect du problème abordé : client ou serveur.<br />

De plus, l’exploitation de techniques propres à Java, telles que les appl<strong>et</strong>s, perm<strong>et</strong> d’enrichir<br />

encore l’expérimentation, perm<strong>et</strong>tant ainsi aux utilisateurs d’accéder à des présentation des<br />

résultats via leur navigateur Intern<strong>et</strong> habituel. Rappelons ici que les appl<strong>et</strong>s sont de p<strong>et</strong>ites<br />

applications graphiques qui peuvent être exécutées dans un navigateur Intern<strong>et</strong> pour<br />

autant que celui-ci intègre une Java Virtual Machine. l’utilisateur, en se connectant sur le<br />

site contenant l’appl<strong>et</strong>, initie le chargement puis l’exécution de celle-ci dans le navigateur,<br />

perm<strong>et</strong>tant ainsi d’obtenir une présentation des données ou d’envoyer des commandes à<br />

un système distant.<br />

Interfaçage de code natif C ou C++<br />

Un autre aspect important du langage Java est sa capacité à pouvoir interagir avec du<br />

code natif de manière totalement transparente [19]. On entend par code natif tout type de<br />

code binaire compilé spécifiquement pour une machine donnée tournant sous un système<br />

d’exploitation donné. On pourrait citer comme exemple n’ importe quel programme compilé<br />

sous Windows/Intel ou n’ importe quelle bibliothèque mise à disposition sous Linux/Intel.<br />

Le langage d’origine du code natif n’ a pas d’importance puisqu’il s’ agit d’adresser du<br />

code relogeable ; néanmoins les outils mis couramment à disposition couramment ciblent<br />

plus particulièrement les langages C <strong>et</strong> C++.<br />

31


3.3. RMI<br />

Il faut être conscient qu’il s’ agit en quelque sorte d’une entorse faite au principe de<br />

portabilité mais la volonté de rester compatible avec les programmes existant auparavant<br />

explique ce qui a motivé les concepteurs de Java à développer c<strong>et</strong>te interface native connue<br />

sous le nom de JNI (Java Native Interface).<br />

Exploitation du code natif<br />

Le code natif a principalement deux utilités : l’exploitation des ressources locales de la<br />

machine au moyen d’un code plus rapide, plus puissant <strong>et</strong> le désir de pouvoir mener des<br />

actions sur des éléments du système qui ne sont pas repris dans la plateforme Java. A titre<br />

d’exemple, il pourrait s’ agir dans le premier cas de routines ultra-rapides de traitement<br />

digital du signal <strong>et</strong> pour le second de l’écriture dans les registres des cartes matérielles<br />

présentes sur l’ordinateur.<br />

Comme nous le verrons plus tard, c<strong>et</strong>te dernière technique a été mise en oeuvre dans le<br />

présent travail afin de perm<strong>et</strong>tre la prise de contrôle du bus GPIB par un programme<br />

Java au moyen des bibliothèques standard fournies par le constructeur de la carte. Notons<br />

que l’utilisation du langage C ou C++ standard jumelé avec un code soigné du point<br />

de vue de la portabilité, perm<strong>et</strong> néanmoins de déployer assez facilement de code natif<br />

venant de pair avec une application Java. De plus, dans le cas présent de l’instrumentation,<br />

des bibliothèques fortement standardisées existent pour un grand nombre de plateformes<br />

natives utilisant le langage C. Ce dernier point, plus propre à la <strong>réalisation</strong> pratique du<br />

système d’instrumentation sera traité dans la seconde partie de ce travail.<br />

Les extensions de la plateforme Java<br />

Une autre particularité de la plateforme Java est l’existence d’un grand nombre d’extensions,<br />

perm<strong>et</strong>tant par exemple l’utilisation des ports de communication série ou parallèle,<br />

le déploiement sur des stations mobiles légères (PDA ou GSM), ou l’implantation de Java<br />

dans des systèmes embarqués peu coûteux <strong>et</strong> présentant des ressources mémoire <strong>et</strong> calcul<br />

limitées. Ce large éventail d’ajouts à la plateforme commune perm<strong>et</strong> de considérer que<br />

l’utilisation de Java est un choix excellent <strong>et</strong> durable dans le temps, tant du point de vue<br />

de l’exploitation de l’électronique embarquée, de plus en plus présente autour de nous, que<br />

du point de vue du programmeur d’applications complexes orientées utilisateur.<br />

3.3 RMI<br />

Nous avons exposé dans le chapitre 2 le système d’obj<strong>et</strong>s distribué CORBA. Les concepts<br />

introduits par l’OMG dans le cadre de la mise en oeuvre de CORBA découlant de principes<br />

généraux relatifs à la mise en oeuvre d’obj<strong>et</strong>s distribués, ceux-ci sont également le<br />

fondement de la Remote M<strong>et</strong>hode Invocation (RMI) de Java [3]. Nous présenterons dans<br />

un premier temps le modèle RMI, puis nous exposerons une technique de partage de classes<br />

entre le client <strong>et</strong> le serveur connue sous le nom de chargement dynamique du code mobile.<br />

32


3.3. RMI<br />

3.3.1 Le modèle proposé par Java : RMI<br />

Comme nous l’avons évoqué, la Remote M<strong>et</strong>hod Invocation (RMI) de Java s’ apparente<br />

au schéma classique de distribution d’obj<strong>et</strong>s sur un bus réseau, à c<strong>et</strong>te exception près que<br />

le but recherché n’ est pas ici d’interfacer tous les langages possibles mais bien de concevoir<br />

des applications distribuées issues d’un même langage : Java. Ces applications seront<br />

donc ameneés à résider sur des machines virtuelles [14] différentes <strong>et</strong> non sur des plateformes<br />

différentes. C<strong>et</strong>te différence apparaîtra fondamentale dans le paragraphe suivant.<br />

La figure 3.3 présente les éléments d’une application écrite au moyen de RMI.<br />

Fig. 3.3 – Protocoles mis en oeuvre par RMI<br />

Dans un premier temps, Le serveur appelle le registry afin d’associer un nom symbolique<br />

avec l’obj<strong>et</strong> qu’il m<strong>et</strong> à disposition sur le bus. Le client peut alors entamer un processus de<br />

recherche <strong>et</strong> interroger le registry sur la présence ou non d’un nom de service disponible.<br />

En cas de succès, il obtient alors une référence sur l’obj<strong>et</strong> correspondant <strong>et</strong> est à même<br />

d’invoquer sur ce dernier une méthode particulière.<br />

L’ensemble des méthodes disponibles auprès du serveur est décrite au moyen d’une<br />

interface connue du client <strong>et</strong> du serveur. C<strong>et</strong>te approche est semblable à celle proposeé<br />

par CORBA au travers de l’IDL. Rappelons à c<strong>et</strong> eff<strong>et</strong> qu’une interface est un formalisme<br />

énonçant le comportement d’une obj<strong>et</strong>, mais ne réalisant pas l’implémentation de la classe.<br />

Il s’agit donc d’un ”contrat” que s’engage à remplir la classe implémentant l’interface, dont<br />

la <strong>réalisation</strong> finale est discrétionnaire.<br />

Comme nous le verrons dans la section suivante, des serveurs Web sont également<br />

utilisés par RMI afin de perm<strong>et</strong>tre le transfert de bytecode entre le client <strong>et</strong> le serveur.<br />

Insistons bien ici sur le fait qu’il ne s’agit pas de la marshallisation proprement dite d’obj<strong>et</strong>s,<br />

tels que les paramètres des méthodes activées, mais bien de transférer, le besoin échéant,<br />

des classes depuis un intervenant jusqu’à l’autre. Ce mécanisme n’a pas d’équivalent en<br />

CORBA <strong>et</strong> est appelé transfert dynamique de code mobile.<br />

33


3.3. RMI<br />

3.3.2 Le transfert dynamique de code mobile<br />

Le transfert dynamique de code mobile perm<strong>et</strong> de transférer du bytecode, ou plus simplement<br />

du code Java, d’une instance d’une classe qui n’est pas définie sur la machine<br />

virtuelle recevant ce code depuis la machine virtuelle qui fait référence à ce code. Ainsi,<br />

les interfaces, les comportements accessibles uniquement sur une plateforme sont rendus<br />

accessibles sur une autre plateforme, éventuellement distante.<br />

L’exploitation de c<strong>et</strong>te technique perm<strong>et</strong> à RMI la conservation d’un vrai polymorphisme<br />

tout au long du dialogue client-serveur, ce qui n’était pas possible en CORBA.<br />

On entend par vrai polymorphisme le fait que la manipulation de la classe à travers des<br />

processus de généralisation <strong>et</strong>/ou de spécialisation ne dégrade pas son comportement. Une<br />

classe ayant subit une généralisation en un membre de sa classe mère peut toujours être vu<br />

comme un élément de sa classe d’origine. Ceci n’est pas possible dans d’autres langages,<br />

tels que C++.<br />

Reprenons ici l’exemple du Chat envoyé à travers un ORB qui est à même de marshalliser<br />

un Animal. C<strong>et</strong>te transaction est exposée sur la figure 3.4. Si nous effectuons<br />

c<strong>et</strong>te opération au moyen de RMI, le comportement Chat n’étant pas connu de la machine<br />

distante, celle-ci entamera un transfert de code mobile avec la machine d’origine de la<br />

transaction afin d’obtenir le bytecode lui perm<strong>et</strong>tant d’avoir une connaissance de la classe<br />

Chat. Ce transfert est totalement transparent <strong>et</strong> automatique, l’utilisateur n’ayant aucune<br />

intervention à fournir lors de l’exécution ou de la programmation.<br />

Notons enfin que l’utilisation de la technique de transfert dynamique de code mobile<br />

perm<strong>et</strong> la même flexibilité que l’interface d’invocation dynamique de CORBA, en ce sens<br />

que si un client désire invoquer des méthodes sur un serveur dont il n’a pas connaissance a<br />

priori, il pourra obtenir la référence du stub du serveur auprès du rmiregistry <strong>et</strong> entamer<br />

un téléchargement du code de ce dernier (fig. 3.5). Ayant acquis le stub, il pourra alors<br />

l’utiliser tout le temps de la transaction avec le serveur. Insistons sur le fait, crucial pour<br />

la compréhension des mécanismes implantés par Jini, que contrairement à CORBA, il ne<br />

s’agit pas ici de construire dynamiquement le stub du côté client mais bien d’en déplacer<br />

une copie depuis le serveur Web de l’obj<strong>et</strong> distant.<br />

34


3.3. RMI<br />

A cat instance<br />

Animal<br />

Cat<br />

A cat instance<br />

Animal<br />

Cat<br />

Client Server<br />

Marshalling Marshalling<br />

Client<br />

Dynamic Stub Invocation<br />

ORB<br />

HTTP upload of<br />

Cat’ s class bytecode<br />

RMIbus RMIbus<br />

IIOP<br />

Server<br />

Dynamic Skel<strong>et</strong>on Invocation<br />

ORB<br />

A cat instance<br />

Cat<br />

An Animal Instance<br />

Animal<br />

Fig. 3.4 – RMI (au-dessus) conserve le comportement d’une classe marshallisée contrairement<br />

CORBA (dessous). Ceci est rendu possible par le transfert du bytecode de la classe<br />

Chat de la machine client à la machine serveur.<br />

Client Virtual Machine Server Virtual Machine<br />

Client<br />

Web server<br />

Server Object<br />

Client Virtual Machine Server Virtual Machine<br />

Client<br />

Web server<br />

Server’ s Stub<br />

Aks for location of the Stub<br />

Server Object<br />

RmiRegistry<br />

Web server<br />

RmiRegistry<br />

Web server<br />

Server’ s Stub<br />

Fig. 3.5 – Une copie du stub du serveur est transférée dans un premier temps auprès du<br />

rmiregistry. Le client utilise alors la référence du stub afin d’en obtenir une instance locale<br />

par téléchargement du bytecode.<br />

35


3.4. JAVA HARDWARE : LE PICOJAVA<br />

3.4 Java hardware : le PicoJAVA<br />

L’existence de machines virtuelles logicielles sur un nombre important de plateformes<br />

ne doit pas nous faire perdre de vue que Java n’ est pas qu’un langage. En eff<strong>et</strong>, le produit<br />

de la compilation d’un obj<strong>et</strong> Java n’ est autre qu’un fichier binaire composé d’une<br />

suite de symboles appelés bytecode. Ce code binaire est progressivement lu par le logiciel<br />

d’interprétation <strong>et</strong> induit des actions dans une ”machine virtuelle”. C<strong>et</strong>te machine a<br />

la structure d’un système à microprocesseur : elle comprend une pile, des registres, une<br />

mémoire, des compteurs, <strong>et</strong>c. De ce point de vue, les symboles binaires du bytecode se<br />

comportent donc comme les instructions élémentaires qu’un processeur est amené à lire<br />

séquentiellement.<br />

On comprend aisément qu’une telle machine logicielle peut être réalisée de manière<br />

matérielle : c’ est le but de la spécification PicoJAVA [12]. C<strong>et</strong>te spécification remplace<br />

la machine virtuelle par un système à processeur réalisant, matériellement, les mémoires,<br />

pointeurs <strong>et</strong> piles décrits par la spécification de la machine virtuelle Java (Java Virtual<br />

Machine).<br />

L’existence de telles machines perm<strong>et</strong> donc la <strong>réalisation</strong> de systèmes embarqués complexes<br />

destinés à exécuter du code développé sur la plateforme Java. Des prototypes compl<strong>et</strong>s<br />

existent déjà, implantant les dernières spécification Java <strong>et</strong> livrés avec les outils sur<br />

lesquels sont classiquement basés le développement de tels systèmes : environnement de<br />

débogage, logiciel d’optimisation, sonde JTAG pour l’analyse des signaux du processeur,<br />

<strong>et</strong>c. Les figures 3.6 <strong>et</strong> 3.7 présentent un boîtier réalisé par la société Ajile.<br />

De tels composants pourraient à court terme être utilisés dans des PDA, des appareils<br />

de mesure ou même être intégrés dans des routeurs afin de remplir certaines fonctionnalités<br />

que requièrent, comme nous le verrons plus tard, tout réseau basé sur l’architecture Jini.<br />

Notons enfin que les performances de ces appareils sont plus que satisfaisantes, grâce à<br />

un décodage d’instructions réalisé en hardware.<br />

36


3.4. JAVA HARDWARE : LE PICOJAVA<br />

Fig. 3.6 – Le AJ-80 est un processeur PicoJAVA implantant la dernière spécification Java.<br />

Réalisé par Ajile, il convient parfaitement à l’utilisation de Java en milieu industriel <strong>et</strong><br />

mobile.<br />

Fig. 3.7 – Le AJ-80 peut être assemblé sur carte de faible taille afin de lui adjoindre des<br />

ports d’entrée/sortie standard ainsi qu’un connecteur réseau.<br />

37


Chapitre 4<br />

Architecture Jini<br />

Sommaire<br />

4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />

4.2 Architecture <strong>et</strong> principe . . . . . . . . . . . . . . . . . . . . . . 39<br />

4.3 Le modèle d’interaction dynamique . . . . . . . . . . . . . . . 42<br />

4.3.1 Interrogation du Lookup par les clients . . . . . . . . . . . . . . 42<br />

4.3.2 Le concept de Leasing . . . . . . . . . . . . . . . . . . . . . . . . 44<br />

4.1 Introduction<br />

L’architecture Jini [9] [18] a été introduite par Sun Microsystem Laboratories en 1999<br />

<strong>et</strong> complète la vision de la plateforme Java dont l’idée première était de créer un environement<br />

à même de perm<strong>et</strong>tre à des systèmes embarqués de communiquer <strong>et</strong> d’échanger des<br />

données entre eux de manière flexible <strong>et</strong> transparente afin de bâtir des infrastructures de<br />

services orientés consommateur.<br />

Jini se présente sous la forme d’une extension de la plateforme Java, disponible librement<br />

sur l’Intern<strong>et</strong>. Compte tenu de la jeunesse de c<strong>et</strong>te technologie, de nouvelles<br />

implémentations sont régulièrement mises à disposition sur le site officiel de Jini, mais<br />

les concepts <strong>et</strong> les classes clés sont quant à eux finalisés <strong>et</strong> gelés de manière à perm<strong>et</strong>tre au<br />

développeurs d’exploiter c<strong>et</strong>te technologie dès maintenant, sans crainte d’apparition d’incomptatibilités<br />

dans le futur.<br />

Jini se veut avant tout une spécification pour l’interopérabilité dynamique entre plateformes<br />

Java distribuées sur réseau, n’imposant par là même auncun choix quant au proto-<br />

38


4.2. ARCHITECTURE ET PRINCIPE<br />

cole final utilisé pour l’ implémentation des éléments de communication. Néanmoins, l’utilisation<br />

de RMI comme moyen d’exploitation des obj<strong>et</strong>s distribués rend le développement<br />

<strong>et</strong> le déploiement du code plus aisé, c’est pourquoi les deux versions de Jini disponibles<br />

actuellement (1.0 <strong>et</strong> 1.1) utilisent, elles, abondament RMI. N’oublions pas à c<strong>et</strong> eff<strong>et</strong> que<br />

Java perm<strong>et</strong> l’exploitation du bus CORBA, largement utilisé dans l’industrie, <strong>et</strong> donc que<br />

Jini n’apparait en rien comme fermé des standards actuels. Des recherches ont permis de<br />

montrer qu’il était possible de ”présenter” de manière totalement transparente des services<br />

CORBA comme étant des services Jini, perm<strong>et</strong>tant ainsi à c<strong>et</strong>te technologie d’encapsuler<br />

l’architecture CORBA.<br />

4.2 Architecture <strong>et</strong> principe<br />

Jini repose sur un modèle d’interaction faisant apparaître un certain nombre de rôles <strong>et</strong><br />

de mécanismes clés. On distinguera de manière simplifiée trois acteurs constituant le bus<br />

Jini :<br />

1. Le Service. Il s’agit d’un obj<strong>et</strong> distribué qui est capable d’accomplir un travail donné.<br />

Le Service propose ses capacités <strong>et</strong> invite les autres à les exploiter. Il peut être vu<br />

comme un fournisseur de comportement, de méthodes.<br />

2. Le Client cherche à utiliser un Service spécifique, répondant à ses besoins sur le<br />

moment. Il se pose en consommateur des ressources disponibles.<br />

3. Le Lookup qui orchestre les dialogues entre Clients <strong>et</strong> Services, garde trace des Services<br />

disponibles sur le réseau <strong>et</strong> perm<strong>et</strong> au client des interrogations afin de chercher<br />

le Service le plus adéquat. Il gère également toute la dynamicité du réseau : disparition<br />

des Services, apparition de nouveaux membres sur le bus, modification de rôle<br />

d’un des membres, <strong>et</strong>c.<br />

En plus de ces éléments de base, des concepts accessoires viennent se greffer afin, par<br />

exemple, d’enrichir la définition des Services, de gérer la robustesse des transactions ou<br />

encore d’introduire des mécanismes d’envoi d’évènements. Ils seront vu dans les sections<br />

qui suivent.<br />

L’architecture Jini repose sur un modèle d’interaction entre Services <strong>et</strong> Clients orchestré<br />

par un Service particulier appelé Lookup. Dans un premier temps, un ensemble de Services<br />

<strong>et</strong> de Clients sont disposés sur le réseau <strong>et</strong> cherchent à interagir. Pour ce faire, ils doivent<br />

tout d’abord découvrir un ou plusieurs Service de Lookup. Soit ils possèdent l’adresse IP<br />

de ce service <strong>et</strong> ils peuvent donc prendre contact avec lui sans difficulté, soit ils peuvent<br />

utiliser une technique d’envoi de paqu<strong>et</strong>s en multicast, pour tout le sous-réseau, <strong>et</strong> attendre<br />

la réponse d’un éventuel Lookup présent (Fig. 4.1).<br />

Pendant c<strong>et</strong>te transaction, les Clients comme les Services agissent en temps que consommateurs<br />

du Service de Lookup. On constatera tout au long du détail des mécanismes de<br />

Jini que chaque intervenant n’est pas amené à jouer un rôle unique, mais se présentera<br />

tantôt comme client, tantôt comme service.<br />

39


4.2. ARCHITECTURE ET PRINCIPE<br />

Consumer Provider<br />

Lookup<br />

Service<br />

Consumer<br />

L L<br />

Lookup<br />

Service<br />

Provider<br />

discovery discovery<br />

Lookup<br />

Service<br />

Consumer<br />

announcement announcement<br />

L<br />

Fig. 4.1 – Découverte du Lookup par les Clients <strong>et</strong> les Services.<br />

Consumer Provider<br />

Lookup<br />

Service<br />

Consumer<br />

L L<br />

L<br />

register<br />

Lookup<br />

Service<br />

Provider<br />

discovery discovery<br />

Lookup<br />

Service<br />

Consumer<br />

announcement<br />

Fig. 4.2 – mise à disposition du Proxy par le service<br />

Dans un second temps, ayant connaissance du Lookup, le service m<strong>et</strong> en dépôt chez le<br />

Lookup une portion de code appelée proxy (Fig 4.2). Il s’agit simplement d’une instance<br />

d’un obj<strong>et</strong> RMI qui est téléchargé du service vers le Lookup. Le transfert de code s’effectue<br />

selon les mécanismes implantés par RMI (chargement dynamique du code mobile) au<br />

40


4.2. ARCHITECTURE ET PRINCIPE<br />

Consumer Provider<br />

Lookup<br />

Service<br />

Consumer<br />

announcement<br />

L L<br />

lookup<br />

L<br />

register<br />

Lookup<br />

Service<br />

Provider<br />

discovery discovery<br />

Lookup<br />

Service<br />

Consumer<br />

announcement<br />

Fig. 4.3 – Recherche des proxys du Lookup par le client<br />

moyen du serveur Web présent sur la plateforme du service.<br />

Le ou les clients se posent en consommateur des services présents sur le bus <strong>et</strong> peuvent<br />

entrer en contact avec ceux-ci à l’aide du Lookup. Leur but est d’obtenir une copie du<br />

Proxy mis en dépôt par le service dont ils désirent exploiter les possibilités.<br />

Pour ce faire, ils fournissent au Lookup un ensemble de désidératas qui perm<strong>et</strong>tront de<br />

déterminer quels sont les proxys qui peuvent se révéler utiles (Fig 4.3).<br />

A nouveau, les mécanismes exposés dans le chapitre traitant de RMI seront mis en<br />

oeuvre afin de télécharger une copie du proxy depuis le Lookup jusqu’au Client.<br />

Nous n’avons jusqu’à présent toujours pas précisé la nature même du proxy, à savoir<br />

sa fonctionnalité finale. Comme nous l’avons dit, le Proxy est un morceau de code qui<br />

se déplace de manière transparente de la machine virtuelle du Service jusqu’à la machine<br />

virtuelle du Client. En soi, aucune contrainte n’est imposée sur celui-ci, si ce n’est qu’il doit<br />

être capable d’effectuer ce déplacement en utilisant RMI <strong>et</strong> donc être développé comme un<br />

obj<strong>et</strong> distribué au sens de RMI. Trois types d’approches sont dès lors possibles par rapport<br />

au proxy :<br />

– il est le service recherché par le Client. Auquel cas il s’agit d’un morceau de bytecode<br />

pris comme un programme compl<strong>et</strong>.<br />

– il est un moyen de recontacter le service qui l’a mis à disposition. Dans ce cas, le<br />

proxy est un Stub servant de pont de communication entre le Client <strong>et</strong> le Service.<br />

– Il est hybride : à la fois stub <strong>et</strong> application. Un tel proxy peut par exemple servir à<br />

41


4.3. LE MODÈLE D’INTERACTION DYNAMIQUE<br />

partager les besoins en ressources entre la machine client, plus puissante, <strong>et</strong> acquérir<br />

des informations auprès du service, plus léger.<br />

C<strong>et</strong>te approche laisse bien entendu une très grande liberté quant au rôle final que le proxy<br />

remplira. Quand bien même sa signification pourrait être fixée, une latitude très large est<br />

laissée à l’implantation finale.<br />

4.3 Le modèle d’interaction dynamique<br />

4.3.1 Interrogation du Lookup par les clients<br />

Nous avons puisque les Clients pouvaient effectuer des requêtes auprès du ou des lookup<br />

afin d’obtenir une copie du Proxy des services qui les intéressent. Alors que CORBA<br />

perm<strong>et</strong> d’effectuer des recherches sur base d’un nom symbolique ou de l’énumération d’un<br />

certain nombre de propriétés (méthodes, attributs), Jini proposé un modèle basé sur les<br />

comportements des obj<strong>et</strong>s Proxy. Ainsi, les Clients formulent leurs requêtes en présentant<br />

une ou plusieurs interfaces que les Proxy recherchés devront implémenter. Afin d’affiner<br />

encore plus la recherche, une ou plusieurs classes d’attributs secondaires – dérivées par<br />

convention de la classe Entry – peuvent être fournis.<br />

Les proxy qui implémenteront toutes les interfaces fournies par le Client <strong>et</strong> dont les<br />

Entry auront exactement les mêmes attributs que les Entry fournies par le Client seront<br />

alors r<strong>et</strong>ournés.<br />

Ce mécanisme impose donc que le client <strong>et</strong> le service conviennent des interfaces communes.<br />

On parlera ici de well known interfaces : les interfaces connues de tous. Notons enfin<br />

que l’utilisation d’interfaces pour la recherche perm<strong>et</strong> l’exploitation de toutes les techniques<br />

sous-jacentes à la conception par les méthodes des obj<strong>et</strong>s. Ainsi, si un proxy implémente<br />

une interface qui est une sous-classe de celle fournie par le client, le lookup considérera le<br />

proxy comme un résultat valide pour la requête. Pour prendre un exemple plus parlant, si<br />

un client cherche un instrument de mesure <strong>et</strong> qu’un voltmètre est présent sur le bus à ce<br />

moment, celui-ci sera r<strong>et</strong>ourné car l’interface voltmètre est une sous-classe d’instrument de<br />

mesure <strong>et</strong> donc le voltmètre aura le comportement recherché par le client.<br />

C<strong>et</strong>te logique puissante peu sembler fort contraignante a priori, vu que toutes les interfaces<br />

doivent être normalisées entre les constructeurs avant l’exploitation des possibilités<br />

Jini. Les différences mais donc également les spécificités que peuvent apporter les constructeurs<br />

semblent diminuées. Nous montrerons dans la section 7.2.2 qu’il n’en est rien si nous<br />

combinons le mécanisme de recherche de Jini avec les capacités d’instropection dynamique<br />

des classe offerte par Java.<br />

Terminons ce paragraphe en signalant que le client peut s’enregistrer auprès du lookup<br />

afin de recevoir des événèments liés au changement d’état des services disponibles. Ces<br />

services sont bien entendu ceux qui répondent au désidératas exprimés client, i.e. ceux qui<br />

42


4.3. LE MODÈLE D’INTERACTION DYNAMIQUE<br />

réalisent les interfaces requises par celui-ci. La terminologie Jini fait état de trois transitions<br />

différentes. On parlera de transition<br />

1. no match to match lorsqu’un nouveau service, non connu jusqu’à présent, s’enregistre<br />

auprès du lookup <strong>et</strong> correspond aux demandes du client.<br />

2. match to no match si un service connu venait à disparaître, soit intentionnellement,<br />

soit par expiration du délai de bail de son proxy.<br />

3. match to match portant sur un service déjà existant mais dont le proxy s’est modifié.<br />

Il s’agit par exemple de la mise à disposition d’une nouvelle classe proxy ou de la<br />

modification des attributs secondaires – les Entry – associés à ce proxy.<br />

La figure 4.4 montre que l’apparition d’un nouveau fournisseur de service entraine la<br />

réexécution du schéma que nous avons détaillé plus haut.<br />

Consumer L Provider<br />

Lookup<br />

Service<br />

Consumer<br />

announcement<br />

lookup<br />

discovery<br />

3<br />

S<br />

event<br />

usage<br />

usage<br />

4<br />

2<br />

register<br />

register<br />

Lookup<br />

Service<br />

Provider<br />

Lookup<br />

Service<br />

Consumer<br />

discovery<br />

1<br />

announcement<br />

Fig. 4.4 – A l’apparition d’un nouveau service, le lookup génère un évènement auprès du<br />

client afin que celui-ci puisse bénéficier du nouveau proxy.<br />

43


4.3. LE MODÈLE D’INTERACTION DYNAMIQUE<br />

4.3.2 Le concept de Leasing<br />

Le transfert du proxy effectué, les compétences des services présents sur le bus peuvent<br />

être librement exploitées par les clients possédant les proxy qu’ils requiéraient. Mais c<strong>et</strong>te<br />

distribution de code à travers le réseau soulève la problématique de la robustesse de l’architecture<br />

ainsi mise en place. La plupart des approches relatives à la conception <strong>et</strong> à la<br />

mise en oeuvre de systèmes distribués, faisant intervenir des obj<strong>et</strong>s ou non, postulent que<br />

le réseau est transparent.<br />

Transparent signifie ici qu’il n’est pas un paramètre critique de l’interaction entre client<br />

<strong>et</strong> serveur : la latence est faible ou inexistante, les machines sont stables <strong>et</strong> sont peu susceptibles<br />

de présenter une panne ou de ”disparaître” soudainement du réseau, les méthodes<br />

invoquées sur les obj<strong>et</strong>s distants n’échouent pas. Force est de constater qu’à long terme ces<br />

préceptes se révèlent être faux. L’interaction dynamique entre noeuds d’une communauté<br />

d’appareils hétérogènes implique que ceux ci peuvent apparaître ou disparaître à tout moment.<br />

l’activation d’une méthode sur un obj<strong>et</strong> distant peut potentiellement échouer ; il<br />

suffit de penser par exemple à l’appel d’une méthode de mesure du potentiel dans un calibre<br />

largement supérieur à celui que pourrait supporter le voltmètre. Jini intègre c<strong>et</strong>te<br />

vision en offrant deux mécanismes afin d’assurer la robustesse des interactions.<br />

Le premier mécanisme perm<strong>et</strong> de traiter avec la partie relative à l’activation des méthodes<br />

sur un obj<strong>et</strong> serveur. En cas d’échec de l’appel à la méthode ou en cas de problème lors<br />

de la <strong>réalisation</strong> de la méthode, une exception est j<strong>et</strong>ée. Ainsi le client sera non seulement<br />

averti de l’insuccès de l’invocation distante, mais il sera de plus obligé de traiter l’exception<br />

éventuelle. En eff<strong>et</strong>, les mécanismes syntaxiques du langage Java imposent, lorsqu’une<br />

méthode est déclarée comme pouvant potentiellement j<strong>et</strong>er une exception, de prévoir une<br />

portion de code qui sera inconditionnellement exécutée. C’est donc la responsabilité du<br />

développeur d’agir en conséquence.<br />

Le second mécanisme,plus subtil, assure une connaissance continue des obj<strong>et</strong>s présents<br />

dans la communauté Jini. Fondamentalement, un Service peut quitter le réseau local de<br />

deux manières : soit proprement, en faisant part de son départ, soit suite à un impondérable<br />

(crash matériel, déconnexion du réseau). Un Service quittant le réseau proprement le fera<br />

en annonçant son intention au Lookup en charge de son ou ses Proxy (Fig. 4.5). Le Lookup<br />

décidera alors d’invalider les Proxy mis en dépôt par le Service <strong>et</strong> avertira, au moyen<br />

d’évènement distribués, les Clients faisant usage de ces Proxy qu’il ne convient plus de les<br />

utiliser plus longtemps (Fig 4.6). Les Clients pourront alors envisager de détruire ou non<br />

les Proxy invalides.<br />

Le deuxième mécanisme est utilisé afin de prévenir qu’un Service disparaisse du réseau<br />

local, sans avertir de son départ, m<strong>et</strong>tant ainsi l’équilibre de l’architecture en péril. Ce<br />

mécanisme est connu sous le nom de Leasing. Lors de la mise en dépôt du Proxy, le Service<br />

<strong>et</strong> le Lookup conviennent du temps pendant lequel le Proxy sera mis à disposition ainsi<br />

que d’une fréquence à laquelle ils prendront régulièrement contact. La transaction prend la<br />

44


4.3. LE MODÈLE D’INTERACTION DYNAMIQUE<br />

forme d’un dialogue au cours duquel chacun des acteurs expose ses désidératas ; la décision<br />

finale revenant au Lookup seul. Pour fixer les idées, le service de Lookup fourni par Sun<br />

autorise qu’un Proxy soit mis en dépôt pour un temps infini, pour autant que le Service<br />

puisse être recontacté au plus tard toutes les cinq minutes.<br />

Si, le délai passé, le Service ne peut être contacté ou qu’il ne désire plus renouveller le<br />

bail de son Proxy, ce dernier sera détruit <strong>et</strong> les clients avertis de l’invalidité manifeste des<br />

Proxy liés à ces Services. (Figs. 4.7 <strong>et</strong> 4.8).<br />

Enfin, un dernier mécanisme important perm<strong>et</strong> aux clients de s’assurer que le Service<br />

offre le même comportement. Si le Service venait à changer la configuration de son Proxy<br />

– en fournissant un nouveau au lookup par exemple – ou d’une de ses Entry, un évènement<br />

spécifique est envoyé par le Service au Lookup <strong>et</strong> celui-ci le propagera à tous les clients<br />

utilisant le Proxy.<br />

45


4.3. LE MODÈLE D’INTERACTION DYNAMIQUE<br />

Consumer Provider<br />

Lookup<br />

Service<br />

Consumer<br />

lookup<br />

discovery<br />

L<br />

unregister<br />

Lookup<br />

Service<br />

Provider<br />

Lookup<br />

Service<br />

Consumer<br />

discovery<br />

Fig. 4.5 – Le service annonce son intention de quitter<br />

Consumer L usage Provider<br />

Lookup<br />

Service<br />

Consumer<br />

announcement<br />

lookup<br />

discovery<br />

S<br />

event<br />

register<br />

Lookup<br />

Service<br />

Provider<br />

Lookup<br />

Service<br />

Consumer<br />

discovery<br />

announcement<br />

Fig. 4.6 – L’annonce est répercutée auprès des clients consommateurs du service<br />

46


4.3. LE MODÈLE D’INTERACTION DYNAMIQUE<br />

Consumer<br />

Lookup<br />

Service<br />

Consumer<br />

announcement<br />

lookup<br />

discovery<br />

Lookup<br />

Service<br />

Provider<br />

Fig. 4.7 – Le service disparaît de manière impromptue mais son Proxy vit toujours sur la<br />

plateforme du Lookup<br />

Consumer L<br />

Lookup<br />

Service<br />

Consumer<br />

announcement<br />

lookup<br />

discovery<br />

S<br />

event<br />

usage<br />

???<br />

Lookup<br />

Service<br />

Provider<br />

Fig. 4.8 – Le lookup, ne pouvant renouveler le bail du proxy, l’invalide <strong>et</strong> avertit les clients<br />

47


Deuxième partie<br />

Réalisation d’un système<br />

d’instrumentation distribuée<br />

48


Chapitre 5<br />

Positionnement de JINI par rapport<br />

aux solutions actuelles<br />

Sommaire<br />

5.1 CORBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />

5.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />

5.1.2 Aspects communs . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />

5.1.3 Éléments de distinction . . . . . . . . . . . . . . . . . . . . . . . 51<br />

5.1.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

5.2 UPNP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

5.2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

5.2.2 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

5.2.3 Éléments de distinction . . . . . . . . . . . . . . . . . . . . . . . 53<br />

5.3 IEEE 1451 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />

5.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54<br />

Les chapitres précédents ont longuement exposé la problématique des systèmes d’instrumentation<br />

actuels ainsi que les différentes techniques utilisables actuellement pour la<br />

<strong>réalisation</strong> d’applications distribuées exploitant les possibilités des langages de haut niveau.<br />

Dans ce chapitre, nous nous efforcerons de comparer la technologie Jini, préconisée comme<br />

solution, aux technologies existantes afin d’en faire ressortir les éléments novateurs <strong>et</strong> d’affirmer<br />

l’intérêt de Jini dans le cadre de la <strong>réalisation</strong> d’un système hybride instrument de<br />

mesure–PC.<br />

49


5.1. CORBA<br />

5.1 CORBA<br />

5.1.1 Introduction<br />

Les mécanismes de CORBA ont été détaillés dans le deuxième chapitre. Il y a été<br />

essentiellement question des processus de découverte dynamique des obj<strong>et</strong>s présents sur le<br />

bus ainsi que de la possibilité d’interfacer dynamiquement les obj<strong>et</strong>s serveurs.<br />

De toutes les solutions actuelles, CORBA est celle qui se rapproche le plus de Jini :<br />

celles-ci partagent une optique globalement commune <strong>et</strong> des mécanismes à peu de choses<br />

près similaires. Certaines différences, plus subtiles, laissent penser que l’utilisation de Jini<br />

offre des possibilités plus vastes <strong>et</strong> plus riches que ce que perm<strong>et</strong> CORBA actuellement.<br />

Nous présenterons dans un premier temps les aspects communs des deux technologies pour<br />

enfin isoler les éléments clés qui constituent la différence de mise en oeuvre que propose<br />

chacune des deux approches.<br />

5.1.2 Aspects communs<br />

Jini, à l’instar de CORBA, est une architecture basant ses mécanismes d’interaction<br />

dynamique sur la séparation de compétences en un certain nombre de services. Jini m<strong>et</strong> en<br />

oeuvre principalement deux services : le démon 1 d’activation RMI <strong>et</strong> le Lookup.<br />

Le démon d’activation RMI sert à assurer la sécurité des transactions sur le réseau<br />

d’obj<strong>et</strong>s distribués. Des règles peuvent être définies par l’utilisateur qui serviront à valider<br />

ou invalider toute exploitation des obj<strong>et</strong>s distants. De plus, ce programme est à même<br />

d’assurer un persistence des obj<strong>et</strong>s : c’est lui qui conserve l’ensemble des proxy collectés<br />

par le lookup mais il peut servir, le cas échéant, de mécanisme de sérialisation d’un obj<strong>et</strong><br />

afin de le réactiver ultérieurement. On parle d’obj<strong>et</strong> activable que l’on m<strong>et</strong> en veille. Pour<br />

rapprocher ce démon des mécanismes de CORBA, on peut dire qu’il remplit à la fois le<br />

rôle du service de persistence <strong>et</strong> du service de sécurité.<br />

Le lookup interagit avec le démon RMI <strong>et</strong> est quant à lui chargé de la détection des<br />

services <strong>et</strong> de désservir les recherches des clients. Il agit de ce point de vue un peu comme<br />

le Naming Service ou le Trader Service de CORBA : les clients peuvent y effectuer des<br />

requêtes <strong>et</strong> accéder ainsi aux obj<strong>et</strong>s serveurs. Seule l’implantation finale de la mise en<br />

oeuvre de ces recherches montre des différences fondamentales entre le point de vue adopté<br />

par CORBA <strong>et</strong> celui de Jini.<br />

Enfin, l’utilisation d’évènements est présent dans les deux architecures. Jini impose<br />

qu’une exception soit traitée lors de l’activation d’une méthode distante alors que CORBA<br />

propose l’envoi d’évènements via le Event Service. Néanmoins, une approche raisonnable<br />

1 le démon est largement utilisé afin de traduire le mot anglais daemon. Ce terme peut paraitre relativement<br />

peu approprié pour celui qui ne le côtoie pas régulièrement <strong>et</strong> doit être vu comme un programme<br />

agent vivant en tâche de fond <strong>et</strong> dont le but est d’assister le système dans la gestion des tâches.<br />

50


5.1. CORBA<br />

du point de vue de l’implantation des obj<strong>et</strong>s CORBA, consiste à imposer que chaque<br />

méthode j<strong>et</strong>te une exception lorsqu’une erreur prend place. De plus, en demandant au<br />

service d’évènements de distribuer directement aux clients concernés les messages envoyés<br />

par les serveurs, on arrive au même niveau de robustesse que ce que Jini propose pour<br />

l’interaction client-service.<br />

5.1.3 Éléments de distinction<br />

Les différences fondamentales entre Jini <strong>et</strong> CORBA tiennent essentiellement au modèle<br />

de déploiement totalement duaux que proposent ces architectures. CORBA suppose un<br />

déploiement sur des machines hétérogènes, présentant des langages différents <strong>et</strong> des modèles<br />

de données incompatibles. Jini existe par dessus la plateforme Java <strong>et</strong> perm<strong>et</strong> l’interaction<br />

d’obj<strong>et</strong>s Java distribués sur des machines virtuelles Java. C’est donc l’exploitation de ce<br />

langage <strong>et</strong> de c<strong>et</strong>te plateforme unique pour tous les acteurs qui rend Jini fortement différent<br />

de CORBA.<br />

La notion d’obj<strong>et</strong> distribué de CORBA est intimement liée à la présence massive de<br />

pointeurs. Les obj<strong>et</strong>s, qu’ils soient locaux ou distants sont accessibles via ces pointeurs.<br />

Un obj<strong>et</strong> serveur utilisé par un client ne vit donc pas sur la machine locale. En Jini, le<br />

mécanisme est contraire : les services m<strong>et</strong>tent à disposition des proxy qui sont transportés<br />

de manière transparente jusque sur la plateforme du client. L’obj<strong>et</strong> vit donc sur la machine<br />

virtuelle du client <strong>et</strong> devient ainsi un obj<strong>et</strong> local. Il peut donc être sérialisé sur les<br />

périphériques de stockage de masse du client <strong>et</strong> être réexploité même après disparition du<br />

service qui l’a émis. Ce phénomène est rendu possible grâce à l’utilisation de RMI comme<br />

modèle pour les obj<strong>et</strong>s distribués <strong>et</strong> serait complètement impossible à réaliser en CORBA.<br />

Le système de bail (leases) utilisé dans Jini contribue à la stabilité <strong>et</strong> la propr<strong>et</strong>é du<br />

système tout entier. Un serveur disparaissant dans CORBA ne se révellerait invalide qu’au<br />

moment d’un appel infructueux. Auncun mécanisme ne garantit le suivi des obj<strong>et</strong>s distants<br />

en terme d’existence ou de possibilité de les atteindre. Les références de ces obj<strong>et</strong>s ne sont<br />

également pas n<strong>et</strong>toyées sur le bus tout entier. Jini offre un manière flexible de conserver<br />

le contact avec les services. Ceux-ci ne peuvent s’enregistrer pour une durée illimitée<br />

auprès du lookup <strong>et</strong> toute disparition d’un service entraîne automatiquement la propagation<br />

d’évènements à travers tout le bus afin d’avertir les clients consomateurs de ce service<br />

que les proxy qu’ils possèdent pourraient mener à un comportement erroné. Le système est<br />

donc sous contrôle permanent <strong>et</strong> se ”n<strong>et</strong>toie” régulièrement.<br />

Notons à charge de Jini qu’il n’y a actuellement aucun regroupement de services sous<br />

formes de sphères de compétences comme il existe dans CORBA pour chaque corps de<br />

métier. Notons que de tels obj<strong>et</strong>s pourraient se développer dans des versions utlérieures<br />

de Jini sous la pression des compagnies désireuses d’exploiter les possibilités nouvelles de<br />

c<strong>et</strong>te technologie.<br />

51


5.2. UPNP<br />

5.1.4 Conclusion<br />

CORBA <strong>et</strong> Jini présentent fondamentalement les mêmes aspirations pour l’interaction<br />

entre obj<strong>et</strong>s sur un bus distribué. Seuls les modèles d’implantation <strong>et</strong> de déploiement<br />

marque la différence entre les technologies. Jini tire bénéfice de son utilisation dans un<br />

environement fortement dynamique <strong>et</strong> mobile, mais exclusivement constitué de plateformes<br />

Java.<br />

Jini <strong>et</strong> CORBA ne sont cependant pas incompatibles en ce sens que le modèle RMI<br />

de Java perm<strong>et</strong> d’interfacer IIOP de CORBA [24] perm<strong>et</strong>tant la présentation de serveurs<br />

CORBA sous forme de services Jini. [20]<br />

5.2 UPNP<br />

5.2.1 Introduction<br />

Le modèle Universal Plug and Play [10] a été introduit par la société Microsoft en<br />

1999. Nous l’évoquons ici car il fait partie, au même titre que IEEE 1451, d’une nouvelle<br />

vague de standards pour l’exploitation flexible <strong>et</strong> transparente des appareils dans le monde<br />

informatique. Nous présentons ici de manière succinte les principes de c<strong>et</strong>te nouvelle norme<br />

<strong>et</strong> apportons un bref point de comparaison avec la technologie Jini.<br />

5.2.2 Principes<br />

UPNP a pour seul but de perm<strong>et</strong>tre une forme d’interaction légère entre appareils d’une<br />

part <strong>et</strong> entre ordinateurs d’autre part. Il s’agit d’une version plus globale du standard<br />

très connu Plug and Play perm<strong>et</strong>tant de connecter tout type d’appareillage informatique<br />

sans besoin de configuration préalable. Un périphérique compatible UPNP est à même de<br />

s’insérer dans un réseau, d’obtenir une adresse IP, de propager ses capacités <strong>et</strong> de découvrir<br />

celles des autres appareils également présents. Enfin, le périphérique est à même de quitter<br />

le réseau aisément, sans laisser d’état incertain derrière lui.<br />

UPNP utilise principalement des techniques <strong>et</strong> des standards issus de la technologie<br />

Intern<strong>et</strong> : IP, TCP, UDP, HTTP <strong>et</strong> XML. Comme il est courant sur l’Intern<strong>et</strong>, les interactions<br />

sont basées sur des protocoles déclaratifs, exprimés en XML <strong>et</strong> publiés via HTTP.<br />

Un autre avantage de UPNP est la disparition complète de la notion de gestionnaire de<br />

périphérique. Ces derniers sont remplacés par des protocoles communs <strong>et</strong> connus de tous,<br />

indépendants du langage <strong>et</strong> du système d’exploitation. Certains périphériques plus évolués<br />

<strong>et</strong> plus puissants devraient être à même d’incorporer une composante Web, perm<strong>et</strong>tant ainsi<br />

d’accéder à certaines fonctionnalités, par exemple de configuration, à travers un navigateur<br />

Intern<strong>et</strong>.<br />

52


5.3. IEEE 1451<br />

5.2.3 Éléments de distinction<br />

La notion d’interface est plus contraignante ici que celle définie par Jini. En eff<strong>et</strong>,<br />

les proxy de Jini étant des instances de classes, une analyse plus fine peut être réalisée<br />

par le client en utilisant le mécanisme d’introspection de Java. Ainsi, les proxy sont-ils<br />

plus évolutifs car même s’ils utilisent une interface connue, donc si on est assuré d’y voir<br />

implémenté un ensemble minimum de possibilités connues, il est toujours possible d’augmenter<br />

ces possibilités en les découvrant au vol.<br />

Les proxy sont déplacés du service vers le client, perm<strong>et</strong>tant ainsi une approche hybride<br />

où le code est exploité à la fois du côté PC <strong>et</strong> du côté appareil. Dans le cas par exemple du<br />

DSP (Digital Signal Processing), on peut réaliser des proxy prenant les points de mesure<br />

sur l’appareil, en réseau, <strong>et</strong> implantant sur le PC l’algorithme de post-traitement. Une<br />

telle approche n’est pas possible avec UPNP car les périphériques sont seulement capables<br />

d’énumérer leurs caractéristiques.<br />

Enfin, UPNP spécificie un standard perm<strong>et</strong>tant d’intégrer les appareils PNP actuels<br />

<strong>et</strong> connectés sur un PC via USB par exemple. Une telle approche, connue sous le nom de<br />

surrogate, est également envisagée en Jini, afin de perm<strong>et</strong>tre aux appareils les plus anciens<br />

de participer à la communauté d’appareils Jini. Il s’agit en fait simplement d’incorporer<br />

dans les gestionnaires de périphériques existant sur le PC un service contrôlant l’appareil<br />

<strong>et</strong> le proposant sur le réseau. C’est ce principe qui sera appliqué dans le cadre du présent<br />

travail, lors de l’implantation du système de mesure.<br />

On peut dire en conclusion que UPNP a une vision à plus court terme <strong>et</strong> plus réduite en<br />

terme d’implantation de code associé au périphérique. UPNP offre l’avantage de requérir<br />

peu de ressources <strong>et</strong> d’être plus directement en contact avec les standards existants, tel<br />

que PNP.<br />

5.3 IEEE 1451<br />

La proposition en cours de normalisation IEEE 1451, a été détaillée au point 1.3.2. de ce<br />

travail. Celle-ci m<strong>et</strong> en oeuvre un modèle basé sur l’échange de messages entre actuateurs<br />

<strong>et</strong> noeuds de contrôle afin d’énumérer l’ensemble des possibilités de l’appareil. Une telle<br />

approche ne présente aucun aspect obj<strong>et</strong> <strong>et</strong> est semblable à celle adoptée par UPNP. Nous<br />

pouvons donc adopter la même approche que celle nous avons détaillée pour UPNP <strong>et</strong> nous<br />

rendre à l’évidence que c<strong>et</strong>te technologie est importante mais a une vision moins large que<br />

Jini.<br />

53


5.4. CONCLUSION<br />

5.4 Conclusion<br />

Pour palier aux limitations actuelles d’interfaçage des instruments de mesure ou des<br />

appareils en général, de nouveaux standards émergent <strong>et</strong> sont actuellement en cours de<br />

normalisation. Les architectures telles que Jini <strong>et</strong> CORBA offrent des possibilités plus<br />

intéressantes, puisque basées sur la technique des obj<strong>et</strong>s en adoptant une mise en oeuvre<br />

différente. Dans le cas très spécifique des systèmes d’instrumentation distribuées, Jini nous<br />

semble présenter un réel avantage sur CORBA, de par la possibilité d’incorporer du code<br />

mobile dans l’appareil afin de réaliser les opérations de post-traitement ou de fournir une<br />

interface graphique spécifique à l’appareil.<br />

Enfin, comme nous le verrons, Jini est la seule technologie offrant une approche réaliste<br />

des environements de terrain, en intégrant les aspects relatifs à la connexion ou la déconnexion<br />

brusque des appareils <strong>et</strong> en perm<strong>et</strong>tant la mise au point de stratégies efficaces dans le but<br />

d’assurer la stabilité de l’architecture déployée.<br />

54


Chapitre 6<br />

Contrôle local des instruments de<br />

mesure en Java<br />

Sommaire<br />

6.1 Contrôle local des instruments GPIB . . . . . . . . . . . . . . 55<br />

6.2 l’interface standard IEEE 488 pour Java . . . . . . . . . . . . 56<br />

La <strong>réalisation</strong> du système d’instrumentation virtuelle basé sur Jini <strong>et</strong> Java repose sur<br />

un modèle de développement incrémental : il s’ agira dans un premier temps de réaliser le<br />

contrôle purement local des instruments de mesure au moyen de bibliothèques standards <strong>et</strong><br />

de code écrit en C. Ce code natif sera ensuite interfacé avec des classes Java au moyen de<br />

la Java Native Interface (JNI) dont les principes ont été détaillés dans la première partie<br />

de ce travail. On adjoint enfin ces classes de contrôle à un service Jini, complétant ainsi<br />

notre approche <strong>et</strong> réalisant pratiquement la distribution de l’instrument sur le réseau local<br />

ou global.<br />

6.1 Contrôle local des instruments GPIB<br />

Le contrôle local des instruments GPIB se base sur une bibliothèque de fonctions de<br />

très bas niveau mis à disposition librement par National Instruments. C<strong>et</strong>te bibliothèque<br />

existe tant pour Windows que pour l’ensemble des plateformes Unix <strong>et</strong> Linux. Le code<br />

ainsi réalisé sur c<strong>et</strong>te base restera hautement portable pour peu qu’ on prenne soin à n’<br />

utiliser que des fonctions basiques.<br />

Il existe deux modes principaux d’exploitation du bus GPIB : l’initialisation du bus <strong>et</strong><br />

des instruments ainsi que l’envoi de messages <strong>et</strong> l’attente de réponses vers <strong>et</strong> depuis les<br />

instruments proprement dits.<br />

55


6.2. L’INTERFACE STANDARD IEEE 488 POUR JAVA<br />

6.2 l’interface standard IEEE 488 pour Java<br />

Le bus IEEE488 pouvant être considéré comme un port de communication à part<br />

entière, nous avons rapproché tant que possible notre modèle de description <strong>et</strong> d’utilisation<br />

du bus en Java de celui proposé dans l’extension standard relative au ports d’entrée/sorties.<br />

C<strong>et</strong>te extension, connue sous le nom de Java Communication API (JavaComm) offre actuellement<br />

la possibilité de traiter avec les ports séries <strong>et</strong> parallèles de n’ importe quel<br />

système. l’approche r<strong>et</strong>enue par Sun consiste à<br />

1. énumérer tous les ports présents au moyen d’une classe d’énumération gardant trace<br />

de tous les ports trouvés<br />

2. les initialiser<br />

3. perm<strong>et</strong>tre d’instancier une classe par port repris dans l’énumération du premier point<br />

<strong>et</strong> d’ainsi prendre le contrôle d’un instrument présent sur le bus<br />

4. m<strong>et</strong>tre à disposition des méthodes dans la classe du port relatives à l’exploitation de<br />

ses capacités (envoi, écoute, création d’un stream pour y injecter des données, <strong>et</strong>c. )<br />

Nous avons adopté exactement la même approche afin de nous conformer au standard de<br />

la JavaComm <strong>et</strong> de proposer ce gestionnaire de périphérique comme complément à l’extension<br />

existante. Notre implantation comporte 5 classes qui sont décrites ci-dessous ainsi<br />

que sur la figure 6.1.<br />

GPIBDeviceIdentifier.java C<strong>et</strong>te classe est la première à devoir être instanciée.<br />

Elle se charge de prendre le contrôle du bus GPIB <strong>et</strong> de le réinitialiser. Dans un<br />

second temps, elle détecte <strong>et</strong> énumère tous les périphériques présents <strong>et</strong>, pour chaque<br />

appareil, garde trace de toutes les informations connues (identification, position sur<br />

le bus,<strong>et</strong>c.) . Il s’agit ici d’une réprésentation passive de l’instrument vu que celui-ci<br />

ne peut être encore contrôlé à ce point. On peut obtenir un instance de la classe<br />

GPIBDevice, représentant un périphérique GPIB, par l’appel à la méthode open().<br />

GPIBDevice.java Chaque instance de c<strong>et</strong>te classe représente un périphérique présent<br />

sur le bus IEEE488. Via les méthodes de c<strong>et</strong>te classe, nous sommes à même d’envoyer<br />

des messages à l’appareil ou d’obtenir des mesures.<br />

GPIBDriver.java La <strong>réalisation</strong> de certaines méthodes requiert l’utilisation de code<br />

natif comme nous l’avons vu. C<strong>et</strong>te classe abstraite décrit les fonctionnalités que tout<br />

gestionnaire natif du bus doit implémenter. Un fichier de configuration placé dans un<br />

lieu standard perm<strong>et</strong> de spécifier le nom d’une classe à charger, celle-ci implémentera<br />

le gestionnaire natif du bus sur le système local.<br />

WindowsGPIBDriver.java Sous-classe de GPIBDriver, c<strong>et</strong>te classe implémente les<br />

méthodes natives perm<strong>et</strong>tant l’initialisation <strong>et</strong> l’envoi de messages sur le bus. C’ est<br />

la seule qui comporte du code natif.<br />

La figure 6.2 présente le modèle suivant lequel l’utilisateur a accès à un appareil<br />

spécifique. La prise en charge du bus GPIB par le code Java, au travers de la carte<br />

56


6.2. L’INTERFACE STANDARD IEEE 488 POUR JAVA<br />

contrôleur présente sur le PC, est initiée dès l’instantiation de la classe GPIBDeviceIdentifier.<br />

Le constructeur de c<strong>et</strong>te classe débute le dialogue avec le bus par la création d’une<br />

instance d’une classe implantant l’interface GPIBDriver. C<strong>et</strong>te classe, e.g. WindowsGPIB-<br />

Driver, comporte tout le code natif nécessaire afin d’interagir avec le bus. C’ est vers c<strong>et</strong>te<br />

classe que seront concentrés les appels de bas niveaux aux instruments du bus. Une classe<br />

d’énumération, associée à la classe d’identification, perm<strong>et</strong> de passer en revue l’ensemble<br />

des périphériques qui auront été détectés lors de l’initialisation du bus IEEE 488 par le<br />

GPIBDriver. Le périphérique est présenté au travers de la classe GPIBDeviceIdentifier,<br />

ce qui perm<strong>et</strong> d’obtenir des renseignements sans devoir réellement prendre le contrôle du<br />

périphérique. Enfin, la prise en charge proprement dite du dit périphérique se fera par l’instanciation<br />

d’une classe GPIBDevice. Créer une instance de c<strong>et</strong>te classe initialise <strong>et</strong> prend<br />

le contrôle de l’appareil correspondant, mais prend également en charge tous les appels<br />

nécessaires à la gestion des états d’erreur éventuel de l’appareil (e.g. erreurs de timeout).<br />

La classe GPIBDevice offre des méthodes perm<strong>et</strong>tant de communiquer efficacement avec<br />

l’instrument qu’ elle représente. A c<strong>et</strong> eff<strong>et</strong>, plusieurs types de messages sont disponibles :<br />

– demande de ferm<strong>et</strong>ure du port de communication<br />

– réinitialisation de l’instrument<br />

– envoi d’un chaîne de caractères <strong>et</strong> acquisition du message de réponse<br />

C<strong>et</strong>te interface réduite découle des principes mêmes de l’utilisation du bus GPIB :<br />

seuls des messages <strong>et</strong> des textes sont transférés sur les fils. Les changements d’état du<br />

bus sont traités de manière totalement transparente pour l’utilisateur : des exceptions<br />

sont levées lors de la communication afin d’effectuer une correspondance cohérente entre<br />

le changement d’état d’un fil d’erreur <strong>et</strong> le modèle événementiel de Java. La figure 6.3<br />

présente un diagramme de séquence montrant une utilisation de c<strong>et</strong>te interface afin de<br />

recueillir la tension aux bornes d’un voltmètre numérique. Il est ici important de noter que<br />

”demander la tension” n’ a aucun sens dans le modèle GPIB. Il faut donc, pour tout modèle<br />

d’appareil, m<strong>et</strong>tre en correspondance les méthodes que conceptuellement tout voltmètre<br />

pourrait présenter avec le code de la chaîne de caractère à envoyer sur le bus de manière à<br />

réaliser la demande proprement dite. Ainsi, ”demander la tension” se dira ”VOLT :10 :100”<br />

dans le langage de l’appareil repris sur la figure.<br />

57


6.2. L’INTERFACE STANDARD IEEE 488 POUR JAVA<br />

58<br />

Fig. 6.1 – Classes utilisées pour la mise en oeuvre d’une interface de communication relative<br />

au bus GPIB


6.2. L’INTERFACE STANDARD IEEE 488 POUR JAVA<br />

Fig. 6.2 – Modèle d’initialisation du bus GPIB en Java<br />

59


6.2. L’INTERFACE STANDARD IEEE 488 POUR JAVA<br />

Fig. 6.3 – Envoi de commandes à destination de l’instrument au moyen de la classe GPIB-<br />

Device<br />

60


Chapitre 7<br />

Utilisation de JINI dans le cadre de<br />

l’instrumentation virtuelle<br />

Sommaire<br />

7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />

7.2 Interfaçage des instruments de mesure . . . . . . . . . . . . . 62<br />

7.2.1 Interfaces standardisées . . . . . . . . . . . . . . . . . . . . . . . 62<br />

7.2.2 Introspection dynamique des capacités des instruments . . . . . . 65<br />

7.3 Exploitation du réseau . . . . . . . . . . . . . . . . . . . . . . . 67<br />

7.3.1 Les domaines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

7.3.2 Instrumentation distante . . . . . . . . . . . . . . . . . . . . . . . 67<br />

7.4 Les apports propres à Jini . . . . . . . . . . . . . . . . . . . . . 68<br />

7.4.1 Robustesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />

7.4.2 Interfaces graphiques . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />

7.1 Introduction<br />

Afin de montrer également que notre approche peut parfaitement s’intégrer dans un<br />

environnement de prise de mesure actuel, tel que LabVIEW, nous avons réalisé une application<br />

offrant les mêmes possibilités de programmation visuelle, d’interfaçage utilisateur,<br />

<strong>et</strong>c. que présentent les logiciels disponibles sur le marché. C<strong>et</strong>te application présente un<br />

module de gestion prenant entièrement en charge le bus Jini <strong>et</strong> interagissant avec celui-ci<br />

au moyen d’un nombre extrêmement restreint de méthodes. Ainsi, nous montrerons que<br />

l’intégration de Jini dans les solutions existantes ne requiert pas la reconversion complète<br />

ou partielle de l’application <strong>et</strong> qu’il est réellement envisageable de développer une sorte<br />

61


7.2. INTERFAÇAGE DES INSTRUMENTS DE MESURE<br />

de ”plugin” intégré à l’application lui perm<strong>et</strong>tant de tirer avantage des futurs instruments<br />

compatibles Jini.<br />

7.2 Interfaçage des instruments de mesure<br />

7.2.1 Interfaces standardisées<br />

Nous avons exposé dans la première partie de ce travail le besoin d’un ensemble commun<br />

d’interfaces perm<strong>et</strong>tant de décrire <strong>et</strong> donc de posséder une connaissance a priori sur<br />

les capacités de chacun des services présents dans une architecture Jini. Nous proposons<br />

à c<strong>et</strong> eff<strong>et</strong> une hiérarchie de classes propre à l’instrumentation afin de représenter les possibilités<br />

de chaque appareil ainsi que la manière dont ils peuvent s’ organiser entre eux.<br />

C<strong>et</strong>te hiérarchie est présentée à la figure 7.1 <strong>et</strong> n’ est pas exhaustive, tant la diversité<br />

des appareils <strong>et</strong> des types de mesures est grande. Les possibilités de chaque appareil, relatives<br />

à son aptitude à gérer les différentes formes d’ondes sont représentées à la figure 7.2.<br />

En adoptant de double modèle, basé sur une séparation des formes d’ondes <strong>et</strong> des aptitudes,<br />

nous atteignons un niveau de flexibilité élevé. En eff<strong>et</strong>, les possibilités de recherche<br />

s’ en trouvent enrichies : on pourra, par exemple, vouloir ne chercher que les instruments<br />

capables de traiter les signaux alternatif, ou visualiser tous les générateurs puis raffiner aux<br />

seuls capables de générer des formes d’ondes particulières. Du point de vue informatique,<br />

il suffira que le proxy proposé par le service implémente chacune de ces interfaces.<br />

La figure 7.3 montre comment ces diverses interfaces peuvent se combiner afin de<br />

définir les possibilités d’un appareil donné. Il s’agit ici d’un multimètre Hewl<strong>et</strong>t-Packard<br />

HP34401A qui est à même de mesurer des tensions, des courants,des impédances <strong>et</strong> des<br />

fréquences dans les modes continu autant qu’alternatif. De plus, il implémente une logique<br />

de déclenchement (triggering). Le HP34401A réalisera donc chacune des interfaces relatives<br />

à ces capacités car il est la réunion de toutes ces compétences.<br />

62


7.2. INTERFAÇAGE DES INSTRUMENTS DE MESURE<br />

Fig. 7.1 – Diagramme de classes pour les interfaces standardisées entre appareils<br />

63


7.2. INTERFAÇAGE DES INSTRUMENTS DE MESURE<br />

Fig. 7.2 – Diagramme de classes pour les interfaces représentant les formes d’ondes que<br />

chaque appareil est à même de traiter.<br />

64


7.2. INTERFAÇAGE DES INSTRUMENTS DE MESURE<br />

Fig. 7.3 – Exemple d’appareil virtuel en Java. Le comportement de l’appareil est défini<br />

comme étant la réunion de chacune de ses capacités de base, menant à une <strong>réalisation</strong><br />

multiple d’interfaces.<br />

7.2.2 Introspection dynamique des capacités des instruments<br />

Comme nous l’avions déjà évoqué dans l’étude théorique de l’architecture Jini, le besoin<br />

de normalisation des interfaces qu’implémentera chaque appareil peut être vu comme<br />

fortement limitatif <strong>et</strong> peu évolutif, ne laissant pas de place aux spécificités que chaque<br />

constructeur pourrait être désireux d’implémenter. Nous allons montrer qu’en réalité ces<br />

interfaces n’ imposent qu’une ébauche des capacités mises à disposition par les services <strong>et</strong><br />

que, quoique nécessaire lors du processus de découverte, ces interfaces ne sont pas, à notre<br />

sens, une finalité en soi. l’utilisation du mécanisme d’introspection inhérent à la plateforme<br />

Java conjointement utilisée avec le modèle flexible d’interfaces connues pour l’instrumentation<br />

nous a permis de développer un utilitaire d’exploration des instruments connectés<br />

au réseau. C<strong>et</strong> outil présente les appareils selon trois modes de classification : le type de<br />

mesures qu’ils sont capables d’effectuer, leur localisation ainsi que le fabriquant du senseur<br />

ou de l’actuateur.<br />

Pour rappel, l’introspection est un mécanisme par lequel il est possible de connaître<br />

le nom d’une classe, l’ensemble des interfaces qu’elle implémente ainsi que les méthodes<br />

qui nous sont accessibles. Ainsi, en cherchant tous les instruments de mesure présents<br />

sur le réseau, en cherchant à connaître les interfaces que leurs proxy implantent, nous<br />

65


7.2. INTERFAÇAGE DES INSTRUMENTS DE MESURE<br />

pouvons établir une classification sans même nous soucier des interfaces standards que<br />

nous avons évoquées : l’introspection nous énumérera les interfaces implémentées. De même,<br />

l’énumération des attributs venant avec le proxy pourra-t-il faire apparaître ceux qui sont<br />

relatifs à la localisation <strong>et</strong> au nom du vendeur, <strong>et</strong> nous pourrons exploiter c<strong>et</strong>te information<br />

pour la construction de la vue principale de notre explorateur, présentée sous forme d’un<br />

arbre (Fig. 7.4).<br />

Fig. 7.4 – L’utilisation de l’introspection dynamique perm<strong>et</strong> d’offrir à l’utilisateur un vue<br />

très précise <strong>et</strong> confortable de tous les appareils disponibles sur le réseau local.<br />

Enfin, nous avons pu m<strong>et</strong>tre en évidence que l’introspection des méthodes accessibles<br />

sur le proxy perm<strong>et</strong> également de construire une interface locale pour un instrument<br />

éventuellement plus riche que celle décrite par dans l’interface connue. En eff<strong>et</strong>, soit la<br />

classe proxy de l’appareil implémentera simplement l’interface, soit elle se conformera au<br />

standard <strong>et</strong> ajoutera certains membres propres au constructeur ou la gamme d’appareil.<br />

Ces membres seront découverts sur le client par introspection en cours d’exécution <strong>et</strong>, s’<br />

il s’ agit par exemple d’utiliser un mode de programmation visuelle similaire à LabVIEW,<br />

on pourra aisément modifier l’icône <strong>et</strong> y ajouter les connecteurs relatifs à ces méthodes.<br />

L’utilisation de ce mécanisme peut s’ avérer relativement coûteux en temps si on se place<br />

du point de vue du traitement des données en temps réel, mais il enrichit grandement les<br />

possibilités offertes par l’utilisation de Jini comparativement à d’autres modèles beaucoup<br />

plus statiques <strong>et</strong> moins évolutifs. Ce dernier point pourrait donc s’ avérer être un avantage<br />

décisif quant à un choix à long terme pour l’établissement de mécanismes de communication<br />

entre appareils à grande échelle.<br />

66


7.3. EXPLOITATION DU R ÉSEAU<br />

7.3 Exploitation du réseau<br />

7.3.1 Les domaines<br />

Nous avons exploité la notion de domaine contrôlé par le Lookup Service afin de propager<br />

les services fournis par les appareils à travers un réseau plus large. Rappelons que le<br />

Lookup est en service <strong>et</strong> qu’à ce titre il sera ”détecté” par les autres Lookup sur le même<br />

sous-réseau que ce premier. Ainsi, le déploiement hiérarchique au sens du réseau des machines<br />

responsable de la prise en charge du Lookup local perm<strong>et</strong> de créer des connexions de<br />

bout en bout entre deux sous-réseaux voisins mais non connectés directement. Les Lookup<br />

ainsi mis en présence m<strong>et</strong>tent en commun l’information qu’ils ont collectée sur l’ensemble<br />

des services qui se sont enregistrés auprès d’eux. C<strong>et</strong>te information s’ échange ainsi de<br />

machine en machine, pour autant que celles-ci soient en charge du même domaine <strong>et</strong> que<br />

la politique de sécurité en vigueur pour chacun des services de Lookup le perm<strong>et</strong>te, ce que<br />

nous a permis de constituer par propagation une infrastructure de prise de mesure à grande<br />

échelle.<br />

L’intérêt d’une telle technique repose également sur la robustesse qu’elle engendre.<br />

En eff<strong>et</strong>, si une passerelle entre deux sous-réseaux venait à tomber en panne, ou même<br />

qu’un service de lookup subisse une panne, l’information pourrait toujours emprunter un<br />

chemin alternatif éventuellement placé de manière redondante à c<strong>et</strong> eff<strong>et</strong>. Le déploiement<br />

des domaines, loin d’être simplement vu comme un mécanisme de sécurité, doit être pris<br />

en considération lors de la mise en service du réseau local basé sur Jini. Nous avons pu<br />

constater que celui-ci nous garantira ainsi une robustesse ainsi qu’une flexibilité accrues.<br />

7.3.2 Instrumentation distante<br />

Les services <strong>et</strong> clients désireux de prendre part à la communauté Jini locale se doivent<br />

dans un tout premier temps d’avoir connaissance d’un ou plusieurs Lookup au travers<br />

desquels ils déposeront leur proxy s’ils se posent en services ou effectueront leurs recherches<br />

s’ils se posent en clients. A c<strong>et</strong>te fin, nous avions vu qu’il existe deux techniques : la<br />

détection dynamique sur le sous-réseau local <strong>et</strong> l’attribution statique.<br />

La détection dynamique se basant sur un envoi de messages encapsulés dans des paqu<strong>et</strong>s<br />

UDP en propagation multicast, ceux-ci seront à même de m<strong>et</strong>tre en contact le service avec<br />

tout Lookup présent dans le champ accessible à de tels paqu<strong>et</strong>s, c’est à dire au minimum<br />

le sous-réseau local. Un propagation plus étendue dépend des directives appliquées lors du<br />

passage de chaque passerelle. Celle-ci peut décider de diminuer le temps de vie du paqu<strong>et</strong><br />

(TTL : Time To Live), le supprimant lorsque ce paramètre est nul, ou bien de le filtrer ou<br />

encore de ne pas le modifier. Nous exploitons c<strong>et</strong>te technique d’investigation dynamique<br />

de manière à filer un tissu local d’instruments sans besoin de configuration. On parlera de<br />

réseau local d’instrumentation [11] [8].<br />

Le fait de pouvoir fournir l’adresse d’un lookup est une vue plus statique de l’interaction<br />

services-clients. C<strong>et</strong>te approche perm<strong>et</strong> par exemple d’utiliser les capacités d’un lookup<br />

67


7.4. LES APPORTS PROPRES À JINI<br />

situé hors du sous-réseau local <strong>et</strong> éventuellement fort distant. De nombreuses expériences<br />

d’instrumentation ont pour but d’exploiter les réseaux à grande échelle <strong>et</strong> plus particulièrement<br />

l’Intern<strong>et</strong> afin de réaliser de l’instrumentation à distance [16].<br />

Nous voyons donc que Jini, de par sa capacité d’utilisation des ressources locales <strong>et</strong><br />

globales rejoint les deux exploitations actuelles qui sont faites du réseau dans le cadre de<br />

la prise de mesure assistée par ordinateur. Jini propose ainsi une solution utilisable quel<br />

que soit le modèle de déploiement final envisagé.<br />

7.4 Les apports propres à Jini<br />

7.4.1 Robustesse<br />

La robustesse d’un système d’actuateurs ou de capteurs est primordiale, voire critique<br />

dans certains cas. Il s’agit d’être à même d’attester à tout moment l’état de bon fonctionement<br />

des appareils. Si un capteur tombe en panne, est défectueux ou si la mesure<br />

demandée ne peut s’effectuer, il est impératif d’avoir connaissance du problème dans un<br />

délai approprié.<br />

Jini possède un mécanisme que nous pourrions utiliser à c<strong>et</strong> eff<strong>et</strong> : il s’agit de la gestion<br />

des exceptions distantes (remote exceptions) <strong>et</strong> de la notion de bail du proxy (leases). La<br />

gestion des exceptions distantes nous offre la possibilité d’exécuter un segment de code<br />

spécifique lorsqu’une méthode activée sur un obj<strong>et</strong> distant a levé une exception. C<strong>et</strong>te<br />

méthode représentant en fait une commande envoyée à l’instrument, nous nous assurons<br />

ainsi que celles-ci prennent place correctement dans le processus de mesure. C<strong>et</strong>te technique<br />

traitant la problématique du client, il nous reste à envisager la partie liée au service ; à<br />

savoir la détection de la disparition de l’instrument pour quelque raison que ce soit.<br />

Le service de son côté peut subir deux types de déficiences principales : la panne du<br />

réseau sur lequel il est connecté <strong>et</strong> la panne de l’appareil lui-même. Nous venons de montrer<br />

que les mécanismes d’exception gèrent l’envoi de commandes vers le service ainsi que sa<br />

<strong>réalisation</strong>. La panne de réseau n’échappe pas à ce cas de figure <strong>et</strong> toute panne du réseau<br />

sera instantanément détectée. Seule subsiste la problématique de la disparition de l’appareil<br />

<strong>et</strong> donc de l’invalidation de sa disponibilité pour les clients chargés de la collection des<br />

mesures. Nous proposons comme solution l’exploitation du mécanisme de bail. En ajustant<br />

correctement les paramètres de fréquence de vérification <strong>et</strong> de temps maximum de vie du<br />

proxy, on peut s’assurer que le départ d’un appareil ne laissera pas d’incohérence quant<br />

aux éléments disponibles sur le réseau. Ces paramètres étant choisis par l’utilisateur, il sera<br />

possible de s’appuyer sur des modèles statistiques ou des simulations afin de déterminer<br />

les valeurs critiques assurant un sécurité optimale de l’ensemble de l’expérimentation.<br />

Jini présente intrinsèquement tous les mécanismes nécessaires à la <strong>réalisation</strong> d’un<br />

système stable <strong>et</strong> sur lequel nous sommes à même d’imposer les contraintes de robustesse<br />

que nous désirons.<br />

68


7.4. LES APPORTS PROPRES À JINI<br />

7.4.2 Interfaces graphiques<br />

Jini est basé sur la plateforme Java <strong>et</strong> utilise abondament RMI afin, par exemple, de<br />

transporter les proxy ainsi qu’éventuellement toutes les classes requises sur la machine virtuelle<br />

du client afin d’exploiter les capacités de ce dernier. Un groupe de travail issu de la<br />

société Artima [1] a proposé la mise au point d’une approche unifiée perm<strong>et</strong>tant la mise<br />

en oeuvre d’interfaces graphiques issues du service.<br />

Parallèlement à cela, de nombreux logiciels livrés avec les instuments de mesure proposent<br />

la visualisation des informations sous la forme d’une interface interactive semblable<br />

au panneau frontal de l’appareil. Ainsi, de la même manière qu’il agirait manuellement sur<br />

les boutons de l’appareil, l’utilisateur peut agir avec sa souris sur l’interface graphique, les<br />

deux approches menant au même résultat.<br />

Nous avons combiné ces deux techniques afin de proposer des interfaces graphiques<br />

spécifiques à chaque appareil, accessibles à travers Java <strong>et</strong> Jini <strong>et</strong> issues de l’appareil. L’interface<br />

graphique éventuelle apparait ainsi comme un attribut de l’appareil, accompagnant<br />

le proxy dans son déplacement vers le client. Le client peut alors choisir à tout moment<br />

d’instancier la ou les classes constituant l’interface. En réalité, seul un constructeur d’interface<br />

(User Interface Factory) est couplé avec le proxy afin de ne pas avoir à instancier<br />

celle-ci du côté service, ce qui serait coûteux en ressource. Les interfaces réalisées dans le<br />

cadre de ce travail perm<strong>et</strong>tent par exemple de configurer les attributs secondaires de l’appareil<br />

– localisation, commentaire spécifique à la mesure – ou de présenter le panneau avant<br />

de ce dernier. Les figures 7.5 <strong>et</strong> 7.6 présentent deux interfaces perm<strong>et</strong>tant de configurer un<br />

voltmètre Hewl<strong>et</strong>t-Packard HP-34401A.<br />

Le proj<strong>et</strong> initié par les chercheurs de chez Artima propose uniquement un ensemble<br />

d’interfaces afin de rendre possible la détection de la présence d’une interface graphique attribut<br />

du proxy. Ces interfaces perm<strong>et</strong>tent d’envoyer tous les types de primitives graphiques<br />

existant dans Java : du simple panneau à intégrer dans une application jusqu’à une application<br />

complète. On peut ainsi imaginer d’inclure dans chaque appareil des éléments qui<br />

s’insèreraient dans les applications afin de rendre compte des interactions spécifiques avec<br />

chaque type d’instrument. Ces éléments graphiques étant simplement des obj<strong>et</strong>s distribués,<br />

ils interagissent de manière totalement transparente avec l’application client s’intégrant<br />

alors très aisément dans tout type d’application. On pourrait même imaginer la standardisation<br />

d’un ensemble d’interfaces qui seraient toujours présentes, quel que soit le type<br />

d’instrument, <strong>et</strong> les incorporer d’office dans les futurs logiciels client utilisant Jini.<br />

69


7.4. LES APPORTS PROPRES À JINI<br />

Fig. 7.5 – L’interface graphique envoyée par le service Jini perm<strong>et</strong> de présenter la face<br />

avant de l’appareil<br />

Fig. 7.6 – La configuration de l’appareil peut s’effectuer à l’aide de l’interface qu’il m<strong>et</strong> à<br />

disposition, s’approchant ainsi tant que possible des aspects spécifiques au constructeur.<br />

70


Chapitre 8<br />

Intégration de Jini dans les solutions<br />

actuelles<br />

Sommaire<br />

8.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />

8.2 Implantation d’une interface de programmation visuelle intégrant<br />

Jini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72<br />

8.3 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />

8.1 Motivation<br />

Dans le premier chapitre de ce travail nous avons largement exposé les intérêts de<br />

l’instrumentation virtuelle <strong>et</strong> plus particulièrement de l’utilité de disposer de logiciels perm<strong>et</strong>tant<br />

la <strong>réalisation</strong> de programmes complexes liés au traitement du signal. Afin de<br />

réduire au maximum les difficultés que soulève la programmation d’interfaces de contrôle,<br />

la technique de la programmation par fils est utilisée. Le programme se présente alors<br />

sous la forme d’une interface graphique faite de fils <strong>et</strong> d’icônes disposées selon le flux de<br />

traitement des informations.<br />

De nombreux logiciels m<strong>et</strong>tent en oeuvre ce type de programmation mais le plus universellement<br />

adopté est sans conteste LabVIEW. Il suffit pour s’en convaincre de voir la<br />

place que lui réserve les industriels ainsi que les universités dans leurs programmes de formations.<br />

LabVIEW a c<strong>et</strong> avantage qu’il est un logiciel ouvert perm<strong>et</strong>tant à l’utilisateur<br />

d’incorporer ses propres routines. Celles-ci peuvent être écrites dans le langage graphique<br />

de LabVIEW (G-Programming) ou résider dans une bibliothèque de fonction écrite dans<br />

un langage tel que C ou FORTRAN.<br />

71


8.2. IMPLANTATION D’UNE INTERFACE DE PROGRAMMATION VISUELLE<br />

INTÉGRANT JINI<br />

Compte tenu de la quasi-universalité de c<strong>et</strong>te approche, la <strong>réalisation</strong> d’un système<br />

d’instrumentation distribuée au moyen de quelque technique que ce soit, y compris Jini, se<br />

doit donc de s’intégrer tant que possible dans les modèle offerts par ces logiciels.<br />

Nous tenterons de prouver dans les sections qui suivent qu’il est possible d’intégrer<br />

totalement Jini dans les solution existantes, tel LabVIEW, sans recourir à une modification<br />

en profondeur du code. Ainsi, il est possible d’exploiter dans un futur proche les appareils<br />

utilisant Jini en installant sur le logiciel client une couche de gestion de Jini en relation<br />

avec les éléments de programmation visuelle.<br />

8.2 Implantation d’une interface de programmation<br />

visuelle intégrant Jini<br />

La <strong>réalisation</strong> d’une telle interface, en imposant la contrainte de ne pas avoir à repenser<br />

le logiciel existant, nous a conduit à intégrer la gestion de Jini dans un logiciel<br />

annexe, existant en parallèle du premier, <strong>et</strong> à définir un ensemble minimal de messages<br />

entre c<strong>et</strong>te couche <strong>et</strong> le logiciel. Ces messages sont au nombre de deux : ajouter ou supprimer<br />

un périphérique. Le fait que le nombre de message soit très p<strong>et</strong>it rend plus aisée<br />

l’implantation de l’adaptateur entre l’application <strong>et</strong> Jini mais impose donc qu’un traitement<br />

conséquent soit effectué à l’interface entre le logiciel local <strong>et</strong> le réseau.<br />

L’adaptateur Jini veillera à découvrir les instruments présents sur le bus, gèrera les<br />

évènement émis par les services ou le lookup <strong>et</strong> téléchargera tous les proxy des appareils<br />

afin de les m<strong>et</strong>tre à disposition de l’utilisateur. L’introspection dynamique des classes perm<strong>et</strong><br />

de préparer les icônes, les habillant, liant chaque connecteur à une méthode particulière<br />

de l’obj<strong>et</strong> proxy, avant de les placer dans la boite à outils.<br />

Afin de prouver la faisabilité de ce concept, qui est crucial pour la viabilité d’une solution<br />

basée sur Jini dans la cadre de l’instrumentation, nous avons réalisé une application légère<br />

semblable à LabVIEW. Celle-ci est présentée à la figure 8.1 <strong>et</strong> est constitué de quatre<br />

éléments principaux :<br />

– une barre de fonctions, visible sur le dessus, contenant les fonctions mises à disposition<br />

de l’utilisateur. La fonction principale est un élément graphique indiquant le nombre<br />

présenté à son entrée sur un panneau ayant l’apparence d’un afficheur numérique à<br />

LEDs.<br />

– une boite à outils, située à gauche, dans laquelle les appareils sont classés selon trois<br />

catégories : les interfaces qu’ils réalisent, leurs localisations <strong>et</strong> leurs constructeurs.<br />

C<strong>et</strong> élément est l’adaptateur Jini ; celui-ci communique avec le panneau de programmation<br />

par ajout ou r<strong>et</strong>rait d’appareils à la demande de l’utilisateur.<br />

– le panneau de programmation, au centre, sur lequel l’utilisateur dispose les icônes <strong>et</strong><br />

les connecte afin de spécifier le programme de manière graphique<br />

72


8.2. IMPLANTATION D’UNE INTERFACE DE PROGRAMMATION VISUELLE<br />

INTÉGRANT JINI<br />

– le panneau d’affichage, en bas, qui présente les paramètres à l’utilisateur. Il servira<br />

par exemple ici à afficher la tension mesurée.<br />

Fig. 8.1 – L’application JINILab qui présente la même interface que LabVIEW<br />

Au lancement de l’application, une couche de gestion du bus Jini est instanciée en parallèle.<br />

Celle-ci s’intègre dans le logiciel m<strong>et</strong>tant à disposion un navigateur d’instruments.<br />

Elle initie son cycle de vie par la recherche du lookup local, au moyen de paqu<strong>et</strong>s de propagation<br />

envoyés sur le sous-réseau, <strong>et</strong> collecte les proxy de tous les instruments présents<br />

sur le bus à c<strong>et</strong> instant. Du point de vue de l’interrogation par le client que nous avons<br />

évoquée dans le chapitre relatif à Jini, il s’agit de trouver tous les proxy implantant l’interface<br />

générique InstrumentationDevice. Comme il s’agit de l’interface dont dérivent tous les<br />

instruments, nous avons l’assurance que le lookup renverra l’ensemble de appareils dont il<br />

a connaissance.<br />

73


8.2. IMPLANTATION D’UNE INTERFACE DE PROGRAMMATION VISUELLE<br />

INTÉGRANT JINI<br />

Commence alors un travail d’introspection systématique du comportement du proxy.<br />

Nous avons choisi d’en isoler les interfaces qu’il implante mais également deux sous-classes<br />

de la classe Entry qu’il contiendra éventuellement : les classes Location <strong>et</strong> Vendor qui perm<strong>et</strong>tent<br />

d’avoir une connaissance de la localisation ainsi que du nom du constructeur. Le<br />

proxy est alors inséré dans les trois arbres – comportement, lieu <strong>et</strong> vendeur – du navigateur.<br />

L’utilisateur peut décider d’utiliser les fonctionalités particulières de l’appareil en cliquant<br />

à droite <strong>et</strong> en accédant ainsi à un menu construit lors de la phase d’introspection.<br />

Ce menu perm<strong>et</strong>tra d’instancier, le cas échéant, une des interfaces graphiques convoyées<br />

avec le proxy, mais il perm<strong>et</strong>tra également de placer l’icône de l’instrument sur le plan de<br />

programmation. La figure 8.3 montre que l’intégration de l’interface de l’appareil s’intègre<br />

parfaitement avec le logiciel de base.<br />

Une fois l’icône placée sur le bureau, il est possible de raccorder un de ses connecteur<br />

avec un élément existant du plan de programmation. Dans la cas présenté à la figure 8.4<br />

il s’agit de l’entrée d’un afficheur graphique présentant sur le panneau de visualisation la<br />

valeur de mise à ses bornes. Ce composant a été sélectionné dans les outils standards du<br />

logiciel présents sur la barre du haut. La valeur à présenter est obtenue en connectant au<br />

moyen d’un fil l’entrée de l’afficheur avec la borne de prise de tension de l’icône modélisant<br />

ici un multimètre Hewl<strong>et</strong>t-Packard HP34401A. Notons ici que les connecteurs présentés<br />

par le composant graphique sont eux aussi créés par introspection. Il ne faut donc à aucun<br />

moment installer un quelconque gestionnaire ou ensemble d’icônes particuliers pour accéder<br />

à toutes les fonctionalités offertes par l’instrument.<br />

La gestion des erreurs<br />

La gestion des exceptions se fait à deux niveaux : dans le logiciel, lors de l’appel<br />

d’une méthode sur l’obj<strong>et</strong> distant <strong>et</strong> au niveau de la couche de gestion de Jini, lorsqu’un<br />

évènement est propagé.<br />

les évènements propagés par le lookup concernent la modification de la composition du<br />

bus ( match to no match, no match to match ) ou le changement de comportement d’un<br />

obj<strong>et</strong> déjà connu du client. Le changement d’attribut ou l’apparition d’un périphérique<br />

modifiera l’arbre de présentation dynamique des instruments alors que la disparition d’un<br />

élément du bus entrainera l’envoi d’un message à destination du logiciel de programmation<br />

graphique. Il s’agit du message relatif au r<strong>et</strong>rait d’une icône de l’ensemble de celles<br />

accessibles. Un message d’erreur accompagnera éventuellement c<strong>et</strong>te action.<br />

Dans la cas ou l’activation de la méthode distante échoue, un message est produit afin<br />

d’avertir l’utilisateur <strong>et</strong> l’expérimentation est suspendue. Comme il s’agira plus que probablement<br />

d’un appareil ayant subit une panne, il y a de fortes chances que c<strong>et</strong>te première<br />

alerte sera suivie d’un r<strong>et</strong>rait de l’icône, lorsque le lookup aura confirmé l’invalidation du<br />

bail du proxy. A titre examplatif <strong>et</strong> pour clore c<strong>et</strong>te description de notre logiciel, la figure<br />

8.5 présente une session typique de présentation d’erreur.<br />

74


8.3. CONCLUSIONS<br />

8.3 Conclusions<br />

L’intégration de Jini dans des logiciels existants, tels LabVIEW, est cruciale pour les<br />

industriels désireux d’exploiter c<strong>et</strong>te technologie. Nous avons montré à partir d’un exemple<br />

simple qu’il est possible d’adopter un modèle pour l’implantation <strong>et</strong> le déploiement d’une<br />

couche logicielle se greffant sur les solution existantes. C<strong>et</strong>te couche prennant en charge<br />

toute la mise en oeuvre de Jini existe en parallèle du logiciel <strong>et</strong> communique avec celui-ci<br />

au moyen d’une interface extrèmement réduite. Dès lors, peu ou pas de remodélisation ou<br />

de recompilation de l’application n’est nécessaire pour y intégrer harmonieusement Jini.<br />

75


8.3. CONCLUSIONS<br />

Fig. 8.2 – Instanciation de l’interface graphique fournie par l’appareil dans le contexte de<br />

l’application. C<strong>et</strong>te interface est propre à chaque périphérique est générée par l’appareil<br />

sur la plateforme du programme client.<br />

76


8.3. CONCLUSIONS<br />

Fig. 8.3 – Un autre exemple de panneau frontal fourni par l’appareil <strong>et</strong> qui peut être incorporé<br />

dans l’application client à la demande, sans besoin d’installer le moindre programme<br />

utilitaire associé au périphérique.<br />

77


8.3. CONCLUSIONS<br />

Fig. 8.4 – Réalisation d’une application simple présentant la tension au bornes d’un<br />

voltmètre modélisé par l’icône verte.<br />

78


8.3. CONCLUSIONS<br />

Fig. 8.5 – Les exceptions lors des appels de méthodes se doivent d’être gérées en Jini,<br />

assurant que l’utilisateur sera informé de la moindre erreur<br />

79


Chapitre 9<br />

Conclusion <strong>et</strong> perspectives<br />

L’intégration des instruments de mesure dans les systèmes électroniques <strong>et</strong> informatiques<br />

requiert l’intervention de technologies spécifiques liées à la problématique du contrôle<br />

des appareils distants. Les moyens mis en oeuvre actuellement n’offrent pas de solution<br />

globale, tant du point de vue de l’intégration des réseaux, que de celui de l’interaction<br />

spontanée <strong>et</strong> dynamique d’appareils entre eux.<br />

Nous avons établi dans un premier temps un état de l’art en la matière montrant<br />

qu’aucune des technologies présentes en instrumentation ne perm<strong>et</strong>tait une intégration des<br />

modèles basés sur les obj<strong>et</strong>s. De tels modèles sont une nécessité car ils perm<strong>et</strong>tent une<br />

réusabilité du code accrue ainsi que l’adoption d’un schéma de développement hautement<br />

flexible. Les extensions de ces modèles perm<strong>et</strong>tant le déploiement à travers le réseau <strong>et</strong><br />

l’interaction entre obj<strong>et</strong>s nous a semblé la meilleure approche pour le développement d’un<br />

système d’instrumentation distribuée.<br />

A ce moment, le choix d’un formalisme d’implantation conditionne la conceptualisation<br />

des éléments clés du système. Nous avons étudié deux grandes architectures actuelles de<br />

mise en oeuvre d’obj<strong>et</strong>s distribués : CORBA <strong>et</strong> Jini. Quoique semblables en apparence<br />

<strong>et</strong> présentant des caractéristiques comparables, l’approche de Jini nous a semblé la plus<br />

appropriée au vu des besoins spécifiques de l’instrumentation de terrain intégrant une composante<br />

réseau.<br />

L’architecture Jini perm<strong>et</strong>tant le déplacement de code du service vers le client, nous<br />

avons montré que lorsqu’appliquée plus particulièrement aux instruments de mesure, elle<br />

était à même de perm<strong>et</strong>tre la construction de systèmes distribuant la puissance de calcul<br />

entre tous les prenants parts du bus <strong>et</strong> exploitant ainsi la puissance des PC présents.<br />

La notion de gestionnaire de périphérique disparaît également à partir du moment où<br />

l’ensemble des logiciels de gestion de l’instrument est intégré à même ce dernier. Des interfaces<br />

élaborées <strong>et</strong> conviviales peuvent ainsi être mises à disposition par le service afin que<br />

le client puisse affecter la configuration de l’appareil, sans avoir recours à la mise en oeuvre<br />

80


d’un quelconque logiciel propriétaire. Le niveau d’abstraction atteint perm<strong>et</strong> également<br />

d’interchanger les appareils entre eux sans besoin de reconfiguration, atteignant ainsi une<br />

flexibilité inexistante actuellement.<br />

Des mécanismes de protection <strong>et</strong> de robustesse faisant directement part intégrante du<br />

modèle Jini montrent combien c<strong>et</strong>te technologie va à la rencontre des prérequis de mise en<br />

oeuvre de c<strong>et</strong>te technologie dans des processus critiques.<br />

La possibilité d’intégration d’une telle solution dans les logiciels industriels d’automation<br />

<strong>et</strong> de contrôle a été demontrée par la <strong>réalisation</strong> d’un logiciel de pilotage de nos<br />

instruments. Un couche de gestion propre à Jini a été développée <strong>et</strong> mise en relation avec le<br />

logiciel, montrant qu’il est possible de voir l’architecture Jini comme un ajout déployable<br />

à côté des grands standards industriels, tel LabVIEW.<br />

Mais nous n’avons assurément pas exploité toutes les possibilités liées à Jini <strong>et</strong> au<br />

déplacement dynamique de code entre noeuds du réseau. Le fait qu’un appareil présente<br />

à la fois un comportement donné mais qu’il puisse fournir du code propre à sa mise en<br />

oeuvre est déjà pour le moins une approche totalement nouvelle. Il est évident qu’il serait<br />

extrèmement intéressant de compléter celle-ci par l’ajout de services spécifiques, existant<br />

purement sous forme de logiciels distribués. De tels réseaux seraient constitués d’une part<br />

des appareils connectés à ceux-ci – instruments, PC, systèmes embarqués – <strong>et</strong> d’autre part<br />

d’agents intelligents interagissant avec les services <strong>et</strong> les client de manière à former une<br />

configuration adaptative à même de répondre aux besoins locaux.<br />

81


Bibliographie<br />

[1] Jini forum at artima. http ://www.artima.com/jini/.<br />

[2] National instrument’s site in gpib. http ://www.ni.com/gpib.<br />

[3] Remote M<strong>et</strong>hod Invocation Specification.<br />

[4] Site officiel de l’object management group. http ://www.ni.com/gpib.<br />

[5] V. Piuri A. Ferrero. A simulation tool for virtual laboratory expirements in a www<br />

environement. IEEE Transactions on Instrumentation and Measurement, 48(3), 1999.<br />

[6] S. Deering. Ieee-488 general purpose instrumentation bus manual. Technical report,<br />

Anthony J. Caristi, Feb. 1989.<br />

[7] B.E. Segee D.J. Rawnsley, D.M. Hummels. A virtual instrument bus using n<strong>et</strong>work<br />

programming. volume vol.1.<br />

[8] M. Dunbar. Plug-and-play sensors in wrireless n<strong>et</strong>works. IEEE Instrumentation and<br />

Measurement Magazine, March 2001.<br />

[9] W. Keith Edwards. Core Jini 2nd edition. Java Series. second edition edition, 2001.<br />

[10] UPNP Forum. Universal Plug and Play Device Architecture, 8 June 2000.<br />

http ://www.upnp.org/download/UPnPDA10 20000613.htm.<br />

[11] L. Nigro G. Fortino, D. Grimaldi. Multicast control of mobile measurement systems.<br />

IEEE Transactions on Instrumentation and Measurement, 47(5), 1998.<br />

[12] Ben Brosgol P<strong>et</strong>er Dibble Steve Furr David Hardin Mark Turnbull Greg Bollella,<br />

James Gosling. The Real-Time Specification for Java. Addison Wesley, 2001.<br />

[13] Guy Steele Gilad Bracha James Gosling, Bill Joy. The Java Language Specification,<br />

Second Edition. Addison Wesley, 2001.<br />

[14] Troy Downing Jon Meyer. The Java Virtual Machine. O’Reilly, 1997.<br />

[15] R. D. Shneeman K. B. Lee. Distributed measurement and control based on the ieee1451<br />

smart tranducer interface standards. IEEE Transactions on Instrumentation and Measurement,<br />

49(3), 2000.<br />

[16] F. Ferraris A. Ferrero C. Offeli M. Parvis V. Piuri L. Ben<strong>et</strong>azzo, M. Bertocco. A<br />

web-based distributed virtual educational laboratory. IEEE Transactions on Instrumentation<br />

and Measurement, 49(2), 2000.<br />

[17] V. Piuri L. Cristaldi, A. Ferrero. Programmable instruments, virtual instruments and<br />

distributed measurement systems. IEEE Instrumentation and Measurement magazine.<br />

82


BIBLIOGRAPHIE<br />

[18] Sing Li. Professional Jini. Programmer to Programmer. first edition edition, 2001.<br />

[19] Sheng Liang. The Java Native Interface Specification. Addison Wesley, 1999.<br />

[20] Jan Newmarch. Jan Newmarch’s Guide to JINI Technologies, 26 August 2000.<br />

http ://pandonia.canberra.edu.au/java/jini/tutorial/Jini.xml.<br />

[21] F. Cennamo P. Daponte P. Arpaia, A. Baccigaluppi. A distributed laboratory based<br />

on geographic n<strong>et</strong>work.<br />

[22] P. Daponte P. Arpaia, F. Cennamo and M. Savastano. A distributed measurement<br />

laboratory based on object oriented systems.<br />

[23] D. Grimaldi P. Daponte and L. Nigro. Distributed measurement systems : An object<br />

oriented architecture and a case study. Computer Standards Interfaces, 18(5).<br />

[24] Dan Harkey Robert Orfali. Client Server programming with Java and CORBA. Wiley<br />

Computing, 1998.<br />

[25] Jon Siegel. CORBA : Fundamentals and programming. Wiley Computing, 1996.<br />

[26] H. J. W. Spoedler. Virtual instruments and virtual environements. IEEE. Instrum.<br />

Meas. Mag., 2.<br />

[27] William A. Ruh Thomas J. Mowbray. Inside CORBA. Addison Wesley, 1997.<br />

83

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!