热情软件屋

 

被拨入方如何应答和判断MODEM是否连通


编号:QA001219
建立日期: 1999年6月22日 最后修改日期:1999年6月28日
所属类别:

zhaoyonghui:
    VB6.0
    win98
    用MScomm控件设计串行通信程序,需要连接两个MODEM,并传输文件。拨入方和被拨入方都设置了CommPort, Settings,并使 PortOpen 为TRUE,下一步是否拨入方只需拨号即可连通对方的MODEM(我在调试中,发现拨号后被拨入方的电话一直响个不停,似乎不能连通),如果不是,被拨入方还需对MODEM输出什么命令或者还需进行那些设置,怎样才能判断两个MODEM是否已连通,有的说查询cdholding是否为true,但我在调试中cdholding始终为false。因不能判断MODEM是否已连通,所以传输文件时提示错误也不清楚问题到底出在那里。

回答:

    Robin的解决方案:
    1、被拨入方还需要设置一个AT命令,才能响应呼入:“ATS0=1”。其中,S0(是数字零)表示振铃几次后应答,相当于拿起话筒,接通连接;s0=1表示一有呼入就响应。AT命令请自行参考MODEM手册。
    2、判断MODEM是否已连通,可以这样做:(以下是我编过的一个VB5的程序段,有删节)
    Sub MscommSetup()
     ……
     MSComm1.PortOpen = True '打开端口
     If Err Then
     MsgBox "通信端口无效,请另选端口!", , "初始化端口失败"
     Exit Sub
     End If
     cd = MSComm1.CDHolding '定义一个变量,后面要用到
     MSComm1.Output = "ATS0=1&C1" & vbCr '初始化MODEM,你的初始化命令可能不同
     '&C1表示追踪数据载波信号CD
     Do
     DoEvents
     Loop Until MSComm1.OutBufferCount = 0
     If Not (MSComm1.CTSHolding And MSComm1.DSRHolding) Then
     MsgBox "Modem没有响应,请检查Modem是否连通!", , "MODEM检测失败"
     cmdExit_Click
     End If
     MSComm1.DTREnable = True
    End Sub
    
    Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
    Case comEvCD '检测CD状态,判断是否连通
     If MSComm1.CDHolding <> cd Then
     '是连通的
     ……
     End If
     ……
    End Select
    End Sub
    附:你可以参考骆云志、邢江写的《用VB编制MODEM远程通信软件》,发表在《中国计算机用户》1997.8(下) pp58~60
    李卫东的解决方案:
    拨号方应输出"ATDT"+PhoneNum+Chr(13)
    被拨入方输出 (1)自动接收 "ATS0=1",返回"OK"
     (2)人工应答 "ATA"
    在OnComm事件中
    select mscomm1.commevent
     case comEvCD:
     if not Connect And Mscomm1.CDHolding then
     Connect=true '连接成功
     endif
    end select

此问题由Robin、李卫东回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio