Задача управления отправкой, приёмом и обработкой SMS в компьютере довольно таки часто возникает на практике.
Для непрограммиста она кажется неподъёмной, а для программистов существует немеряно исходников для решения этих задач (Delphi, С++ и т.д.).
Целью этой заметки является показ возможностей Matlab для решения данной задачи. Matlab – язык очень высокого уровня с просто таки огромной библиотекой функций, позволяющей за небольшое время собирать весьма приличніе макеты и затем моделировать, а также проверять различные гипотезы.
Когда мне впервые попался в руки Matlab, я смог за неделю повторить результаты трехгодичных исследований, в которых в качестве языка программирования использовался Pascal. Это было давно, в 90-е годы. Конечно, у высокоуровневых языков есть свои недостатки, но мы это оставим для отдельного разговора.
Итак, для работы нам нужен 3G/GSM модема, у меня это Huawei E1550. К нему в интернете полно драйверов. Я себе выкачал под Windows XP. Управление модемом осуществляется с помощью АТ – команд. Их описания в интернете тоже немеряно. Для наших задач их и вовсе нужно весьма ограниченное количество:
AT+CMGF — задаёт режим работы: 0-цифровой или 1-текстовый.
AT+CMGS — отправка сообщения.
AT+CMGL — чтение сообщений с модема.
Кому-то может понадобиться AT+CMGR — чтение одного сообщения с модема и AT+CMGD — удаление одного сообщения с модема.
После того, как модем подсоединён к компьютеру, нужно также посмотреть через панель управления Windows номер виртуального СОМ порта, который отводится модему.
Далее пишем такую простенькую программку:
%Программа отправки СМС
ss=serial('COM4');
ss.baudrate=9600;
fopen(ss);
ss.Terminator = 'CR'
%char(34 ") 13 enter. 26 for ctrl z
tx ='AT';
tx1=char(13);
tx2 ='AT+CMGF=1';
tx3 ='AT+CSCS="GSM"';
tx4 ='AT+CMGS="0038ххххххх"';
tx5 ='A L L A H HO A K B A R';
tx6=char(26);
%засылаем в модем
fprintf(ss,'%s',tx);
fprintf(ss,'%s',tx1);
pause(1);
fprintf(ss,'%s',tx2);
fprintf(ss,'%s',tx1);
pause(1);
fprintf(ss,'%s',tx3);
fprintf(ss,'%s',tx1);
pause(1);
fprintf(ss,'%s',tx4);
fprintf(ss,'%s',tx1);
pause(1);
fprintf(ss,'%s',tx5);
pause(1);
fprintf(ss,'%s',tx6);
fclose(ss)
delete(ss)
clear ss В tx4 указывается номер получателя, в tx5 текст SMS. SMS-центр используется по умолчанию тот, который прописан в СИМ-карте.
В случае английского текста и цифр всё просто, сложности начинаются, когда мы хотим передавать или получать кириллицу. В этом случае нужно использовать не текстовый режим работы, а числовой и формат PDU.
Этот формат и примеры исходников в интернете тоже имеются, но всегда желательно понимать физику процессов.
На этом пока всё
удачных вам экспериментов!