2 回答

TA貢獻1803條經驗 獲得超3個贊
關于您處理AT命令的一般說明。
不不不!這種做法永遠不會可靠。在發送“要發送的文本”之前,您必須 等待>
收到該字符?;蛘邔嶋H上它不僅僅是>
角色,而是四個角色。引自3GPP規范27.005:
<CR><LF><greater_than><space>
在命令行終止后,TA應發送一個四字符序列 (IRA 13,10,62,32)<CR>
; 之后,可以從TE輸入文本到ME / TA。
(TA(終端適配器)這里指調制解調器和TE(終端設備)AT命令的發送者)
對于任何可中止的AT命令(以及27.005明確指出AT + CMGS This command should be abortable.
),任何字符的發送都將中止命令的操作。引用ITU V.250:
5.6.1中止命令
...
通過從DTE到任何角色的DCE的傳輸來完成命令的中止。
(DCE(數據通信設備)這里指調制解調器和DTE(數據終端設備)AT命令的發送者)
這意味著當您在調制解調器發送“\ r \ n>”之前發送“要發送的文本”時,命令將被中止。沒有辦法等待“足夠長”以期望發送響應。您必須閱讀并解析從調制解調器返回的響應文本。
這同樣適用于在每個命令之后的最終結果代碼(例如OK
, ERROR
,CME ERROR
和幾個)。例如,發送“AT + CMGF = 1”然后在沒有先等待OK的情況下發送下一個命令就是要求解決問題。所以總是在發送AT命令時,你必須在發送下一個命令之前等待最終的結果代碼。
請永遠不要delay
等待任何AT命令響應。它就像踢狗一樣有用,可以阻擋它們移動。是的它可能實際上有效,但在某些時候你會抱歉采取這種方法......
回答你的問題。
根據你得到的反應,我可以看到你的問題不是命令墮胎(雖然你的解析有嚴重的問題,如上所述,你應該修復),CME ERROR是你最好的線索。從27.007的“9.2.1一般錯誤”一節中,它給出operation not supported
了值4的描述。
27.005指出:
如果在網絡中發送失敗或ME錯誤,則返回最終結果代碼+ CMS ERROR :.
請注意,這是+ CMS ERROR而不是+ CME ERROR,但它適用,請參閱下文。
我想這一系列動作如下:
SM100B GSM調制解調器的AT命令處理部分接受短信數據并以適當的格式對其進行格式化,并將其發送到與GSM網絡通信的調制解調器部分。它成功地將短信數據發送到網絡并將其報告回AT命令處理部分,然后打印+CMGS: 25
和最終結果代碼OK
。但是,在短時間后,網絡會發回短信的拒絕消息,然后將其作為+ CME ERROR響應給出。
如果我的猜測是正確的,那么響應是否應該以+ CMS ERROR的形式發送?不,因為已經給出了AT + CMGS命令的最終響應(OK),并且永遠不應該為命令返回多個最終結果代碼(錯誤除外(注釋1))。雖然+ CME ERROR可以替換ERROR最終結果代碼,但它不僅是最終結果代碼。從AT + CMEE命令描述:
設置命令禁用或啟用結果代碼+ CME ERROR的使用:作為與MT功能相關的錯誤的指示。啟用時,MT相關錯誤會導致+ CME ERROR:最終結果代碼而不是常規ERROR最終結果代碼。當錯誤與語法,無效參數或TA功能相關時,ERROR會正常返回。
因此,+ CME ERROR既可以是最終結果代碼,也可以是未經請求的結果代碼(也可能是中間結果代碼)。
但AT + CMGS命令是否等待接收網絡拒絕并返回+ CMS ERROR?可能不是。在不太了解短信發送的網絡細節的情況下,今天的拒絕可能會在比以前更晚的時間發生。這種變化有時是GSM相關AT命令的問題,其具有最初與GSM行為緊密相關的舊遺產,隨著技術轉向GPRS,UMTS,LTE等,有時變得越來越不真實。
注1:
我之前的一位同事曾經抱怨標準指定語音呼叫處理的方式,因為在ATD1234之后; 命令你首先得到最終結果代碼OK,然后在調用結束后你得到一個新的最終結果代碼NO CARRIER。這個非常糟糕的設計,呼叫結束指示應該是一個特定的未經請求的響應,而不是最終的響應。
總結一下
您的短信似乎被網絡拒絕了。試著找出原因。您還應該解決AT命令處理方面的一些嚴重問題; 沒有讀取和解析調制解調器的響應文本就無法處理AT命令。

TA貢獻1890條經驗 獲得超9個贊
cell.println("AT+CNMI=3,3,0,0"); // set module to send SMS data to serial out upon receipt
對于那些正在尋找同樣問題答案的人我:
我試圖通過發送短信來喚醒gsm模塊從睡眠模式,它不會馬上工作。電話直接轉到UART,但對于短信,你必須使用此命令設置模塊在收到時將SMS數據發送到串口。
AT + CNMI = 3,3,0,0
添加回答
舉報