串口通信中接收数据时延迟处理与缓存处理的解决方案(C#)_第1页
串口通信中接收数据时延迟处理与缓存处理的解决方案(C#)_第2页
串口通信中接收数据时延迟处理与缓存处理的解决方案(C#)_第3页
串口通信中接收数据时延迟处理与缓存处理的解决方案(C#)_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、7串口通信中接收数据时延迟处理与缓存处理的解决方案(C#)利用串口进行通信,当发送方(A)将数据写入串口后,通过无线或有线方式将数据传送给接收方(B),B通过调用串口读方法comm.read(参数)即可将数据读出。原理十分简单,但最近在利用串口处理SM-42无线传输时,数据总是一段一段的传到B,并不能在comm_DataReceived方法中单纯使用read方法将数据接收完全。我知道用缓存机制,但由于经验少(正在实习),到网上找了找大牛们的方法,并结合自己的理解,发现有两种方法可以处理。方法一:comm_DataReceived(Comm控件的数据接收方法,当有数据来临时会触发)会创建一个线程

2、(悲哀,因为之前不知道它另辟线程,所以自己编写了一个线程处理函数),因此当串口在等待数据时,不影响主窗体或主线程的操作。所以当数据到来时,可以通过Thread.Sleep(IOO)让接收函数休息100毫秒,这100毫秒做什么用呢?就是让所有的数据都到达B时再读取,这样就逃避了分批到达的问题。很明显,这是在糊弄。因为万一100毫秒都不够呢?所以,方法二更合适。田日代码privatevoidcomm_DataReceived(objectsender,EventArgse)Thread.Sleep(100);/等待100毫秒intnReviceBytesNum=comm.BytesToRead;/

3、收到的字节数。byteReadBuf=newbytenReviceBytesNum;/定义接收字节数组comm.Read(ReadBuf,0,nReviceBytesNum);/接收数据方法二:使用缓存机制完成。首先通过定义一个成员变量Listvbytebuffer=newListvbyte(4096);用来存放所有的数据,在接收函数里,通过buffer.AddRange()方法不断地将接收到的数据加入到buffer中,并同时对buffer中的数据进行检验,如果达到一定的长度并且校验结果正确(校验方法在发送方和接收方一致),再进行处理。具体代码如下代码privateListbuffer=new

4、List(4096);privatevoidsp_DataReceived(objectsender,EventArgse)/sp是串口控件intn=sp.BytesToRead;bytebuf=newbyten;sp.Read(buf,0,n);/1.缓存数据buffer.AddRange(buf);/2.完整性判断while(buffer.Count=4)/至少包含帧头(2字节)、长度(1字节)、校验位(1字节);根据设计不同而不同/2.1查找数据头if(buffer0=0 x01)/传输数据有帧头,用于判断intlen=buffer2;if(buffer.Countlen+4)/数据区尚

5、未接收完整break;/得到完整的数据,复制到ReceiveBytes中进行校验buffer.CopyTo(0,ReceiveBytes,0,len+4);bytejiaoyan;/开始校验jiaoyan=this.JY(ReceiveBytes);if(jiaoyan!=ReceiveByteslen+3)/校验失败,最后一个字节是校验位buffer.RemoveRange(0,len+4);MessageBox.Show(数据包不正确!);continue;buffer.RemoveRange(0,len+4);/执行其他代码,对数据进行处理。else/帧头不正确时,记得清除buffer.RemoveAt(0);在方法二中,有一句“执行其他代码,对数据进行处理”,如果这些代码涉及到主线程的控件比如Label,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论