dpg109.py
Fichier python d'acquisition de donnée
dpg109.py — Python Source, 2 ko (2815 bytes)
Contenu du fichier
#!/usr/local/bin/python # -*- coding:UTF-8 -*- ############################################ # Programme dpg109.py # Lambert Gregory # 04.05.2011 # Ce programme lit la valeur # de pression du dewar ECam. ############################################ # Importation de fonctions externes : import time import serial import sys # Définition locale de fonctions : def calculChecksum(val): w = int(len(val[0:16])) # ex : 0011074006230020026\r à décomposer en 0011074006 2300 20 026 # val[mb] puissance checksum checksum = 0 # Il faut comprendre 2300 * 10^(20-23) [mb] = 2.3 [mb] (ATT. soustraire 23.. on sait pas pourquoi) i = 0 while i < w: # Calcul de la checksum checksum = checksum + ord(val[i]) #char=chr(num) --> ascii2decimal i += 1 if checksum % 256 == int(val[17:20]): pression = int(val[10:14])*pow(10,int(val[14:16])-23) print(str(time.time())+ "\t" + str(pression)) return pression else: print 'La checksum renvoyée par le dpg ne correspond pas à celle calculée' return -1 # Configure the serial connections : ser = serial.Serial( port='/dev/ttyr04', #ttyr04 sur glspc14 OU ttyr00 sur glspc17 baudrate=9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=5 ) ###### # Main intervalMesure = 60 # en [s], temps entre deux mesures nbMesure = 12000 #Test du lock - unlock x = ser.write("0161000806111111028\r") # Lock line = ser.read(x) if line != "0161000806111111028\r": print "Erreur du lock, TEUPS ON ???", line sys.exit() time.sleep(3) x = ser.write("0161000806000000022\r") # UnLock line = ser.read(x) if line != "0161000806000000022\r": print "Erreur du unlock", line sys.exit() # facteur de correction y = ser.write("0010074202=?108\r") facteurCorrection = ser.read(20) FacteurCorr = calculChecksum(facteurCorrection) # création du fichier de log Date = time.strftime('20'+'%y-%m-%d_%H'+'h'+'%M'+'m'+'%S'+'s',time.localtime()) f = open('Log_Dpg109/' "DPG109_"+ Date +".log","a") line = "# Tunix" + "\t" + "Pression [mb]" + "\t" + "Facteur de correction = " + str(FacteurCorr)+ "\n" f.write(line) f.close() ##### Boucle de lecture de pression ##### # Info importante # On écrit 0010074002=?106\r ... 001 = channel 1 # 106 = check sum (Décimal) # La check sum = la somme de 0010074002=? # ---ASCII---> Décimal for i in range(nbMesure): # Lecture de la pression x = ser.write("0010074002=?106\r") pressionAscii = ser.read(20) # la sonde renvoie une chaine de 20 caractères. pression = calculChecksum(pressionAscii) # Ecriture dans le fichier f = open('Log_Dpg109/' "DPG109_"+Date+".log","a") line = str(time.time())+ "\t" + str(pression) +"\n" f.write(line) f.close() time.sleep(intervalMesure) ser.close()