|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2004
Città: Conegliano (Treviso)
Messaggi: 1009
|
[VB 6] Seriale
Ciao a tutti, devo realizzare un'applicazione in VB6 che mi riceva i dati provenienti da un PIC18F452 sulla seriale. Ho trovato qualche esempio, e sostanzialmente ho trovato due metodi:
1°Metodo Codice:
Public Sub LeggeCOM1()
Dim InString As Variant
Dim dato As String
' Recupera tutti i dati disponibili.
Form1.MSComm1.InputMode = comInputModeBinary
Form1.MSComm1.InputLen = 0
' Controlla la presenza di dati.
If Form1.MSComm1.InBufferCount Then
' Legge i dati.
n = Form1.MSComm1.InBufferCount
InString = Form1.MSComm1.Input
For i = 0 To n - 1
dato = InString(i)
Form1.List1.AddItem dato
Next i
End If
End Sub
Codice:
Dim RxBuffer$
Private Sub MSComm1_OnComm()
Dim Pos As Integer
Dim Rx$
Dim Pacchetto$
' Estraggo i dati arrivati
Rx$ = MSComm1.Input
If Len(Rx$) = 0 Then Exit Sub
' Accodo i dati arrivati al buffer
RxBuffer$ = RxBuffer$ & Rx$
' Mi assicuro di avere il buffer allineato ai pacchetti
If Left$(RxBuffer$, 1) <> "(" Then
' Scarto tutto ciò che sta prima del primo carattere di START
' Questo capita quando si ricevono dei caratteri dovuti a disturbi sulla
' linea seriale, tutt'altro che rari! es: "ÿs2ÿÿ(12.7"
' oppure quando ho aperto la seriale (ed iniziato a bufferizzare i dati)
' a metà di un pacchetto dati in ricezione. es: "2.76)(13.16)"
Pos = InStr(RxBuffer$, "(")
RxBuffer$ = Mid$(RxBuffer$, Pos)
If Len(RxBuffer$) = 0 Then
' se il buffer è vuoto, tanto vale uscire
Exit Sub
End If
End If
' A questo punto controllo se sono arrivati dei pacchetti
' completi, li estraggo (tutti) e li elaboro
Do
Pos = InStr(RxBuffer$, ")")
If Pos = 0 Then Exit Do ' nessun'altro pacchetto completo, esco dal loop
' Estraggo il pacchetto, togliendo i caratteri di START e di STOP
Pacchetto$ = Mid$(RxBuffer$, 2, Pos - 2)
' Elimino il pacchetto dal buffer
RxBuffer$ = Mid$(RxBuffer$, Pos + 1)
' a questo punto se il buffer conteneva "(12.76)(13.16)",
' Pacchetto$="12.76" e RxBuffer$="(13,16)"
' Controllo se ci sono altri caratteri di START nel pacchetto.
' Infatti potrebbe capitare che un disturbo simuli un carattere
' di START ritrovando nel buffer qualcosa del tipo "(ÿ(12.75)"
' oppure un disturbo potrebbe aver eliminato un carattere di STOP,
' e quindi ritrovarci quancosa del tipo "(12.75ÿ(13.16) dove la "ÿ"
' sarebbe dovuta essere un ")" (in questo caso il primo pacchetto è perso)
Pos = InStr(Pacchetto$, "(")
If Pos Then
' esempio pacchetto contiene "12.75ÿ(13.16"
Pacchetto$ = Mid$(Pacchetto$, Pos + 1)
' ora Pacchetto$="13.16"
End If
' Il lavoro dello strato ISO/OSI di linea è compiuto,
' passo il pacchetto ricevuto al prossimo strato, che si preoccuperà di
' interpretare il significato dei dati ricevuti
Call ElaboraPacchetto(Pacchetto$)
Loop
End Sub
__________________
Non ho paura di nulla, non temo nessuno. Avete ragione, certo, non so ancora chi saranno i miei nemici. Ma so molto bene chi sono io!!! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2004
Città: Conegliano (Treviso)
Messaggi: 1009
|
up
__________________
Non ho paura di nulla, non temo nessuno. Avete ragione, certo, non so ancora chi saranno i miei nemici. Ma so molto bene chi sono io!!! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2004
Città: Conegliano (Treviso)
Messaggi: 1009
|
uppete!
__________________
Non ho paura di nulla, non temo nessuno. Avete ragione, certo, non so ancora chi saranno i miei nemici. Ma so molto bene chi sono io!!! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:07.



















