- •Методичні вказівки
- •Лабораторна робота №5 Розробка програмного забезпечення для управління gsm-модемом. Передача та прийом даних через com-порт за допомогою радіомодулів.
- •5.1. Мета роботи
- •5.2. Теоретичні відомості
- •5.2.1. Основні відмомсті про gsm
- •5.2.2 Розробка программного забезпечення
- •Написати в події OnClick кнопки надіслати смс прописати наступну функцію
- •5.5. Порядок виконання роботи
- •Лістинг ініціалізації com-портру має наступний вигляд
- •5.3. Програма роботи
- •5.4. Обладнання та програмне забезпечення
- •5.6. Контрольні запитання.
5.2.2 Розробка программного забезпечення
В загальному випадку принципи передачі команд для управління модемом аналогічні до принципів передачі звичайних рядків через COM-порт. Єдиною відмінністю є передача спеціальних символів таких як перехід на новий рядок, символи табуляції та комбінація клавіш Ctrl+Z.
Для початку необхідно розглянути передачу АТ команди в чистому її вигляді.
Процедура передачі АТ команди в Builder C++ має наступний вигляд:
str_buf= «АТ-команда»;
str_buf.cat_sprintf("\r");
WriteFile(hCOM,str_buf.c_str(),str_buf.Length(),&dwWrite,NULL);
Де str_buf змінна типу AnsiString являється текстовим рядком який і є самою АТ командою.
Процедура виклику абоненда має наступний вигляд.
AnsiString str=”380#########”; //номер телефону
AnsiString call="ATD"; //АТ-команда дзвінка
str.Delete(1,2); //Вилучення з рядка str першого символа
str_buf =call+str+";"; //Об’єднання рядків call і str, запис результату в буфер ;
str_buf.cat_sprintf("\r"); //Додавання символа кінця рядка (команди)
WriteFile(hCOM,str_buf.c_str(),str_buf.Length(),&dwWrite,NULL); //Передача команди в COM
Проедура Завершення виклику має наступний вигляд
AnsiString stopcall="ATH0"; //Запис в рядок stopcall початку АТ команди
str_buf=stopcall; //Запис команди в буфер
str_buf.cat_sprintf("\r"); //Додавання символа кінця рядка
WriteFile(hCOM,str_buf.c_str(),str_buf.Length(),&dwWrite,NULL); //Передача команди в COM
Передача смс повідомлення через GSM модем складається з таких етапів
Передача команди передачі СМС
Зчитування відповіді «>» - дозвіл набору тексту СМС
Набір і передача СМС
Передача комбінції Секд+Z
Отримання відповіді про стату СМС
Організувати передачу СМС пожна наступним чином:
Написати в події OnClick кнопки надіслати смс прописати наступну функцію
AnsiString sms="AT+CMGS="; //команда передачі СМС
str_buf =sms+"\""+"+380#########"+"\""; //Додавання номеру телефону до команди
str_buf.cat_sprintf("\r"); //Додавання символа кінця рядка
WriteFile(hCOM,str_buf.c_str(),str_buf.Length(),&dwWrite,NULL);//Передача команди в COM
smssend=true; //Змінна, яка вказує на наявну передачу СМС в програмі.
Організувати отримання відповіді GSM, символа “>”; після отримання його з COM-порту потоком і здійснити введення смс та передача комбінції Ctrl+Z
AnsiString ANS; //Змінна відповіді модема
for(int i=0; i<dwRead; i++) //Перебрати всі прийняті байти
{
//Якщо серед прийнятих байтів є “>”, то записати цей символ в Edit9
if(char(Buf[i])=='>' && Form1->smssend==true) {
str_buf=”тут пишеться текст повідомлення”;
str_buf.cat_sprintf("\r");
WriteFile(hCOM,str_buf.c_str(),str_buf.Length(),&dwWrite,NULL); //Передача str_buf в COM
str_buf = char(26); //комбінація Ctrl+Z;
str_buf.cat_sprintf("\r");
WriteFile(hCOM,str_buf.c_str(),str_buf.Length(),&dwWrite,NULL); Передача комбінації Ctrl+Z;
}
Form1->smssend=false;
Form1->Edit9->Text="Відправлено";//Запис в текстове поле «Відповідь модема» рядка «Відправлено»
}
