Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

Comprendre un script Python. CRCMOD
#1

Bonjour,

Voilà j'ai repris un code python que j'essaie de comprendre.

Le voici :
Code :
[== Indéfini ==]
import serial
import time
import crcmod

crc16f = crcmod.predefined.mkCrcFun('crc-ccitt-false')


def send(data):
   NTX2 = serial.Serial('/dev/ttyAMA0', 50, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_TWO)
   NTX2.write(data)
   print data
   NTX2.close()


def read_gps():
   alt = 0
   ora = 0
   lat = 0
   lon = 0

   gps = serial.Serial('/dev/ttyAMA0', 9600, timeout=1)
   NMEA = gps.readline()
   gps.close()
  
   print "Lettura GPS ok"
  
   print NMEA
   data = NMEA.split(",")

   lat = data[2]
   northsouth = data[3]
   lon = data[4]
   westeast = data[5]
   alt = int(float(data[9]))
   ora = data[1]
   ora = float(ora)
   string = "%06i" % ora
   hours = string[0:2]; minutes = string[2:4]; seconds = string[4:6]
   ora = str(hours) + ':' + str(minutes) + ':' + str(seconds)        
   return lat, lon, alt, ora

id = 0
while True:
   GPS = read_gps()
   lat = GPS[0]; lon = GPS[1]; alt = GPS[2]; ora = GPS[3]; temp=15 #temperatura di prova con BMP scollegato
   nome = "EOSO_TRY"
   stringa=str(nome + ',' + str(id) + ',' + str(lat) + ',' + str(lon) + ',' + str(alt) + ',' + str(temp))
   csum = str(hex(crc16f(stringa))).upper()[2:]
   csum = csum.zfill(4)
   dati = str("$$" + stringa + "*" + csum + "\n")
   send(dati)
   id += 1
   time.sleep(1)

Au début du code il y à ceci que je ne comprends pas :
Code :
[== Indéfini ==]
import crcmod

crc16f = crcmod.predefined.mkCrcFun('crc-ccitt-false')

Bien sur j'ai fais des recherches sur google mais je n'arrive toujours pas à comprendre a quoi sert ce "CRCMOD" et "CRC16F"

Si quelqu'un à déjà utilisé cette bibliothèque et peux me donner une petite explication, j'en serai vraiment ravis!!!

Merci d'avance.

David
Répondre
#2

crcmod est une bibliothèque qui permet de gérer les CRC (Cyclic Redundancy Check : https://fr.wikipedia.org/wiki/Contr%C3%B...e_cyclique ) qui sont plus ou moins des sommes de contrôle pour vérifier l'intégrité des données.
Le crc16f est a priori un CRC 16 bits, sachant qu'on peut le faire sur 8, 16, 24, 32, ou 64 bits et qu'habituellement, on est plutôt sur du CRC32

Dans ton cas, je pense (mais m'avance peut-être beaucoup) qu'un calcul d'intégrité est fait sur 16 bits pour un gain de performances (c'est plus rapide à faire) afin de vérifier que les données envoyées ou reçues n'ont pas subi de pertes
Répondre
#3

Bonjour CrazyCat,

Super merci beaucoup pour ta réponse, je comprends mieux maintenant!
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)