C# 中串口通信 serialport1.DataReceived 函数无法触发或者出发延时等等问题解决方法

以前这个问题困扰我多天最后查资料一大堆,最后最终攻克了,看到非常多人做C#串口都遇到相同的问题,所以写一篇博文,以便学习交流。

一定要在com实例化的时候设置ReceivedBytesThreshold 属性就能够

SerialPort com = new SerialPort();

com.BaudRate = 19200;

com.PortName = "COM1";

com.DataBits = 8;

com.Parity = (Parity)0;

com.StopBits = 1;

com.WriteTimeout = 3000;

com.ReadTimeout = 3000;

com.ReceivedBytesThreshold = 1;  //必须一定要加上这句话。意思是接收缓冲区其中假设有一个字节的话就出发接收函数。假设不加上这句话,那就有时候触发接收有时候都发了好多次了也没有触发接收,有时候延时现象等等,

com.DataReceived += new SerialDataReceivedEventHandler(com_DataReceived);

这个问题问了好多人都说的不正确。最后突然在网上一片博文中发现的准备发一篇博文呢。还没有写呢。今天正好写一个

接收方法

/// <summary>

/// 接受返回消息

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void com_DataReceived(object sender, SerialDataReceivedEventArgs e)

{

try

{

//接收数据

do

{

int count = com.BytesToRead;

if (count <= 0)

break;

g_RS232DataBuff = new byte[count];

com.Read(g_RS232DataBuff, 0, count);

g_i_DataBuffLen += count;

g_l_ReceivedCount += count;

//g_Data += Encoding.ASCII.GetString(g_RS232DataBuff);

foreach (byte b in g_RS232DataBuff)

{

g_s_Data += Convert.ToChar(b);

//g_Data += Encoding.Unicode.GetString(g_RS232DataBuff);

//queue.Enqueue(g_RS232DataBuff);

}

} while (com.BytesToRead > 0);

//处理接收后的命令

TranslateCommand2();

}

catch (Exception ex)

{

LogClass.WriteFile("error:接收返回消息异常。详细原因:" + ex.Message);

}

}

时间: 2024-11-08 21:08:04

C# 中串口通信 serialport1.DataReceived 函数无法触发或者出发延时等等问题解决方法的相关文章

VB中多个Winsock连续发送出现接收不到的异常问题解决方法

VB里面用WINSOCK进行一对多连接的TCP连接时,经常需要群发消息给所有已连接的客户端.代码类似如下: Option Explicit Dim bytMsg() As Byte Private Sub Command1_Click() For i = 0 To WSock.Count - 1 WSock(i).SendData bytMsg Next i End Sub 运行上面的代码发现,有时只有最后一个WINSOCK的客户端收到了消息,其他都没有收到. PS:郁闷了好久,意外的发现当点击

SPCOMM控件在Delphi串口通信中的应用

SPCOMM控件在Delphi串口通信中的应用 2010-07-08 22:20:31|  分类: 个人日记 |举报 |字号 订阅 2009-03-01 05:35 摘要:利用Delphi开发工业控制系统软件成为越来越多的开发人员的选择,而串口通信是这个过程中必须解决的问题之一.本文在对几种常用串口通信方法分析比较的基础上,着重讨论了Delphi开发环境下利用Spcomm控件实现PC机与单片机之间串口通信的方法,研究了Spcomm串口通信的关键技术问题,并通过一个实例给出了Spcomm控件在De

Linux与Windows串口通信

串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛.现在国际上不断有串口新技术及新规格推出,结合社会各方面需要,串口通信发展的空间庞大.串口通讯技术因其自身的优势和特性,及计算机技术的广泛应用深入到生活和生产的各个领域,世界上数以亿计的通讯设备都以串口通讯的方式.在进行着数据的传输.在一个应用系统中,同时使用Windows和Linux操作系统,合理地分配资源,各取所长,是实现系统高性能的有效途径.为了使两个不同操作系统能协同工作,实现资源和数据共享,需要在两者

C#中串口与Modem的通信

C#中串口与Modem的通信 2007-08-20 09:52643人阅读评论(8)收藏举报 最近一段时间,试验了串口的数据传输.在C#中,其实有一个很好的类SerialPort使串口间的通信变得简单而且好控制. 一.下面给出SerialPort的基本属性: serialPort1.PortName = "COM1";      //打开指定串口的端口,也可以是COM2.             serialPort1.BaudRate = 9600;          //波特率,这

telosb中的Oscilloscope解析-串口通信

Oscilloscope的这个例子包括了PC与串口的接发送消息,很值得研究一番. 大体的思想是传感器节点采集数据,每采集十个数据发送一个数据包给另外一个Base节点,然后Base节点把数据转发给PC端.PC端有一个java程序收集数据并且显示.所以运行这个例子要两个节点,一个烧录Oscilloscope,一个烧录Base节点,还需要一台PC,连接Base节点,运行java程序.但是在运行java程序之前要启动SerialForward工具,这样PC和Base节点才能通信.具体命令不详细描述. 在

在VB中利用API进行串口通信

本文转自http://blog.csdn.net/lyserver/article/details/4153335 '* ******************************************************* *'*    程序名称:basComm.bas'*    程序功能:在VB中利用API进行串口通信'*    作者:lyserver'*    联系方式:http://blog.csdn.net/lyserver'* ************************

串口通信(基础)

参考文章:http://www.cnblogs.com/aierong/archive/2009/08/21/1551589.html http://www.cnblogs.com/procoder/archive/2009/04/07/1430871.html http://blog.csdn.net/cy757/article/details/4474930 SerialPort Class Windows 7 虚拟串口 VSPD 6 最近总结了串口(COM)读写操作的三种方式:第1种方式是

C#串口通信学习笔记

因为参加一个小项目,需要对继电器进行串口控制,所以这两天学习了基本的串口编程.同事那边有JAVA的串口通信包,不过是从网上下载的,比较零乱,难以准确掌握串口通信的流程和内含.因此,个人通过学习网上大牛的方法,利用C#实现了基本的串口通信编程.下面对学习成果进行总结归纳,希望对大家有所帮助. 一.串口通信简介 串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件.一般完成这种功能的电路,我们称为串行接口

(转)用C#一步步写串口通信

最近在公司让用C#写一个串口调试的工具,要求向串口中输入16进制数据或字符串.因为我刚到公司,并且对C#也不是很熟悉,针对硬件编程更是从来没接触过,确实耗掉了一些时间.好在一切都可以慢慢来,通过网上查资料,几天工作下来,还是小有成就.下面我就将这次遇到的问题和解决方法奉献出来,目的是和同行交流,回馈网友们提供的帮助,也是为了自己对知识加深一下巩固.      说了一大通废话之后,我们来看具体的实现步骤. 公司要求实现以下几个功能:1):实现两台计算机之前的串口通信,以16进制形式和字符串两种形式