Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    15

    [vb6] gestione buffer seriale

    Salve a tutti,
    sono più un hardwarista che un softwarista e chiedo il vs aiuto.
    Il mio intendimento è quello di porre su un grafico cartesiano tre variabili acquisite dai adc del pic.
    Più precisamente un tracciacurve x valvole dove Ianodica in ordinata, Vanodica in ascissa in funzione di diverse tensioni di griglia.

    Qualcuno mi può dare qualche spunto e stralcio di codice per gestire i buffer dalla porta seriale?
    Sono 253 variabili testo (5 caratteri) a gruppi di 3 con virgola e punto e virgola usati come separatori.

    es: " 1023, 45, 945; 1021, 4, 45; ecc...."

    Vado un passo alla volta.
    Ho cominciato con la lettura del buffer ed ho il primo problema, apro il programma e invio i dati ma OnComm() non li rileva se chiudo il programma e lo riapro comincia a leggere il buffer e lo visualizza su txtRicezione.
    Un amico mi ha dato una mano e ho cominciato anche l'algoritmo di estrazione.

    codice:
    Private Sub Esci_Click()
    End
    End Sub
    
    Private Sub Form_Load()
    ' Apre la porta seriale
    MSComm1.CommPort = 1
    MSComm1.Settings = "9600,n,8,1"
    On Error Resume Next
    MSComm1.PortOpen = True
    If Err Then
    MsgBox "Impossibile aprire la porta" & MSComm1.CommPort & vbCrLf & Error$
    End If
    MSComm1.RThreshold = 1
    End Sub
    
    Private Sub MSComm1_OnComm()
        Dim Messaggio$
        Dim buffer As String
        Dim terne() As String
        Dim i As Integer
        Dim j As Integer
        Dim terna As String
        Dim valoriTerna() As String
        Dim valoreTerna As Integer
        
        Messaggio$ = MSComm1.Input
        If Len(Messaggio$) Then
          txtRicezione = txtRicezione.Text & Messaggio$
          buffer = txtRicezione
         'buffer = "1023, 45, 945; 1021, 4, 45;"
        
          terne = Split(buffer, ";")
            
            For i = 0 To UBound(terne)
                terna = terne(i)
                valoriTerna = Split(terna, ",")
                    For j = 0 To UBound(valoriTerna)
                        valoreTerna = CInt(Trim(valoriTerna(j)))
                        MsgBox "Terna " & cstr(i) & " - Valore " &cstr( j )& " : " & cstr(valoreTerna)
                    Next j
            Next i
    
    
        End If
    End Sub
    Grazie dell'aiuto
    Antonio

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758

    Re: [vb6] gestione buffer seriale

    Originariamente inviato da aduri
    Ho cominciato con la lettura del buffer ed ho il primo problema, apro il programma e invio i dati ma OnComm() non li rileva se chiudo il programma e lo riapro comincia a leggere il buffer e lo visualizza su txtRicezione.
    Non sono certo di aver interpretato bene questa frase, forse per mancanza di un po' di punteggiatura.
    A parte questo, da cosa desumi che l'evento OnComm non si attiva? Per esserne sicuro dovresti mettere un breakpoint su una linea e vedere se il programma ci passa. Secondo me si attiva, solo che, avendo impostato la proprietà Rthreshold = 1, si attiva per ogni singolo byte ricevuto e quindi è... "troppo presto" per tentare di splittare i dati ricevuti in terne.
    Penso che dovresti accumulare i dati che ricevi nella variabile buffer (a cosa serve Messaggio$ ?) fino a quando questa non raggiunge la lunghezza voluta e solo allora passarla ad un'altra routine che la elabora.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.