我用MSCOMM控件读串口数据
Dim Rdata() as byte
.......
Rdata = MSComm1.Input 
....
就是读不出数据来
'单步执行时读到MSComm1.InBufferCount = 25  然后执行Rdata = MSComm1.Input 后,UBound(RData) 就等于 0了 
郁闷 其他定义都没有问题
到底那出问题了??

解决方案 »

  1.   

    MSComm1.InpputMode = comInputModeBinary
      

  2.   

    Private Sub Timer1_Timer()
    '读取返回信息,直到读到"OK","ERROR"
        Dim s() As Byte
        Dim SS As String
        Static SSS As String
        If MSComm1.InBufferCount > 0 Then
            s = MSComm1.Input
            SS = s
            SSS = SSS + SS
            If InStr(UCase(RetString), "OK") Or InStr(UCase(RetString), "ERROR") Then  '读到OK或ERROR表明完全读入
                MsgBox SSS
            End If
        End If
    End Sub
    你看看
      

  3.   

    Private Sub Timer1_Timer()
    '读取返回信息,直到读到"OK","ERROR"
        Dim s() As Byte
        Dim SS As String
        Static SSS As String
        If MSComm1.InBufferCount > 0 Then
            s = MSComm1.Input
            SS = s
            SSS = SSS + SS
            If InStr(UCase(SSS ), "OK") Or InStr(UCase(SSS ), "ERROR") Then  '读到OK或ERROR表明完全读入
                MsgBox SSS
            End If
        End If
    End Sub不好意思:)
      

  4.   

    MSComm1.Settings = "9600,N,8,1"
        MSComm1.PortOpen = True
        MSComm1.Handshaking = comRTS
        MSComm1.RTSEnable = True
        MSComm1.InputMode = comInputModeText  ' :)
      

  5.   

    我的MSComm1.InpputMode = comInputModeBinary
    估计OK或ERROR读不到
    我的代码
    dim RData() as byte
    Private Sub Timer1_Timer()
      MSComm1.Output = SVale '发命令
      Do
               DoEvents
             Loop Until MSComm1.InBufferCount >= 25
           Call ReceiveDataFromCom
           MSComm1.InBufferCount = 0
    End Sub
    Private Sub ReceiveDataFromCom()
    Dim i As Integer
    Rtxt.Text = ""
     RData = MSComm1.InputFor i = 0 To UBound(RData)
       Rtxt.Text = Rtxt.Text & CStr(RData(i)) & vbTab
     Next
    End Sub
      

  6.   

    Private Sub Timer1_Timer()
    '读取返回信息,直到读到"OK","ERROR"
        Dim s() As Byte
        Dim SS As String
        Static SSS As String
        If MSComm1.InBufferCount > 0 Then
            s = MSComm1.Input
            SS = s
            SSS = SSS + SS
            if len(sss)>100 then       
                MsgBox SSS
            End If
        End If
    End Sub
      MSComm1.InputMode = comInputModeText  ' :)看看读到什么东西了
      

  7.   

    to: flyingscv(zlj) 
    你的代码运行时要把MSComm1.InpputMode = comInputModeText,而我现在要读的是:4C 57 01 30 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 0D我在运行时用其他串口软件在另一个COM看数据都正确的,
    但现在的问题是我用上面的代码读出来的不对
      

  8.   

    to: flyingscv(zlj) 
    照你的做了,在运行到s = MSComm1.Input时要等5-6秒,输出结果是******(看不懂的)
    :)
      

  9.   


    Private Sub Timer1_Timer()
    '读取返回信息,直到读到"OK","ERROR"
        Dim s() As Byte
        dim i as long 
        If MSComm1.InBufferCount > 0 Then
            s = MSComm1.Input
            FOR I=0 to ubound(s)
                debug.print s(i)
            next i
        End If
    End Sub
    看看打出什么 :)
      

  10.   

    一样的,你这样只是改了输出法式,但是对数据还是没做 转换的。
    我的代码是这样写的。
    Dim RData as byte
    Private Sub Timer1_Timer()
      MSComm1.Output = SVale
      DelayTime
      Do
          DoEvents
      Loop Until MSComm1.InBufferCount >= 25
       Call ReceiveDataFromCom
       MSComm1.InBufferCount = 0
    End Sub
    Private Sub ReceiveDataFromCom()
    Dim i As Integer
    Rtxt.Text = ""
    RData = MSComm1.Input
    For i = 0 To UBound(RData)
      Rtxt.Text = Rtxt.Text & CStr(RData(i)) & vbTab
     Next
    End Sub
      

  11.   

    CSDN没高手了??
    :::::::::::::::::::
      

  12.   

    我估计还是你的流控制或奇偶校验设置得不对。你COM口上接的究竟是什么设备?
      

  13.   

    校验是设在发的命令里了。
    COM接的是EDA9033,关于改设备的介绍可以查看www.lwlckj.com
    我在的数据引出条线,看发和收的数据(接在其他电脑上看),都是正确的。流控制是什么概念?
      

  14.   

    留下email,发给你一个“串口编程调试精灵”的程序(可接收、发送数据)以及源代码,
    今晚12点前有效。
      

  15.   

    // lsftest() 
    不会是在YU我吧??
      

  16.   

    在接收数据的时候要先进行转换
    Dim Rdata() as byte,mTemp as Variant
    .......
    mTemp = MSComm1.Input 
    Rdata = mTemp
    .......
      

  17.   

    // unknow_123(不懂) 怎么没用啊?
    结果是一样的
      

  18.   

    To lsftest():
       [email protected]  先谢谢了!
      

  19.   

    // lsftest()   
    你发的只能接受MSComm1.InpputMode = comInputModeText时的量,我现在的接受对象是数据量,没用的。根本接受不到数据
    :)
      

  20.   

    你发的只能接受MSComm1.InpputMode = comInputModeText时的量,我现在的接受对象是数据量,没用的。根本接受不到数据
    ===========================================
    不会啊,你可以在它的源程序中把inputmode改掉试试。我把它改为comInputModeBinary,工作很正常应该不会一点显示都没有吧
    如果真的不行,推荐另一款检测软件:
    http://www.cstsoft.com.cn/china/product/comprobe.exe
    这款检测软件是基于驱动的,比一般的串口测试软件优先
    你先运行它,在运行你的串口接收程序,做一些传送接收的动作,然后你会看到comprobe会对串口收发的数据都有记录(都是串口收到的最原始数据),分析一下这些数据是不是你想要的吧
      

  21.   

    另外,如果串口编程调试精灵真的一点显示都没有,请检查它使用的串口号,因为它默认是使用com2的,可在“设置参数”按钮中进行设置。