我使用Mscomm控件,现在要实现每个字符到达都能产生oncomm事件,经过试验,好像在接收超过40个字符的时候就会出现有多个字符到了才有oncomm事件,你们遇到这中类似的问题吗?请高手支招?

解决方案 »

  1.   

    不会。oncomm事件是否触发,与RThreshold属性的设置有关。如果此属性未改变,触发条件是一样的。
    当然,在oncomm事件中开始执行时,已经有多个字符到达是很正常的。
      

  2.   

    将RThreshold设置成1,Mscomm只要受到一个字节数据就会触发oncomm事件,但不是说没收到一个字节数据就会触发oncomm
      

  3.   

    谢谢大家 我将rthreshold设置为1了,能后有在另一台机器上用串口调试工具给我发送数据,我在每触发oncomm事件的时候就将inbuffercount的值显示在文本框中,但是发现并不是一直都连续的,这是我受到的数据 大家帮忙看一下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 52 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 121 121 122 123 124 125 ,有50  120  没有产生中断 能后是 52 121 有两次中断的inbuffercount值是一样的
      

  4.   

    对了,大家有谁做过Modbus程序的吗?能否单独交流交流,我的qq号是:122123933
      

  5.   

    1 如果传送长度不定,在事件触发后,用Sleep方法延时一会儿,等数据全部收到再开始接收。留有余地,保证最长的数据传输过程不丢数据。2 如果协议规定了固定的帧长度,事件中循环检查InBufferCount属性,直至达到规定的字节数;或者干脆将rthreshold设置为规定的长度。
      

  6.   

    3 规定更加合理的协议,例如
    (1) 先发送几个字节的帧头,其中包含数据长度。接收端将RThreshold属性设置为此长度。接收到后,将RThreshold属性改为后续数据长度,发回确认信息。
    (2) 发送端收到确认后,再发送数据。接收端在事件触发后接收数据。计算检查和,发回确认帧。如果数据检查和正确,将RThreshold属性设置为帧头长度,否则不变。
    (3) 发送端接收到确认后,如果检查和不正确,重发;否则发后续数据,或结束。注意发送端设置超时,以免发生错误时死机。
      

  7.   

    我要的是要知道两个相邻字符到达的时间间隔,所以我必须要确保每个字符达到能够产生oncomm事件