Visualizzazione dei risultati da 1 a 8 su 8

Visualizzazione discussione

  1. #5
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    12
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Che cosa stai usando per gestire i byte ricevuti dalla seriale? Controlli con un timer ogni tot? Ricevi degli eventi da un oggetto usato per gestire la porta seriale?
    Uso una SerialPort.
    Nella dll (per ora) c'è solo un'istanza a una serial port:
    codice:
    //Costruttore
            public TARGHAprotocoll()
            {
                //Costruttore
                PortaComunicazione = new SerialPort();
                PortaComunicazione.DataReceived += new SerialDataReceivedEventHandler(EventoRicezionePortaSeriale);
            }
            public SerialPort PortaComunicazione;
    Tutto il codice che decodifica il pacchetto è all'interno dell'evento SerialDataReceivedEventArgs.
    Non vengono richiamati metodi al suo interno. Ci sono dei for, Case switch e degli if che controllano tutti i byte in arrivo. Il codice è lungo da postare ma provo a riassumerlo
    codice:
    private void EventoRicezionePortaSeriale(object sender, SerialDataReceivedEventArgs e)
            {
                int numeroDiDatiRicevuti = PortaComunicazione.BytesToRead;    
                byte[] bufferRxPresenti = new byte[numeroDiDatiRicevuti];
                int numeroDatiDaLeggere = PortaComunicazione.Read(bufferRxPresenti, 0, numeroDiDatiRicevuti);                                                              
                if (numeroDatiDaLeggere == 0)                                                          
                    return;                                                                            
                for (int tempIndex = 0; tempIndex < numeroDiDatiRicevuti; tempIndex++)
    
    //Da qui partono tutta una serie di controlli che decodificano il messaggio
    
    
    //Ad un certo punto, quando viene decodificato il messaggio, genero un nuovo evento. 
    //Proprio l'evento che poi mi da l'errore descritto in questo post
    MessaggioTHARGAricevuto(this, new MessaggioTHARGAricevutoEventArgs());
    //E come vedi, l'evento viene generato prima che si chiuda la graffa 
    //che termina il SerialDataReceivedEventArgs
            }
    Come altra informazione posso dire che l'idea del dll mi è venuta perchè questo protocollo lo dovrò usare costantemente in diversi progetti. Invece di scriverlo o copiarlo ogni volta ho pensato di fare una dll fissa che contenesse tutto il necessario.
    Prima di questo facevo proprio il copia incolla di tutto il codice e facendo così funzionava.
    Intendo, avere l'istanza della seriale e tutti i metodi nel medesimo file (che però era un form).
    Effettivamente quando il codice doveva dichiarare un messaggio valido usavo un comando diverso:

    this.Invoke(new EventHandler(ScritturaSuDisplayOrigine));
    Ultima modifica di Arago; 28-03-2014 a 09:58

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.