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()
