我有一个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语句中抛出。有没有别的东西(同花顺等),我应该做的事,以确保数据传输?如果您有任何想法或建议,将不胜感激。我使用Microsoft Visual C#2008 Express Edition的。感谢。

有帮助吗?

解决方案

移除这些try / catch块。这应该给你一个机会,看看你,因为你设置的WriteTimeout值过低TimeoutException异常。在9600波特发送516个字节需要538毫秒。

您的其它设置麻烦的食谱了。摆脱ReceivedBytesThreshold和DiscardNull的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top