马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

串口读取超时怎么办

  [复制链接]
查看11710 | 回复6 | 2014-7-28 17:08:12 | 显示全部楼层 |阅读模式
我用serialPort写了一个简单的串口调试程序,可以发送数据,但是每次一有数据回来就出现“读取超时”异常,下面是我写的代码
[AppleScript] 纯文本查看 复制代码
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毫秒,下面是截图, 图片.PNG 求高手指教
ibcadmin | 2014-7-28 18:17:32 | 显示全部楼层
[C#] 纯文本查看 复制代码
  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("通信超时");

  }
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
3233 | 2014-7-28 18:36:58 | 显示全部楼层
ibcadmin 发表于 2014-7-28 18:17
[mw_shl_code=csharp,true]  serialPort.ReadTimeout = 1000;     //等待1000ms  初始化

     

想问一下,为什么不能直接用 serialPort1.ReadLine()方法直接读取数据呢,我看过网上一些开源代码,他们也是类似这样读取数据的,为什么自己写的就不行呢?
ibcadmin | 2014-7-28 20:36:43 | 显示全部楼层
3233 发表于 2014-7-28 10:36
想问一下,为什么不能直接用 serialPort1.ReadLine()方法直接读取数据呢,我看过网上一些开源代码,他们 ...

  这个东西我没写过, 当时是找的同事给你解答的..
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
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()方法是串口一值读取到有回车后才读取完成,否则一直读下去,就会出现超时,上面的程序读取没问题,但是要在另一发送端的数据之后按回车才可以接收;谢谢版主。
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则