Nano Hash - криптовалюты, майнинг, программирование

задержка между AT-командами для отправки sms

Я работаю над приложением, которое отправляет SMS через GSM-модем, и для этого я использую AT-команды. Когда я отлаживаю свое приложение, затем смс отправляется получателю, но когда я запускаю приложение, смс не отправляется получателю. Мой код приведен ниже, а мой GSM-модем - D-Link DWM-156. что-то не так в моем коде? Благодарю.

если (SPort.IsOpen) {

            int i = 0;
            while (i < msgs.Count)
            {
                SPort.DiscardInBuffer();
                System.Threading.Thread.Sleep(1000);
                var res = SPort.ReadExisting();
                SPort.DiscardOutBuffer();
                System.Threading.Thread.Sleep(1000);

                SPort.Write("AT\r");
                System.Threading.Thread.Sleep(1000);
                while ((res = SPort.ReadExisting()).Contains("ERROR")) ;
                resultResponse += "1" + res + "---";

                SPort.Write("AT+CMGF=0\r");
                System.Threading.Thread.Sleep(100);
                while ((res = SPort.ReadExisting()).Contains("ERROR")) ;
                resultResponse += "2" + res + "---";
                SPort.Write("AT+CSCS=\"HEX\"\r");//char set
                System.Threading.Thread.Sleep(100);
                while ((res = SPort.ReadExisting()).Contains("ERROR")) ;
                resultResponse += "3" + res + "---";

                SPort.Write("AT+CSMP=17,71,0,17\r");
                System.Threading.Thread.Sleep(100);
                while ((res = SPort.ReadExisting()).Contains("ERROR")) ;
                resultResponse += "4" + res + "---";

                string hexString = msgs[i];

                SPort.Write(string.Format("AT+CMGS={0}\r", (hexString.Length - 16) / 2));
                System.Threading.Thread.Sleep(100);
                while ((res = SPort.ReadExisting()).Contains("ERROR")) ;
                resultResponse += "5" + res + "---";

                SPort.Write(string.Format("{0}{1}\n", hexString, Convert.ToChar(26)));
                System.Threading.Thread.Sleep(100);
                while ((res = SPort.ReadExisting()).Contains("ERROR")) ;
                resultResponse += "6" + res + "---";

                System.Threading.Thread.Sleep(1500);
                response += res;
                i++;
            }

        }
13.12.2015

Ответы:


1

что-то не так в моем коде?

Да, вам нужно немного переработать обработку ответов, но на самом деле вы близки (и намного лучше, чем, к сожалению, нередкий шаблон отправки-сна, который я сначала подумал, что вы используете, когда я увидел вызов Sleep). И вы правильно используете \r для завершения командной строки AT, так что хорошее начало.

После отправки AT-команды вы должны постоянно (снова и снова) читать строки ответа от модема, пока не получите окончательный код результата (использование Contains("ERROR") недостаточно). См. этот ответ для структуры потока кода и ссылки на функцию для определения того, является ли строка окончательным кодом результата.

Вы можете сохранить задержку в 100 мс между отправкой командной строки и началом чтения ответа; Недавно я добавил 200 мс к моей программе atinout (локально, еще не выпущенной).

А для команды AT+CMGS вы должны дождаться получения строки "\r\n> ", прежде чем отправлять какие-либо данные полезной нагрузки (это также описано в ответе, указанном выше).

13.12.2015
  • спасибо за ваш полезный ответ, однако я не завершил свою программу, и у меня та же проблема. вопрос о вашем ответе: если я получу ответ ОШИБКА, что мне делать ?? Должен ли я повторно отправить ту же команду ?? Должен ли я отменить те же самые SMS-команды и запустить их снова?? 14.12.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..