Arhn - архитектура программирования

SMS по AT-командам с мобильным телефоном GSM выдает ошибку

Я отправляю SMS AT-командами с мобильного телефона GSM. Я хочу отправить большую часть сообщения, как тысячи. Я читал, что по мобильному GSM мы можем отправить 6-8 смс в минуту. Но когда я отправляю сообщения, то кто-то идет, а кто-то нет. Я получаю информацию из файла excel, что означает номер пункта назначения и текст сообщения. Подскажите, почему одни смс идут, а какие-то нет. Мой код

        SmsFields smsObj = null;
        List<SmsFields> smsColl = null;
        SerialPort serialport = null;
        StringBuilder strbuild = new StringBuilder();
        try
        {
            //Validate the form 
            if (!Validation()) return;

            serialport = new SerialPort();

            ////Sets the properties of serial port object
            serialport.PortName = cboPort.SelectedItem.ToString();
            serialport.BaudRate = 9600;
            serialport.Parity = Parity.None;
            serialport.DataBits = 8;
            serialport.StopBits = StopBits.One;
            serialport.Handshake = Handshake.RequestToSend;
            serialport.DtrEnable = true;
            serialport.RtsEnable = true;

            //Open the port to send sms
            serialport.Open();

            //Check if port is opened or not
            if (!serialport.IsOpen)
            {
                MessageBox.Show("Serial port is not opened. Please try with other port");
                return;
            }

            //Create smsFields class's object and fill the data in the generic collection
            smsObj = SmsFields.Instance;
            smsColl = smsObj.FillData(txtFilePath.Text);

            if (smsColl == null)
            {
                MessageBox.Show("No data found in the excel table");
                return;
            }
            //Gets the single record from SmsFields class and sends the message
            foreach (SmsFields sms in smsColl)
            {

                //checks phone status
                serialport.WriteLine("AT" + Environment.NewLine);
                //Configures message as SMS (0 for PDU format) and (1 for text format)
                serialport.WriteLine("AT+CMGF=1" + Environment.NewLine);

                //Sets message center number
                serialport.WriteLine("AT+CSCA=\"" + txtServiceNo.Text + "\"" + Environment.NewLine);

                //Sets destination number
                serialport.WriteLine("AT+CMGS=\"" + sms.DestinationNo + "\"" + Environment.NewLine);

                //Specifies message and sends Ctrl+z
                serialport.WriteLine(sms.Message + (char)26);

                //Displays buffer containing output messages
                System.Threading.Thread.Sleep(4000);
   }
31.07.2009

Ответы:


1

Я думаю, ваша проблема в том, что вы не ждете окончательного кода результата (т.е. OK, ERROR и некоторых других) перед отправкой следующей команды. Проблема в том, что новая команда вызовет прерывание текущей команды, если она не завершена. Процитируем V.250:

5.6.1 Отмена команд

...

Прерывание команд осуществляется путем передачи от DTE к DCE любого символа.

Поэтому ВСЕГДА при отправке AT-команд вы ДОЛЖНЫ дождаться окончательного кода результата перед отправкой следующей команды.

Могу ли я предложить реорганизовать serialport.WriteLine("ATxxx" + Environment.NewLine) в функцию sendCommand(serialport, "ATxxx")? И затем вы можете добавить ожидание окончательного кода результата в конце этой функции.

07.09.2009

2

Попробуйте увидеть, есть ли закономерность в сообщениях, которые не отправляются. Потому что тогда может быть проблема с числовым форматом или недопустимыми символами в сообщении.

Также некоторые примечания:

  1. Вы не выполняете проверку ошибок. Я бы убедился, что получил ожидаемый ответ после вызова каждой команды.

  2. Вы используете Environment.NewLine для завершения каждой строки. Я предполагаю, что это свойство меняется в зависимости от базовой операционной системы. Однако стандарт AT очень четко определяет, какие именно символы использовать для завершения командной строки.

  3. Мобильные телефоны - настоящие ублюдки. То, что ВЫ следуете спецификации или документации, не означает, что они следуют. Предположим, что каждая модель телефона ведет себя не так, как все остальные. См. пункт 1.

31.07.2009
  • Спасибо за ответ, но как я уже писал, некоторые смс идут, а некоторые показывают ошибку при отправке. Итак, что должно быть причиной этого. Потому что я отправляю большое количество смс. Я получаю ответ каждой команды этим. серийный порт.ReadExisting(); Можете ли вы сказать мне, почему некоторые SMS отправляются и отвечают «ОК», а некоторые не отправляются и отвечают «Ошибка»? 31.07.2009
  • Вы проверяли, являются ли ошибки случайными или некоторые сообщения всегда проходят, а некоторые всегда терпят неудачу? Я предполагаю, что все еще неправильно сформировано сообщение или адрес, или ваш телефон не может обработать такое количество сообщений. 31.07.2009
  • Привет, да, ты прав. У меня случайно возникают проблемы с отправленными смс. Много раз sms отправляются некоторым участникам, и в следующий раз они не будут отправлены этим участникам. Не могли бы вы сообщить мне, какая проблема может быть в моем коде. Спасибо за ответ 06.08.2009
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..