什么是用于轮询调制解调器接收数据的最佳设计?

8
我有一个连接到电脑的GSM调制解调器,我想使用我编写的Python程序接收发送给它的短信,我只是想知道轮询数据的最佳技术是什么。
我应该编写一个具有无限循环的程序,不断检查传入的短信,即在循环内发送AT命令并读取输入数据。还是调制解调器有一种方式向应用程序发出传入数据(短信)的信号。
我试图想象手机只是一个GSM调制解调器,当收到短信时,手机会提醒您事件的发生,或者手机软件是否具有无限循环以轮询传入数据。

很好的问题!只是好奇,你用的是哪个GSM调制解调器? - João Silva
华为,型号 E220 HSDPA USB 调制解调器 - gath
2个回答

3

我之前写过类似的内容。有一种使用AT命令的方法,可以告诉调制解调器在接收到短信时向您发送信号。

供参考,我在嵌入式应用中使用了Maestro 100 GSM Modem

首先,您必须正确初始化调制解调器。我使用的是短信文本模式,但您可能使用不同的模式。从以下选项中选择您需要的内容。AT+CNMI 是最重要的。

AT&F0 # Restore factory defaults
ATE0  # Disable command echo
AT+CMGF=1 # Set message format to text mode
AT+CNMI=1,1,0,1,0 # Set new message indicator
AT+CPMS="SM","SM","SM" # Set preferred message storage to SIM

您将会收到一条消息通知,内容如下所示。(不要根据索引号匹配,因为通知中的索引号可能不同)
+CMTI: "SM",0 # Message notification with index

当您收到该通知时,请检索未读的短信:
AT+CMGL="REC UNREAD"  # Retrieve unread messages

我建议您添加一个投票,每隔5分钟左右进行一次,以防您错过通知。使用串行通信,您永远无法确定!


好的,已编辑。希望这有所帮助。我在一个嵌入式应用程序中使用这些命令,配合外部GSM调制解调器。 - Andre Miller
1
安德烈,这对我从来没有起作用过,我想知道是我的调制解调器出了问题还是其他什么原因,所以我只能通过轮询调制解调器来获取消息...你有什么想法吗? - gath
也许你的调制解调器使用了不同的AT命令来开启通知功能。你有它的参考手册链接吗? - Andre Miller

0

我发现自己记不住与短信相关的AT命令集。Andre Miller的回答似乎有点印象。无论如何,您应该非常仔细地阅读文档,我相信会有一些陷阱。

我的建议是每5秒至少轮询一次 - 这只是为了在断开连接时保持稳健和响应能力。

我使用状态机在初始化、读取和删除消息之间进行导航。


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