TESTO ESERCITAZIONE: CATENA DI ACQUISIZIONE DATI

TESTO ESERCITAZIONE:
CATENA DI ACQUISIZIONE DATI:
Qualsiasi sistema in grado di rilevare e memorizzare grandezze analogiche o digitali è un sistema di
acquisizione dati.
È necessario innanzitutto distinguere tra sistemi in grado di rilevare grandezze analogiche e sistemi che
rilevano grandezze digitali.
ANALOGICO
MF rappresenta il mondo fisico da cui trarre i dati
E rappresenta un elaboratore (PC, sistema dedicato,
microprocessore)
I rappresenta un'interfaccia hardware
S rappresenta un sensore
A rappresenta un attuatore.
Nel caso in cui il dato da acquisire sia di natura digitale, ed essendo E in grado di trattare solo dati
digitali, bastano solamente due interfacce hardware (una per S e l'altra per A, essendo anche S e A di
natura digitale).
Digitale
Nel caso in cui il dato da acquisire sia di tipo analogico (grandezze fisiche naturali), S ed A sono analogici
per cui necessitano due convertitori: uno ADC posto tra S ed E
ed uno DAC tra E ed A e lo schema diventa:
in cui CC rappresenta il circuito di condizionamento, ADC il
convertitore analogico/digitale e DAC il convertitore
digitale/analogico.
L’architettura del sistema di acquisizione può essere di due
tipologie principali a seconda del numero di grandezze che si
vogliono utilizzare:
-monocanale
-multicanale
Monocanale Multicanale
L'architettura di una catena di acquisizione dati a più canali è genericamente quella riportata, in cui è
inserito un multiplexer analogico per poter smistare i segnali dei singoli sensori al convertitore.
Il multiplexer ha ingressi dati in numero proporzionale al numero di linee di selezione I = 2s. Le linee di
selezione sono comandate dal blocco della logica di controllo.
1- Sensori:
1
Il dispositivo o elemento sensibile in grado di rilevare le variazioni di una grandezza fisica e di fornire in
uscita un'altra grandezza fisica è definito sensore.
In genere nei sistemi di processo e/o di controllo la grandezza da controllare è di tipo elettrico (tensione)
per cui bisogna garantirsi che l'uscita del sensore fornisca una tensione e questo compito è affidato ai
trasduttori.
Il trasduttore d'ingresso converte una grandezza fisica in grandezza elettrica; e il trasduttore di uscita è
anche chiamato attuatore, e converte la grandezza elettrica in un'altra grandezza fisica.
I trasduttori per compiere queste conversioni necessitano di energia, generalmente fornita dall’esterno
(trasduttori modulanti), il trasduttore (sensore) che invece non utilizza energia esterna è detto anche
trasduttore autogenerante. Possono essere per lo stesso motivo distinti in attivi e passivi.
I trasduttori attivi possono essere: analogici e digitali.
I trasduttori analogici presentano una caratteristica ingresso/uscita costituita da una funzione
continua.
I trasduttori digitali presentano una caratteristica ingresso/uscita che può assumere solo due valori:
alto o basso, livello logico 1 o livello logico 0.
Il trasduttore modulante o passivo può presentare in uscita un valore diverso da zero anche quando
in ingresso la grandezza è nulla (offset), per la presenza dell'alimentazione esterna chiamata
eccitazione.
2- Circuito di condizionamento
La grandezza fisica da rilevare è stata convertita in segnale elettrico dal trasduttore di ingresso che, nel
relativo campo di funzionamento, dovrebbe garantire segnali elettrici proporzionali ai valori della
grandezza fisica.
Il segnale fornito dal trasduttore deve essere adattato alle specifiche d'ingresso del convertitore. Questa
funzione, fondamentale per tutti i blocchi successivi della catena di acquisizione, è svolta dal circuito di
condizionamento, che assicura un trasferimento migliore del segnale al convertitore, eliminando gran parte
dei disturbi.
Le azioni principali svolte dai circuiti di condizionamento possono essere:
R/V (resistenza/tensione) oppure I/V (corrente/tensione)
3-Sample & Hold
Il convertitore A/D ha un tconv (tempo di conversione) finito che può, approssimativamente, andare da 20 ms
fino a 1 ns. Eventuali variazioni del segnale durante il processo di conversione possono generare errori
significativi.
Il circuito S/H, è utilizzato nei casi in cui c’è il rischio che nel processo di conversione si generino errori, e
memorizza il valore del campione del segnale di ingresso (sample) mantenendolo inalterato per un dato
intervallo di tempo (hold) che dipende dalla lieve scarica che avviene per la corrente di polarizzazione di
ingresso dell'A. O. e per le correnti di perdita dell'interruttore e del condensatore.
La scelta del
compromesso tra
tempo di carica il
possibile
e quello di
grande possibile
valore di C è un
l'esigenza di un
più piccolo
(campionamento)
scarica il più
(mantenimento).
4- ADC: convertitore analogico/digitale
2
Il
convertitore A/D ha il compito di trasformare il segnale analogico presente al suo ingresso (Vi) in un
segnale digitale ad n bit
N(10) = b020 + b12 + b222 + ... + bn-12n-1 = Vi / (k • VREF)
in cui VREF è la tensione di riferimento, k = 2-n la costante di proporzionalità e N(10) il numero decimale
da trasformare in binario.
Normalmente sono previsti almeno due segnali di controllo: SC (Start Conversion) in ingresso e EOC (End
of Conversion) in uscita.
I due segnali sono utilizzati per sincronizzare il funzionamento dell'ADC interfacciato ad un sistema di
elaborazione e per questo, in uscita dall'ADC, sono previsti dei latch tri-state ovvero uscite sia seriali che
parallele.
La conversione è una quantizzazione del segnale analogico, in quanto ogni campione del segnale analogico
viene trasformato in un solo valore corrispondente ad un livello e convertito nel codice binario.
Ogni convertitore ha un proprio range per la tensione analogica di ingresso che deve essere rispettato.
PROGRAMMA PORTA SERIALE:
Private Sub Form_Load()
With MSComm1
.CommPort = 1 'Imposta e restituisce il numero della porta di comunicazione
.Handshaking = 2 - comRTS 'Imposta e restituisce il protocollo di sincronia hardware
.RThreshold = 1 'Imposta e restituisce il numero di caratteri che dovranno essere ricevuti
.RTSEnable = True 'Determina se attivare la linea RTS (Request To Send )
.Settings = "9600,n,8,1" 'Imposta e restituisce i parametri di velocità di trasmissione, parità, bit di dati e
bit di stop
.SThreshold = 1
'Imposta e restituisce il numero minimo di caratteri consentito nel buffer di
trasmissione
.PortOpen = True
End With
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub
Private Sub MSComm1_OnComm()
Dim InBuff As String
Select Case MSComm1.CommEvent
' Si gestisce ogni evento o errore
' inserendo del codice opportuno
' dopo ciascun caso.
' Errori
Case comEventBreak ' Ricevuto segnale di interruzione.
Case comEventCDTO ' CD (RLSD) Timeout.
Case comEventCTSTO ' CTS Timeout.
Case comEventDSRTO ' DSR Timeout.
Case comEventFrame ' Errore di frame.
Case comEventOverrun ' Perdita di dati.
3
Case comEventRxOver ' Overflow buffer di ricezione.
Case comEventRxParity ' Errore di parità.
Case comEventTxFull ' Buffer di trasmissione pieno.
Case comEventDCB ' Errore imprevisto durante il recupero di DCB.
' Eventi
Case comEvCD ' Modifica la linea CD.
Case comEvCTS ' Modifica la linea CTS.
Case comEvDSR ' Modifica la linea DSR.
Case comEvRing ' Modifica l'indicatore del segnale telefonico.
Case comEvReceive ' Ricevuti RThreshold caratteri.
InBuff = MSComm1.Input
Call HandleInput(InBuff)
Case comEvSend ' Ci sono un numero SThreshold di caratteri nel buffer di trasmissione
Case comEvEOF ' E' stato trovato un carattere di EOF nel flusso di input
End Select
End Sub
Sub HandleInput(InBuff As String)
' Questa subroutine si occupa di processare
' i dati in arrivo dalla seriale; in questo
' semplice caso si tratta soltanto di visualizzare
' a video il testo in arrivo
Text1.Text = Text1.Text & "--" & InBuff
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
carattere = Chr$(KeyAscii) 'Ricavo il carattere associato al codice ASCII
ascicarattere = KeyAscii
If ascicarattere = 13 Then
'Se ho premuto invio...
MSComm1.Output = Chr(13) & Chr(10)
'Vado a capo
End If
MSComm1.Output = carattere
'Altrimenti scrivo il carattere
End Sub
PROGRAMMA FTP(Parte FTP):
Option Explicit
Public ID As String
'Stringa che identifica il comando richiesto
Private Sub cmdConnect_Click()
Load login
‘Carico il form del login
login.Show vbModal 'Visualizzo il form login
Unload login
End Sub
Private Sub cmdDisconnect_Click()
Inet1.Execute "", "CLOSE" 'Chiude la connessione
End Sub
Private Sub cmdExit_Click()
Unload Me
End Sub
Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim POSINVIO As Integer
Dim RITORNO As String
If (ID = "DIR") And (State = icResponseCompleted) Then ‘Se la richiesta è stata completata e sono stati
ricevuti tutti i dati e siamo nella directory corrente
RITORNO = Inet1.GetChunk(1024, icString)
‘Recupero i dati dell’evento StateChanged
POSINVIO = InStr(1, RITORNO, vbNewLine)
‘Restituisce le occorrenze di vbNewLine in RITORNO
While POSINVIO > 0
If Left(RITORNO, POSINVIO - 1) <> "" Then ListOut.AddItem Left(RITORNO, POSINVIO - 1)
RITORNO = Mid(RITORNO, POSINVIO + 2)
4
POSINVIO = InStr(1, RITORNO, vbNewLine)
Wend
ID = ""
End If
End Sub
Private Sub Timer1_Timer()
ID = "DIR"
Inet1.Execute "", "DIR"
‘Vado alla directory corrente
Timer1.Enabled = False
ListOut.Clear
‘Aggiorno la lista dei files remoti
ListOut.AddItem "./"
ListOut.AddItem "../"
End Sub
Private Sub cmdDownload_Click()
On Error GoTo ERRORE ‘In caso di errore vai alla gestione degli errori
Inet1.Execute "", "GET " & ListOut.Text & " " & ListOut.Text
‘Preleva il file dall’host remoto
Exit Sub
‘Esco dalla sub
ERRORE:
MsgBox "ERRORE: " & Err.Description, vbCritical + vbOKOnly
‘Messaggio di errore
End Sub
Private Sub cmdUpload_Click()
On Error GoTo ERRORE ‘In caso di errore vai alla gestione degli errori
Inet1.Execute "", "PUT ./ftp.frm ftp.frm"
‘Carico un file sull’ host remoto
Timer1.Enabled = True
' Attende per effettuare il dir
Exit Sub
ERRORE:
MsgBox "ERRORE: " & Err.Description, vbCritical + vbOKOnly
‘Messaggio di errore
End Sub
Private Sub cmdChangeDir_Click()
On Error Resume Next
Inet1.Execute "", "CD " & ListOut.Text
‘Cambio la directory sull’host remoto
Timer1.Enabled = True ' Attende per effettuare il dir
End Sub
PROGRAMMA FTP(Parte Login):
Option Explicit
Private Sub CancelButton_Click()
Me.Hide
‘Nasconde il form di connessione
End Sub
Private Sub OKButton_Click()
Dim URLACCESSO As String
On Error GoTo ERRORE
‘In caso di errore vai alla gestione degli errori
URLACCESSO = "ftp://" & txtUserID.Text & ":" & txtPassword.Text & "@" & txtHost.Text ‘Compone
l’URL di accesso
Ftp.ID = "DIR"
‘Va alla directory corrente
Ftp.Inet1.Execute URLACCESSO
‘Si connette alla URL che è stato appena composto
Me.Hide
‘Nasconde il form
Exit Sub
ERRORE:
MsgBox "ERRORE: " & Err.Description, vbCritical + vbOKOnly
‘Visualizza messaggio di errore
End Sub
PROGRAMMA SUI GRAFICI:
Dim arrVis(0 To 1, 0 To 11)
5
Dim Record As Record ' Dichiara la variabile.
Private Sub Command1_Click()
CommDlg.InitDir = App.Path 'Imposta come directory,la directory in cui è salvato il programma
CommDlg.ShowOpen 'Apre la CommonDialog
If CommDlg.FileName = "" Then Exit Sub 'Se non ho selezionato nessun file...
For I = 0 To 11
arrVis(0, I) = "ora " & I
arrVis(1, I) = 0
Next I
Open CommDlg.FileName For Random As #1 Len = Len(Record) 'Apre il file che gli ho specificato
POS = 0
Do While Not EOF(1) 'Esegue fino alla fine del file
If POS > 11 Then Exit Do 'Se il contatore supera 11 esci dal ciclo
Get #1, POS + 1, Record 'Prendi il 1°record dal file
arrVis(0, POS) = Record.desc 'Inserisci nel vettore-grafico la descrizione dell'elemento
arrVis(1, POS) = Record.valore 'Inserisci nel vettore-grafico il valore dell'elemento
POS = POS + 1 'Incrementa il contatore
Loop
Close #1 'Chiude il file
MSChart1.ChartData = arrVis 'Crea il grafico
MSChart1.Title = "Grafico Temperature"
'Inserisce il titolo al grafico
MSChart1.ShowLegend = True
'Inserisce la legenda del grafico
End Sub
Private Sub Command2_Click()
Open CommDlg.FileName For Random As #1 Len = Len(Record)
nrec = LOF(1) / Len(Record) 'Calcola il numero dei record presenti nel file
Record.desc = Text1.Text 'Preleva la descrizione del record inserito
Record.valore = Val(Text2.Text) 'Preleva il valore del record inserito
Put #1, nrec + 1, Record 'Inserisce quanto ha prelevato nel file
Close (1) 'Chiude il file
End Sub
Private Sub Command3_Click()
CommDlg.InitDir = App.Path
'Imposta come directory,la directory in cui è salvato il programma
CommDlg.ShowSave 'Visualizza la finestra di dialogo Salva con nome della CommonDialog
Open CommDlg.FileName For Binary Access Write As #1 'Apre il file in scrittura
Close (1) 'Chiude il file
End Sub
6
7