Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16
  1. #11
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    io farei una cosa del genere (con RThreshold = 1)
    codice:
    Private Sub MSComm1_OnComm()
        Dim RxBuffer As String
        Dim Rx As String
        
        Rx = MSComm1.Input
        If Rx = "$" Then        'inizio messagio: reset del buffer
            RxBuffer = Rx
        ElseIf Rx = vbCr Then   'fine messaggio: esame dei dati ricevuti
            EsaminaStringa RxBuffer
        Else                    'carattere del corpo del messaggio: concatenamento
            RxBuffer = RxBuffer & Rx
        End If
    End Sub
    
    Private Sub EsaminaStringa(sTxt As String)
        Dim sPesoNetto As String
        
        If Len(sTxt) <> 31 Then
            MsgBox "Stringa non valida"
            Exit Sub
        End If
        
        sPesoNetto = Mid(sTxt, 2, 9)
        Text5.Text = sPesoNetto
        'oppure se vuoi visualizzare tutte le pesate in una TextBox Multiline ...
        Text5.Text = Text5.Text & sPesoNetto & vbCrLf
        
        DoEvents    'diamo tempo alla Textbox di aggiornarsi!
    End Sub
    Naturalmente non ho la possibilità di provarlo. Vedi un po' se può andare.

  2. #12
    Ho provato con il codice che mi hai postato ma non vedo niente.
    Non visualizza neanche la msg box della stringa non valida, il che mi fa pensare che non entra nel ciclo "esaminastringa".
    Per verificare se c'era qualcosa in RxBuffer ho inserito un text5.text = text5.text & Rxbuffer e mi ha visualizzato le stringhe a cascata il che vuol dire che in Rxbuffer c'era qualcosaerchè non è partito il controllo di esaminastringa?

    Può influenzare il fatto che questa benedetta stringa mi arriva ogni 300 ms e mi crea problemi?
    Pix

  3. #13
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Può essere che nel momento in cui si verifica se è stato ricevuto un "$" in realtà si siano ricevuti più caratteri. Dipende da come è impostata la proprietà InputLen: è 1 ?
    O la imposti a 1, in modo che venga estratto un solo carattere dal buffer di ricezione, o la imposti a zero, in modo che vengano estratti tutti i caratteri presenti nel buffer, ma in questo caso controlli se il primo è "$" [ If Left(Rx, 1) = "$" ].
    Per fare verifiche su cosa viene ricevuto, non stare a mettere altre righe di codice: basta eseguire il programma in debug passo-passo (F8, F8, F8...)

    Ti consiglierei comunque di guardare sulla guida tutte le proprietà del controllo MSComm (non sono molte), perché sono interdipendenti.

  4. #14
    Ciao,
    uno dei problemi era sicuramente la proprietà inputLen che ho impostato a 1 e infatti il controllo esegue "esaminastringa".
    Grazie al tuo consiglio (F8..) ho capito perchè mi dava sempre l'errore di stringa errata (che ho deviato su una text box altrimenti ogni volta mi "inchiodava" l'esecuzione):
    Durante l'evento oncomm il valore di Rx viene trasferito correttamente a RxBuffer (rxBuffer = Rx), ma quando esce dalla sub il valore di RxBuffer viene resettato (ho controllato il successivio ciclo, posizionando il puntatore su RxBuffer prima che venga aggiornato con il nuovo valore di Rx, e il valore è "")
    Ho provato a mettere la dichiarazione della variabile Dim RxBuffer as String al di fuori della subroutine (prima di Private sub onComm() ) ma mi dà un errore in fase di esecuzione del programma.

    Credo che se riusciamo a risolvere questo problema siamo a "cavallo"

    Ho notato che se durante la fase di debug passo passo sposto il puntatore su Mscomm1.input poi lo sposto fuori, poi lo risposto su ecc. ogni volta nella tooltip mi visualizza il carattere seguente della stringa in ingresso (vuol dire che gli faccio eseguire una lettura forzata del buffer?)
    Pix

  5. #15
    BINGO!!!!!
    sono riuscito a farlo funzionare in questo modo:
    ho messo la dichiarazione della variabile al di fuori della sub, però mi dava un errore su "esaminastringa RxBuffer"
    allora ho provato a mettere tra parentesi l'argomento in questo modo: esaminastringa (RxBuffer)
    e non mi ha dato errori.
    Il problema era che andando a vedere il valore di RxBuffer mi dava un "Empty".
    Ho provato a spostare la dichiarazione del codice all'inizio del listato (sulla prima riga) e FUNZIONA!!!.
    Ora posso passare "tranquillamente" alla fase due, cioè la gestione dei dati da memorizzare in un database (cosa che in parte ho già fatto prendendo spunto dall'esempio dell'agenda telefonica che ho trovato sulla guida di vb su html.it), e credo che ci risentiremo ancora....
    Che dire, credo di dover fare doverosi ringraziamenti a Grumpy per l'aiuto che è stato prezioso e indispensabile. Grazie
    Pix

  6. #16
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Originariamente inviato da bigpix
    Durante l'evento oncomm il valore di Rx viene trasferito correttamente a RxBuffer (rxBuffer = Rx), ma quando esce dalla sub il valore di RxBuffer viene resettato
    Sì, ovviamente. Una variabile definita all'interno di una Sub è visibile sollo all'interno di essa ed termina la sua esistenza al termine della Sub (si dice che è "locale"). Mi scuso per non aver visto prima questo errore.
    Al contrario una variabile definita all'inizio del modulo o form è visibile e utilizzabile da tutte le Sub e Function comprese nel modulo o form. Se la definisci (giustamente) così, allora non c'è bisogno di passarla come parametro alla Sub EsaminaStringa, proprio perché la Variabile RxBuffer è già disponibile anche in questa Sub. Basta quindi scrivere
    codice:
    ....
    EsaminaStringa
    ....
    
    Private Sub EsaminaStringa()
        Dim sPesoNetto As String
        
        If Len(RxBuffer) <> 31 Then
    ....
    Ti faccio però presente che concetti come la visibilità e il ciclo di vita delle variabili sono veramente l' ABC della programmazione e sarebbe bene che tu li chiarissi leggendo le prime pagine di qualunque manuale, prima di andare avanti, altrimenti rischi di raggiungere i tuoi obiettivi in tempi più lunghi del necessario, e, soprattutto, di non comprendere come e perché li raggiungi.

    Originariamente inviato da bigpix
    Grazie
    Di niente, figurati. Ma segui il mio ultimo consiglio, non accontentarti di un programma che "funziona".

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.