DAQperBBCC 060610 mod
Transcript of DAQperBBCC 060610 mod
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
1
http://www.gruppodab.it/public/press-area/libretto-musei-V04-def.pdf [1/2][1/2]
Antiintrusione
Sistema diControllovisitatori
Sistema di rivelazione espegnimento incendio
Sistema di supervisionedegli impianti tecnologici Controllo
accessi
Antifurto
Videosorveglianza Sistema di Monitoraggioambientale
Protezione di Opere d’arteall’aperto ed aree archeologiche
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
2
[2/2][2/2]
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
3
PROBLEMAPROBLEMA: Monitorare una grandezza fisica.
Perchè? ...necessita’ concreta
Cosa serve? ...idea semplice
Come? ...strumenti H/W e S/W
ProblemaProblemaH/WH/W
IdeaS/WS/W
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
4
1.1. Trasduttore da Grandezza Fisica a Grandezza Elettricaper la misura della G.F.
2.2. Dispositivo di Conversione da Grandezza Analogica a Grandezza Digitale (A.D.C.)
3.3. CalibrazioneCalibrazione tra G.D. e G.F.
4.4. Circuito Digitale per la letturadei valori misurati e convertiti in digitale da ADCADC
5.5. Trasferire in un PCPC i Valori digitali misurati
6.6. Ad ogni valore misurato va associato l’istante di misura tt
7.7. Salvare in memoriatutti i valori misurati ed il relativo istante di misura in un FileFile
Cosa serve?Cosa serve? ...idea semplice...idea semplice
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
5
Principio base di un sistema di controlloPrincipio base di un sistema di controllo
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
6
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
7
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
8
...idea semplice per monitorare la temperatura...idea semplice per monitorare la temperatura
PCPCMultimetro DigitaleMultimetro Digitale
Sensore di temperaturaSensore di temperatura
S/WS/W:1. Inviare i comandi attraverso la linea seriale2. Ricevere i dati misurati attraverso la linea seriale
H/W:H/W:
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
9
Multimetro Digitale: FLUKE45Multimetro Digitale: FLUKE45
Sensore di temperatura: LM35 Sensore di temperatura: LM35
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
10
Vario il dutyduty--cyclecycle del segnale pilota
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
11
Possibile approccio per monitorare in automatico la Temp.senza richiedere l’intervento diretto dell’uomo per ogni singolo passo:
1. Inviare il comando attraverso la linea seriale
2. Ricevere il dato misurato attraverso la linea seriale
3. Registrare il dato misurato
utilizzo di un softwaresoftware (insieme di linee di comando ) residente nel PC eseguito passo dopo passo
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
12
Il linguaggio PYTHON nasce nel 1990: il padre e’ Guido van Guido van RossumRossum che all’epoca era un fan diun gruppo di comici inglesi famosi sulla BBC per “Monty Python's Flying Circus” .Quindi, il nome non sta per PITONE...
Il sito ufficiale e’ http://http://www.python.orgwww.python.org
Si tratta di un linguaggio interpretato anche se molte implementazionilo compilano per motivi di efficienza):si puo` interagire con una macchina virtuale Python in maniera interattiva.L'esecuzione avviene attraverso l'interprete python, di cui sono disponibili pacchetti di istallazione per le varie distribuzioni di software esistenti.Una caratteristica di Python e’ la sua Portabilita’ da una piattaforma con un Sistema Operativo ad un altro diverso.
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
13
Cosa vuol dire linguaggio “interpretato”?
Un linguaggio interpretato è un linguaggio di programmazione i cui programmivengono eseguiti da un altro programma chiamato interprete. A differenza di un interprete, un compilatore non esegue il programma chericeve in ingresso, ma lo traduce in linguaggio macchina memorizzando su file ilcodice oggetto pronto per l’esecuzione diretta da parte del processore.
L’interprete, che esegue ogni riga del nostro codice, varia a seconda del processore nel computer, per cui ciò che noi scriviamo nel nostro programmaviene interpretato in base all'architettura.In questo modo viene garantita la portabilità del codice, ovvero la possibilità di poter far funzionare su tutti i computer che abbianoinstallato l’interprete il nostro programma.In generale, un linguaggio interpretato può presentare uno svantaggio: risultarepiù lento del codice compilato, perchè viene interpretata ogni singola istruzione.
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
14
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
15
Prompt dell’interprete Python: >>>>>>Assegnazione: si usa l'operatore =# questo carattere rappresenta l'inizio di un commento
Esempio: Python come calcolatrice
>>> 2+24>>> 10 / 3 # divisione intera3>>> (50-5*6)/4 # a comment5>>> width = 20>>> height = 5*9>>> width * height900>>> x = y = z = 0 # Zero x, y and z>>> # Floating point>>> 3 * 3.75 / 1.57.5>>> 7.0 / 23.5
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
16
In Python, non vengono utilizzati caratteri speciali per distinguere iltipo di variabile!
…se si utilizza lo stesso nome per una nuovavariabile, viene sovrascritto il contenuto dellavariabile precedente!
Il tipo di dato non deve essere dichiarato esplicitamente
Esempio: definizione di variabili...non serve dichiararle all’inizio
>>> pippo = 7Viene creata una variabile pippo, di tipo intero, contenente il valore 7
>>> pippo = 5.5pippo e` divenuta una variabile reale...
>>> a = b = c = 0sia a che b che c assumono il valore 0
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
17
Esempio: stringhe e concatenazioni tra stringhe
>>> messaggio = "aiuto! "
>>> “Al fuoco! ” + messaggioAl fuoco! aiuto!
>>> messaggio * 7'aiuto! aiuto! aiuto! aiuto! aiuto! aiuto! aiuto! '
>>> messaggio * 0' ' # stringa vuota
Esempio: slice di una stringa
>>> x = "casa"
>>> x[:2]'ca'
>>> x[2:]'sa'
>>> x[:]'casa'
>>> x[-2] # anche all'indietro!'s'
>>> len(x) # lunghezza di una stringa
| c| a| s| a|| 0| 1| 2| 3| 4|-4|-3|-2|-1|
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
18
Una particolarita’ del linguaggio Python:in generale un un bloccoblocco e` e` delimitatodelimitatoper mezzo per mezzo delladella indentazioneindentazione!
Si posso usare spazi o tab, basta che siano lo stesso numero.
Esempio: istruzione whilewhile
a, b = 0, 1 # assegnamento con tupla (detto multiplo)!
while b < 10:print b, # "," serve ad evitare \n finalea, b = b, a+b
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
19
Esempio: istruzione ifif
if cond1:# cond1 vera
elif cond2:# cond2 vera
elif cond3:# cond3 vera
...else :
# nemmeno una vera!
Esempio: istruzione ifif
x = 25if x > 50:
y = 1elif x < 30:
y = 2else:
y = 3if x > 10: print 'OK'else: print 'NO'
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
20
Esempio: istruzione for
>>> for x in (0,1,2):print x**2
014
>>> range(3)[0, 1, 2]
>>> for x in range(3):print x**2
014
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
21
print "..............................................."import serialfluke45=serial.Serial('COM7',9600)fluke45.flush()fluke45.write('*IDN?\r')print fluke45.read(41)print "................................................"fluke45.close()
fluke45_IDN.py
print "..............................................."#import serialfluke45=serial.Serial('COM9', 9600)j=1#while j<3:
fluke45.flush()fluke45.write('VAL?\r')x1 = fluke45.read(6)x2 = fluke45.read(8)x3 = fluke45.read(2)print x1, x2, x3j = j + 1
#print "..............................................."fluke45.close()
fluke45_VAL_mod.py
IDLE 1.2.1 >>> import serial>>> fluke45 = serial.Serial('com5',9600)>>> fluke45.flush()>>> fluke45.write('VAL?\r')>>> print fluke45.read(9)-1E+9=>>>>
Fluke45_VAL.py
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
22
from datetime import dateprint date.today()import timeprint time.ctime()d = time.gmtime()print dprint d.tm_min
uscita-su-finestra-da-prova_290510.txt
44
2010-05-29
Sat May 29 19:44:09 2010
time.struct_time(tm_year=2010, tm_mon=5, tm_mday=29, tm_hour=17, tm_min=44, tm_sec=9, tm_wday=5, tm_yday=149, tm_isdst=0)
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
23
k=0j=1secondi0=0while 1:
import serialfluke45 = serial.Serial('COM4',9600)fluke45.flush()fluke45.write('VAL?\r')x1=fluke45.read(10)
fluke45.close()
prova_010610.py
j=j+1 import time'scegliere o localtime o gmtime'd = time.localtime()
secondi = d.tm_sec
if (secondi - secondi0) == 1 :k = k+1print secondi , ";",k, ";",x1
secondi0 = secondiif j == 100 :
break
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
24
import time'scegliere o localtime o gmtime'd = time.localtime()
ora0 = d.tm_hourminuti0 = d.tm_minminuti0 = minuti0 + ora0*60
k=0j=1secondi0=0while 1:
import serialfluke45 = serial.Serial('COM4',9600)fluke45.flush()fluke45.write('VAL?\r')x1=fluke45.read(10)
fluke45.close()
prova2_010610.py
j=j+1 import time'scegliere o localtime o gmtime'd = time.localtime()
secondi = d.tm_secminuti = d.tm_minora = d.tm_hour
if (secondi - secondi0) == 1 :k = k+1print secondi , ";",k, ";",x1
secondi0 = secondi
if ((minuti + ora*60)-minuti0) == 1 :break
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
25
durata_daq = input("inserire durata totale acquisizione in minuti: ");print durata_daq;
import time'scegliere o localtime o gmtime'd = time.localtime()ora0 = d.tm_hourminuti0 = d.tm_minminuti0 = minuti0 + ora0*60
k=0j=1secondi0=0while 1:
import serialfluke45 = serial.Serial('COM5',9600)fluke45.flush()fluke45.write('VAL?\r')x1=fluke45.read(10)
fluke45.close()
prova_020610.py [1/2]
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
26
j=j+1 import time'scegliere o localtime o gmtime'd = time.localtime()
secondi = d.tm_secminuti = d.tm_minora = d.tm_hour
if (secondi - secondi0) == 1 :k = k+1print k, ";",x1
secondi0 = secondi
if ((minuti + ora*60)-minuti0) == durata_daq :break
prova_020610.py [2/2]
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
27
durata_daq = input("inserire durata totaleacquisizione in minuti: ");print durata_daq;
pluto = open('F:\misure.txt','w')
import time'scegliere o localtime o gmtime'd = time.localtime()ora0 = d.tm_hourminuti0 = d.tm_minminuti0 = minuti0 + ora0*60
k=0j=1secondi0=0while 1:
prova2_020610.py [1/2]
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
28
prova2_020610.py [2/2]
import serialfluke45 =
serial.Serial('COM5',9600)fluke45.flush()fluke45.write('VAL?\r')x1=fluke45.read(10)
fluke45.close()
j=j+1 import time'scegliere o localtime o gmtime'd = time.localtime()
secondi = d.tm_secminuti = d.tm_minora = d.tm_hour
if (secondi - secondi0) == 1 :k = k+1print k, ";",x1
pluto.write(str(k)+';'+str(x1))
secondi0 = secondi
if ((minuti + ora*60)-minuti0) == durata_daq :
pluto.close()
break
2;123453;123454;123455;12345
misura.txt
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
29
FFLLUUKKEE4455++RRSS223322
[1[1//4]4]
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
30
FLUKE45 + USB/RS232FLUKE45 + USB/RS232 [2a/4][2a/4]
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
31
FLUKE45 + USB/RS232FLUKE45 + USB/RS232 [2b/4][2b/4]
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
32
FLUKE45 + USB/RS232FLUKE45 + USB/RS232 + Python+ Python [3/4][3/4]
060610 Lab. Mis. An. Dati (LS in BB-CC) AA209/2010
33
Python + SerialUSB/RS232Python + SerialUSB/RS232 [4/4][4/4]