sytn.net
当前位置:首页 >> C#winForm开发,使用了sEriAlport类,使用一段时间,没有数据返回 >>

C#winForm开发,使用了sEriAlport类,使用一段时间,没有数据返回

你这种情况我以前也遇到过,根据实际情况有很多解决办法:1.你可以在接收事件函数的开始位置延迟一段时间,根据数据长度的不同可以适当改变延迟的时间.2.根据你接收的数据格式可以使用不同的read方法.readto()方法是直到读到相应的字符为止,readline()方法是读到一个新行,read()读取缓冲区的字节数.希望对你有帮助.不懂的话可以继续问.

不知道你说的性能不够是指哪方面的性能.1.如果是从设备数据发出,到程序SerialPort类的DataReceived收到时间觉得过长,那你这个系统需要的性能就太牛叉了,还是换其他方式吧,例如socket.2.如果是设备数据发出,程序也收到.但是如果是因为你在DataReceived事件里写了大量的处理逻辑导致在两次接收数据的时间间隔之内跟不上处理,那这个,我建议你建立一个接收数据队列.在DataReceived事件里只把接收到的数据存储在队列里.然后建一个处理数据的线程,每次只从队列里取第一条进行处理,处理完之后删除.而且要优化你的处理数据线程.不知道我说的是否够详细.

只说原理你的需求实际上是一个简单的生产者和消者费的关系,需要用到多线程,你可以按这个关键字去查一下 生产者 消费者 c#1、串口数据不能固定长度的,即使你下位机发出47字节,你收到数据时也可能会分成多个部分接收.2、serialport

可以给你方法,供你参考1.定义一个全局的 bool 变量2.当收到数据后,将其改为True3.发送数据前,将其改为False4.然后用AutoResetEvent.WaitOne(1000),看它的返回值,具体你可以参考MSDN5.可以需要另外开线程接收,发送!

1、不要反复的开关串口2、采用串口线程接收返回的数据3、串口对应的参数设置好

你可以设置断点 然后进行 调试

既然是串口通信,那电脑与什么设备进行通信哪,总不能电脑自己就通信了吧.电脑与另一个设备通信,而且那个设备要向电脑发送数据,电脑才能收到返回的数据.不能电脑自己就通信了,还能收到返回的数据了,这是见鬼了吧.

先用串口调试工具,看看能不能收到所有的,如果可以,那就是你自己程序中处理的问题,比如逻辑错误或者处理效率不够.

使用信号量同步

用串口调试助手测试下对方是否返回了正确数据.另外,最好用事件驱动来做,别用 Sleep.

相关文档
网站首页 | 网站地图
All rights reserved Powered by www.sytn.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com