C#应用程序中不传输串行数据

时间:2010-05-17 19:01:11

标签: c# .net serial-port serial-communication

我有一个C#应用程序,其中有时不会传输串行(COM1)数据。以下是我的代码的简化片段(已删除对textBox写入的调用):

    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)
        {
           /* ... */
        }

奇怪的是,当端口配置为115.2Kbps时,相同的代码工作正常。但是,当以9600bps运行时,应该通过此代码传输的数据似乎无法传输。我通过监视远程设备上的接收标志来验证这一点。 try语句中不会抛出任何异常。还有其他东西(Flush等),我应该做些什么来确保数据传输?任何您可能有的想法或建议将不胜感激。我正在使用Microsoft Visual C#2008 Express Edition。感谢。

1 个答案:

答案 0 :(得分:4)

删除这些try / catch块。这应该让你有机会看到你得到的TimeoutException,因为你将WriteTimeout值设置得太低了。以9600波特率发送516个字节需要538毫秒。

您的其他设置也是麻烦的食谱。摆脱ReceivedBytesThreshold和DiscardNull。