TP3 : Intégration d'application
BUTS PÉDAGOGIQUES
- Utilisation de l'interpréteur PHP en ligne de commande
- Sensibilisation à la communication inter-application
- Analyse et génération de fichier de ressource par un script PHP
Un besoin récurrent en entreprise est de pouvoir récupérer les données issues d'un premier logiciel afin de les insérer dans un deuxième. Or, très souvent, ces logiciels n'ont pas été prévus pour échanger leurs données entre eux. Dans ce cas, une stratégie est d'écrire un petit programme qui servira de connecteur entre les deux logiciels (petit programme que dans la suite nous appellerons « moulinette ») dont le rôle sera de lire les données au format sortant du premier logiciel et de les traduire dans un format compréhensible par le second logiciel.
Dans le monde des Systèmes d'Information, vous pourrez aussi rencontrer la dénomination ETL, pour Extract-Transform-Load. C'est aussi un type d'EAI, mais le terme ETL est en général réservé lorsque les deux logiciels utilisent chacun une base de données. Le but n'est plus alors de lire et écrire dans des fichiers, mais d'extraire les données depuis la base de données du premier logiciel afin de les charger dans la base de données du second logiciel.
D'une manière plus générale, la pratique consistant à créer, de cette manière, un pont
entre deux logiciels, porte le nom d'EAI pour Enterprise Application Integration (ou en français Intégration d'Application d'Entreprise). Ce TP propose de voir comment utiliser le langage PHP pour faire communiquer deux applications hétérogènes entre elle, en écrivant un script PHP qui lit un fichier provenant de Pro-Engineer
et qui écrit un fichier à destination de MuPad
(une « moulinette » donc).
Exercice 1 • Utilisation des scripts PHP en ligne de commande (30 min)
Un programme qui calcule la longueur des lignes d'un fichier.
Soit le programme suivant, inspiré de l'exemple du cours :
Question 1.1 : Commençons par tester ce programme
- Créez un nouveau répertoire
C:\TP_PHP\
- Copiez ce programme dans un fichier que vous nommerez
C:\TP_PHP\compter.php
- Ouvrez une console et tapez les commandes suivantes pour vous déplacer dans le répertoire
C:\TP_PHP\
cd ../..
cd TP_PHP
- Avec la commande
dir
vérifiez la présence du fichiercompter.php
dir
- Exécutez le programme
compter.php
en invoquant l'interpréteur PHP (au besoin adaptez le numéro de version de PHP selon la version installée sur votre ordinateur) :C:\wamp64\bin\php\php5.6.40\php.exe compter.php
Pour éviter d'avoir à écrire entier
C:\wamp64\bin\php\php5.6.40\php.exe
à chaque invocation de l'interpréteur PHP, il suffit de taper la ligne suivante dans votre console :
set PATH=%PATH%;C:\wamp64\bin\php\php5.6.40\
Désormais, l'interpréteur peut-être invoqué dans votre console en écrivant simplementphp.exe
(Au besoin adaptez le numéro de version de PHP selon la version installée sur votre ordinateur) - Téléchargez maintenant le fichier Le_Chant_Des_Partisans.txt et copiez-le dans le répertoire
C:\TP_PHP\
- Avec la commande
dir
vérifiez la présence des 2 fichierscompter.php
etLe_Chant_Des_Partisans.txt
- Exécutez de nouveau le programme
compter.php
Qu'affiche-t-il ?
Question 1.2 : Modifions le programme
- Ouvrez le fichier
compter.php
avec Notepad++ (clic droit sur le fichier, puis "Edit with Notepad++"). - À l'aide d'une nouvelle variable
$i
, modifiez le programme afin d'afficher aussi le numéro de chaque ligne avant d'afficher sa longueur. - Plutôt que de toujours compter les lignes du même fichier, modifions le programme afin que le nom du fichier à lire soit le premier argument donné lors de l'appel du programme :
- Modifiez l'appel de la fonction
fopen()
pour que le nom du fichier ouvert soit$argv[1]
plutôt queLe_Chant_Des_Partisans.txt
- Testez le programme :
C:\wamp64\bin\php\php5.6.40\php.exe compter.php Le_Chant_Des_Partisans.txt
- Téléchargez le fichier Chanson_dAutomne.txt et copiez-le dans le répertoire
C:\TP_PHP\
- Testez maintenant le programme avec ce fichier :
C:\wamp64\bin\php\php5.6.40\php.exe compter.php Chanson_dAutomne.txt
- Modifiez l'appel de la fonction
Question 1.3 : Appeler un script en mode batch (Optionnel)
Plutôt que d'ouvrir une console, utilisons un fichier batch pour appeler notre script :
- Dans le répertoire
C:\TP_PHP\
créer un fichiercompter.bat
qui contiendra le code suivant :
- Maintenant, double-cliquez sur le fichier
compter.bat
Que se passe-t-il ?
Exercice 2 • Une moulinette entre Pro-Engineer et MuPad (1 h 30)
Idée originale : N. Couture et C. Merlo
Pro-Engineer
et MuPad
sont deux logiciels qui ne sont pas prévus pour communiquer ensemble. Aucune connexion ne peut être établie entre ceux deux logiciels. Aucun de ces deux logiciels n'est capable de lire les formats de fichier de l'autre.
Seulement, les ingénieurs de votre bureau d'étude dessinent des pièces avec Pro-Engineer
et font régulièrement (plusieurs fois par jour) des calculs complexes sur ces pièces avec MuPad
.
Afin de gagner beaucoup de temps (et d'éviter les erreurs de saisies), une moulinette permettant de traduire les fichiers Pro-Engineer
en fichiers compatibles MuPad
doit être mise en place. Vous allez écrire un script PHP qui permettra de faire ce travail.
Le cas d'étude choisi, pour illustrer la nécessité de savoir intégrer des applications, coexistantes dans l'entreprise est le suivant :
Le logiciel Pro-Engineer
permet de représenter une pièce mécanique dans l'espace. Supposons que nous voulions optimiser le stockage de pièces creuses. Deux calculs sont nécessaires ! Tout d'abord si nous voulons les empiler, il faut connaître l'encombrement de n pièces empilées. Ensuite, il faut calculer n tel qu'il n'y ait pas de déformation dommageable des pièces. Il est alors utile d'utiliser un logiciel de calcul. Par exemple : MuPad
.
Dans cet exercice, nous allons étudier un cas simple en 2D. Il s'agira de lire un cercle dessiné avec Pro-Engineer
et de récupérer ses données pour effectuer des calculs dessus (périmètre, diamètre, aire). Important : le fonctionnement serait le même si nous avions affaire à des pièces complexes, modélisées en 3D.
Question 2.1 : Analyser un fichier IGES (provenant de Pro-Engineer
)
Nous avons dessiné un cercle avec une mise en plan 2D dans Pro-Engineer
, puis enregistré le résultat dans un fichier au format standard IGES (Initial Graphics Exchange Specification) : drw0001.igs
Pour mieux comprendre le fichier obtenu, les lettres de l'avant-dernière colonne de chaque ligne désignent respectivement :
• S
: start
• G
: global
• T
: terminal
• D
: directory
• P
: parameter data (Geometry and Math)
Ce qui nous intéresse pour MuPad
, ce sont les paramètres. Dans les différentes lignes du fichier repérées par la lettre P
, nous distinguons celles commençant par :
• 404/406/410 : Ce sont les données décrivant les lignes du plan
• 110 : Ce sont des données concernant les lignes du cadre de l'espace de travail
• 100 : C'est un 7-uplet décrivant un cercle : (plan z, x_centre, y_centre, x_depart, y_depart, x_arrivee, y_arrivee)
Remarque : les coordonnées des points de départ et d'arrivée du cercle sont identiques car il s'agit d'un arc de cercle de 360°.
drw0001.igs |
PTC IGES file: drw0001.igs S 1
|
- Faîtes une copie du script
compter.php
et nommez ce nouveau fichiermoulinette.php
- Modifiez le code pour ne plus que le programme compte les lignes, mais qu'il affiche (uniquement) la ligne décrivant notre cercle, c'est-à-dire la ligne dont les 3 premiers caractères sont
100
.
Pour ce faire, aidez-vous de la fonctionsubstr()
pour extraire une sous-chaîne des 3 premiers caractères.
(voir explication de substr() dans le cours ou dans la documentation) - Modifiez encore le programme pour qu'il n'affiche plus que le
y_centre
et ley_depart
du cercle.
Pour extraire ces 2 valeurs de la ligne, aidez-vous de la fonctionexplode()
, en l'utilisant avec le séparateur qui conviendra.
(voir explication de explode() dans la documentation)
Question 2.2 : Génération d'un fichier MuPad
1. Modifiez encore le programme précédent, pour qu'il affiche maintenant le code MuPad
qui suit, mais où les valeurs de y_IGES_depart
et y_IGES_centre
seront bien entendu les valeurs lues dans le fichier provenant de Pro-Engineer
.
Attention : remarquez que les nombres du fichier IGES sont écrits en notation scientifique ! Il va donc falloir recalculer le nombre pour qu'il soit reconnu par MuPad
.
Par exemple, 1.4990233D1 devient 1.4990233 x 101 = 14.990233
Pour ce faire, aidez-vous des fonctions explode() et pow().
Rayon := proc(y_depart, y_centre) # suffisant car les 2 points ont la même abscisse #
|
Les commentaires avec MuPad : Les premières versions de MuPad utilisaient des commentaires entourés de #
, mais à partir de la version 1.4 un //
marque un commentaire jusqu'en fin de ligne et un /* */
marque le début et la fin d'un commentaire. Lorsqu'on exécute un code MuPad avec la version intégrée à MatLab, les commentaires sont marqués soit par un %
jusqu'en fin de ligne, soit par des %{ %}
pour le début et la fin du commentaire.
2. Lancez MuPad
, faîtes un copier-coller du code et exécutez-le ! Voilà, MuPad
vient donc de faire ses calculs à partir des données provenant de Pro-Engineer
!
Question 2.3 : Générer un fichier pour MuPad
- Plutôt que d'afficher le code
MuPad
à l'écran, faîtes en sorte qu'il soit maintenant écrit dans un fichiercalcul.mu
- Pour l'écriture dans un fichier, voir la fonction
fputs()
- Pour l'écriture dans un fichier, voir la fonction
- Exécutez votre nouvelle moulinette pour que le fichier
calcul.mu
soit généré. - Ensuite, dans
MuPad
, vous n'avez ainsi plus qu'à charger le fichier en faisant :
read("C:\\TP_PHP\\calcul.mu");