Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Interrupt seriale

    Un saluto a tutto il forum,
    è da poco che ho iniziato a usare vb6 e ho parecchi problemi...
    Ho un problema di ricezione con la seriale, ho 2 routine :

    -La prima ha il compito di ricevere il dato mediante l'evento "MSComm1.CommEvent = comEvReceive" e caricarmi i dati provenienti dalla seriale in un'array.

    -La seconda che viene richiamata dopo la fine della prima ha il compito di elaborare e tradurre il dato ricevuto.

    Mi capita a volte che la seconda routine non ha ancora finito la sua elaborazione quando si riceve già un'altro dato che viene perso perchè non viene mandata in esecuzione la seconda procedura.

    Per oviare a questo problema avevo pensato di creare un buffer fifo quindi la prima routine ha il compito di caricare il dati nel buffer e la seconda di elaborarli in completa indipendenza cosi che se si ricevesse un dato mentre è in esecuzione la seconda routine si salterebbe alla prima fino alla fine della ricezione per poi tornare alla seconda.

    Avete qualche idea su come farmi uscire dalla seconda routine solo alla ricezione di un dato in seriale??

    Ho provato con "doevents" pensando che potesse funzionare ma non va...

    Grazie a tutti.
    Andrea.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Il controllo MsComm prevede già un buffer di input di dimensioni regolabili tramire la proprietà InBufferSize. La lettura dei dati ricevuti e parcheggiati in questo buffer avviene al raggiungimento della soglia specificata da RThreshold, con l'attivazione dell'evento OnComm. Se i messaggi ricevuti hanno tutti la stessa lunghezza può tornare utile la proprietà InputLen, altrimenti si può prelevare dal buffer un byte alla volta sino a riconoscere la fine del messaggio.
    Quello che hai pensato è giusto come principio, ma è già implementato dall'oggetto MsComm.

  3. #3
    Ciao Grumpy,
    i dati che io ricevo hanno tutti quanti la lunghezza fissa di 10 byte e io ho impostato la lunghezza del buffer a 10 cosi quando il buffer è completamente pieno scatta l'evento "comEvReceive".
    Quindi tu diresti di impostare la lunghezza del buffer ad esempio a 30 cosi da poter contenere 3 messaggi ma se io volessi leggere il messaggio dopo il primo come dovrei fare??
    dovrei fare un polling per verifiare se il buffer contiene un messaggio??
    Grazie.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Non è la lunghezza del buffer che devi impostare a 10, ma il valore di soglia (RThreshold) che fa scattare l'evento OnComm (non comEvReceive! comEvReceive è semplicemente una costante che indica il motivo per cui si è verificato l'evento OnComm). Il buffer lo puoi fare grande anche diversi KB per essere sicuro che non si riempia mai. In questo modo ogni 10 byte ricevuti scatterà l'evento OnComm; lì puoi chiamare un'altra funzione o fare quello che vuoi, nel frattempo, se arrivano altri dati dalla seriale, questi verranno accodati nel buffer e, ogni 10, scatterà di nuovo l'evento OnComm.

  5. #5
    Ah... mi rendo conto di non aver proprio capito di come funzionava, adesso farò delle prove e poi ti dirò..
    Per il momento grazie dell'info.
    A presto.

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.