Skip to content

NSI - Première - DataMatrix

Travail demandé

Partie 1: comprendre un dataMatrix

Un DataMatrix est une petite image en noir et blanc qui contient une information codée. Le principe est d'utiliser des informations numériques qui sont représentées en deux dimensions. Un appareil tel qu'un smartphone peut décoder l'information avec une application dédiée comme l'application gratuite "Flashcode" par exemple. Les DataMatrix font l’objet de plusieurs normes dont la norme ISO/IEC 16022. Ils permettent de coder les caractères alphanumériques ( les lettres et les chiffres); vous pouvez, par exemple, coder une carte de visite avec un dataMatrix. Voici l'apparence d'un dataMatrix:

Depuis janvier 2011, tous les médicaments vendus en France comportent sur leur emballage un DataMatrix permettant de tracer la provenance, la date de péremption et le nom du médicament.

Un DataMatrix est composé d’une marge pour que le lecteur puisse se repérer, et d’une matrice ( un tableau à 2 dimensions) permettant d’y insérer les données sous forme de code :

La taille de la matrice dépend du nombre d’informations que l’on souhaite coder. La capacité peut aller jusqu'à 2335 caractères alphanumériques codés dans la matrice.

Question 1.1

  • L'information stockée
    Si vous le pouvez Flasher le DataMatrix ci-dessous avec un smartphone ou une tablette. Indiquer l'information contenue dans le DataMatrix sur votre compte rendu.

Question 1.2

Principe du codage d'un dataMatrix:

La matrice d’un DataMatrix comporte des nombres binaires appelés "CodeWords" ( mots codés en Anglais). Chaque CodeWord correspond à un octet ( une information sur 8 bits ).

Les CodeWords sont placés dans la matrice selon un procédé décrit par la norme ISO/IEC 16022.

Voici comment sont disposés les CodeWords dans une matrice 8*8 bits:

Comment lire la matrice:

Analysons un nombre binaire de 8 bits: 1010 0100, ce nombre binaire possède son bit de poids fort (complètement à gauche) à 1 (son MSB=1) et son bit de poids faible (complètement à droite) à 0 (LSB=0). Si on veut inscrire ce nombre binaire dans un "CodeWord", on doit placer chaque bit à un emplacement pour un CodeWord choisi.
Par exemple, on choisit de placer le nombre dans le CodeWord numéro 2 ( celui entouré ci-dessus), les emplacements du CodeWord numéro 2 sont repérés: 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7 et 2.8. Le bit de poids fort doit être placé en "2.1" et le bit de poids faible en "2.8", l'affectation du nombre binaire précédent 1010 0100 sera 2.1=1, 2.2=0, 2.3=1, 2.4=0, 2.5=0, 2.6=1, 2.7=0 et 2.8=0.

Dans le DataMatrix, on n'écrit pas des 1 et des 0, on utilise la couleur noire pour un bit = 1 et la couleur blanche pour un bit =0, voici le résultat (entouré en rouge ci-dessous) pour l'octet 1010 0100 placé dans le CodeWord2:

  • a. Il y a Combien de CodeWords dans le DataMatrix ci-dessus ( DataMatrix de matrice 8*8 bits )?
  • b. Donner la valeur numérique des 3 premiers CodeWords du DataMatrix ci-dessus. Les trois premiers CodeWords son repérés de 1.1 à 1.8 pour le premier, de 2.1 à 2.8 pour le second et 3.1 à 3.8 pour le troisième.
  • c. Convertir la valeur de ces 3 CodeWords en base 10 ( expliquer votre méthode).
  • d. Calculer la vraie valeur contenue dans chacun des 3 premiers CodeWords en retranchant 130 à chaque nombre trouvé à la question b ( par exemple si le CodeWord1 vaut 142, sa vraie valeur est 12 dans le CodeWord ).
    Remarque: pourquoi faut-il retrancher 130 ?
    – Dans un CodeWord ont peut coder les 128 caractères de la table ASCII (voir dossier ressources), la valeur numérique ( en base 2) du caractère ASCII est représentée sur 8 bits , si on convertit cette valeur en base 10 (décimal) on obtiendra un nombre entre 1 et 128.
    – La valeur binaire 10000001 (129 en base 10 ) est spéciale, elle est utilisée pour remplir un CodeWord non utilisé.
    – Dans un CodeWord ont peut aussi coder des nombres décimaux à deux chiffres, la valeur du nombre (en base 10) est entre 00 à 99 ( un nombre décimal à deux chiffres), mis dans le CodeWord un nombre à deux chiffres ne peut pas avoir une valeur décimale qui donnerait un nombre entre 1 et 128 ( c'est la valeur d'un caractère ASCII ), ni la valeur 129, il aura une valeur décimale à partir de 130 pour 00, 131 pour 01, etc... jusqu'à 229 pour 99.
    La règle du codage est donc:
    la valeur du nombre à placer dans le CodeWord (en base 10) = valeur du nombre à deux chiffres + 130 .
    Bien entendu dans le CodeWord, on n'a pas la valeur du nombre en base 10 mais sa valeur en base 2 sur 8 bits.

    Exemple: on veut placer 12 (base10) dans un CodeWord, on ajoute 130 ce qui donne 142 (base10) , on convertit 142 en base 2 sur 8 bits ce qui donne 10001110 que l'on place dans le codeword choisi.
  • e. Flasher le DataMatrix ci-dessous et comparer avec votre décodage:

Partie 2: Créer un dataMatrix

Dans cette partie vous allez créer votre propre Datamatrix

Question 2.1

Cliquer-ici pour télécharger le fichier Excel datamatrix.xls qui contient une matrice carré de 8x8 bits. On veut coder dans cette matrice la série de nombres à deux chiffres "98", "76", "54".
Le CodeWord1 devra contenir "98", le CodeWord2 contiendra "76" et le CodeWord3 contiendra "54".
Coder chaque CodeWord dans le fichier Excel. N'oubliez pas d'ajouter 130 avant de transcoder le nombre en base 2 , les CodeWord 4, 5, 6 7, 8 sont ignorés ( bits à 0) pour l'instant.
Copier-coller le DataMatrix obtenu sur votre compte rendu.

ATTENTION: si vous flashez votre DataMatrix après remplissage des 3 CodeWords, vous n'obtiendrez rien parce que la matrice doit aussi contenir la valeur des CodeWords 4, 5, 6, 7, 8 qui permettent une vérification d'erreur.

le code de vérification d'erreur

Sur les CodeWords d'une matrice "8x8" , les CodeWords 4,5,6,7 et 8 sont réservés à la vérification de l’information pour éviter les erreurs de lecture. La vérification est basée sur l’algorithme de REED-SOLOMON qui met en œuvre des concepts mathématiques complexes. Vous disposez du programme "Reed-Solomon.exe" qui va vous fournir la valeur des cinq octets de vérification pour les DataMatrix de 8x8 bits. Ci-dessous en vert l'emplacement des octets de vérifications pour les trois octets d'information codée (en jaune)

Cliquer-ici pour télécharger le programme reedsalomon.exe

Question 2.2

Exécuter le programme ReedSolomon.exe pour obtenir la valeur des 5 octets de vérification associés aux trois CodeWords que vous avez codé à la question 2.1 (vous devez utiliser les valeurs décimales de ces 3 CodeWords dans le programme ReedSolomon.exe soit 228, 206 et 184)

Transcoder en base 2 la valeur des 5 octets. Attention: ne pas ajouter 130 aux octets de vérification.

Question 2.3

Compléter le datamatrix en ajoutant la valeur binaire des 5 octets de vérification d'erreur obtenus précédemment dans le fichier Excel "DataMatrix.xls".
Copier-coller votre DataMatrix sur votre compte rendu.
Flasher le DataMatrix pour vérifier que l’information fournie est correcte.

Question 2.4

Uniquement pour ceux en avance:
On veut coder dans un nouveau datamatrix le mot "NSI". Télécharger le fichier Excel datamatrix.xls
Lire dans la table ASCII du dossier ressources la valeur décimale du caractère N.
Ajouter 1 à cette valeur. Par exemple si la valeur décimale vaut 78, on codera 78 + 1 = 79.
Transcoder la valeur décimale obtenue en base 2 sur 8 bits.
Placer la valeur des 8 bits pour N dans le CodeWord1.
Recommencer les mêmes étapes pour obtenir la valeur numérique en base 2 sur 8 bits de "S" puis celle de "I". ( ne pas oublier d'ajouter 1 aux valeurs décimales lues dans le tableau ASCII avant de transcoder en base 2).
Placer la valeur des 8 bits pour S dans le CodeWord2.
Placer la valeur des 8 bits pour I dans le CodeWord3.
Exécuter le programme ReedSolomon.exe pour obtenir la valeur des 5 octets de vérification associés aux trois CodeWords codés.
Transcoder en base 2 la valeur des 5 octets et les placer dans la matrice. – Flasher le DataMatrix pour vérifier que l’information fournie est correcte.