Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    ricezione dati da rs232

    Ciao,
    Ho una bilancia che genera una stringa di caratteri (31) tre volte ogni secondo (il primo è sempre un $ e gli ultimi due sono caratteri <cr> e <lf> ).
    Ho provato a collegarmi con Hyper terminal e sono riuscito a ricevere la mia bella stringa (dopo molte prove ho dovuto fare la spunta su "codifica forzata dati in ricezione ASCII a 7 bit" altrimenti se mi disconnettevo nel riconnettermi generava strani caratteri piuttosto sballati).
    A questo punto ho iniziato a creare il mio(primo..) form in VB6 configurando il controllo oncomm(): riesco a leggere una stringa, ma al suo interno ci sono caratteri strani (come +-, elevazione a potenza..)e facendo molte prove non sono riuscito ad ottenere la bella stringa pulita che vedo con Hyper terminal.
    Spero di avervi dato dettagli sufficienti per capire dov'è il problema.
    Grazie.
    Di seguito il codice che ho usato:

    Private Sub Form_Load()
    MSComm1.CommPort = 1
    MSComm1.Settings = "4800,n,8,2"
    MSComm1.RThreshold = 31
    MSComm1.PortOpen = True
    End Sub

    e così ho configurato l'evento:

    Private Sub MSComm1_OnComm()
    Dim RX As String
    RX = MSComm1.Input
    Text5 = Mid(RX, 1, 31)
    End Sub
    Pix

  2. #2
    nella configurazione della porta ho settato i parametri esattamente come quelli che utilizzo con hyper terminal :
    baud rate 4800
    parità nessuna
    bit di dati 8
    bit di stop 2
    Pix

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Impostando MSComm1.RThreshold = 31 fai sì che l'evento OnComm si verifichi ogni 31 caratteri ricevuti, di conseguenza sarebbe inutille estrarre i primi 31 caratteri dalla stringa RX [Mid(RX, 1, 31)].
    Inoltre dovresti assicurarti che la stringa inizi e termini con i caratteri previsti, quindi ti consiglio di impostare RThreshold = 1 e di inziare ad accodare i caratteri che ricevi (uno alla volta) solo a partire dal "$" e fino a quando non ricevi CR + LF. A quel punto trasferisci la stringa da qualche altra parte e ricominci.
    Tieni anche presente che l'evento OnComm si verifica per diverse cause: accertati quindi che sia stato ativato per "dati ricevuti"; c'è una proprietà (o un parametro, non ricordo) che lo specifica.
    Ma la cosa più importante è che tu ti accerti che il dispositivo collegato invii dati a 4800,n,8,2. Non fidarti di Hyperterminal, consulta la documentazione della bilancia.

  4. #4

    Re: ricezione dati da rs232

    Originariamente inviato da bigpix
    Private Sub MSComm1_OnComm()
    Dim RX As String
    RX = MSComm1.Input
    text5=mid(RX,2,31)
    End Sub
    intanto devi scartare il dollaro, dopo controlla che ci siano realmente 31 caratteri, e che i parametri siano corretti... inoltre fai una prova con

    rx= str(mscomm1.input)

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

    Re: Re: ricezione dati da rs232

    Originariamente inviato da morocarlo
    .. inoltre fai una prova con

    rx= str(mscomm1.input)
    Perché mai?

  6. #6
    Ciao,
    sono riuscito a fare un passo avanti: ho provato a mettere come parametri della porta 4800,n,7,2 e la ricezione funziona correttamente (non immaginate quanto tempo ho perso convinto che fosse un problema successivo alla ricezione...)
    ...ed ora sono di nuovo in alto mare:
    se imposto:
    text5= RX

    nella finestra vedo dei numeri che si sovrascrivono velocemente (credo perchè non fà in tempo a visualizzare la stringa che già deve ricaricare il nuovo dato in arrivo)
    mentre se scrivo

    text5 = text5 & RX

    mi visualizza correttamente ogni stringa in arrivo (una ogni circa 300 ms) una sotto l'altra.

    Sto andando passo passo e vorrei inizialmente ottenere di visualizzare una sola stringa che si "aggiorna" continuamente, ma solo una!
    una volta ottenuta questa cosa andrò a dividere questa stringa per estrarre i dati che mi servono, ma dopo molti tentativi non sono riuscito ad ottenere una singola stringa!!
    per maggior chiarezza descrivo di seguito esattamente la composizione della stringa in arrivo dalla bilancia con il significato dei caratteri:

    1° = $
    dal 2° al 10° = peso netto con segno ed eventuale virgola decimale
    11° = spazio
    dal 12° al 20° = TARA con segno ed eventuale virgola decimale
    21° = spazio
    22°-23° = unità di misura
    24° = spazio
    dal 25° al 28° = caratteri di controllo ascii per definire condizioni varie della bilancia
    29° = CR
    30° = LF

    Grazie per i suggerimenti che mi avete dato
    Pix

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Originariamente inviato da bigpix
    sono riuscito a fare un passo avanti: ho provato a mettere come parametri della porta 4800,n,7,2 e la ricezione funziona correttamente (non immaginate quanto tempo ho perso convinto che fosse un problema successivo alla ricezione...)
    Avresti perso meno tempo se tu avessi consultato la documentazione della bilancia per conoscere *con certezza* i parametri di trasmissione, anziché andare per tentativi.

    Originariamente inviato da bigpix
    text5= RX

    nella finestra vedo dei numeri che si sovrascrivono velocemente (credo perchè non fà in tempo a visualizzare la stringa che già deve ricaricare il nuovo dato in arrivo)
    mentre se scrivo

    text5 = text5 & RX

    mi visualizza correttamente ogni stringa in arrivo (una ogni circa 300 ms) una sotto l'altra.
    Questo mi sembra normale. Ogni volta che esegui text5= RX la variabile RX si sostituisce interamente a quanto contenuto in text5, mentre se esegui text5 = text5 & RX la variabile RX si concatena al contenuto preesistente in text5.

    Originariamente inviato da bigpix
    Grazie per i suggerimenti che mi avete dato
    Ma che, mi sembra, non hai seguito. Io insisto nel consigliarti di ricevere un carattere alla volta (RThreshold=1). Se è un "$" vuol dire che è l'inizio di una nuova stringa, nel qual caso svuoti la variabile di ricezione e cominci a concatenare i caratteri che ricevi. Se è un CR vuol dire che la stringa è finita, nel qual caso verifichi che sia della giusta lunghezza e della giusta struttura e la visualizzi.

  8. #8
    @Grumpy : Considera che sulle istruzioni della bilancia c'è scritto molto bene che i bit di dati erano 7 , dopo alcune prove scopro che hyper terminal funziona SOLO se imposto i bit di dati a 8. A questo punto contento di essere riuscito a ricevere dalla bilancia mi sposto su vb per gestire questi dati....tu che impostazioni avresti messo al primo colpo per il parametro dei bit????
    il parametro RThreshold l'avevo già impostato a 1 ma onestamente non ho risolto molto.
    seguendo alcune indicazioni trovate in rete, ho cercato di creare un "buffer" nel quale controllo la posizione del carattere "$" e poi in base a questo divido la mia stringa, ma con il debug vedo che pos(rxbuffer,"$") è sempre a 0 mentre se immetto text5=text5 & rxbuffer vedo la mia stringa (con il $ al primo posto) : sto cercando di capire dov'è il problema.
    ...e dulcis in fundo....non so se si è capito ma direi di essere tutt'altro che esperto e sto cercando di fare una cosa che mi serve attingendo dove posso ( guide, e forum )
    Pix

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Originariamente inviato da bigpix
    @Grumpy : Considera che sulle istruzioni della bilancia c'è scritto molto bene che i bit di dati erano 7 , dopo alcune prove scopro che hyper terminal funziona SOLO se imposto i bit di dati a 8. A questo punto contento di essere riuscito a ricevere dalla bilancia mi sposto su vb per gestire questi dati....tu che impostazioni avresti messo al primo colpo per il parametro dei bit????
    Certamente 7

    Originariamente inviato da bigpix
    il parametro RThreshold l'avevo già impostato a 1 ma onestamente non ho risolto molto.
    seguendo alcune indicazioni trovate in rete, ho cercato di creare un "buffer" nel quale controllo la posizione del carattere "$" e poi in base a questo divido la mia stringa, ma con il debug vedo che pos(rxbuffer,"$") è sempre a 0 mentre se immetto text5=text5 & rxbuffer vedo la mia stringa (con il $ al primo posto)
    pos(rxbuffer,"$") ? Che funzione è "pos"?

    Ma nelle indicazioni che ti ho dato, c'è qualcosa che non ti è chiaro oppure le hai messe in pratica e non hai ottenuto il risultato atteso? Perché nel primo caso posso cercare di specificarle ancora più in dettaglio, nel secondo caso dovresti mostrare come le hai applicate e dire cosa avviene.

    Originariamente inviato da bigpix
    ...e dulcis in fundo....non so se si è capito ma direi di essere tutt'altro che esperto...
    Questo non è un problema, ma andando così un po' "a tentoni" sarà difficile arrivare alla soluzione.

  10. #10
    Ciao,
    l'ultima versione del codice che ho provato è questo:

    Private Sub MSComm1_OnComm()
    Dim Pos As Integer
    Dim RxBuffer As String
    Dim Rx As String
    Rx = MSComm1.Input
    RxBuffer = RxBuffer & Rx 'concateno i caratteri arrivati


    Pos = InStr(RxBuffer, "$")
    RxBuffer = Mid(RxBuffer, Pos+1,27) 'la stringa con i caratteri utili

    text5 = Mid(RxBuffer,1,8)' visualizzo il peso netto


    End Sub

    Riesco a visualizzare qualcosa se imposto RThreshold=31 (se lo imposto a 1 credo che continui a lavorare su una stringa troppo corta), ma ho sempre il problema che non visualizza i caratteri che mi aspetterei di trovare nella text5.
    Pix

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.