我现在做一个手机短信程序,PC和NOKIA8210通过红外端口连接,用VB的MSCOMM控件,在判断是否成功发送用到MSCOMM的INPUT属性,用语句:
  DIM RECO AS STRING
  MSCOMM1.OUTPUT=“AT”+VBCR
  RECO=MSCOMM1.INPUT
在执行过程中出错,INPUT返回的是空值。
等待高手指点。谢谢

解决方案 »

  1.   

    别一发送AT就读取
    do 
        
        if mscomm1.InBufferCount then
            reco = mscomm1.input
        endif
        '///这边加上时间判断,如果超过了一定时间,退出do ,不然死循环了
    loop
      

  2.   

    ydzqw:
       还是出错,提示“读COMM设备错误”,在调试时MSCOMM1.INPUT=“”。是不是没有返回值呢?可是在超级终端上调试,成功返回“OK”,失败返回“ERROR”。
      

  3.   

    MSCOMM1.INPUT=“”?
    怎么能这样赋值呢?
    这是只读的,不是output啊
      

  4.   

    ydzqw:
      我是说在调试过程中,把鼠标放在MSCOMM1.INPUT上面时,提示MSCOMM1.INPUT=“”的。OK?
      

  5.   

    sxs69() :
    正确的。因为用是红外端口,所以影射了一个端口COM3。可以和手机正常连接,也可以发出短信,实现群发的时候,经常发生堵塞,所以想通过INPUT属性来判断是否发送成功。是不是可以有其他的方式来判断手机是不是堵塞了呢?谢谢。
      

  6.   

    很奇怪啊,如果正确的话,在10秒以内应该返回“OK“或”ERROR“啊,以前测试MODEM时,就等了10秒
      

  7.   

    sxs69() :
    mscomm1.handshaking=0-comNo
    我想应该可以返回“OK”或“ERROR”才对的呀。可是就是不对。是不是因为设备的原因呢?
      

  8.   

    sxs69() :
    我用的是台式电脑,配的水木行的红外线适配器。NOKIA8210手机。
      

  9.   

    mscomm1.handshaking=2-comRTS才对
    另外串口的设置应该与超级终端一样
      

  10.   

    sxs69() :
    谢谢你,我先试一下。
      

  11.   

    sxs69() :
    不行,还是报一样的错误。
      

  12.   

    很正常啊
    Private Sub Command1_Click()
        MSComm1.CommPort = 2
        MSComm1.Settings = "115200, N, 8, 1"
        MSComm1.PortOpen = True
        
        MSComm1.Output = "AT" & Chr(13) & Chr(10)
        Dim inBuf As String
        
        Do
            If MSComm1.InBufferCount Then
                inBuf = MSComm1.Input
                Debug.Print inBuf
                If InStr(inBuf, "OK") > 0 Then
                    Exit Do
                End If
            End If
        Loop
    End Sub
      

  13.   

    两位仁兄。真的很抱歉,还是不行啊。 ydzqw:您用的是什么样的配置呢?
    感谢两位仁兄,如果出现手机阻塞,不用INPUT属性,还有什么方法能够判断其是否阻塞呢?谢谢。
      

  14.   

    我的是CMS 91模块,TC35模块也行
    你在超级终端里发AT能返回OK吗?
      

  15.   

    在超级终端里面能返回OK,AT指令错误是返回ERROR。可是我在VB里面怎么也没有返回值,为这个问题我已经忙了好几天了。真是晕。您也做手机程序吗?我是刚做的,还望您能多加指点。您在手机阻塞时候怎么解决呢?非常感谢您。
      

  16.   

    还要告诉您,我的红外线适配器接在COM2口上,在手机连接以后自动影射一个COM3口。我在红外线、COM2的属性、VB程序里面的代码速率都设为115200BPS。您看我在什么地方还要有什么改动。谢谢。
      

  17.   

    给你参考一下,没有整理   MSComm1.CommPort = ComNum       '设置端口
        MSComm1.Settings = "9600,N,8,1"
        MSComm1.PortOpen = True
        MSComm1.Handshaking = comRTS
        MSComm1.RTSEnable = True
        MSComm1.InputMode = comInputModeText
    Private Sub Timer1_Timer()
        Dim s() As Byte
        If MSComm1.InBufferCount > 0 Then
            s = MSComm1.Input
        End If
    End Sub
      

  18.   

    SetRTSEnable(TRUE),设置一下发送请求使能试试。
      

  19.   

    我也曾出现过类似问题,但原因是我的AT命令没有回车换行,紧记是回车+换行,少一个都不行。不过我是用java写的,而且是把COM口直接当文件打开。
      

  20.   

    把MSCOMM控件的HANDSHAKING设为COMXONXOFF 同时要把MSCOMM控件的RTSENABLED设为TRUE
    以下仅做参考:
    ' Buffer to hold input string
    Dim Instring As String
    ' Use COM1.
    MSComm1.CommPort = 1
    mscomm1.handshaking=comRTSXOnXOff
    mscomm1.RTSEnabled=true
    ' 9600 baud, no parity, 8 data, and 1 stop bit.
    MSComm1.Settings = "9600,N,8,1"
    ' Tell the control to read entire buffer when Input
    ' is used.
    MSComm1.InputLen = 0
    ' Open the port.
    MSComm1.PortOpen = True
    ' Send the attention command to the modem.
    MSComm1.Output = "AT" + Chr$(13)+Chr$(10)
    ' Wait for data to come back to the serial port.
    Do
    DoEvents
    Loop Until MSComm1.InBufferCount >= 2
    ' Read the "OK" response data in the serial port.
    Instring = MSComm1.Input
    ' Close the serial port.
    MSComm1.PortOpen = False