3233 发表于 2014-7-28 17:08:12

串口读取超时怎么办

我用serialPort写了一个简单的串口调试程序,可以发送数据,但是每次一有数据回来就出现“读取超时”异常,下面是我写的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
      public Form1()
      {
            InitializeComponent();
      }

      private void Form1_Load(object sender, EventArgs e)
      {
            //加载窗体时对串口初始化
            serialPort1.PortName = "COM1";
            serialPort1.BaudRate = 9600;
            serialPort1.StopBits = System.IO.Ports.StopBits.One;
            serialPort1.Parity = System.IO.Ports.Parity.None;
            serialPort1.DataBits = 8;
            serialPort1.Open();

      }

      private void button1_Click(object sender, EventArgs e)
      {
            serialPort1.WriteLine( textBox1.Text);
      }

      private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
      {
            this.textBox2.Invoke(new MethodInvoker( delegate { textBox2.Text += serialPort1.ReadLine(); }));
      }
    }
}
我在属性中设置了serialPort的读取超时为500毫秒,下面是截图,求高手指教

ibcadmin 发表于 2014-7-28 18:17:32

serialPort.ReadTimeout = 1000;   //等待1000ms初始化

   

      //接收处理函数

      try

  {

    int nLen = serialPort.Read(outBuf, 0, serialPort. BytesToRead);  //如果接收区一直没数据,时间消耗在这,等1000ms后甩TimeoutException异常

    if(nLen > 0)

        {

           DealData(outBuf, nLen);   //进全局数据队列,然后分析队列里的合法数据包

    }

  }

  catch (TimeoutException ex)

  {

    Console.WriteLine("通信超时");

  }

3233 发表于 2014-7-28 18:36:58

ibcadmin 发表于 2014-7-28 18:17
serialPort.ReadTimeout = 1000;   //等待1000ms初始化

   


想问一下,为什么不能直接用 serialPort1.ReadLine()方法直接读取数据呢,我看过网上一些开源代码,他们也是类似这样读取数据的,为什么自己写的就不行呢?

ibcadmin 发表于 2014-7-28 20:36:43

3233 发表于 2014-7-28 10:36
想问一下,为什么不能直接用 serialPort1.ReadLine()方法直接读取数据呢,我看过网上一些开源代码,他们 ...

这个东西我没写过, 当时是找的同事给你解答的..

songyusb 发表于 2014-7-28 20:37:12

串口是什么...

惜鑫 发表于 2014-7-28 22:43:39

时间给长

3233 发表于 2014-7-29 17:26:34

ibcadmin 发表于 2014-7-28 20:36
这个东西我没写过, 当时是找的同事给你解答的..

找到问题所在了,ReadLine()方法是串口一值读取到有回车后才读取完成,否则一直读下去,就会出现超时,上面的程序读取没问题,但是要在另一发送端的数据之后按回车才可以接收;谢谢版主。
页: [1]
查看完整版本: 串口读取超时怎么办