Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.
-
Upload
agapeto-carlini -
Category
Documents
-
view
220 -
download
1
Transcript of Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.
Comunicazione serialeGestione ad eventi
a cura di Marco Zucchini
L’Handshake
• Handshaking
• Rthereshold
• CommEvent
• DTREnable
• RTSEnable
Le proprietà principali dell’oggetto Comm
Proprietà Handshaking
• Imposta (e restituisce) il tipo di protocollo di sincronia hardware.
• Un protocollo di sincronia garantisce che i dati non vadano perduti per un overrun del buffer, che si verifica quando i dati arrivano alla porta troppo rapidamente perché la periferica di comunicazione riesca a spostarli nel buffer di ricezione
• EsempioMSComm1.Handshaking=2
Imposta il protocollo alla modalità RTS/CTS
Proprietà Handshaking
Costante Valore Descrizione
comNone 0 Default. Nessun handshaking.
comXOnXOff 1 Handshaking di tipo XOnXOff.
comRTS 2 Handshaking di tipo RTS/CTS
comRTSXOnXOff 4 Handshaking di tipo RTS/CTS + XOnXOff.
Gestione dell’Input
Proprietà RThereshold
• Imposta (e restituisce) il numero di caratteri che devono essere ricevuti nel buffer di input prima che l’oggetto MSComm :– generi un evento di tipo OnComm– la proprietà CommEvent venga impostata al
valore comEvReceive
Esempi
MSComm1.Rthereshold=1
• In questo caso l’evento OnComm viene generato ad ogni carattere ricevuto.
MSComm1.Rthereshold=0
• In questo caso viene impedita la generazione dell’evento OnComm.
EsempioPrivate Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.RThreshold = 1
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
If (MSComm1.CommEvent = 2) Then
‘ inserire codice per gestione evento
End If
End Sub
I_BUF
M
R
S
2
3
2 O_BUF
M
Processo Consumatore
Proprietà CommEvent
• Contiene il codice associato al tipo di – evento di comunicazione – errore di comunicazione
generato.
Nota: proprietà non disponibile in fase di progettazione
Eventi di comunicazione
Costante Valore CommEvent
Descrizione
comEvSend 1 Nel buffer di trasmissione ci sono meno caratteri di quanti impostati dalla proprietà Sthreshold
comEvReceive 2 Ricevuti tanti caratteri quanti impostati dalla proprietà Rthreshold. Questo evento è generato
continuamente fintanto che non viene completamente svuotato il buffer di input.
comEvCTS 3 Segnala un avvenuto cambiamento di stato della linea CTS
comEvDSR 4 Segnala un avvenuto cambiamento di stato della linea DSR
Eventi “condizione di errore di comunicazione”
Costante Valore
CommEvent
Descrizione
comEventOverrun 1006 Errore Overrun. Perdita del penultimo carattere.
Non è stato possibile leggere un carattere prima dell’arrivo del carattere successivo.
comEventRxover 1008 Overflow nel buffer di ricezione. Segnala che il buffer di ricezione è pieno.
comEventRxParity 1009 Errore di Parità individuato dal sispositivo hardware.
comEventTxFull 1010 Segnala che il buffer di trasmissione è pieno.
Private Sub MSComm2_OnComm()
Select Case MSComm2.CommEvent
Case 1 ‘ Signal Send Event
MSComm2.Output=“A”
Case 2 ‘ Signal Receive Event
MSComm2.InputLen = 0
txtDisplay2.Text = txtDisplay2.Text + MSComm2.Input
Case 3 ‘ Signal Clear To Send
txtDisplay2.Text = txtDisplay2.Text + "Signal detected on line CTS Clear to Send" + vbCrLf
Case 4 ‘ Signal Data Set Ready
txtDisplay2.Text = txtDisplay2.Text + "Signal detected on line DSR" + vbCrLf
Case Else ‘ All other Signal
txtDisplay2.Text = txtDisplay2.Text + "General Event Signal Detected on COM2 !!!" + vbCrLf
End Select
End Sub
Gestione dei segnaliDSR/RTS
Proprietà DTREnable
• Abilita o disabilita la linea DTR
EsempioMSComm1.DTREnable=True
oppureMSComm1.DTREnable=False
Osservazione: sulla porta ricevente genera un segnale DSR
Generazione segnale DTR
• Si implementa nel seguente modo.
If (MSComm1.DTREnable=True) Then
MSComm1.DTREnable=False
Else
MSComm1.DTREnable=True
End If
Private Sub MSComm2_OnComm()
Select Case MSComm2.CommEvent
Case 1 ‘ Signal Send Event
MSComm2.Output=“A”
Case 2 ‘ Signal Receive Event
MSComm2.InputLen = 0
txtDisplay2.Text = txtDisplay2.Text + MSComm2.Input
Case 3 ‘ Signal Clear To Send
txtDisplay2.Text = txtDisplay2.Text + "Signal detected on line CTS Clear to Send" + vbCrLf
Case 4 ‘ Signal Data Set Ready
txtDisplay2.Text = txtDisplay2.Text + "Signal detected on line DSR" + vbCrLf
Case Else ‘ All other Signal
txtDisplay2.Text = txtDisplay2.Text + "General Event Signal Detected on COM2 !!!" + vbCrLf
End Select
End Sub
Proprietà RTSEnable
• Abilita o disabilita la linea RTS
EsempioMSComm1.RTSEnable=True
oppureMSComm1.RTSEnable=False
Osservazione: sulla porta ricevente genera un segnale CTS
Generazione segnale RTS
• Si implementa nel seguente modo.
If (MSComm1.RTSEnable=True) Then
MSComm1.RTSEnable=False
Else
MSComm1.RTSEnable=True
End If
Private Sub MSComm2_OnComm()
Select Case MSComm2.CommEvent
Case 1 ‘ Signal Send Event
MSComm2.Output=“A”
Case 2 ‘ Signal Receive Event
MSComm2.InputLen = 0
txtDisplay2.Text = txtDisplay2.Text + MSComm2.Input
Case 3 ‘ Signal Clear To Send
txtDisplay2.Text = txtDisplay2.Text + "Signal detected on line CTS Clear to Send" + vbCrLf
Case 4 ‘ Signal Data Set Ready
txtDisplay2.Text = txtDisplay2.Text + "Signal detected on line DSR" + vbCrLf
Case Else ‘ All other Signal
txtDisplay2.Text = txtDisplay2.Text + "General Event Signal Detected on COM2 !!!" + vbCrLf
End Select
End Sub
Esercizio di verificaScrivere due applicazioni VB che dopo aver impostato gli stessi
valori dei parametri di comunicazione seriale (“9600,N,8,1”), consentano:
I applicazione (GeneraSegnali)• Gestione porta COM1
• L’impostazione protocollo
• L’apertura/chiusura porta
• L’invio segnali DSR e RTS
• La sua terminazione (END)
II applicazione (Monitor)• Gestione porta COM2
• L’impostazione protocollo
• L’apertura/chiusura porta
• La visualizzazione dei segnali catturati
• La sua terminazione (END)
Dopo aver avviato l’applicazione Monitor avviare GeneraSegnali ed effettuare le operazioni consentite da quest’ultima nella casistica più ampia possibile. Riportare nella tabella a seguito i segnali catturati e visualizzati di volta in volta da Monitor.
Precondizione Azione Segnale Catturato
GSRunning
HS NO
HS RTS
Start GS
Satop GS
Port Open
Port Close
CTS DSR