|
|
|
![]() |
|
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: 05:04.