Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/123: Рейтинг темы: голосов - 123, средняя оценка - 4.85
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1

Send SMS using GSM Modem

24.09.2009, 16:21. Показов 25197. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Может есть у кого исходник отправки SMS используя GSM модем через ком порт.
Как работать с этим.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2009, 16:21
Ответы с готовыми решениями:

Исправить ошибки в коде отправки SMS через GSM-модем
Здравствуйте! Недавно начал писать на c#. Поставили передо мной задачу отправки смс через gsm модем. Все бы ничего, но написанная...

Отправка SMS на мобильный телефон через USB-Modem
Где ошибка в этом коде ? Совсем не работает????? Public Function SendSMS() As Boolean If SMSPort.IsOpen = True Then ...

Sms рассылка через Gsm
Всем привет! и с наступающими!!! Поставлена была следующая задача - клиентам из базы слать смс. К серверу подключен GSM шлюз через...

16
85 / 77 / 13
Регистрация: 03.09.2009
Сообщений: 346
24.09.2009, 18:02
Если модем поддерживает передачу смс в TextMode то это несложно. Посылаеш в модем команду передачи смс, номер, текс. (Ищи в гугле АТ-команды для своего модема)
А если передача смс возможна только в PDU Mode (что скорей всего, если используется телефон) то нужно повозится с перекодированием смс в PDU-код, который затем передать модему. (Ищи в гугле смс в PDU режиме). У меня есть класс для дельфи, который это делает, может можно как-то скомпилировать длл-ку и использовать в c#...

Сама передача команд в модем - просто посылается текстовая строка с командой типа: "AT+CPMS?"
1
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
24.09.2009, 21:54  [ТС]
Цитата Сообщение от SergBokh Посмотреть сообщение
Если модем поддерживает передачу смс в TextMode то это несложно. Посылаеш в модем команду передачи смс, номер, текс. (Ищи в гугле АТ-команды для своего модема)
А если передача смс возможна только в PDU Mode (что скорей всего, если используется телефон) то нужно повозится с перекодированием смс в PDU-код, который затем передать модему. (Ищи в гугле смс в PDU режиме). У меня есть класс для дельфи, который это делает, может можно как-то скомпилировать длл-ку и использовать в c#...

Сама передача команд в модем - просто посылается текстовая строка с командой типа: "AT+CPMS?"
Я посылать хочу через 3G мегафоновский модем.
Он скорей всего поддерживает текстовый режим?
Есть ли у тебя исходник на C# посылка СМС в текстовом режиме?
Вот тот класс на Delphi может выложеш тут.
0
85 / 77 / 13
Регистрация: 03.09.2009
Сообщений: 346
24.09.2009, 22:30
Тот класс на дельфи сам по себе посылать не может. Он используется для перекодировки текста в PDU-формат. Это нужно для посылки смс в PDU формате. Если у тебя модем может использовать текстовый режим, а не PDU то тебе это не надо.

Сделай сначала оболочку, которая сможет отправлять и принимать команды через ком порт.
Выясни, поддерживает ли твой модем текстовый режим. Для этого отправь в модем команду: AT+CMGF=?
и посмотри что модем ответит. Если в ответе будет только 0, то скорей всего текстовый режим не поддерживается. Если будет 0,1 то поддерживается. (Хотя коды ответов наверное могут быть разными для разных модемов. Ищи описание АТ команд для своего модема)

Если кратко по памяти, то смысл программы такой:
(Используя компонент SerialPort и TextBox в режиме multiline=true)

C#
1
2
3
4
5
SerialPort.PortName="COM3"; // задаеш на каком порту модем
SerialPort.Open();
SerialPort.WriteLine("AT+CMGF=?");
Sleep(1000); //пауза перед приемом ответа
TextBox.Text=SerialPort.ReadExisting(); // ответ модема
1
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
24.09.2009, 22:54  [ТС]
Цитата Сообщение от SergBokh Посмотреть сообщение
Тот класс на дельфи сам по себе посылать не может. Он используется для перекодировки текста в PDU-формат. Это нужно для посылки смс в PDU формате. Если у тебя модем может использовать текстовый режим, а не PDU то тебе это не надо.

Сделай сначала оболочку, которая сможет отправлять и принимать команды через ком порт.
Выясни, поддерживает ли твой модем текстовый режим. Для этого отправь в модем команду: AT+CMGF=?
и посмотри что модем ответит. Если в ответе будет только 0, то скорей всего текстовый режим не поддерживается. Если будет 0,1 то поддерживается. (Хотя коды ответов наверное могут быть разными для разных модемов. Ищи описание АТ команд для своего модема)

Если кратко по памяти, то смысл программы такой:
(Используя компонент SerialPort и TextBox в режиме multiline=true)

C#
1
2
3
4
5
SerialPort.PortName="COM3"; // задаеш на каком порту модем
SerialPort.Open();
SerialPort.WriteLine("AT+CMGF=?");
Sleep(1000); //пауза перед приемом ответа
TextBox.Text=SerialPort.ReadExisting(); // ответ модема
Этим кодом короче проверяется поддерживает ли мой модем текстовый режим?
если он поддерживает то в текстбоксе будет 1 если нет 0 так?
0
85 / 77 / 13
Регистрация: 03.09.2009
Сообщений: 346
24.09.2009, 23:03
Да, по этой команде модем выдает список доступных режимов. 0-PDU режим, 1-текстовый режим.

Уточнение по строке №3, нужно писать так: SerialPort.WriteLine("AT+CMGF=?\n\r");
0
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
24.09.2009, 23:17  [ТС]
Цитата Сообщение от SergBokh Посмотреть сообщение
Да, по этой команде модем выдает список доступных режимов. 0-PDU режим, 1-текстовый режим.

Уточнение по строке №3, нужно писать так: SerialPort.WriteLine("AT+CMGF=?\n\r");
Sleep(1000) ?
написал без него в текстбоксе выдало ERROR. Хоть как то реагирует значит.
0
85 / 77 / 13
Регистрация: 03.09.2009
Сообщений: 346
25.09.2009, 00:40
Для начала пиши просто SerialPort.WriteLine("AT\n\r");
Это просто проверка связи. В ответ должен получать АТ ОК.
Может я что-то неточно написал, но без Sleep программа сразу прочитает буфер порта, а там будет пусто т.к. телефон неуспеет ответить.
0
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
25.09.2009, 09:16  [ТС]
Цитата Сообщение от SergBokh Посмотреть сообщение
Для начала пиши просто SerialPort.WriteLine("AT\n\r");
Это просто проверка связи. В ответ должен получать АТ ОК.
Может я что-то неточно написал, но без Sleep программа сразу прочитает буфер порта, а там будет пусто т.к. телефон неуспеет ответить.
А откуда ты взял Sleep(1000). Таймером или...

Добавлено через 9 минут
Цитата Сообщение от SergBokh Посмотреть сообщение
Для начала пиши просто SerialPort.WriteLine("AT\n\r");
Это просто проверка связи. В ответ должен получать АТ ОК.
Может я что-то неточно написал, но без Sleep программа сразу прочитает буфер порта, а там будет пусто т.к. телефон неуспеет ответить.
А откуда ты взял Sleep(1000). Таймером или...

C#
1
2
3
4
5
6
7
8
9
10
private void button1_Click(object sender, EventArgs e)
        {
            SerialPort sp = new SerialPort();
            sp.PortName = "COM3";
            sp.Open();
            //sp.WriteLine("AT+CMGF=\n\r");
            sp.WriteLine("AT\n\r");
            textBox1.Text = sp.ReadExisting();
            sp.Close();
        }
Я так писал без слипа выдает ERROR.
А откуда ты взял Sleep(1000).
У меня не телефон а 3G модем.
0
85 / 77 / 13
Регистрация: 03.09.2009
Сообщений: 346
25.09.2009, 12:01
Вот нашел свою тестовую прогу. Попробуй. Выбери порт и нажми старт. Она сама периодически посылает команду АТ. В нижнем окошке будет ответ модема. Также можно посылать произвольные команды. В общем можно использовать как терминал. Если заработает, тогда дам код.
Вложения
Тип файла: rar Joy2.rar (9.1 Кб, 930 просмотров)
0
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
26.09.2009, 10:53  [ТС]
Цитата Сообщение от SergBokh Посмотреть сообщение
Вот нашел свою тестовую прогу. Попробуй. Выбери порт и нажми старт. Она сама периодически посылает команду АТ. В нижнем окошке будет ответ модема. Также можно посылать произвольные команды. В общем можно использовать как терминал. Если заработает, тогда дам код.
На одной модели 3G модема это работает.(руссие смс не шлет, как быть)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
        public class Gsm
        {
            public Nullable <bool>  Send_message()
            {
                bool isSend = false;
                try
                {
                   SerialPort port = new SerialPort("COM3");
                   string phoneNumber = "89285333960"; //"+79288767776"; //"+79285333960";
                    string message = "Salam";
                    port.Open();
                    port.Write("AT+CMGF=1" + (Char)13);
                    port.Write(String.Format("AT+CMGS=\"{0}\"" + (Char)13, phoneNumber));
                    port.Write(String.Format("{0}" + (Char)26 + (Char)13, message));
                    port.Encoding = Encoding.GetEncoding("windows-1251");
 
                      if (phoneNumber.EndsWith("\r\nOK\r\n"))
                      {
                          isSend = true;
                      }
 
                      else if (phoneNumber.EndsWith("ERROR"))
                      {
                          isSend = false;
                      }
                      MessageBox.Show("Сообщение послано!");
                      return isSend;
                     
                }
                   
                catch (Exception ex)
                {
                    return null; //сдесь тоже надо возвращать. Возвращаем null 
                    MessageBox.Show(ex.Message.ToString());
                }
            }
Пришел дамой подключил свой 3G модем. смс не шлет.
Придется делать в PDU режиме.
Может есть исходник на шарпе если нет то дай пожалуйста тот на делфи.

Добавлено через 1 час 38 минут
Цитата Сообщение от SergBokh Посмотреть сообщение
Вот нашел свою тестовую прогу. Попробуй. Выбери порт и нажми старт. Она сама периодически посылает команду АТ. В нижнем окошке будет ответ модема. Также можно посылать произвольные команды. В общем можно использовать как терминал. Если заработает, тогда дам код.
Эта прога вовсе незапускается у меня а компе.

У меня два 3G модема от мегафона.
1) модель: huawei e220(AT интерфейс с эмуляцией стандартного модема) другой
2) модель: MBD-100HU(AT Interface 3GPP TS27.005/3GPP TS27.007supported)
Они поддерживают AT.
Я написал следующий код для отправки смс в текстовом режиме ("AT+CMGF=1" ), этот код работает толь на первой модели модема (huawei e220). Веди они оба поддерживают AT.!!! Помогите разобраться, может я что то упстил или недопонял.!!!

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
            public Nullable<bool> Send_message()// bool может принять значение null, как внизу
            {
                bool isSend = false;
                try
                {
                   SerialPort port = new SerialPort("COM5");
                    string phoneNumber = "+79285333960";
                    string message = "Salam";
                    port.Open();
                    port.Write("AT+CMGF=1" + (Char)13);
                    port.Write(String.Format("AT+CMGS=\"{0}\"" + (Char)13, phoneNumber));
                    port.Write(String.Format("{0}" + (Char)26 + (Char)13, message));
                    port.Encoding = Encoding.GetEncoding("windows-1251");
 
                    if (phoneNumber.EndsWith("\r\nOK\r\n"))
                    {
                        isSend = true;
                    }
 
                    else if (phoneNumber.EndsWith("ERROR"))
                    {
                        isSend = false;
                    }
                    MessageBox.Show("Сообщение послано!");
                    return isSend;
                }
                catch (Exception ex)
                {
                    return null; //сдесь тоже надо возвращать. Возвращаем null 
                    MessageBox.Show(ex.Message.ToString());
                }
            }
1
85 / 77 / 13
Регистрация: 03.09.2009
Сообщений: 346
26.09.2009, 14:56
Вот этот кусок непонял. Откуда в phoneNumber должно взяться OK или ERROR?

C#
1
2
3
4
5
6
7
8
9
if (phoneNumber.EndsWith("\r\nOK\r\n"))
                    {
                        isSend = true;
                    }
 
else if (phoneNumber.EndsWith("ERROR"))
                    {
                        isSend = false;
                    }
То, что модемы поддерживают АТ это одно. А передача смс в текстовом режиме это другое. Значит твой модем работает только с PDU. Для C# у меня нет исходников. Есть для дельфи ((с)не мое).

Вообще ты сначала реализуй саму программу, чтоб она нормально посылала команды и принимала ответы модема. А потом добавишь уже блок перекодировки текста в PDU.
Вложения
Тип файла: rar SMS_Core.rar (10.5 Кб, 554 просмотров)
2
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
26.09.2009, 15:17  [ТС]
Цитата Сообщение от SergBokh Посмотреть сообщение
Вот нашел свою тестовую прогу. Попробуй. Выбери порт и нажми старт. Она сама периодически посылает команду АТ. В нижнем окошке будет ответ модема. Также можно посылать произвольные команды. В общем можно использовать как терминал. Если заработает, тогда дам код.
У меня модем поддерживает текстовый режим.

Добавлено через 1 минуту
Цитата Сообщение от SergBokh Посмотреть сообщение
Вот этот кусок непонял. Откуда в phoneNumber должно взяться OK или ERROR?

C#
1
2
3
4
5
6
7
8
9
if (phoneNumber.EndsWith("\r\nOK\r\n"))
                    {
                        isSend = true;
                    }
 
else if (phoneNumber.EndsWith("ERROR"))
                    {
                        isSend = false;
                    }
То, что модемы поддерживают АТ это одно. А передача смс в текстовом режиме это другое. Значит твой модем работает только с PDU. Для C# у меня нет исходников. Есть для дельфи ((с)не мое).

Вообще ты сначала реализуй саму программу, чтоб она нормально посылала команды и принимала ответы модема. А потом добавишь уже блок перекодировки текста в PDU.
Спасибо я сделал прогу для посыла смс.
Благодарю.
0
 Аватар для Игос
12 / 12 / 2
Регистрация: 15.07.2010
Сообщений: 81
15.07.2010, 16:49
у меня на АТ команды отправленые на 3g модем выдает ^BOOT:21939709,0,0,0,76
^RSSI:15 или EROR в чем дело не пойму((((((
вот код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void button2_Click(object sender, EventArgs e)
        {
            richTextBox1.Text= "";
            SerialPort port = new SerialPort();
            try
            {
            port.PortName = comboBox1.Text;
            port.Open();
            port.WriteLine("AT\n\r");
         richTextBox1.Text = port.ReadExisting() ;
 
            }
            catch
            {
                MessageBox.Show("ошибка");
            } 
           port.Close();
            
        }
0
85 / 77 / 13
Регистрация: 03.09.2009
Сообщений: 346
16.07.2010, 02:26
Во-первых странно, что он хоть что-то выдает, ведь сразу же после посылки команды вы читаете ответ в буфере. Но для того, чтобы он там появился нужно время. Я бы после строки port.WriteLine поставил бы Thread.Sleep(50);
Кроме того наверное удобней даже считывать ответ командой port.ReadLine(), а не port.ReadExisting.

Во-вторых, по-моему команда port.WriteLine автоматом добавляет символы конца строки (на то она и writeLINE). Т.е. возможно модем получает что-то вида "AT\n\r\n" и считает это ошибкой. Попробуйте просто port.Write("AT\n\r");
0
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
16.07.2010, 03:11

Не по теме:

Цитата Сообщение от SergBokh Посмотреть сообщение
модем получает что-то вида "AT\n\r\n"
точнее "AT\n\r\r\n"



это я к тому, что не надо местами r c n путать! перенос каретки в winnt - \r\n
0
 Аватар для Игос
12 / 12 / 2
Регистрация: 15.07.2010
Сообщений: 81
17.07.2010, 13:19
спасибо, буду пробовать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.07.2010, 13:19
Помогаю со студенческими работами здесь

GSM модем Cinterion MC52iT. Обзвон абонентов по команде с SMS
Товарищи программисты подскажите, чем можете. Есть модем GSM модем Cinterion MC52iT (Terminal)(характеристики на картинке). Подключается по...

Отправка SMS на шлюз опсоса через эмуляцию GSM-модема
Доброго времени года, уважаемые форумчане! Не знаю насколько вопрос соответствует ветке, но более релевантной не нашел... Столкнулся с...

Реализация SMS уведомлений от систем мониторинга Zabbix и PRTG на основе собственного GSM-модема
Здравствуйте, У нас в организации имеются две системы мониторинга: Zabbix и PRTG Network Monitor. Обе системы рабочие и используются...

ZTE USB Modem MF636 USB Modem глючит.Help
всем привет.помогите пожалуста в решение сие проблеммы.я подключил ZTE USB Modem MF636.(ос-ВИСТА Home Premium SP-1)В первое подключение все...

Как сделать SMS-оповещение о приходе писем на php с sms.ru
Всем привет. Подскажите, пожалуйста, как сделать чтобы данные формы на сайте отправлялись не только на почту но и по sms на номер админу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru