離線簡訊應用無法正常讀取

chenwr2018發表於2019-03-08

一、簡訊AT命令

1、AT+CPMS 作用:設定簡訊儲存位置

AT+CPMS=?
+CPMS: ("ME","MT","SM","SR"),("ME","MT","SM","SR"),("ME","MT","SM","SR")

+CPMS: (list of supported <mem1>s),(list of supported<mem2>s),(list of supported<mem3>s)
複製程式碼

引數說明:

“SM”(U)SIM資訊儲存 “ME”移動裝置資訊儲存 “MT”與“ME”儲存相同 "SR"在EC20 AT手冊也沒找到相應說明,暫時置之不理。

mem1:要從該記憶體儲存中讀取和刪除的訊息 mem2:訊息將被寫入併傳送到該記憶體儲存 mem3:接收到的訊息將被放置在這個記憶體儲存中(前提沒有使用AT+CNMI進行設定)

AT+CPMS="SM","SM","SM"設定簡訊儲存在sim卡中。

2、AT+CNMI

作用:SMS事件報告配置

AT+CNMI=?
+CNMI: (0-2),(0-3),(0,2),(0-2),(0,1)

OK
複製程式碼

詳細說明,參考:https://blog.csdn.net/chenwr2018/article/details/88313436

3、AT+CMGF

作用:設定簡訊格式

AT+CMGF=?
+CMGF: (0,1)

OK
複製程式碼

引數說明:

0為PDU模式 1為Text模式

注意:在CDMA網路下,只支援Test模式。

4、AT+CMGS

作用:傳送簡訊

(1)先設定Test模式

AT+CMGF=1 不然會出現

AT+CMGS="139000000"

+CMS ERROR: 304
複製程式碼

(2)設定終端字符集

AT+CSCS="GSM"

OK
複製程式碼

(3)輸入號碼簡訊內容

AT+CMGS="13900000000"

> 666
> 
+CMGS: 46

OK
複製程式碼

AT+CMGS="13900000000"

回車後出現> 輸入完內容回車,接著ctrl + z傳送。

5、AT+CMGR

作用:讀取簡訊

AT+CMGR=< index >

引數index 手冊翻譯內容如下:

關聯記憶體支援的位置號範圍內的整數型別值。(後面一大連串的引數說明搞得頭暈暈的,感覺暫時也不用關注那麼細。)

AT+CMGR=0表示接收到的第一條簡訊,AT+CMGR=1表示接受到的第二條簡訊,以此類推。

Test模式

“REC UNREAD” Received unread messages 收到未讀訊息
“REC READ” Received read messages 收到已讀資訊
“STO UNSENT”  Stored unsent messages 儲存未傳送的訊息
“STO SENT” Stored sent messages 儲存已傳送的訊息
“ALL”  All messages
複製程式碼

PDU模式

0  Received unread messages
1  Received read messages
2  Stored unsent messages
3  Stored sent messages
4  All messages
複製程式碼
AT+CMGF=1

OK
AT+CMGR=2

+CMGR: "REC UNREAD","139000000000",,"19/03/07,19:29:33+32",161,36,0,0,"+8613010383500",145,4
2333

OK
複製程式碼

6、AT+CMGL

作用:羅列出所有簡訊

引數:查詢對應狀態的所有簡訊

AT+CMGL=?

+CMGL: ("REC UNREAD","REC READ","STO UNSENT","STO SENT","ALL")

OK
複製程式碼
AT+CMGL="ALL"

+CMGL: 0,"REC READ","13900000000",,"19/03/07,19:22:15+32",161,2
66
+CMGL: 1,"REC READ","13900000000",,"19/03/07,19:24:38+32",161,3
999
+CMGL: 2,"REC READ","13900000000",,"19/03/07,19:29:33+32",161,4
2333
+CMGL: 3,"REC READ","13900000000",,"19/03/07,19:41:36+32",161,10
chenwr2018

OK
複製程式碼

羅列出所有簡訊內容。

7、AT+CMGD

作用:刪除簡訊

AT+CMGD=?

+CMGD: (0,1,2,3),(0-4)
複製程式碼

+CMGD: (list of supported s),(list of supported s)

引數: index指的就是簡訊索引號,從0開始,3表示第四條簡訊。

delflag

0  刪除索引號指定的簡訊
1  刪除所有從儲存器讀取的簡訊
2  刪除所有從儲存器讀取的簡訊,併傳送手機簡訊
3  刪除所有從儲存中讀取的簡訊,以及所有傳送和未傳送的手機簡訊
4  刪除儲存器中所有簡訊
複製程式碼
AT+CMGD=1  //刪除索引為1的簡訊
OK
AT+CMGD=1,4  //刪除所有簡訊
OK
複製程式碼

8、AT+CSCA

作用:查詢簡訊中心號碼。

AT+CSCA?
+CSCA: "+8613010300000",145

OK
複製程式碼

二、離線簡訊問題分析

1、簡訊作用

(1)簡訊主要作用用來引數設定與控制裝置。 特殊使用場景,傳送復位簡訊。裝置每次開機會去讀取簡訊內容。因此必須保證已讀的簡訊刪除,否則裝置會不斷復位。 (2)由於SIM卡只有1萬到10萬次的讀寫次數和40-50短訊息的儲存空間。使用壽命與空間的問題,導致前期設定接收到簡訊不儲存直接通知TE(Terminal Equipment 終端裝置)。

問題: 離線傳送控制簡訊,裝置重新上電後無法正常接收,應用層沒法讀取到離線簡訊的控制命令。

疑問: 離線簡訊的具體原理是否事先存放在基站中,等手機終端廣播告知基站已經駐網然後下發到手機終端上? 如果是這樣那麼整個簡訊收發流程跟正常裝置線上是一致的?那為何接收不到呢?

2、簡單簡訊原理闡述

(1)手機收發簡訊流程

源手機-》基站-》簡訊中心-》基站-》目的手機

(2)基站

基站會不斷廣播資訊 方便手機搜尋到基站 不同基站的廣播頻率不一致 GSM系統 掃描整個頻段,訊號最強為合適基站【類比收音機收聽廣播的原理】 CDMA系統 基站固定使用頻率。【控制載頻 調諧】

(3)基站如何找到手機

基站不斷廣播,手機連上時當前基站會傳送個位置區。當手機發現自己當前位置區發生變化,會傳送自己當前位置,無線網路會記錄在資料庫裡(位置暫存器) 手機週期性告訴無線網路自己當前的位置。

(4)流程說明

  • 源手機傳送簡訊,其實是傳送到基站。手機與基站有個專門的通道,控制通道為SMS簡訊提供通路。
  • 每個手機都有個SMSC(簡訊業務中心),當其他人給自己手機傳送SMS簡訊時,其實是傳送給簡訊業務中心。這種機制應該類似早期的傳呼機原理。
  • 該條簡訊將以控制通道上小型資料包的形式先通過SMSC(簡訊業務中心),然後通過基站將簡訊傳送到手機。同理,當自己傳送簡訊時,手機將通過控制通道將簡訊傳送到基站,再由基站傳送到SMSC,最後從這個位置到達接收目標。

3、目前的做法

為了保證離線簡訊能夠被應用層正常獲取。

  • 不管什麼狀態下傳送的簡訊,都先儲存到sim卡中。
  • 裝置初始化之後,等執行程式讀取該簡訊之後再把sim卡的內容刪除。

主要的問題依然在sim卡讀寫壽命問題,不過還好簡訊控制命令使用頻率不是很高!

參考資料:移遠EC20 AT指令手冊、《大話無線資料通訊》

相關文章