在VB调用MScomm控件中,为什么当接收到数值为 0 的值不接收呢,
例如接收到十六进制 0a 20 10 00 后在下面的赋值中只收到前三位
Buffer = MSComm1.Input
即 Buffer 值为 0a 20 10或者接收到十六进制 0a 20 00 10 后在下面的赋值中只收不到数值为 0 的变量
Buffer = MSComm1.Input
即 Buffer 值为 0a 20 10从上面可以看出接收出错,请问有什么属性要设置才能正确接收呢

解决方案 »

  1.   

    MSComm1.RThreshold = 1 '若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件,如果设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。
    MSComm1.RTSEnable = True '确定是否使 Request To Send (RTS) 线有效。一般情况下,由计算机发送 Request To Send 信号到联接的调制解调器,以请示允许发送数据。
    '当 RTSEnable 设置为 True,端口打开时,Request To Send 线设置为高电平,端口关闭时,设置为低电平。
    'Request To Send 线用在 RTS/CTS 硬件握手。RTSEnable 属性允许手动检测 Request To Send 线以确定其状态。MSComm1.SThreshold = 1 '在 MSComm 控件设置 CommEvent 属性为 comEvSend 并产生 OnComm 事件之前,设置并返回传输缓冲区中允许的最小字符数。
    '若设置 Sthreshold 属性为 0(缺省值),数据传输事件不会产生 OnComm 事件。
    '若设置 Sthreshold 属性为 1,当传输缓冲区完全空时,MSComm 控件产生 OnComm 事件。
    '如果在传输缓冲区中的字符数小于 value,CommEvent 属性设置为 comEvSend,并产生 OnComm 事件。
    'comEvSend 事件仅当字符数与 Sthreshold 交叉时被激活一次。
    '例如,如果 Sthreshold 等于 5,仅当在输出队列中字符数从 5 降到 4 时,comEvSend 才发生。
    '如果在输出队列中从没有比 Sthreshold 多的字符,comEvSend 事件将绝不会发生。
      

  2.   

    我知道了,应该如下设置就行了
    MSComm1.NullDiscard = False
      

  3.   

    LZ:MSComm控件的属性NullDiscard其缺省值是设置为False的.
      

  4.   

    楼主是在调试串口通信吧?
    有没有使用过串口调试器调试先?建议先使用串口调试器调试通信,通信调通了,在写自己的程序。如果使用了串口调试器调试,且通信调通了,是自己写的程序不行,那么请参考:
    http://download.csdn.net/source/1262066