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) {...}
        }


潇潇雨雨
浏览 1554回答 2
2回答

繁星点点滴滴

关于您处理AT命令的一般说明。不不不!这种做法永远不会可靠。在发送“要发送的文本”之前,您必须&nbsp;等待>收到该字符。或者实际上它不仅仅是>角色,而是四个角色。引自3GPP规范27.005:<CR><LF><greater_than><space>&nbsp;在命令行终止后,TA应发送一个四字符序列&nbsp;(IRA 13,10,62,32)<CR>;&nbsp;之后,可以从TE输入文本到ME / TA。(TA(终端适配器)这里指调制解调器和TE(终端设备)AT命令的发送者)对于任何可中止的AT命令(以及27.005明确指出AT + CMGS&nbsp;This command should be abortable.),任何字符的发送都将中止命令的操作。引用ITU V.250:5.6.1中止命令...通过从DTE到任何角色的DCE的传输来完成命令的中止。(DCE(数据通信设备)这里指调制解调器和DTE(数据终端设备)AT命令的发送者)这意味着当您在调制解调器发送“\ r \ n>”之前发送“要发送的文本”时,命令将被中止。没有办法等待“足够长”以期望发送响应。您必须阅读并解析从调制解调器返回的响应文本。这同样适用于在每个命令之后的最终结果代码(例如OK,&nbsp;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之后;&nbsp;命令你首先得到最终结果代码OK,然后在调用结束后你得到一个新的最终结果代码NO CARRIER。这个非常糟糕的设计,呼叫结束指示应该是一个特定的未经请求的响应,而不是最终的响应。总结一下您的短信似乎被网络拒绝了。试着找出原因。您还应该解决AT命令处理方面的一些严重问题;&nbsp;没有读取和解析调制解调器的响应文本就无法处理AT命令。

当年话下

cell.println("AT+CNMI=3,3,0,0");&nbsp;//&nbsp;set&nbsp;module&nbsp;to&nbsp;send&nbsp;SMS&nbsp;data&nbsp;to serial&nbsp;out&nbsp;upon&nbsp;receipt对于那些正在寻找同样问题答案的人我:我试图通过发送短信来唤醒gsm模块从睡眠模式,它不会马上工作。电话直接转到UART,但对于短信,你必须使用此命令设置模块在收到时将SMS数据发送到串口。AT + CNMI = 3,3,0,0
打开App,查看更多内容
随时随地看视频慕课网APP