C#串口编程

来源:百度知道 编辑:UC知道 时间:2024/05/15 04:03:24
.net2.0自带了serialPort控件。
A硬件设备发送{1380003520000200801012251}这串数据到B设备(无线发送的),然后B设备通过串口连接到计算机。serialPort控件有个事件DataReceived(每次从serialPort接收数据时引发),但是就这串数据却引发了三次这个事件,发送内容分别为:
1.{138000352
2.000020080
3.1012251}
也有时候引发四次,把数据分开发送。
这是为什么?我想在计算机直接接收完整的数据,该怎么实现?
没有人来啊~~?就没有什么好办法吗?
如果用ReadTo()方法的话,局限性就太大了。

DataReceived事件是与基础流的接收分开的,由系统提供此事件的触发,不能保证何时触发此事件,即系统不能恰当的每字节触发此事件,或者每到停止位触发此事件,只表示数据到来,已经读入serialPort控件的缓冲区。
你可以建立单独线程,使用控件的Read或ReadLine方法,一直读取串口缓冲区。

是啊,两边要定义好协议,还要包括异常和超时,串口通信肯定是要用多线程了,一个收,一个发,一个处理,加上两个缓冲池,哈哈,这样就万无一失了

数据是一点一点的发过来的啊,有个缓存器啊,最后在发送的那边加个符号。接受方收到这个符号表示数据读取完毕。否则就不停的读。