Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

22
Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini

Transcript of Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

Page 1: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

Comunicazione serialeGestione ad eventi

a cura di Marco Zucchini

Page 2: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

L’Handshake

Page 3: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

• Handshaking

• Rthereshold

• CommEvent

• DTREnable

• RTSEnable

Le proprietà principali dell’oggetto Comm

Page 4: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

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

Page 5: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

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.

Page 6: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

Gestione dell’Input

Page 7: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

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

Page 8: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

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.

Page 9: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

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

Page 10: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

Proprietà CommEvent

• Contiene il codice associato al tipo di – evento di comunicazione – errore di comunicazione

generato.

Nota: proprietà non disponibile in fase di progettazione

Page 11: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

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

Page 12: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

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.

Page 13: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

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

Page 14: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

Gestione dei segnaliDSR/RTS

Page 15: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

Proprietà DTREnable

• Abilita o disabilita la linea DTR

EsempioMSComm1.DTREnable=True

oppureMSComm1.DTREnable=False

Osservazione: sulla porta ricevente genera un segnale DSR

Page 16: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

Generazione segnale DTR

• Si implementa nel seguente modo.

If (MSComm1.DTREnable=True) Then

MSComm1.DTREnable=False

Else

MSComm1.DTREnable=True

End If

Page 17: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

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

Page 18: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

Proprietà RTSEnable

• Abilita o disabilita la linea RTS

EsempioMSComm1.RTSEnable=True

oppureMSComm1.RTSEnable=False

Osservazione: sulla porta ricevente genera un segnale CTS

Page 19: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

Generazione segnale RTS

• Si implementa nel seguente modo.

If (MSComm1.RTSEnable=True) Then

MSComm1.RTSEnable=False

Else

MSComm1.RTSEnable=True

End If

Page 20: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

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

Page 21: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

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.

Page 22: Comunicazione seriale Gestione ad eventi a cura di Marco Zucchini.

Precondizione Azione Segnale Catturato

GSRunning

HS NO

HS RTS

Start GS

Satop GS

Port Open

Port Close

CTS DSR