Durée : 2 h. Documents autorisés : notes de cours et documents manuscrits, documents fournis par Mr Trau.
En vue de mettre en place un maintenance préventive (c'est à dire planifier l'entretien des machines de production avant la panne, en changeant les pièces d'usure avant leur rupture, à des moments où la machine est moins sollicitée), nous voulons dans un premier temps étudier les différentes pannes survenant dans notre unité de production. Nous avons décidé de vous embaucher, avec votre DEUST en poche, pour mener de front un certain nombre d'études, les analyser et mettre en place les solutions adéquates. Puis, si vous convenez bien à cet emploi, vous continuerez à participer à notre maintenance, et remplacerez le responsable de l'équipe de quelques techniciens maintenance, qui doit prendre sa retraite dans deux ans.
Chaque type de panne "classique" a été codifié et numéroté (un numéro de code entre 1 et 9999). A chaque incident, on note dans une base de données la date et l'heure, le code de la panne, la durée d'immobilisation de la machine, le prix des pièces, le nombre de techniciens ayant participé à la réparation, etc... Avant de mettre en place cette base de données complète, vous allez en faire une petite ébauche en C : En se limitant à 1000 pannes (au maximum), vous allez créer deux tableaux : le tableau nommé CODE qui contiendra les codes de pannes, et le tableau DUREE qui contiendra la durée d'immobilisation de la machine (comptée en heures : 1h30 sera noté 1.5). Une variable NB indiquera le nombre de pannes actuellement stockées dans l'ordinateur.
1) Ecrivez la déclaration de ces deux tableaux et de NB. On supposera que ce sont des variables globales.
2) Indiquez en quelques phrases la différence entre variables globales et locales à une fonction.
3) Ecrivez un sous-programme (fonction) qui affiche toutes les pannes actuellement enregistrées.
4) Ecrivez une fonction qui cherche puis retourne le code de la panne qui a duré le plus longtemps. S'il y en a plusieurs de même durée, retournez la première trouvée.
5) Ecrivez une fonction qui cherche puis retourne le code de la panne la plus fréquente.
6) Ecrivez un sous-programme (fonction) qui analyse toutes les pannes. Pour chaque type de panne rencontrée, il indique (affiche à l'écran) :
Vous n'indiquerez évidement que les pannes apparues au moins une fois.
On désire prédire certaines pannes coûteuses mais apparaissant à intervalles très irréguliers, sur une machine spécifique. Nous pensons que quelque temps avant la rupture de la pièce, les différents jeux dûs à l'usure induisent certaines vibrations dans la machine, qu'il serait intéressant d'analyser. Nous avons donc placé un capteur sur le bâti de la machine. Un PC acquiert en permanence des couples (fréquence, amplitude), à intervalle de temps régulier, et les stocke sur disque. Supposons que , pour une fréquence donnée, nous ayons stocké dans un tableau (de flottants) nommé AMP les amplitudes successives mesurées jusqu'au moment de la panne. Il y a en tout un nombre N.
7) En supposant que AMP et N soient déjà déclarés, que les mesures ont été stockées dans le tableau, écrivez le morceau de programme qui recherche et affiche la variation d'amplitude la plus importante :
8) Pour l'analyse vibratoire, on désire utiliser une bibliothèque de fonctions mathématiques écrite en Fortran (c'est un autre langage compilé), mais pour l'acquisition des mesures, on doit utiliser l'assembleur. Le reste du programme est écrit en C. Expliquez en quelques phrases comment avec trois fichiers source (l'un en C, l'autre en Fortran, le troisième en mnémonique) on peut obtenir un programme unique. Vous indiquerez les différentes opérations à effectuer sur chaque fichier, et les différents états intermédiaires obtenus. Si vous le désirez, vous pouvez tracer de petits schémas.
Remarques : dans la première partie, vous n'écrivez pas le programme principal (main) mais un certain nombre de fonctions qu'utiliserait main. Si vous n'arrivez pas à écrire des fonctions, vous pouvez supposer que tout le programme serait écrit à l'intérieur de main, et vous limiter à l'écriture
des instructions correspondant à la question posée (évidement, vous gagnerez moins de points). Toujours dans cette première partie, les questions 3 à 6 correspondent à des fonctions appelées quand les tableaux sont déjà saisis. Il n'y a donc besoin d'aucun scanf ici (dans la seconde partie non plus, d'ailleurs). Pour la question 7, il est inutile de former une fonction, vous ne donnerez qu'un ensemble d'instructions qui seraient à insérer dans un programme main.
pour retourner au sommaire des sujets d'examen, cliquez ici
Patrick TRAU, ULP - IPST juin 2001