Option ExplicitPrivate Sub Command1_Click()    If MSComm1.PortOpen = False Then
        MSComm1.PortOpen = True
    End If
    
    MSComm1.OutBufferCount = 0
    MSComm1.Output = "AT" & vbCr
    Do Until MSComm1.OutBufferCount = 0
        DoEvents
    Loop
    
End SubPrivate Sub Command2_Click()    If MSComm1.PortOpen = False Then
        MSComm1.PortOpen = True
    End If
    Dim strA As String
    strA = MSComm1.Input
    MsgBox strAEnd SubPrivate Sub Form_Load()    MSComm1.CommPort = 1                   '采用COM端口
    MSComm1.Settings = "9600,n,8,1"
    MSComm1.InputMode = comInputModeBinary      '采用二进制传输
    MSComm1.NullDiscard = False                 'NULL字符从端口传送到接受缓冲区
    MSComm1.DTREnable = False                   'DTR线无效
    MSComm1.EOFEnable = False                   '不寻找EOF符
    MSComm1.RTSEnable = False                   'RTS线无效
    MSComm1.InBufferCount = 0                   '清空接受缓冲区
    MSComm1.OutBufferCount = 0                  '清空传输缓冲区
    MSComm1.SThreshold = 1                      '如果传输缓冲区完全空时产生MSComm事件
    MSComm1.RThreshold = 0                      '不产生MSComm事件
    MSComm1.PortOpen = True                     '打开端口End Sub
问题在于程序不能读取串口接收缓冲区的数据。
这里使用标准AT指令,应该返回OK。但是一个字符也接收不了
大家帮我看看哪里错了,在超级终端和串口调试工具都是可以正常显示返回的信息啊
这个程序哪里错了????

解决方案 »

  1.   

    MSComm1.Output = "AT" & VBCRLF'这样试一下吧.
    还不行的话,你就在 MSComm1_OnComm事件中处理吧.Private Sub MSComm1_OnComm()
    dim st
    if MSComm1.CommEvent=comEvReceive then
        st= MSComm1.Input
        debug.print st'这里打印出来
    end if
    end sub
      

  2.   

    顶一下,实在太奇怪了这个程序哪错了呢?我发了"AT"过去,应该是返回ok的可在程序里strA=MSComm1.input缺没有任何反映,RThreshold 设为1之后oncomm那里也是一点动静也没有但是,停掉我的程序,打开串口测试小软件,一接通,保存在接收缓冲区的数据马上就在接收显示区那里显示出来,就是刚才测试命令AT的返回结果
      

  3.   

    st的类型必须是variant型的数据,还有就是要以数组的方式进行数据的传递。
    dim st as variant
    st=mscomm1.input
    debug.print st(0)
    你可以试一下,我的串口程序的接受就是这么写的
      

  4.   

    老兄,你的MSComm1.RThreshold = 0                      '不产生MSComm事件请问如何触发ONCOMM
      

  5.   

    如果你只用了2,3。5 管脚,MSComm1.NullDiscard = False                 'NULL字符从端口传送到接受缓冲区
        MSComm1.DTREnable = False                   'DTR线无效
        MSComm1.EOFEnable = False                   '不寻找EOF符
        MSComm1.RTSEnable = False                   
    不用管的。
      

  6.   

    SThreshold属性设置或返回在MSComm控件将CommEvent属性设置为comEvSend并产生OnComm事件之前所发送缓冲区中允许的最少字符数。
    RThreshold属性设置或返回在MSComm控件将CommEvent属性设置为comEvReceive并在产生OnComm事件之前所接收的字符数。
      

  7.   

    to sunny8226(袋鼠) 
    我的接收动作在Private Sub Command2_Click()
    原本不打算触发oncomm
    后来Private Sub Command2_Click()不行,再测试oncomm的
    (测试的时候MSComm1.RThreshold 已经改为1)BTW:我现在连接的是WaveCOM 的GSM Modem
      

  8.   

    你可以不必用onComm事件,在Mscomm1.output=" ....."之后就用这个
    Do
      Doevents
       recbuf=recbuf & mscomm1.input
    loop until instr(recbuf,"OK")  '设置返回数据的结束符号,你可以自己定然后你把recbuf赋给你想要的地方就OK了
      

  9.   

    你把MSComm1.CommEvent的各个属性都列出来,然后在每个属性里面print一下,看看到底oncomm事件有没有触发。
    另外你的握手协议有没有真正的在程序里实现?结束符有没有加上?