利用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.   

    数据缓存,分析,清理缓存。不会出现你的现象。
    瞅瞅我博客中的例子
    http://blog.csdn.net/wuyazhe/category/695097.aspx
      

  2.   

    很简单。
    你应该知道每次给你返回的是多少个字节,不要用readLine()方法读,因为这个方法要读到一个“0A”也就是换行符才会给你返回。我建议你用readByte()去读,因为知道返回固定的个数。所以写一个for循环一次读取一个字节。一边读一边还可以判断此次数据的完整性。省去很多麻烦。而且不知道你用的是SerialPort控件还是SerialPort类做的。最好不要用DataReceived事件驱动。可以自己写成什么时候读什么时候再去拿数据,以免阻塞式的容易出错。给分!!!
      

  3.   

    ReceivedBytesThreshold 属性设置收到几个字符时触发DataReceived
      

  4.   

    数据缓存,分析,清理缓存。不会出现你的现象。
    瞅瞅我博客中的例子
    http://blog.csdn.net/wuyazhe/category/695097.aspx
      

  5.   

    我用的是SerialPort类做的。读取用的是readByte读取数据。接收事件为DataReceived。
    1。如果我在DataReceived事件中延时20ms读取数据一点问题也没有。
    2。每次读取26个字节。分3次执行DataReceived事件。
      

  6.   

    ReceivedBytesThreshold 设置为11个字节。