none
串口serialPort readbyte 延时问题! RRS feed

  • 问题

  • 我用VC#2010的 serialPort 控件编写串口接收程序

    使用 readbyte 方法。

    但是在接受数据的时候却发现接受上来的数据不是即时的。

    当我把串口设备关掉后,程序还在继续读取串口数据,一直要等到几秒钟后才停。

    我在想这是不是和接受的缓冲区有关?还是有别的原因?

    程序:

            private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                int buf,buf_hi, buf_low;
                buf = serialPort1.ReadByte();
                this.Invoke((EventHandler)(delegate
                {     
                    //接收十二位数据        
                    if (buf <= 16)
                    {
                        buf_hi = buf;
                        label1.Text = Convert.ToString(buf_hi);
                    }
                    else
                    {
                        buf_low = buf;
                        label2.Text = Convert.ToString(buf_low);
                    }
                    textBox1.AppendText(Convert.ToString(buf));
                }));

    • 已编辑 Xulao 2012年4月17日 10:44
    2012年4月17日 5:55

答案

  • 我已经解决了,是pc串口缓冲区的问题。

    在每次接受完数据之后进行一次清空接受缓存就好了。

    不过这样接收的数据不准,所以还是要用read方法。
    • 已建议为答案 亂馬客 2012年4月20日 4:37
    • 已标记为答案 Xulao 2012年5月1日 12:03
    • 已编辑 Xulao 2012年5月1日 12:08
    2012年4月19日 9:45

全部回复

  • 您好,

    PC跟設備之間有Buffer,所以應該是會有這種情況!


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已标记为答案 Xulao 2012年5月1日 12:02
    • 取消答案标记 Xulao 2012年5月1日 12:02
    2012年4月17日 11:15
  • 我已经解决了,是pc串口缓冲区的问题。

    在每次接受完数据之后进行一次清空接受缓存就好了。

    不过这样接收的数据不准,所以还是要用read方法。
    • 已建议为答案 亂馬客 2012年4月20日 4:37
    • 已标记为答案 Xulao 2012年5月1日 12:03
    • 已编辑 Xulao 2012年5月1日 12:08
    2012年4月19日 9:45