Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.19;
Скачать: CL | DM;

Вниз

Отправка SMS через мобилу + COM-порт. Не могу послать AT команду.   Найти похожие ветки 

 
mvgfirst   (2004-06-29 05:12) [0]

Есть необходимость рассылать сообщения через мобилу. Наше описание AT команд. Попробовал в Хипер терминале:
Команда AT+CMGS="НомерТелефона",145 <Enter> приводит к появлению значка ">" после которого нужно написать текст сообщения и нажать Ctrl+Z и сообщение уходит на указанный номер. Проверил множество сообщений все работает.

Написал маленькую програмку на делфи - открывает порт, пишет туда команду - и в результате - не работает :(.

Причем пробовал писать другую команду например "ATDНомерТелефона" срабатывает - идет дозвон на указанный номер (это как раз команда дозвона кто не знает). А вот команда для отправки SMS не хочет работать. Может я чего то делаю не так - меня смущает появление приглашающего значка ">" после которго надо вводить текст сообщения - как это отлавливать в Делфи?

Если кого интересует вот код открытия порта и посылки сообщения

hPort := CreateFile(PChar("COM1"),GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if hPort = INVALID_HANDLE_VALUE then
 raise Exception.Create("Ошибка!");

if not GetCommState(hPort, Dcb) then
 raise Exception.Create("Ошибка");

Dcb.BaudRate := CBR_9600;
Dcb.Parity := NOPARITY;
Dcb.ByteSize := 8;
Dcb.StopBits := ONESTOPBIT;
Dcb.Flags := EV_RXCHAR + EV_EVENT2;

Это мы открыли порт

А вот команда которую я посылаю в этот порт для отсылки сообщения:

   OEMStr := "AT+CMGS="+380672621170",145"+#13+"Test"+#26;
   NumberOfBytesToWrite := Length(OEMStr);
   if not WriteFile(hPort, PChar(OEMStr)^, NumberOfBytesToWrite, FNumberOfBytesWritten, nil) then
    begin
      SetErrorString;
      raise Exception.Create(FErrorString);
    end;
    FlushFileBuffers(hPort);

Что я делаю не так????


 
mvgfirst   (2004-06-29 13:03) [1]

Никто ничего не подскажет??? Неужели никто не сталкивался???


 
mvgfirst   (2004-06-29 15:59) [2]

Люди??? Нежели никто не писал терминальных программок? Или программ обмена сообщениями с модемом???

Подсобите - укажите на место где я не прав? В чем ошибка?


 
GuAV ©   (2004-06-29 18:18) [3]

Ну и что дало изменение DCB без SetCommState?


 
GuAV ©   (2004-06-29 18:30) [4]


> меня смущает появление приглашающего значка ">" после которго
> надо вводить текст сообщения - как это отлавливать

Не поверишь :) прочитать из hPort.


 
jack128 ©   (2004-06-29 19:16) [5]

в своем коде ты не дожидаешься приглашения ">" естественно ничего не работает..
> Ну и что дало изменение DCB без SetCommState?
ну не помлностью код человек скопировал, ну что ж поделаешь ;-)

> mvgfirst
и таймауты не забудь выставить..


 
noname ©   (2004-06-29 21:59) [6]

А почему ты ставишь 0Ah? IMHO нужно ставить 0Ah 0Dh.
Смотри топик http://www.wasm.ru/forum/index.php?action=vthread&forum=7&topic=6314


 
mvgfirst   (2004-06-29 23:23) [7]

GuAV ©   (29.06.04 18:18) [3]
Ну вообще то я протупил - у меня и в коде этого нет, вернее то было, то потом я убирал, эксперементировал блин. Но вообщем то назначения я понял. Еще я вычислил что у меня ничего не работало пока я в настройках порта не поставил управление потоком Аппаратное. А как это поставить программно?

jack128 ©   (29.06.04 19:16) [5]
А для чего они тайм-ауты??? не затруднит вас объяснить на моей ситуации??? Что они дают?

noname ©   (29.06.04 21:59) [6]
А потому что в описании команды в доке написано что после параметра 145 нужно указать <CR> а не <CR> <LF> вот я и поставил :)

Хотя скорее всего большой роли не играет.


 
mvgfirst   (2004-06-29 23:28) [8]

Прочитал ссылку. Когда то эксперементировал и понял для себе назначения CR - передвигает каретку в начало (как впечатной машинке) LF (LineFeeD) свдигает строку вниз. Получается если CR не указать то курсор окажется в втом же месте только на следующей строке а если CRLF то красиво переместится в начало следующей строки.
А в моей ситуации достаточно только символа #13.


 
GanibalLector ©   (2004-06-29 23:29) [9]

>А для чего они тайм-ауты???
Предположим,ты будешь ожидать чего-то...(ну,прием в порт) и предположим по каким-то причинам его нет.Так вот,без них,твоя прога просто зависнет.А так,посмотрел что там...ага тайм-аут,значит еще читаешь...опять тайм-аут,значит сообщение на экран,что мол ошибка.


 
mvgfirst   (2004-06-30 00:18) [10]

GanibalLector ©   (29.06.04 23:29) [9]
Спасибо большое :) Я понял.
А вот я еще поставил себе утилитку PortMon и смотрел что передается и читается из порат при работе через терминал. Так вот в колнке Result при операциях записи он писал Succes а при операциях чтения все время пишет TimeOut это почему?


 
mvgfirst   (2004-06-30 21:59) [11]

Получось. Если читать данные из порта :) Оказыватся все работает.

Теперь вопрос немного не по теме. Может кто знает как конвертировать PDU формат SMS сообщений???


 
GanibalLector ©   (2004-06-30 22:06) [12]

>Может кто знает как конвертировать PDU формат SMS сообщений???
Хм...А что такое PDU формат?


 
GuAV ©   (2004-06-30 22:59) [13]


> >Может кто знает как конвертировать PDU формат SMS сообщений???
> Хм...А что такое PDU формат?

Не важно, что это, но оба на яндекс! :)


 
Ricko ©   (2004-08-05 11:32) [14]

У кого нибудь есть модуль или dll декодирования сообщения в PDU формате



Страницы: 1 вся ветка

Текущий архив: 2004.09.19;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.052 c
14-1093380584
Sanek_metaller
2004-08-25 00:49
2004.09.19
WarCraft на Battle.net


3-1093348518
Zif
2004-08-24 15:55
2004.09.19
Ошибка при удалении картинки


3-1093265990
Kraj
2004-08-23 16:59
2004.09.19
Уменьшить базу


11-1080734538
nester
2004-03-31 16:02
2004.09.19
Как в рантайм у формы поменять borderStyle?


14-1093764725
Damatrion
2004-08-29 11:32
2004.09.19
WinApi