Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    20

    [VB6] Comunicazione seriale con oggetto MSComm

    Ciao a tutti.

    Ho un problema con le porte comm.
    Nel programma che sto realizzando un dispositivo comunica con il PC tramite una seriale.
    Premetto che non ho mai utilizzato una seriale in VB e quindi mi son messo a cercare e a smanettare senza sapere di preciso se quello che sto facendo ha senso...ma visto quello che succede penso di essere abbastanza vicino alla soluzione.

    Per comunicare con la porta ho utilizzato un oggetto MSComm (chiamato cmmP13).
    Quando apro il form inizializzo così:

    [CODE]
    cmmP13.CommPort = 10
    cmmP13.Settings = "256000, N, 8, 1"
    cmmP13.PortOpen = True
    cmmP13.RThreshold = 1
    [\CODE]


    Poi leggendo la guida ho scoperto che:
    " Note that setting the RThreshold or SThreshold properties to 0 disables trapping for the comEvReceive and comEvSend events, respectively."

    così ho aggiunto:
    [CODE]
    cmmP13.RThreshold = 1
    [\CODE]
    (Ammetto di non sapere cosa comporti metti 1... magari è questa la causa del problema)

    L'oggetto MSComm ha un solo evento e lo gestisco così:

    [CODE]
    Private Sub cmmP13_OnComm()
    Dim data As Variant

    data = cmmP13.Input
    Call My_function (data)

    End Sub
    [\CODE]

    Per testare il funzionamento del tutto ho installato un programma che crea una seriale virtuale.
    Ho provato a collegarmi con due istanze di unterminale a questa porta e sembra funzionare correttamente.
    Ora... se collego il terminale alla porta e faccio partire il mio programma, quando invio un carattere dal terminale l'evento OnComm viene generato.
    Il problema è che il valore di data è "" e non il carattere che invio io dal terminale.

    Sapete spiegarmi il perchè?

    Grazie mille in anticipo!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prova a velocità minori, parti da 9600 e aumenta la velocità finché funziona.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    La proprietà RThreshold indica ogni quanti caratteri ricevuti si deve verificare l'evento OnComm. E' anche opportuno, nell'evento OnComm, verificare il valore della proprietà CommEvent, la quale ci dice il motivo per cui si è verificato l'evento: quando vale comEvReceive significa che si è ricevuto qualcosa; questo perché in realta l'evento OnComm può verificarsi anche per altre cause.

    Definirei la variabile data come String anziché Variant.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    20
    Ok, risolto abbassando il baud rate. Come sempre mi salvi Oregon!
    Grazie anche a grumpy per la spiegazione sul funzionamento di RTreshold... incredibile ma per una volta mettendo un valore a caso avevo fatto la scelta giusta! Comunquedevo ricevere caratteri (devo passarla ad una dll C..intendo il tipo char del C), quindi ora uso una variabile di tipo byte e sembra funzionare tutto alla grande!

    Grazie mille ancora!

  5. #5
    Giusti i consigli di Oregon e Grumpy, solo per completezza ti scrivo questo:

    codice:
        Dim Rx$
        Rx$ = MSComm1.Input ' Leggo il contenuto del buffer di ricezione (e svuoto .Input)
        If Len(Rx$) Then ' Se ho ricevuto qualcosa lo scrivo nella TextBox
            Text1.Text = Text1.Text & Rx$ 
        End If
    Le spiegazioni dettagliate (ma non troppo, non ti preoccupare..) le trovi qui:

    http://www.progetti-hw-sw.it/RS-232_..._Basic_VB6.htm

    Ciao

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.