serialport类的问题(延迟问题)

希鱼 2011-02-12 02:00:05
我目前做一个采集程序,一天大概有10000多个报文过来,开始 serialport缓存我用默认的,发现丢包,我就设置成了1MB 现在发现 发送端都发送到流水号1000多了,我这边显示还是700多的 好像有300份堆积了,延迟非常严重,请问大家有遇到过吗?万分感谢!!!跪求答案
...全文
390 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangji666666 2011-02-14
  • 打赏
  • 举报
回复
看来要用多线程来解决这个延迟问题,内容的解析和后续操作用另外一个线程来做,这样就不会挤压了
兔子-顾问 2011-02-14
  • 打赏
  • 举报
回复
设置1个字节就触发一次。
睡神在睡觉 2011-02-14
  • 打赏
  • 举报
回复
DataReceived事件中处理的问题,每次处理事件过多而导致你的堵塞,每次read的字节数小些,一旦有数据立马触发,将数据保存到临时缓冲区,临时缓冲区可以设置的大一些,譬如2M,3M这样,看你自己的需求来定,至于数据解析,用另一个线程来操作,这样就不会乱了。各司其职。
walkghost 2011-02-14
  • 打赏
  • 举报
回复
建议逻辑如此处理:
设置触发datareceived事件的缓存中的可用字节数为1,
收到数据后立即将数据放入待处理数据的队列,datareceived事件的处理函数到此结束。
另外起一个线程,专门检测待处理数据队列中有无需要处理的数据,有责处理之,否则,循环等待,直到收到推出指令才退出循环,结束此线程。

这样下来,你的串口缓存中的数据就不会挤压了。
焱rock 2011-02-14
  • 打赏
  • 举报
回复
使用dataReceived事件就可以,这是只要缓冲区有数就接收,不会出现积压的问题。
如:
int bytesToRead ;
private byte[] rs232ReceiveByte = new byte[4092];//接收缓冲区定义,这个你可以根据设大一点
this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
bytesToRead = serialPort1.BytesToRead;//查看缓冲区中有多少数据需要读取
serialPort1.Read(rs232ReceiveByte, 0, bytesToRead);
//...这后面写你要做的相关操作
}
希鱼 2011-02-12
  • 打赏
  • 举报
回复
B端大概过了十几分钟 内存使用就40多MB了 搞的疯掉了都
希鱼 2011-02-12
  • 打赏
  • 举报
回复
而且我是循环的读取的,循环的把数据都读取过来的,我是做的AB两端,A端不连公网,处理完毕发到B端,B端再处理发送到公网,现在A端没问题,就是B端,总是积压,延迟太厉害了
希鱼 2011-02-12
  • 打赏
  • 举报
回复
我就是用的事件方式,现在积压很严重,如果 缓存不设置大的话,就丢包了,设置大了,发现积压。。不知道我读取是用ReadExisting
_三皮_ 2011-02-12
  • 打赏
  • 举报
回复
串口缓存是个队列,下位机不停地发送,上位机要不停地读取(你可以每次都把全部内容读取出来,读取内容的系统会自动清除),缓存才不会溢出。如果来不及处理,可以先保存起来或者发送给其它机器处理。
积压是你读取太慢的缘故。现在串口的波特率相对于上位机的处理速度,是很低的。你可以专门建立一个线程读取数据。
wuyq11 2011-02-12
  • 打赏
  • 举报
回复
serialport.datarecieved事件处理
每次把byteToRead设的很小,缓冲池中有了数据就立即触发
希鱼 2011-02-12
  • 打赏
  • 举报
回复
跪求答案啊,希望大侠们救命!!
希鱼 2011-02-12
  • 打赏
  • 举报
回复
顶一下,串口采集就这么偏门么。。。都没人用吗?本人用的是C#语言,用的serialport类

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧