Le RFID et le protocole Modbus
Application
Préambule
Dans cette application, nous allons faire des interrogations Modbus afin de savoir si un marqueur RFID est présent dans le champ électromagnétique d'un lecteur RFID. Nous avons donc un lecteur RFID jouant le rôle d'esclave connecté via une liaison série et le protocole Modbus TCP à une machine.

Deux interrogations vont être transmises au lecteur pour obtenir l'information désirée :
- 1 interrogation où nous allons lire le status du lecteur (code : 00 11)
- 1 interrogation où nous allons lire le numéro de badge entré ou sorti du champ électromagnétique (code : 00 42)
Détection

Couleur rouge : adresse de l'esclave (1 octet) ==> (41)h
Couleur verte : code fonction (1 octet) ==> (03)h, soit la fonction de lecture
Couleur noire : les données (4 octets) ==> (00 11 00 01)h
Couleur bleue : code de la demande (2 octets) ==> (00 11)h, soit la demande de lecture du status du lecteur
Couleur orange : nombre d'octets demandés en héxadécimal (2 octets) ==> (00 01)h, soit la demande de renvoi d'un octet de donné
Couleur violette : CRC (2 octets) ==> (C5DF)h
Plusieurs interrogations sont effectuées afin de détecter l'entrée d'un badge dans le champ électromagnétique du lecteur. Cette interrogation demande 1 octet de donnée, celui-ci correspondant aux nombres de données requises pour récupérer l'information. Une réponse est alors envoyée par une trame de même composition que celle de la demande, à l'exception près du champ donnée : 1 octet est présent pour le status du lecteur (1A pour une non détection)
Lorsqu'un badge entre dans le champ électromagnétique du lecteur, le statut renvoyé par ce dernier devient (1B)h, statut correspondant à la détection d'un badge en entrée. Le nombre d'octets nécessaires pour la récupération du numéro de badge est alors de (0A)h, soit 10 octets.
Récupération

Couleur rouge : adresse de l'esclave (1 octet) ==> (41)h
Couleur verte : code fonction (1 octet) ==> (03)h, soit la fonction de lecture
Couleur noire : les données (4 octets) ==> (00 12 00 05)h
Couleur bleue : code de la demande (2 octets) ==> (00 12)h, soit la demande de lecture du numéro de série du marqueur entrée dans le champ
Couleur orange : nombre d'octets demandés en héxadécimal (2 octets) ==> (00 05)h, soit la demande de renvoi de 5 mots, soient 10 octets.
Couleur violette : CRC (2 octets) ==> (C5DF)h
Lorsque la détection de l'entrée ou sortie du champ électromagnétique du lecteur RFID d'un badge est détectée, une requête est envoyée pour récupérer le numéro du tag RFID concerné. La composition de la trame est sensiblement similaire à celle de la détection. Le champ "code de la demande" vaut cette fois ci (00 12)h, correspondant à la demande de récupération du numéro du tag.
La trame de réponse contient alors le numéro de badge de 10 octets : (02 04 09 08 01 01 00 00 01 01 )h. Sur ces octets, il faut faire attention de ne prendre que les 4 premier bits, soit le numéro de badge égal à 2498110011.
Synthèse
Lors de cette application, nous avons donc récupérer le numéro d'un badge en entrée dans le champ électromagnétique du lecteur. Cette opération s'est effectuée via seulement deux interrogations et la composition des trames est sensiblement la même, respectant la composition d'une trame Modbus.
L'opération inverse, c'est-à-dire la récupération d'un numéro de badge en sortie du champ électromagnétique du lecteur, est exactement la même : 1 requête statut (cette fois, détection 1B => 1A) et 1 requête lecture sortie badge (code : 00 13) renvoyant le numéro du badge sortie du champ.