社区
C#
帖子详情
serialport类的问题(延迟问题)
希鱼
2011-02-12 02:00:05
我目前做一个采集程序,一天大概有10000多个报文过来,开始 serialport缓存我用默认的,发现丢包,我就设置成了1MB 现在发现 发送端都发送到流水号1000多了,我这边显示还是700多的 好像有300份堆积了,延迟非常严重,请问大家有遇到过吗?万分感谢!!!跪求答案
...全文
390
13
打赏
收藏
serialport类的问题(延迟问题)
我目前做一个采集程序,一天大概有10000多个报文过来,开始 serialport缓存我用默认的,发现丢包,我就设置成了1MB 现在发现 发送端都发送到流水号1000多了,我这边显示还是700多的 好像有300份堆积了,延迟非常严重,请问大家有遇到过吗?万分感谢!!!跪求答案
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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类
C#读写串口数据实现代码
C#中
Se
ria
l
Port
类
中DataReceived事件GUI实时处理方法 MSDN:从
Se
ria
l
Port
对象接收数据时,将在辅助线程上引发 DataReceived 事件。由于此事件在辅助线程而非主线程上引发,因此尝试修改主线程中的一些元素(如 UI 元素)时会引发线程异常。如果有必要修改主 Form 或 Control 中的元素,必须使用 Invoke 回发更改请求,这将在正确的线程上执行.进而要想将辅助线程中所读到的数据显示到主线程的Form控件上时,只有通过Invoke方法来
android串口调用,使用c开发的,可以设置串口超时
android串口调用,使用c开发的,可以设置串口超时。比谷歌的串口demo好(谷歌的IO堵塞模式),也可以使用堵塞时读取不超时。
C#上位机串口编程、Modbus编程
WinForm框架 是 Windows Form 的简称,是美国微软公司Microsoft开发基于 .NET Framework 平台的桌面运用程序框架,一般使用 C#语言 编写。WinForm框架可用于设计窗体和可视控件,采用面向对象语言C#,可快速创建绚丽漂亮的基于Windows的桌面应用程序、非常适合做上位机的界面! 串口(
Se
ria
l
Port
),也称串行通讯接口(通常指COM口), 串口通信是指将数据一个比特一个比特地逐位进行传输的通信模式。 C#串口通信是借助一个
Se
ria
l
Port
类
的对象来方便的对串口进行读写。 Modbus是一种串行通信协议,是施耐德电气发表工业标准协议。C# NModbus4库提供了ModbusMaster、ModbusSlave
类
来实现Modbus通讯相关的功能 本课程主要帮助学员熟练掌握C# WinForm框架上位机串口编程,Modbus协议编程,并且通过两个实战工具项目,为学习C# WinForm上位机编程 串口、Modbus编程打下坚固的基础!
嵌入式北斗定位便携终端的设计与实现
北斗卫星导航系统是我国自主研制,致力于向全球用户提供高质量的定位、导航和授时服务的卫星导航系统。相对于GPS双频信号,北斗使用的三频信号可以更好的消除高阶电离层
延迟
影响,提高了定位的可靠性和抗干扰能力。另外,北斗导航系统独创了短报文通信服务功能。本文研究了一种基于arm与linux的北斗定位便携终端,此终端以i.MX28 应用处理器为核心,采用5.7寸的电阻式触摸屏作人机交互设备,系统采用超大容量的铿离子聚合物电池供电,使用UM220-III N 双系统高性能 GNSS 模块来同时获取 BD2 B1 、GPS L1 两个频点的定位数据。在linux虚拟机上通过Qt编程,使用
Se
ria
l
Port
类
串口通信获取定位数据。通过matlab分析终端获取的北斗与GPS定位数据,可知在本地区北斗的定位精度与GPS相当。
small-scope-qt:用于小型 arduino 示波器的 GUI
小范围-qt 用于arduino 示波器的 GUI 这是一个 QtCreator 项目,包含用于arduino 屏蔽的软件。 该软件是在 Debian GNU/Linux 上编写和测试的。 要在 Debian 上编译,您必须安装libqt5
se
ria
l
port
5-dev包。 Qt 是可移植的,串行库也应该是可移植的,所以应该可以在其他平台上编译。 一些功能: 触发模式(上升、下降、切换) 自由运行模式(连续) 从软件中选择触发电平 从软件中选择触发
延迟
电压参考选择(内部、外部、内部 1.1V) 在两个位置和光标位置测量 某些功能仅在与一起使用时才可用。
C#
110,533
社区成员
642,574
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章