2 Conception logicielle des modules fonctionnels du système de surveillance
2. 1 Conception d'un module anti-interférences et anti-collision
Au cours du processus de collecte et de transmission des données, deux problèmes principaux se posent en matière d’intégrité des données : les interférences entre signaux et les conflits entre signaux. Le système intègre un module anti-interférences basé sur la méthode du contrôle de redondance cyclique (CRC) et utilise un algorithme anti-collision pour résoudre le problème des conflits entre signaux [8].
2. 1. 1 Conception du module anti-interférences : le code de contrôle CRC repose sur la théorie du codage linéaire [9-12]. Côté émetteur, en fonction des k bits du champ d’information à envoyer, un champ de vérification (c’est-à-dire un code CRC) de r bits est généré selon les règles convenues, puis ajouté au champ d’information pour former une nouvelle séquence de code binaire de (kr) bits. La nouvelle séquence de (kr) bits est transmise ; du côté récepteur, elle est vérifiée selon les règles convenues afin de déterminer s’il y a eu une erreur lors de la transmission.
Dans le protocole de communication de l'interface utilisé lors du processus de collecte et de transmission des données (voir tableau 1), le SN (numéro de paquet à incrémentation automatique) sert à filtrer les paquets de données en double ou perdus lors du processus de vérification CRC ; le contenu de Head (en-tête du paquet de données) est fixe et vaut 0x02030405 ; il sert à vérifier la validité de l’identité de l’étiquette ; Length correspond à la longueur du paquet de données ; DeviceID correspond à l’identifiant du lecteur/enregistreur qui envoie le paquet de données ; CMD correspond au code de commande, dont la plage est comprise entre 0x00 et 0xff ; data[ ] correspond au champ des paramètres ; CheckSum correspond à l’octet de somme de contrôle : la somme cumulative de tous les octets précédents, modulo 256, est utilisée conjointement avec Length pour vérifier l’intégrité des données.

2. 1. 2 Conception du module anti-collision : plusieurs étiquettes se trouvent dans le champ de détection du lecteur/enregistreur. Si elles communiquent simultanément, elles occupent le canal en même temps, ce qui provoque un conflit entre les données transmises et entraîne une collision de données entre les étiquettes électroniques. Le système utilise un algorithme de recherche dans un arbre binaire pour résoudre le problème de conflit entre les étiquettes [13-15]. Chaque étiquette possède un numéro de série unique (UDI). La solution au problème de conflit entre les étiquettes repose sur l’UDI.
Le modèle de l'algorithme de recherche dans un arbre binaire est illustré à la figure 3. Tout d'abord, la position de conflit est enregistrée, et l'étiquette à cette position est divisée en deux sous-ensembles : 0 et 1 ; ensuite, le sous-ensemble 0 est interrogé. S'il n'y a pas de conflit, l'étiquette est correctement identifiée. S'il y a toujours un conflit, l'étiquette est alors identifiée à nouveau. On divise le sous-ensemble 0 en deux sous-ensembles : 00 et 01, et ainsi de suite, jusqu'à ce que toutes les étiquettes du sous-ensemble 0 soient identifiées, puis on suit cette étape pour interroger le sous-ensemble 1.
L'algorithme de recherche dans un arbre binaire utilise le codage de Manchester. Prenons comme exemple l'étiquette 1 (11000001), l'étiquette 2 (11101011) et l'étiquette 3 (11001001) : le fonctionnement de l'algorithme de recherche dans un arbre binaire est le suivant. 1) Le lecteur envoie la commande 11111111 à l'étiquette pour lui demander une réponse. Après encodage, le résultat du décodage effectué par le lecteur est 11X0X0X1, et les bits D1, D3 et D5 entrent en collision. 2) On définit le bit de collision le plus élevé (D5) à 0 ; les bits supérieurs à D5 restent inchangés, et les bits inférieurs à D5 sont définis à 1. 3) Le lecteur envoie à nouveau la commande 11011111 à l’étiquette, et le résultat du décodage du lecteur après décodage est 1100X0X1. 4) Mettre à 0 le bit de collision le plus élevé (D3) ; le bit supérieur à D3 reste inchangé, et le bit inférieur à D3 est mis à 0. 5) Le lecteur envoie à nouveau la commande 11000111 à l’étiquette. À ce moment-là, l’étiquette 2 n’entre pas en collision avec d’autres étiquettes et répond au lecteur. Le lecteur effectue des opérations de lecture et d’écriture sur l’étiquette 2. 6) Répétez le processus ci-dessus jusqu’à ce que toutes les étiquettes répondent au lecteur. Au cours du processus ci-dessus, il peut arriver qu’une étiquette ayant déjà répondu réagisse à nouveau. Le système met en place un mécanisme de contrôle pour empêcher l’étiquette de répondre de manière répétée. La programmation est la suivante :



