利用SerialPort类与串口通讯出现两种情况:
1.接收到的数据仍旧是上次发送的数据。例如:第一次发送:FE2010-11-13 16:02:23EF 接收为:FE2010-11-13 16:02:23EF(第一次正确)。当下次发送为:FE2010-11-13 16:02:24EF 接收仍旧为FE2010-11-13 16:02:23EF。此处是利用Timer每秒发送一次数据。接收时用DataReceived事件。
2.DataReceived事件如果接收字节超过8个,则响应8的倍数次。例如:16个字节,DataReceived事件响应2次。如何解决接收数据不全的问题。
1.接收到的数据仍旧是上次发送的数据。例如:第一次发送:FE2010-11-13 16:02:23EF 接收为:FE2010-11-13 16:02:23EF(第一次正确)。当下次发送为:FE2010-11-13 16:02:24EF 接收仍旧为FE2010-11-13 16:02:23EF。此处是利用Timer每秒发送一次数据。接收时用DataReceived事件。
2.DataReceived事件如果接收字节超过8个,则响应8的倍数次。例如:16个字节,DataReceived事件响应2次。如何解决接收数据不全的问题。
瞅瞅我博客中的例子
http://blog.csdn.net/wuyazhe/category/695097.aspx
你应该知道每次给你返回的是多少个字节,不要用readLine()方法读,因为这个方法要读到一个“0A”也就是换行符才会给你返回。我建议你用readByte()去读,因为知道返回固定的个数。所以写一个for循环一次读取一个字节。一边读一边还可以判断此次数据的完整性。省去很多麻烦。而且不知道你用的是SerialPort控件还是SerialPort类做的。最好不要用DataReceived事件驱动。可以自己写成什么时候读什么时候再去拿数据,以免阻塞式的容易出错。给分!!!
瞅瞅我博客中的例子
http://blog.csdn.net/wuyazhe/category/695097.aspx
1。如果我在DataReceived事件中延时20ms读取数据一点问题也没有。
2。每次读取26个字节。分3次执行DataReceived事件。