我有一个GSM调制解调器,一段时间后断开,可能是因为信号低。我只是想知道是否有一个AT命令可以检测断开并重新建立重新连接。
代码中是否有一种方法(最好是python)我可以检测到断开连接并重新建立重新连接?
加特
答案 0 :(得分:4)
根据连接类型,电路交换(CS)或分组交换(PS),监控将略有不同。要检测断开连接,您可以启用UR(未经请求的结果)代码AT+CPSB=1
来监视PDP上下文活动(也称为数据包交换连接)。对于电路交换呼叫,您可以使用+CIEV:
启用AT+CMER=3,0,0,2
UR代码进行监控。
要重新建立连接,您必须再次设置连接。对于CS,您要么必须知道拨打的电话号码,要么您可以使用特殊形式的ATD,ATDL
[1]拨打最后拨打的号码。如果调用是以ATD(即“ATD * 99 * ....”)开始的,那么你也可以使用ATDL for PS,这很常见,但我不认为如果以AT + CGDATA开头有任何办法
但是,以上都与ATD无关,因为它不是你想要的。对于CS,您可以从python脚本中设置一个调用,但那么呢?收到CONNECT
后,所有数据流量都将出现在python脚本正在使用的串行连接上。而对于PS,连接甚至不能成功完成,除非电话作为连接建立的一部分从PC接收PPP流量。你打算你的python脚本提供吗?
您真正想要的是触发您的PC再次尝试连接,无论是标准操作系统拨号网络还是某些特殊应用程序启动它。因此,使用python脚本监视调制解调器,然后在PC端采取适当的操作以重新建立连接。
[1]
对ATDL的旁注:请注意,如果您想重复上一次语音通话,您仍应使用分号终止,即ATDL;
,否则您将开始数据通话。
答案 1 :(得分: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?这不难分离。
答案 2 :(得分:0)
您可以尝试使用AT + CSQ定期检查信号强度。如果信号低于给定阈值,请考虑断开连接并强制建立新连接。
您可以尝试使用非常好的pyserial http://pyserial.sourceforge.net/ Python库将AT命令发送到调制解调器。
我希望它有所帮助