2013-08-24 4 views
0

Я успешно отправил многослойные Pdu смс,
Отправка Multipart PDU SMS с помощью АТ команды

Проблема заключается в том, когда я пытаюсь отправить это SMS на номера на другую сеть, это дает мне следующую ошибку:

+CMGS ERROR:500 

Пожалуйста, скажите мне, что мне делать.

 atCommandStr = "AT+CMGF=0\r"; 
     comPort.WriteLine(atCommandStr + (char)13); 
     Console.WriteLine(comPort.ReadExisting()); 

     Thread.Sleep(2000); 

     for (int i = 0; i < number_of_parts; i++) 
     { 
      int oct = (messagesParts[i].ToCharArray().Count()/2) -1; 

      atCommandStr = "AT+CMGS=" + oct + "\r"; 
      comPort.WriteLine(atCommandStr + (char)13); 
      Console.WriteLine(comPort.ReadExisting()); 

      Thread.Sleep(2000); 

      string path; 
      path = messagesParts[i] + Char.ConvertFromUtf32(26); 
      comPort.WriteLine(path + (char)13); 

      for (int a = 0; a < 100; a++) 
      { 
       Thread.Sleep(2000); 

       string t = comPort.ReadExisting(); 
       Console.WriteLine(t); 

       if (t != "" && t.Contains("CMGS") || t.Contains("ERROR")) 
       { 

        break; 
       } 
      } 

      //Console.WriteLine(comPort.ReadExisting()); 
     } 

ответ

0

ли модем действительно вернуть +CMGS ERROR:500 и не +CMS ERROR: 500? Поскольку в этом случае ваш модем не соответствует стандарту 27.005, который указывает if sending fails: +CMS ERROR: <err>.

Код ошибки 500 означает unknown error, так что это не очень помогает. Но я бы предположил, что ваш расчет длины ошибочен. Из стандарта:

<length> must indicate the number of octets coded in the TP layer data unit 
to be given (i.e. SMSC address octets are excluded). 

Правильно ли вычесть 1 после деления на 2? Попытайтесь точно декодировать то, что будет отправлено на уровне TP. Попытайтесь немного увеличить/уменьшить длину и посмотреть, не имеет значения.


Кроме того, поскольку atCommandStr уже содержит \r вы не должны включать в + (char)13

comPort.WriteLine(atCommandStr + (char)13); 
в