Domanda

Ho un'applicazione C # in cui sembra a volte non vengono trasmessi dati seriale (COM1). Di seguito è riportato un frammento semplificata del mio codice (chiamate verso le scritture TextBox sono stati rimossi):

    InitializeComponent()
    {
       // 
       // serialPort1
       // 
       this.serialPort1.BaudRate = 115200;
       this.serialPort1.DiscardNull = true;
       this.serialPort1.ReadTimeout = 500;
       this.serialPort1.ReceivedBytesThreshold = 2;
       this.serialPort1.WriteTimeout = 500;
       this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
    }

        if (radioButtonUart9600.Checked)
        {
           serialPort1.BaudRate = 9600;

           try
           {
              serialPort1.Open();
           }
           catch (SystemException ex)
           {
              /* ... */
           }
        }

        try
        {
           serialPort1.Write("D");
           serialPort1.Write(msg, 0, 512);
           serialPort1.Write("d");
           serialPort1.Write(pCsum, 0, 2);
        }
        catch (SystemException ex)
        {
           /* ... */
        }

Ciò che è strano è che questo stesso codice funziona bene quando la porta è configurata per 115.2Kbps. Tuttavia, quando si esegue a dati 9600bps che dovrebbero essere trasmessi da questo codice sembra non vengono trasmessi. Ho verificato questo monitorando la ricezione bandiera sul dispositivo remoto. Nessuna eccezione sono gettati all'interno del try. C'è qualcos'altro (a filo, ecc), che dovrei fare per assicurarsi che i dati vengono trasmessi? Ogni pensiero o suggerimenti che potete avere sarebbe apprezzato. Sto utilizzando Microsoft Visual C # 2008 Express Edition. Grazie.

È stato utile?

Soluzione

Elimina questa blocchi try / catch. Questo dovrebbe dare la possibilità di vedere la TimeoutException si ottiene perché si imposta il valore WriteTimeout troppo basso. Invio 516 byte a 9600 baud richiede 538 millisecondi.

I tuoi altre impostazioni sono ricette per problemi troppo. Sbarazzarsi di ReceivedBytesThreshold e DiscardNull.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top