dpg109.py

Fichier python d'acquisition de donnée

Python Source icon 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()