Текущий архив: 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