亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

GSM SM5100B CMEERROR:4錯誤

GSM SM5100B CMEERROR:4錯誤

GSM SM5100B CMEERROR:4錯誤我正在使用Arduino來控制SM5100B GSM設備,一切正常,除非我想在收到另一個后發送短信。我明白了,錯誤代碼:OK> + CMGS:2 5 OK + CMEERROR:4我處理上述收到短信的代碼:     #include <SoftwareSerial.h>  //Include the NewSoftSerial library to send serial commands to the cellular module.          char inchar;                //Will hold the incoming character from the Serial Port.          SoftwareSerial cell(2,3);          char mobilenumber[] = "0597010129";         void setup() {          //GSM         Serial.begin(9600); // opens serial port, sets data rate to 9600 bps         Serial.println("Initialize GSM module serial port for communication.");                                cell.begin(9600);          delay(35000); // give time for GSM module to register on network etc.          Serial.println("delay off");         cell.println("AT+CMGF=1"); // set SMS mode to text          delay(200);          cell.println("AT+CNMI=3,3,0,0"); // set module to send SMS data to serial out upon receipt          delay(200);          }          void loop() {             if(cell.available() >0)//If a character comes in, from the cellular module          {           inchar=cell.read();           Serial.println(inchar);           if (inchar=='#'){ // OK - the start of our command             delay(10);             inchar=cell.read();            Serial.println(inchar);                if (inchar=='a'){                 delay(10);                 Serial.println("The folowing SMS : \n");                inchar=cell.read();                Serial.println(inchar);                 if (inchar=='0'){ //sequance = #a0                  Serial.println("#a0 was received");               }              else if (inchar=='1'){//sequance = #a1                 Serial.println("#a1 was received ");                 sendSms();              }          }          cell.println("AT+CMGD=1,4");// AT command to delete all msgs          Serial.println(" delete all SMS");            }          }//end of  if(cell.available() >0) {...}         }
查看完整描述

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命令。


查看完整回答
反對 回復 2019-07-25
?
當年話下

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


查看完整回答
反對 回復 2019-07-25
  • 2 回答
  • 0 關注
  • 1849 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號