我要使用COM口的条码扫描枪,读数据到,我是用Windows的超级终端可以读到数据,但是用我的程序就不行,是什么原因呀.下面是我得代码
Option ExplicitPrivate Sub Form_Load()
    MSComm1.CommPort = 1 '设置串口号
    MSComm1.Settings = "9600,n,8,1" '波特率9600bit/s,无校验,8位数据,1位停止位
    MSComm1.InputLen = 0 '读取接收缓冲区的所有字符
    MSComm1.PortOpen = True '打开串口
    MSComm1.SThreshold = 0 '不触发发送事件
    MSComm1.RThreshold = 1 '每一个字符到接收缓冲区都触发接收事件
    MSComm1.OutBufferCount = 0 '清除发送缓冲区数据
    MSComm1.InBufferCount = 0 '清除接收缓冲区数据
    MSComm1.InputMode = comInputModeText
    If Not MSComm1.PortOpen Then
        MSComm1.PortOpen = True
    End If
End SubPrivate Sub MSComm1_OnComm()
    Dim strData As String    Select Case MSComm1.CommEvent
        Case comEvReceive
            MsgBox "1"        Case comEvCTS
            MsgBox "2"
    End Select
End Sub请高手指教

解决方案 »

  1.   

    从你的代码倒是看不出有什么不对,你在CommEvent中接收一下串口数据看看有没有条码返回?
      

  2.   

    我的MSComm1.CommEvent都是=comEvCTS,而且用MSComm1.input也没有东西,应该是没有条码返回吧.
      

  3.   

    1 阅读器是否连接到 COM1
    2 是否用阅读器进行了扫描
    3 阅读器通讯线有无问题
    4 串口是否正常
      

  4.   

    这些都应该是没有问题的,因为我在windows的超级终端是可以读到数据的.
      

  5.   

    Private Sub Form_Load()
        MSComm1.CommPort = 1 '设置串口号
        MSComm1.Settings = "9600,n,8,1" '波特率9600bit/s,无校验,8位数据,1位停止位
        MSComm1.InputLen = 0 '读取接收缓冲区的所有字符
        MSComm1.PortOpen = True '打开串口   ======>>>>>>现在打开后面的设置就没用了,放到最后呀
        MSComm1.SThreshold = 0 '不触发发送事件
        MSComm1.RThreshold = 1 '每一个字符到接收缓冲区都触发接收事件  ===>>>主要是这个呀
        MSComm1.OutBufferCount = 0 '清除发送缓冲区数据
        MSComm1.InBufferCount = 0 '清除接收缓冲区数据
        MSComm1.InputMode = comInputModeText
        If Not MSComm1.PortOpen Then
            MSComm1.PortOpen = True
        End If
    End Sub
      

  6.   

    老大,还是不行呀.MSComm1.CommEvent每次都是comEvCTS
      

  7.   

    Private Sub MSComm1_OnComm()
        Dim strData As String    Select Case MSComm1.CommEvent
            Case comEvReceive
                MsgBox "1"        'Case comEvCTS
                'MsgBox "2"
        End Select
    End Sub
            'Case comEvCTS
                'MsgBox "2"
    把这两句删掉看能能不能接收 可能是一些硬件的握手问题
      

  8.   

    Handshake 常数常数 值 描述 
    comNone 0 无握手。 
    comXonXoff 1 XOn/Xoff 握手。 
    comRTS 2 Request-to-send/clear-to-send 握手。 
    comRTSXOnXOff 3 Request-to-send 和 clear-to-send 握手皆可。 
    OnComm 常数常数 值 描述 
    comEvSend 1 发送事件。 
    comEvReceive 2 接收事件。 
    comEvCTS 3 clear-to-send 线变化。 那就应该是硬件握手的问题了,看看上面
    都试一下每个Handshake 常数
      

  9.   

    我怎样试一下每个Handshake 常数,能说得清楚点吗,谢谢了。
      

  10.   

    byeshuang(努力不做菜鸟)  还在吗。
      

  11.   

    open之前加上MSComm1.Handshake =0 or 1 or 2 or 3
    属性好像是这样吧
      

  12.   

    写错了MSComm1.Handshaking =0 or 1 or 2 or 3Handshaking 属性
          设置并返回硬件握手协议。语法object.Handshaking [ = value ]Handshaking 属性的语法包括下列部分:部分 描述 
    object 对象表达式,其值是“应用于”列表中的对象。 
    value 整型表达式,说明握手约定,如“设置值”中所描述。 
    设置值value 设置值是:设置值 值 描述 
    comNone 0 (缺省)没有握手。 
    comXOnXOff 1 (XON/XOFF) 握手。 
    comRTS 2 RTS/CTS (Request To Send/Clear To Send) 握手。 
    comRTSXOnXOff 3 Request To Send 和 XON/XOFF 握手皆可。 
    说明Handshaking 是指内部通讯协议,通过该协议,数据从硬件端口传输到接收缓冲区。当一个数据字符到达串行端口,通讯设备就把它移到接收缓冲区以使程序可以读它。如果没有接受缓冲区,程序需要直接从硬件读取每一个字符,这很可能会造成数据丢失,因为字符到达的速度可以非常快。握手协议保证在缓冲区过载时数据不会丢失,缓冲区过载为数据到达端口太快而使通讯设备来不及将它移到接收缓冲区。数据类型Integer
      

  13.   

    装msdn了吗?下面有mscom的例子。自己看看吧,不难