2
  1. 我有一个 GSM 调制解调器,一段时间后断开,可能是因为信号低。我只是想知道是否有一个 AT 命令可以检测到断开连接并重新建立重新连接。

  2. 代码中有没有办法(最好是python)我可以检测到断开连接并重新建立重新连接?

加思

4

3 回答 3

4

根据连接的类型,电路交换 (CS) 或分组交换 (PS),监控会有所不同。要检测断开连接,您可以启用 UR(未经请求的结果)代码AT+CPSB=1来监控 PDP 上下文活动(也称为数据包交换连接)。对于电路交换呼叫,您可以使用+CIEV:启用的 UR 代码进行监控AT+CMER=3,0,0,2

要重新建立连接,您必须再次建立连接。对于 CS,您必须知道拨打的电话号码,或者您可以使用特殊形式的 ATD,ATDL[1],它将拨打最后拨打的号码。如果呼叫以 ATD 开始(即“ATD*99*....”),您也可以将 ATDL 用于 PS,这很常见,但我认为如果以 AT+CGDATA 开始,则没有任何方法.

但是,以上都与 ATD 无关,因为这不是您想要的。对于 CS,您可能会从您的 python 脚本中设置一个调用,但那又如何呢?在接收到CONNECT所有数据流量后,您的 python 脚本正在使用的串行连接上。对于 PS,除非电话从 PC 接收 PPP 流量作为连接建立的一部分,否则连接甚至不会成功完成。你打算让你的 python 脚本来提供它吗?

您真正想要的是触发您的 PC 再次尝试连接,无论是标准操作系统拨号网络还是启动它的一些特殊应用程序。因此,使用 python 脚本监控调制解调器,然后在 PC 端采取适当的措施以重新建立连接。

[1] ATDL 旁注:请注意,如果您想重复上一次语音通话,您仍应以分号结束,即ATDL;,否则您将开始数据通话。

于 2010-02-12T13:01:22.850 回答
2

以下是我使用Telit设备的方法:

AT+CGREG=1用来订阅不请自来的消息。从文档中提取:

+CGREG - GPRS Network Registration Status
AT+CGREG=[<n>]
Set command controls the presentation of an unsolicited result code
+CGREG: (see format below).
Parameter:
<n> - result code presentation mode
0 - disable network registration unsolicited result code
1 - enable network registration unsolicited result code; if there is a change in the terminal GPRS network registration status, it is issued the unsolicited result code:
+CGREG: <stat>

我在调制解调器的串行线路上等待+CGREG消息。当有事情发生时,我会检查 stat 是 1(连接到家庭网络)还是 5(连接到漫游)。

注意:发出 AT+CGREG 时会出现不同的响应 +CGREG?这不难隔离。

于 2012-02-06T11:00:26.090 回答
0

您可以尝试使用 AT+CSQ 定期检查信号强度。如果信号低于给定阈值,则认为您已断开连接并强制建立新连接。

您可以尝试非常好的 pyserial http://pyserial.sourceforge.net/ Python 库来将 AT 命令发送到调制解调器。

我希望它有帮助

于 2010-02-12T13:10:18.403 回答