调制解调器拨号后出现ERROR错误

3
我试图使用连接在USB上的本地调制解调器来呼叫远程调制解调器。编程语言是VB.NET,我使用SerialPort控件与调制解调器通信。
通信如下:
我发送:ATZ0[CR] 调制解调器回应:ATZ0[CR][CR][LF]OK[CR][LF] 然后我尝试拨打一个号码:
我发送:ATDTnnnnnnnnnn[CR],其中nnnnnnnnnn是一个有效的号码
调制解调器回应:ATDTnnnnnnnnnn[CR][CR][LF]ERROR[CR][LF] 除此之外,所有其他命令似乎都没有任何问题。
附加信息:调制解调器是MultiTech MT5634ZBA-USB-V92。
如果我使用超级终端并输入相同的命令,则正常工作并拨出号码,因此必须是我在代码中做的一些事情,可能是在SerialPort控件中进行一些设置。
编辑:
我已经发布了自己的答案,即向调制解调器发出AT&D0。以上命令现在正在运行。

@Matt,我没有使用过那个调制解调器,不过你可以登录并获取一些日志以获得更多详细信息吗? - Christopher Rathermel
@ChristopherRathermel - 有没有一条命令可以从调制解调器中访问此信息? - Matt Wilko
@Matt 不太确定,但我在这里找到了一个开发手册链接,其中详细介绍了错误代码。(希望这是正确的版本)http://www.multitech.com/en_US/DOCUMENTS/Families/MultiMobileUSB/manuals.aspx - Christopher Rathermel
5个回答

2
我大约有12年没有使用AT指令了,但我记得你需要阅读特定于调制解调器的手册,因为每个品牌的AT指令都不同。
通常,如果您需要拨出电话,您需要在拨号之前拨打“1”以获取外线,并在拨完剩余的号码之前暂停。在发出命令之间,您经常需要在拨号脚本中等待一段时间。根据我的记忆,这些是“W1”,“W2”等。
因此,要拨打外线(“1”)和电话号码(“123456”),您需要输入类似以下内容的内容:
ATDT1W3123456[CR][LF]

我已经很久没有这样做了 :)

另外,从记忆中,AT&D0是类似于“重置调制解调器状态”的命令,所以我们总是以该命令开始我们的脚本。


该问题与外线拨号无关(它是直接外线)。 AT&D0 是忽略DTR信号。 “通话将继续,无论DTR线的状态如何,唯一结束通话的方法是使用转义序列或如果通话被对方终止。仅在计算机设备无法提供或控制DTR时使用此设置。” - Matt Wilko

2
我经过多次尝试后发现,在输入ATDT之前发送一个AT&D0(忽略DTR信号)命令会使调制解调器不再响应ERROR,而是按照预期拨号到远程调制解调器。
我还有点困惑为什么在超级终端中输入命令时不需要发送AT&D0 - 有人知道超级终端是否会静默发送命令吗?

1
我认为这与Multitech调制解调器有关。我遇到了相同的问题,因为我是通过微处理器而不是终端发送CMds。我认为DTR会影响串行传输中的所有CMDS,但我很兴奋尝试这个解决方案! - user1779703

0

我想看看你的代码,以更好地理解问题,但作为一个开始,请尝试发送

ATDTnnnnnnnnnn[CR][LF]

我尝试了这个,也返回了错误信息 - 我不认为这是命令终止符的问题。 - Matt Wilko
请发布您的SerialPort控件设置。 - Andrea Antonangeli
我并没有进行任何特殊的设置,只是按照我在原始问题中发布的内容进行操作。现在,在我执行了AT&D0命令后,它可以正常工作了。 - Matt Wilko

0

ATZ0返回一些存储的配置以供使用。 可能有一些导致问题的原因。 您可以通过命令打印出来:

AT&V[CR]

尝试使用工厂重置命令:

AT&F[CR]

然后:

ATDTnnnnn[CR]

0

你尝试过在"ATDT"末尾只使用[LF]而不是[CR]吗?


我尝试了这个,它也返回了错误 - 我不认为这是一个命令终止符问题。 - Matt Wilko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接