被拨入方如何应答和判断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、李卫东回答。
| |
|
|
| |
|
|