Si, au cours de l'épreuve, un candidat repère ce qui lui semble être une erreur d'énoncé, d'une part il le signale au chef de salle, d'autre part il le signale sur sa copie et poursuit sa composition en indiquant les raisons des initiatives qu'il est amené à prendre.
L'usage de calculatrices est interdit.
AVERTISSEMENT
La présentation, la lisibilité, l'orthographe, la qualité de la rédaction, la clarté et la précision des raisonnements entreront pour une part importante dans l'appréciation des copies. En particulier, les résultats non justifiés ne seront pas pris en compte. Les candidats sont invités à encadrer les résultats de leurs calculs.
L'épreuve comporte deux parties qui peuvent être traitées indépendamment l'une de l'autre. Une première partie modélisation (durée conseillée 1 H 30 ) et une seconde informatique (durée conseillée 2 H 30 )
Remarques préliminaires importantes : il est rappelé aux candidat(e)s que
Les explications des phénomènes étudiés interviennent dans la notation au même titre que les développements analytiques et les applications numériques ; les résultats exprimés sans unité ne seront pas comptabilisés.
Tout au long de l'énoncé, les paragraphes en italiques ont pour objet d'aider à la compréhension du problème.
Tout résultat fourni dans l'énoncé peut être admis et utilisé par la suite, même s'il n'a pas été démontré par le (la) candidat(e).
Les applications numériques, effectuées sans calculatrice, pourront supporter des arrondis ou simplifications judicieux.
Ce problème traite de systèmes d'identification par radio fréquence (RFID). II est constitué de deux parties totalement indépendantes: l'étude d'un système de type navigo pour la partie. Aucune connaissance particulière sur les antennes n'est demandée.
En 1948, Harry Stockman décrivit dans un article un moyen de communiquer grâce à la réflexion des ondes, annonçant ainsi les futurs systèmes autonomes communiquant par ondes électromagnétiques. Leur but est, par exemple, d'identifier des objets à distance, d'où le nom d'identification radio-fréquence (RFID : Radio Frequency Identification). Quelques années plus tard, les premiers systèmes d'identification utilisant les ondes réfléchies étaient développés.
Les progrès réalisés dans le domaine de l'électronique ont permis son développement et son intégration dans de nombreux domaines. Aujourd'hui, la RFID (du fait de son prix et de la taille des étiquettes) prend une place de plus en plus importante dans la vie courante, et d'un simple fonctionnement en mode tout-ou-rien, au stockage et au traitement d'informations, les applications couvrent des domaines allant de la télédétection (identification d'animaux, antivols, localisation...) aux transactions de la vie courante: par exemple dans les systèmes de contrôle d'accès aux transports en commun, type passe Navigo de la RATP pour le métro parisien. Les puces RFID tentent aujourd'hui de supplanter les codes à barres en jouant de leurs avantages, à savoir qu'il est possible d'écrire, d'effacer et de réécrire les données stockées dans une puce un grand nombre de fois, que leur portée peut être supérieure aux lecteurs optiques utilisés pour les codes à barres, et que la communication peut se faire à travers certains obstacles contrairement aux systèmes à lecture optique.
Un système RFID passif est composé de deux entités qui communiquent entre elles (Fig.1) :
Un TAG passif (dénommé TAG par la suite) ou étiquette intelligente (aussi appelé transpondeur), associé à l'élément à identifier. Il est capable de répondre à une demande venant d'un lecteur. Le TAG n'a pas d'alimentation de type batterie ou pile mais est autoalimenté par l'onde électromagnétique reçue.
Une station de base ou lecteur RFID qui a pour mission d'identifier le TAG. Le lecteur envoie une onde électromagnétique en direction de l'élément à identifier, cette onde alimente le TAG qui peut alors communiquer avec le lecteur grâce à sa puce électronique interne. En retour, le lecteur reçoit l'information renvoyée par le TAG.
Figure 1
La figure 1 présente le fonctionnement général d'un système RFID. Le lecteur relié à une antenne émettrice agit en maître par rapport au TAG : si le TAG est dans la zone de lecture du lecteur, ce dernier l'active en lui envoyant une onde électromagnétique et entame la communication. Le TAG est quant à lui, constitué d'une antenne et d'une puce électronique qui module l'onde réémise vers le lecteur. En démodulant le signal reçu, le lecteur relié à une application interne récupère l'information pour la traiter, il est chargé de l'interface et de la gestion de l'identification des TAGs qui se présentent à lui.
II existe plusieurs familles de systèmes RFID dont le principal critère de différentiation est la fréquence de fonctionnement. Les système RFID utilisent des bandes de fréquence à 125 kHz (bande BF), (bande HF), (bande UHF) et . On précise que la puissance rayonnée par l'antenne d'émission est une fonction croissante de la fréquence est varie en .
Bande
Fréquence
Portée
Pouvoir de Pénétration dans un conducteur
BF
125 kHz
+
++++
HF
13.56 MHz
++
+++
UHF
+++
++
UHF
++
+
+: faible, ++: Assez bon, +++: Bon, ++++: Excellent
En fonction des différentes fréquences, les principes physiques mis en œuvre ne sont pas les mêmes et le problème aborde certains aspects de la communication.
PREMIERE PARTIE
Système RFID à en couplage magnétique
I.A Les fréquences utilisées en RFID
I.A1. Pour quelle expérience majeure le physicien Hertz (1857-1894) est-il resté célèbre ?
I.A2. Que signifient bande HF et bande UHF ? Pourquoi dit-on que la fréquence appartient aux microondes?
I.A3. Pourquoi les ondes UHF portent plus loin que les ondes HF et les ondes BF ?
I.A4. Pourquoi le pouvoir de pénétration des ondes dans un conducteur augmente quand la fréquence baisse?
I.A5. Pourquoi tous les systèmes RFID HF utilisent-ils la même fréquence de ?
I.B Modélisation d'un système RFID à : la carte à puce sans contact.
On considère une bobine circulaire d'axe (Oz) située dans le plan (Oxy), de rayon a, comprenant spires identiques et supposées confondues (toutes de même diamètre) réalisées en fil conducteur de diamètre négligeable et parcourue par le courant sinusoïdal de fréquence . Les dimensions caractéristiques ( a, OM, ) sont de l'ordre de 10 cm . On rappelle que : .
Figure 2
I.B1. Rappeler les conditions d'application de l'approximation des régimes quasi stationnaires (ARQS). Cette approximation s'applique-t-elle ici ?
Soit un point de l'axe tel que et .
I.B2. Quelle est la direction du champ magnétique en ? On note la valeur efficace de la norme de . Pour , on a représenté sur la figure 3 les courbes de niveau de pour et pour . A partir de ces courbes de niveau et sans calcul supplémentaire représenter en fonction de a pour . Préciser les valeurs remarquables.
Figure 3
Application numérique : pour spires, déterminer la valeur maximale de .
I.B3. Donner une expression du flux propre de la bobine faisant intervenir une intégrale simple. On ne cherchera pas à calculer .
I.B4. Rappeler la définition de l'inductance propre de .
On considère maintenant une bobine circulaire d'axe (Oz) située dans un plan parallèle au plan (Oxy) à , de rayon et de surface , comprenant spires identiques et confondues (toutes de même diamètre) réalisées en fil conducteur de diamètre négligeable. Les deux bobines et sont couplées magnétiquement et forment un transformateur à air. On note l'inductance propre de et l'inductance mutuelle entre et , où est le coefficient de couplage entre les deux bobines). La bobine est connectée à un circuit électrique comportant une résistance en série : c'est le modèle du transpondeur (TAG). La bobine est alimentée par une tension et constitue l'antenne associée au lecteur RFID, et modélisent les résistances des bobines et et modélise la résistance d'entrée de la puce électronique du TAG. En modulant , le TAG communique avec le lecteur. (Le TAG est donc modélisé par et qui est variable).
Pour les applications numériques prendre: spires, spires, , (soit ); , .
Figure 4
I.B5. Donner une approximation de M en considérant que et que . En exploitant le résultat de la question I.B2, et pour des nombres de spires et et une distance entre les deux bobines fixés, il existe une valeur optimale du rayon a de la bobine maximisant la mutuelle M. Application numérique : déterminer la valeur optimale de a.
I.B6. Exprimer les tensions et en fonction de et .
Aux grandeurs temporelles, et on associe les grandeurs complexes et . La seule entrée du montage est la tension (ou ); et sont donc des inconnues (ou et ).
I.B7. Ecrire trois équations liant les tensions complexes et et les courants et .
I.B8. Mettre et sous la forme: et . Montrer en particulier que et que . Préciser les expressions des coefficients réels et .
Application numérique : donner l'ordre de grandeur de la tension efficace de .
On insère un condensateur en parallèle à tel que et . On note et ; les valeurs numériques correspondantes sont , et .
I.B9. En négligeant devant , déterminer la nouvelle expression de l'impédance . Mettre sous la forme :
Exprimer la résistance ainsi que le facteur de qualité équivalent du transpondeur en fonction de et de . Conclure sur l'intérêt du condensateur . Application numérique : déterminer les ordres de grandeur des valeurs efficaces de et de .
Si le champ électromagnétique a une amplitude trop faible, l'énergie reçue par le transpondeur n'est pas suffisante pour un fonctionnement normal. Ainsi, l'alimentation de la puce ne se fait correctement que si la tension vérifie .
I.B10. En appliquant la loi de Faraday et avec les approximations adéquates, indiquer quel est l'ordre de grandeur de la valeur numérique du champ efficace nécessaire au niveau de la bobine .
I.B11. Faire un bilan de puissance sur le schéma de la figure 4 en modifiant par une impédance .
La bobine est en fait reliée à un condensateur, tel que . L'ensemble est alimenté par une source de tension de fem et de résistance interne (Fig. 5). Pour les applications numériques prendre .
Figure 5
En plus de la valeur peut prendre les deux autres valeurs particulières suivantes : et l'infini.
I.B12. Montrer que pour la tension peut s'écrire où l'impédance s'écrit :
Application numérique : déterminer l'ordre de grandeur de (module et argument) lorsque puis lorsque . Montrer comment réaliser en pratique ces deux conditions avec des interrupteurs commandables.
Le transpondeur communique avec la base émettrice en modulant la résistance entre les deux valeurs et .
I.B13. Montrer alors que l'amplitude de la tension u contient l'information délivrée par la puce. Conclusion.
Deuxième partie : Informatique. Modélisation d'un système de titres de transport sans contact
La première partie a permis de montrer comment la puce RFID peut être alimentée à distance par le lecteur, et comment un signal peut être transmis de l'une à l'autre. L'objectif des parties suivantes est de mettre en place quelques algorithmes visant à :
simuler la récupération d'un message binaire à partir de la tension captée par le lecteur (Partie 1);
contrôler l'intégrité du message récupéré et corriger les erreurs éventuelles (Partie 2),
déterminer si un voyageur est autorisé ou non à franchir un point de contrôle (Partie 3),
traiter les informations recueillies par le système afin d'améliorer le service (Partie 4).
Ces quatre parties sont indépendantes.
Les algorithmes demandés seront réalisés, au choix, dans le langage Python ou le langage Scilab. Le candidat doit précsier en tête de partie le langage choisi et s'y tenir. On supposera que tout module nécessaire à l'utilisation des fonctions usuelles (pi, sin...) a été importé.
Simulation numérique de la démodulation d'amplitude par le lecteur
La première partie a montré que la puce et le lecteur peuvent tous deux recevoir des messages contenus dans des tensions alternatives d'amplitudes variables. Nous allons maintenant modéliser une telle tension puis simuler numériquement le comportement d'un dispositif permettant d'en extraire une information binaire.
La tension reçue par le lecteur peut être modélisée par une sinusoïde de fréquence dont l'amplitude est modulée par le signal binaire transmis par la puce :
La puce transmet un nouveau bit toutes les 16 périodes de la porteuse. A titre d'illustration, la Figure 1 représente la tension correspondant à la séquence de bits . La tension est en volts et le temps en secondes.
Figure 1 : tension d'entrée du démodulateur (sinusoïde modulée en amplitude par un signal binaire)
La simulation porte sur un intervalle de temps [ ]. Le temps sera représenté numériquement par une liste de instants régulièrement espacés que l'on écrira, compte tenu des conventions de numérotation propres à chaque langage, sous Python ou sous Scilab.
Q1. Écrire une fonction init_T (Tmax, dt ) prenant pour arguments la durée Tmax de la simulation et le pas de temps et retournant la liste . Si Tmax n'est pas multiple de , on arrondira la durée de la simulation au multiple entier de dt immédiatement supérieur.
La tension d'entrée sera de même représentée par une liste telle que .
Q2. Écrire une fonction init_E (T,£) prenant pour arguments la liste des instants de la simulation et la fréquence f de la porteuse et retournant la liste des valeurs de la tension aux instants , d'après la définition de et pour le message binaire (on considèrera que la simulation ne se poursuit pas au-delà).
Pour récupérer l'information binaire contenue dans une telle tension, il faut en extraire l'amplitude. On utilise pour cela le dispositif de la Figure 2, appelé détecteur d'enveloppe.
Figure 2: détecteur d'enveloppe
La modélisation du comportement de ce montage permet d'exprimer la tension de sortie en fonction de la tension d'entrée de la façon suivante ( est la constante de temps du circuit RC) :
ééé
Autrement dit, la diode peut prendre deux états (bloquée ou passante), chacun soumis à une condition (inégalité) et muni d'une équation d'évolution (égalité) ; lorsque la condition cesse d'être vérifiée, la diode change d'état. Nous allons utiliser ces équations pour simuler numériquement l'évolution de la tension . Pour cela, on propose d'utiliser une variable (par exemple booléenne) indiquant l'état de la diode et, à chaque pas de temps :
de calculer en utilisant l'équation correspondant à la valeur de la variable à l'instant ,
puis de tester la condition correspondante à partir de la valeur de et, si elle n'est plus vérifiée, de mettre à jour la variable.
Le résultat est stocké dans une liste avec .
Q3. Donner une approximation de en fonction de et en utilisant la formule d'Euler explícite. En déduire, dans le cas où la diode est bloquée à l'instant , la relation de récurrence donnant en fonction de , et .
Dans le cas où la diode est passante à l'instant , on ne peut pas utiliser cette formule pour tester l'état de la diode à . On utilise donc l'approximation d'Euler arrière ou Euler implicite, qui consiste à utiliser la même formule mais pour approcher au lieu de .
Q4. Pourquoi ne peut-on pas utiliser la formule d'Euler explicite pour effectuer Ie test ici ? Donner, en utilisant Ia démarche proposée, une condition portant sur , et permettant de déterminer si la diode se bloque ou non à l'instant .
Q5. Écrire alors une fonction solve ( , tau) prenant pour arguments la liste des instants de la simulation, la liste E des tensions d'entrée et la constante de temps tau et retournant la liste S des tensions de sortie. Les conditions initiales seront prises nulles et, si nécessaire, l'état initial de la diode sera supposé passant.
Les Figures 3, 4 et donnent les résultats (entrées et sorties numériques) obtenus pour trois pas de temps différents choisis parmi et 100 ns . Sur ces trois graphes, la tension d'entrée avant discrétisation est celle de la Figure 1 et la constante de temps du circuit est . Seul le pas de temps change d'une simulation à l'autre.
Figure 3 : résultats de la simulation pour le pas de temps
Figure 5 : résultats de la simulation pour le pas de temps _(avec zoom à l'origine)
Q6. Indiquer la valeur du pas de temps ( ) correspondant à chacune de ces trois simulations, en justifiant vos réponses.
Q7. Expliquer en quelques phrases les causes des différences obtenues entre les trois résultats . Repérer en particulier les instants auxquels la diode change d'état. Que constatez-vous?
Pour distinguer l'état "haut" de l'état "bas" de la tension et ainsi extraire les 0 et les 1 du message binaire transmis par modulation, il est nécessaire de déterminer un seuil séparant les deux niveaux.
Q8. Indiquer, pour chacun des trois résultats, s'il est possible d'identifier un tel seuil, et donc si la récupération du message binaire semble réalisable sí l'on se base uniquement sur ce résultat. Conclure sur le critère que doit respecter le pas de temps d'une simulation temporelle pour que les résultats de celle-cí aient une chance d'être pertinents.
Vérification de l'intégrité des données et correction des erreurs
Le signal transmis par une liaison RFID peut être perturbé par toutes sortes de facteurs pouvant provoquer des erreurs dans les données : autres signaux électromagnétiques, masses métalliques, imperfections du matériel électronique... En pratique, il est donc indispensable de pouvoir détecter ces erreurs et, dans la mesure du possible, les corriger sans que cela ne nécessite une nouvelle transmission ; l'objet de cette partie est de mettre en place quelques algorithmes dans ce but.
2.1. Bit de parité
Une technique simple et très répandue pour s'assurer qu'une donnée binaire sera lue correctement par son récepteur est de lui adjoindre un bit de parité, égal par définition à :
0 si la donnée contient un nombre pair de 1 (et, donc, si ses bits sont de somme paire),
1 si la donnée contient un nombre impair de 1 (et, donc, si ses bits sont de somme impaire).
Après réception de la donnée, le récepteur recalcule le bit de parité et le compare à celui que l'émetteur lui a adressé. Si la donnée n'a pas été altérée lors de la transmission, alors les deux bits de parité sont forcément identiques.
Q9. Donner les bits de parité associés aux représentations binaires des entiers 5, 16 et 37.
Q10. Écrire une fonction parite (bits) prenant pour argument une liste bits constituée d'entiers valant 0 ou 1 et retournant l'entier 0 ou 1 correspondant à son bit de parité.
Les techniques de vérification les plus simples consistent à découper la donnée en blocs et à joindre un bit de parité à chaque bloc. Par exemple, certains protocoles transmettent sept bits de données pour un bit de parité.
Q11. Donner un exemple d'erreur n'étant pas détectable par cette technique. Si une erreur a été détectée, est-il possible de la corriger sans retransmettre la donnée?
2.2. Code de Hamming
Le code de Hamming est un exemple d'utilisation des bits de parité pour détecter et corriger des erreurs. Nous nous intéressons ici au code dit , ainsi appelé car il consiste à joindre trois bits de parité à quatre bits de données, ce qui donne un message d'une longueur totale de sept bits. Ces trois bits de parité sont définis ainsi : si la donnée s'écrit ( , avec ou 1 , alors :
est le bit de parité du triplet , est le bit de parité du triplet , est le bit de parité du triplet .
Le message encodé, que l'on transmet, s'écrit alors comme suit: ( ).
Q12. Écrire une fonction encode_hamming (donnee) prenant pour argument une liste donnee de quatre bits (représentés par des entiers valant 0 ou 1 ) et retournant une liste de bits contenant le message encodé. On pourra appeler Ia fonction pari te (bits) précédemment définie.
Le contrôle après réception d'un message ainsi encodé est relativement simple. On pourrait naturellement recalculer les trois bits de parité de la donnée et les comparer aux valeurs transmises, mais la technique proposée par Hamming est de calculer les trois bits de contrôle suivants, notés ( ), à partir du message complet (données et bits supplémentaires), noté ( ) :
est le bit de parité de l'ensemble ( ),
est le bit de parité de l'ensemble ( ),
est le bit de parité de l'ensemble ( ).
On montre que si le message a bien été encodé selon les règles précédentes et n'a pas été altéré, alors les trois bits de contrôle doivent être à 0 . Si ce n'est pas le cas, alors il y a eu une erreur ; l'intérêt de la technique de Hamming est que
dans le cas particulier où l'erreur est unique, le mot de contrôle donne la représentation binaire de la position de cette erreur en numérotant à partir de 1 . Par exemple, si , alors l'erreur porte sur le troisième bit du message. Il suffit ainsi d'inverser ce bit (le mettre à 1 s'il est à 0 , et inversement) pour corriger l'erreur.
La donnée décodée est alors constituée des quatre bits ( ) qui se trouvent respectivement en positions et 7 (toujours en numérotant à partir de 1) conformément à la description de l'encodage donnée ci-dessus.
Q13. Écrire une fonction decode_hamming (message) prenant pour argument une liste de sept bits et retournant une liste de quatre bits contenant la donnée décodée. En cas d'erreur, on affichera à l'écran un avertissement indiquant la position du bit affecté et on effectuera la correction. On supposera dans cette question que s'il y a une erreur, alors elle est unique.
Q14. Déterminer le codage de Hamming de la donnée 1011, puis la donnée décodée par l'algorithme dans l'hypothèse où les deux premiers bits du message codé ont été incorrectement transmis. Quel a été l'effet de la "correction" sur la donnée dans ce cas?
Q15. Sans coder, proposer un moyen simple de différencier une double erreur d'une erreur unique au moyen d'un bit de parité supplémentaire et expliquer comment cela permet d'éviter le problème mis en évidence à la question précédente. On s'appuiera sur les techniques introduites dans cette partie. On ne demande pas d'essayer de corriger la double erreur.
Utilisation des données de la puce pour autoriser ou non le passage
Lorsqu'un utilisateur présente son titre de transport face au lecteur d'un point de contrôle, la puce et le lecteur s'identifient mutuellement, puis le lecteur récupère les données de la puce permettant de déterminer si le passage est autorisé ou non. A l'issue de cette récupération, l'ordinateur auquel est relié le lecteur dispose d'un fichier texte 0001.txt semblable à l'exemple ci-dessous :
49987654
(identifiant du titre de transport)
(première et dernière zone de validité, date de fin de validité)
(dates, heures et identifiants des lieux des trois derniers passages)
En d'autres termes, ce fichier possède toujours exactement la structure suivante :
la première ligne contient un entier servant à identifier le titre de transport,
le réseau de transport est divisé en plusieurs zones numérotées, et le titre n'est valide que dans un ensemble de zones contigües; la seconde ligne contient les bornes de l'intervalle dans lequel le titre est valide (ici, il s'agit des zones 1 à 3 incluses) ainsi que la date de fin de validité du titre au format aaaa-mm-jj (ici, ils'agit du 31 août 2015),
les trois lignes suivantes contiennent des données relatives aux trois derniers passages effectués à l'aide du titre : date, heure (au format hh:mm:ss sur 24 heures) et identifiant entier du point de passage (gare, arrêt...).
On donne le bloc d'instructions utilisé pour lire les deux premières lignes de ce fichier. On précise qu'il n'est pas nécessaire de connaitre toutes les syntaxes relatives à la manipulation des chaînes pour traiter les questions suivantes.
sous Python
fichier = open('0001.txt')
lignes = fichier.readlines()
fichier.close()
# Ligne 1: recuperation de l'identifiant du titre
id_titre = int(lignes[0])
# Ligne 2 : recuperation des donnees du titre de transport
donnees_titre = lignes[1].rstrip('\n').split(',')
zones = [ int(donnees_titre[0]), int(donnees_titre[1]) ]
ch date fin = donnees titre[2].split('-')
date_fin = [ int(ch_date_fin[0]), int(ch_date_fin[1]), int(ch_date_fin[2]) ]
Sous Scilab
fichier = mopen('0001.txt')
lignes = mgetl(fichier)
mclose(fichier)
// Ligne 1: recuperation de l'identifiant du titre
id_titre = strtod(lignes(1))
// Ligne 2 : recuperation des donnees du titre de transport
donnees_titre = strsplit(lignes(2),',')
zones = [ strtod(donnees_titre(1)), strtod(donnees_titre(2)) ]
ch_date_fin = strsplit(donnees_titre(3),'-')
date_fin = [ strtod(ch_date_fin(1)), strtod(ch_date_fin(2)), strtod(ch_date_fin(3)) ]
Q16. Donner les types et les valeurs des variables id_titre, zones et date_fin à l'issue de ces instructions pour le fichier 0001. txt donné ci-dessus.
On souhaite placer le contenu des trois dernières lignes dans un tableau d'entiers nommé passages, dont chaque ligne corresponde à un passage (dans l'ordre dans lequel ils apparaissent dans le fichier) et dont les colonnes soient définies comme suit (le premier chiffre donné est l'indice sous Python, le deuxième est l'indice sous Scilab) :
Indice
Contenu
Année
Mois
Jour
Heures
Minutes
Secondes
Point de passage
Q17. Écrire Ie bloc d'instructions à exécuter à la suite des opérations précédentes pour construire le tableau passages à partir des lignes 3,4 et 5 contenues dans la liste lignes.
Les données relatives au lecteur sont décrites par les variables suivantes (on utilise une initiale majuscule pour bien différencier les données du lecteur de celles du titre ; le type est indiqué entre parenthèses) :
Zone (entier) : indique la zone dans laquelle se trouve le lecteur,
Id_Point (entier) : indique l'identifiant du point de passage où se trouve le lecteur,
Liste_noire (liste d'entiers) : contient les identifiants des titres ayant été déclarés perdus, volés ou détériorés par leurs propriétaires, et devant donc être refusés,
Maintenant (liste de six entiers) : contient la date et l'heure au format ci-dessus [année, mois, jour, heures, minutes, secondes].
Le passage doit être autorisé si les conditions suivantes sont toutes vérifiées :
l'identifiant du titre n'est pas dans la liste noire du lecteur,
la zone du lecteur appartient à l'intervalle de validité du titre,
la date du jour est antérieure à la date de fin de validité du titre,
si l'une des trois dernières validations a été effectuée au même point de passage que celui où est installé le lecteur, elle doit avoir été effectuée il y a plus de 450 secondes (ceci afin de décourager l'utilisation frauduleuse d'un même titre par plusieurs voyageurs).
Enfin, lorsqu'un passage est refusé, un message apparaît sur un afficheur LCD pour donner la raison du refus. Cet afficheur possède une seule ligne et il faut donc définir des priorités au cas où plusieurs des conditions ci-dessus ne seraient pas remplies. L'ordre de priorité et les messages correspondants sont donnés ci-dessous :
"Titre refusé" si l'identifiant est dans la liste noire,
"Non valide dans cette zone" si le lecteur est hors des zones de validité du titre,
"Titre expiré" si la date de fin de validité du titre est dépassée,
"Titre déjà validé" si le titre a déjà été validé dans le même lieu il y a moins de 450 secondes.
Q18. Écrire une fonction estAvant (date1, date2) prenant pour arguments deux dates au format [année, mois, jour] (donc sous forme de listes de trois entiers chacune) et retournant True si date1 est antérieure ou égale à date2, et False sinon.
Q19. Écrire une fonction nbSecondesEntre (heure1, heure2) prenant pour arguments deux horaires au format [heures, minutes, secondes] (donc sous forme de listes de trois entiers chacun) et retournant le nombre de secondes séparant les deux instants. Le résultat devra être positif si heure1 est postérieure à heure2.
Q20. Écrire alors une fonction testPassage, dont les arguments sont à préciser, retournant la valeur True si le passage est autorisé et la valeur False sinon et, dans ce dernier cas, affichant à l'écran le message correspondant aux règles de priorité ci-dessus. On pourra utiliser toutes les variables définies dans cette partie et appeler les fonctions définies dans les deux questions précédentes.
Exploitation des données enregistrées par le système
A chaque fois qu'un point de contrôle est franchi, le système collecte des données relatives au passage : lieu, date, heure... Ces données sont ensuite enregistrées dans la base de données du transporteur, qui comporte trois tables :
la table passages dédiée aux passages des voyageurs, constituée des champs :
date qui contient la date du passage au format aaaa-mm-jj,
heure qui contient l'heure du passage au format hh:mm:ss,
id_point qui est l'identifiant (entier) du point de passage,
id_titre qui est l'identifiant (entier) du titre de transport utilisé ;
la table points dédiée aux points de passage, constituée des champs (entiers) :
id qui est l'identifiant du point de passage (clé primaire),
zone qui est le numéro de la zone où se trouve le point de passage,
ligne qui est le numéro de la ligne sur laquelle se trouve le point de passage ;
et la table titres dédiée aux titres de transport, constituée des champs (entiers) :
id qui est l'identifiant du titre de transport (clé primaire),
zone_min qui est la plus petite zone couverte par le titre,
zone_max qui est la plus grande zone couverte par le titre.
Ces informations sont utilisées par le transporteur pour effectuer des études statistiques sur la fréquentation de ses lignes, en vue d'améliorer le service.
Par exemple, certaines lignes desservant majoritairement des zones d'activités ou des établissements d'enseignement connaissent une forte baisse de leur fréquentation en été, ce qui permet d'alléger le service ; pour choisir la période concernée, il faut connaître précisément l'évolution de la fréquentation au cours de l'été, ainsi que sa répartition au cours de la journée.
Q21. Donner la requête SQL permettant de récupérer les dates et les heures de tous les passages ayant eu lieu sur la ligne numérotée 1 entre Ie 1er juillet et le 31 août 2014 (inclus).
Un autre exemple de problématique est celui de l'efficacité des dézonages : à certaines périodes de l'année, les voyageurs sont autorisés à emprunter l'ensemble du réseau de transport quelles que soient les zones de validité de leur abonnement. Pour évaluer l'efficacité d'une telle mesure, il faut connaître le nombre de trajets en ayant bénéficié.
Q22. Donner la requête SQL permettant de compter le nombre de passages dézonés, c'est-à-dire ayant eu lieu hors de l'intervalle de validité du titre utilisé, effectués le 31 décembre 2014.
Banque PT Modélisation PT 2015 - Version Web LaTeX | WikiPrépa | WikiPrépa