【发布时间】:2010-02-12 12:39:13
【问题描述】:
我的 GSM 调制解调器在一段时间后断开,可能是因为信号低。我只是想知道是否有一个AT命令可以检测到断开并重新建立重新连接。
代码中有没有办法(最好是python)我可以检测到断开连接并重新建立重新连接?
加特
【问题讨论】:
-
您是否在 python 1.5.2+ 中使用 Telit 模块?
标签: python gsm at-command
我的 GSM 调制解调器在一段时间后断开,可能是因为信号低。我只是想知道是否有一个AT命令可以检测到断开并重新建立重新连接。
代码中有没有办法(最好是python)我可以检测到断开连接并重新建立重新连接?
加特
【问题讨论】:
标签: python gsm at-command
根据连接的类型,电路交换 (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;,否则您将启动数据通话。
【讨论】:
这是我使用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?这不难隔离。
【讨论】:
您可以尝试使用 AT+CSQ 定期检查信号强度。如果信号低于给定阈值,则认为您已断开连接并强制建立新连接。
您可以尝试非常好的 pyserial http://pyserial.sourceforge.net/ Python 库来将 AT 命令发送到调制解调器。
希望对你有帮助
【讨论】: