Форум программистов, компьютерный форум, киберфорум
КИП, датчики
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/55: Рейтинг темы: голосов - 55, средняя оценка - 4.58
8 / 8 / 6
Регистрация: 25.12.2013
Сообщений: 192

GSM модем Cinterion MC52iT. Обзвон абонентов по команде с SMS

25.12.2013, 21:34. Показов 10952. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Товарищи программисты подскажите, чем можете. Есть модем GSM модем Cinterion MC52iT (Terminal)(характеристики на картинке). Подключается по COM-порту или можно через USB(переходник).Задача написать ПО, которая при получении СМС начала обзванивать по списку абонентов. Это если абонент поднял трубку. то воспроизведение звукового файла(как автоответчик), а если трубку не поднял, то повторный дозвон после окончания списка. Подскажите пожалуйста с чего начать, может литературу посоветуете.
Миниатюры
GSM модем Cinterion MC52iT. Обзвон абонентов по команде с SMS  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.12.2013, 21:34
Ответы с готовыми решениями:

Обзвон абонентов по GSM и голосовое сообщение
Здравствуйте. Я вознамерился собрать автоматическое звонило и рассыльщик смс. У меня есть ардуино UNO, подскажите есть ли GSM модули для...

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

GSM-модуль Cinterion
Здравствуйте. Я тут занялся немного не своим делом, разработкой девайса. Не могу решить одну проблему, не понимаю. Суть следующая. Есть...

22
48 / 48 / 22
Регистрация: 18.11.2013
Сообщений: 92
26.12.2013, 02:28
скорее всего чисто программно на вашей железке не реализовать, имхо тут нужен GSM-шлюз + еще что-то, и не факт что вы сможете написать программу (правда для такого варианта есть всякие готовые решения)
0
8 / 8 / 6
Регистрация: 25.12.2013
Сообщений: 192
26.12.2013, 13:27  [ТС]
По моим даным с этого модема можно осуществлять звонки. А если к ПК подключить через USB телефон и использовать в моих целях??
0
48 / 48 / 22
Регистрация: 18.11.2013
Сообщений: 92
26.12.2013, 14:24
Проблема касается "автоответчика", это можно сказать обычный "телефон", в описании я не нашел того, что по уарту (то бишь RS-232 в данном случае) можно принять какие то данные и послать их непосредственно по GSM каналу (а других интерфейсов там нет). Вот в чем проблема, там обычный аудио-разъем для подключения гарнитуры. Его можно конечно приспособить аппаратно-кустарными методами для таких целей, но для этого вам понадобятся определенные знания.
А так да, читайте мануал по АТ командам, создаете подключение COM-порта, посылаете в соответствии с нужным алгоритмом нужные АТ команды и мониторите ответ от модема.
1
8 / 8 / 6
Регистрация: 25.12.2013
Сообщений: 192
26.12.2013, 20:15  [ТС]
А это не то???
Миниатюры
GSM модем Cinterion MC52iT. Обзвон абонентов по команде с SMS  
0
8 / 8 / 6
Регистрация: 25.12.2013
Сообщений: 192
26.12.2013, 23:13  [ТС]
На данном модеме 4-и разъема:
1- RSR 232
2- Антенный
3- телефонная розетка(она для блока питания)
4 - не знаю для чего(очень похожая на телефонную разетку)

Добавлено через 1 час 57 минут
Ни когда не работал с портами. Теперь буду искать и набирать материал.
Вот таким способом можно будет подключиться к порту?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void connect(SerialPort port, Panel panel)
        {
            try
            {
                // Открываем порт
                if (port.IsOpen == false)
                    port.Open();
                // Соединяемся с модемом
                port.Write("AT \r");
                panel.BackColor = Color.LawnGreen;
            }
            catch (Exception ex)
            {
                panel.BackColor = Color.Red;
                MessageBox.Show(ex.Message);
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            connect(serialPort1, panel1);
        }
Добавлено через 35 минут
Скорее всего мне вот этот вариант будет ближе
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
37
38
39
40
using System.IO;
using System.IO.Ports; 
 
//далее создаем экземпляр встроенного класса SerialPort
System.IO.Ports.SerialPort port = new System.IO.Ports.SerialPort();  
 
//далее необходимо настроить порт для работы с мобильным телефоном
port.PortName = "COM10";  
 
//Время ожидания записи и чтения с порта
port.WriteTimeout = 500;port.ReadTimeout = 500;  
 
//Настраиваем скорость обмена данными с телефоном - телефон не может обрабатывать данный на максимальной скорости
port.BaudRate = 9600;  
 
//Другие необходимые настройки - подходит для большинства телефонов - но возможно придется настраивать:
port.BaudRate = 9600;
 port.Parity = Parity.None;
 port.DataBits = 8;
 port.StopBits = StopBits.One;
 port.Handshake = Handshake.RequestToSend;
 port.DtrEnable = true;
 port.RtsEnable = true;
 port.NewLine = System.Environment.NewLine;  
 
//открываем порт
port.Open(); 
 
//В зависимости от телефона возможно необходимо задерживать обмен данными
 System.Threading.Thread.Sleep(500);  
 
//Далее можем работать с телефоном посредством AT команд
//К примеру, набор номера
port.WriteLine("ATD+71111111111;"); 
 
//Положить трубку
port.WriteLine("ATH");
 
//И конечно же, не забываем закрывать порты
port.Close();
0
48 / 48 / 22
Регистрация: 18.11.2013
Сообщений: 92
27.12.2013, 01:06
да, SerialPort это то что вам нужно чтобы отправлять АТ команды, тем самым осуществляя управление модемом (это все легко как два пальца)
но, я еще раз повторяю, у вас поставлена задача передавать при звонке запись с какого то файла, я бы для начала решил эту проблему (или не решил)
0
8 / 8 / 6
Регистрация: 25.12.2013
Сообщений: 192
27.12.2013, 17:39  [ТС]
Решил упростить задачу. Сделать без автоответчика. Обзвон по списку абонентов и если абонент трубку не поднял(т.е. время разговора 0мин 0 сек) звонок следующему и по оканчанию списка обзвон абонентов до которых не дозвонился.
0
8 / 8 / 6
Регистрация: 25.12.2013
Сообщений: 192
28.12.2013, 23:02  [ТС]
Подскажите пожалуйста, как получить в textBox номер входящего телефона кторый звонит на модем. Сам разговор мне не нужен
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
28.12.2013, 23:38
Послать запрос вида:

AT+CLIP (номер)
AT+CLCC (состояние вызова)

В текстбокс занести ответ, парсить.

Контролировать городской телефон
0
8 / 8 / 6
Регистрация: 25.12.2013
Сообщений: 192
29.12.2013, 10:22  [ТС]
Цитата Сообщение от raxp Посмотреть сообщение
Послать запрос вида:

AT+CLIP (номер)
AT+CLCC (состояние вызова)

В текстбокс занести ответ, парсить.

Контролировать городской телефон
Это событие поместить в таймер или в DataReceived???
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
29.12.2013, 10:57
Методика следующая: если поступает входящий вызов, то в событии OnDataReceived() появляется текст, содержащий слово 'RING' (парсим на его наличие), при его обнаружении можем послать в COM порт через метод WriteLine() обертки SerialPort запрос вида 'AT+CLIP', после чего терминал пришлет ответ вида '+....'. Этот ответ отлавливаем (парсим) в событии OnDataReceived(). Все.
1
8 / 8 / 6
Регистрация: 25.12.2013
Сообщений: 192
29.12.2013, 11:12  [ТС]
А есть примерчик
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
29.12.2013, 11:22
Уж вроде разжевал.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            string indata = sp.ReadExisting();
           this.Invoke((MethodInvoker)delegate
           {
                textEdit1.Text = indata; // тут все, что пришло (следует учесть, что неотображаемые символы и переводы строк не будут визуализированы, лучше использовать байтовое отображение данных в HEX)
 
 // ТУТ парсим на наличие RING
 // ...
 // --
 
 // ПРИ обнаружении защелкиваем флаг (триггер) и подаем команду запроса номера в буфер команд
 port.WriteLine("AT+CLIP"); // этот вызов необходимо вынести за пределы процедуры и завести буфер команд
 
 // ВНИМАНИЕ! По выполнению отправки запроса, логический флаг (своего рода триггер-защелка, да просто логическая переменная глобальная, ферштеен?) поднят,
 // при этом в событии приема данных по поднятому флагу начинаем парсить наличие ответа на заспрос  AT+CLIP
 // придет ответ вида '+CLIP: +7995234234324'
 // как только отпарсите наличие  ': +', значит есть ответ, содержащий номер, значит может выделить номер звонящего
 // если выделен номер звонящего, логический флаг проверки номера опускаем (false)
 
            });
        }
Надеюсь, парсить умеете, найти кусок текста в тексте?
1
8 / 8 / 6
Регистрация: 25.12.2013
Сообщений: 192
30.12.2013, 19:00  [ТС]
У меня после команды AT+CLIP приходит ОШИБКА.
Вот мой проект
Вложения
Тип файла: rar GSM Test.rar (65.2 Кб, 31 просмотров)
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
30.12.2013, 19:39
Тогда следует уточнить по спецификации на модем, какой набор AT команд поддерживает терминал. Или в гипертерминале послать: 'AT+CLIP?'.

На 'AT+CLCC' чаво выдает?

p.s.: символ окончания ввода кто добавлять будет?
0
8 / 8 / 6
Регистрация: 25.12.2013
Сообщений: 192
30.12.2013, 20:06  [ТС]
Цитата Сообщение от raxp Посмотреть сообщение

p.s.: символ окончания ввода кто добавлять будет?
А что я не поставил? А попоповоду команды, только завтра смогу посмотреть((( У меня вопрос еще есть...Вот я сделал проверку на NO CARRIER из DataReceived. А можно её делать из потока вызва, т.е. после команды вызова телефона. Пытался сделать и постоянно выдала ошибка, что время истекло(но вызов проходил). Пытался решить методом установления еще одной паузы после вызова
C#
1
System.Threading.Thread.Sleep(2000);
.
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
30.12.2013, 20:12
Событие DataReceived() и так происходит в отдельном потоке по приходу данных, в нем проверка и парсинг будет самым разумным решением.

Добавьте в логику парсера следующее: есть буфер команд, есть сопоставленные им логические флаги отправки и выполнения (полученные в процессе приема). Пришел некий ответ: проходимся по всем забитым нами ответам и проверяем выполнение (устанавливаем флаг выполнения или ошибки). Вот этот буфер команд и флагов - своего рода многомерный массив (матрица) ввиду того, что он глобальный уже можно контролировать из другого потока. Необязательно массив-матрица, это могут быть динамические списки, объекты, в общем в чем вам удобнее хранить.

.Sleep(2000);
избегайте всяческих слипов вообще, отсчет интервалов можно делать в отдельном потоке (таймере) с дополнительными флагами (триггерами).
0
8 / 8 / 6
Регистрация: 25.12.2013
Сообщений: 192
02.01.2014, 19:47  [ТС]
С наступившим Новым Годом всех!!!!
У меня, как всегда несколько вопросов:
1)Пытаюсь отправить СМС. Через HyperTerminal все ОК. А вот как завести в свою прогу не знаю. Затык вот на чем. После появления символа > надо ввести текст(textBox1) и нажать Ctrl+Z. делал вот так пока
C#
1
2
3
4
5
private void button11_Click(object sender, EventArgs e)
        {
            serialPort1.WriteLine("AT+CMGF=1");
            serialPort1.WriteLine("AT+CMGS =\"+79*********\"");
        }
2) Как результат команд записать в соответствубщий textBox
C#
1
2
3
serialPort1.WriteLine("AT+CGMI");   //производитель
            serialPort1.WriteLine("AT+CGMM");//Модель модема
            serialPort1.WriteLine("AT+CGSN");//IMEI модема
событие serialPort1_DataReceived улавливает все команды от модема и мне не очень удобно выбирать от туда заданные команды. пробовал вот так
C#
1
2
3
4
5
6
7
8
9
private void button10_Click(object sender, EventArgs e)
        {
            serialPort1.WriteLine("AT+CGMI");
            serialPort1.WriteLine("AT+CGMM");
            serialPort1.WriteLine("AT+CGSN");
 
            string result = serialPort1.ReadLine();
            MessageBox.Show(result); ;
        }
3) Нашел кое что на даный модем и написано , что ответ на USSD запрос и входящее СМС на русском будут отображаться в UTF-16BE кодировке. Что это такое? В инете и Visual studio только UTF-16
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.01.2014, 19:47
Помогаю со студенческими работами здесь

Посоветуйте промышленный GSM SMS шлюз для приёма SMS и передачи по GPRS на сервер
Всем привет. На работе появилась необходимость в устройстве смс шлюзе, который физически будет размещаться в зоне действия сотовой связи и...

модем cinterion mc35i
Доброго дня! Имеется GSM модем CINTERION mc35i, возможно кто-то уже задавался данным вопросом. Возможно ли каким либо способом, будь то...

GSM модем МУР 1001.9 GSM/GPRS TLT
Народ, такое дело, пытаюсь создать "коридор" из 2 GSM модем МУР 1001.9 GSM/GPRS TLT. Дело такое, их много и некоторые не работают, если 2...

Send SMS using GSM Modem
Может есть у кого исходник отправки SMS используя GSM модем через ком порт. Как работать с этим.

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru