串口读取超时怎么办
我用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毫秒,下面是截图,求高手指教
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("通信超时");
} ibcadmin 发表于 2014-7-28 18:17
serialPort.ReadTimeout = 1000; //等待1000ms初始化
想问一下,为什么不能直接用 serialPort1.ReadLine()方法直接读取数据呢,我看过网上一些开源代码,他们也是类似这样读取数据的,为什么自己写的就不行呢? 3233 发表于 2014-7-28 10:36
想问一下,为什么不能直接用 serialPort1.ReadLine()方法直接读取数据呢,我看过网上一些开源代码,他们 ...
这个东西我没写过, 当时是找的同事给你解答的.. 串口是什么... 时间给长 ibcadmin 发表于 2014-7-28 20:36
这个东西我没写过, 当时是找的同事给你解答的..
找到问题所在了,ReadLine()方法是串口一值读取到有回车后才读取完成,否则一直读下去,就会出现超时,上面的程序读取没问题,但是要在另一发送端的数据之后按回车才可以接收;谢谢版主。
页:
[1]