![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отправка SMS через мобилу + COM-порт. Не могу послать AT команду. [D7, WinXP]
mvgfirst © (2004-06-29 05:12:00)Есть необходимость рассылать сообщения через мобилу. Наше описание 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);
Что я делаю не так????
Ricko (2004-08-05 11:32:00) [1]У кого нибудь есть модуль или dll декодирования сообщения в PDU формате
GuAV (2004-06-30 22:59:00) [2]
> >Может кто знает как конвертировать PDU формат SMS сообщений???
> Хм...А что такое PDU формат?
Не важно, что это, но оба на яндекс! :)
GanibalLector (2004-06-30 22:06:00) [3]>Может кто знает как конвертировать PDU формат SMS сообщений???
Хм...А что такое PDU формат?
mvgfirst (2004-06-30 21:59:00) [4]Получось. Если читать данные из порта :) Оказыватся все работает.
Теперь вопрос немного не по теме. Может кто знает как конвертировать PDU формат SMS сообщений???
mvgfirst (2004-06-30 00:18:00) [5]GanibalLector © (29.06.04 23:29) [9]
Спасибо большое :) Я понял.
А вот я еще поставил себе утилитку PortMon и смотрел что передается и читается из порат при работе через терминал. Так вот в колнке Result при операциях записи он писал Succes а при операциях чтения все время пишет TimeOut это почему?
GanibalLector (2004-06-29 23:29:00) [6]>А для чего они тайм-ауты???
Предположим,ты будешь ожидать чего-то...(ну,прием в порт) и предположим по каким-то причинам его нет.Так вот,без них,твоя прога просто зависнет.А так,посмотрел что там...ага тайм-аут,значит еще читаешь...опять тайм-аут,значит сообщение на экран,что мол ошибка.
mvgfirst (2004-06-29 23:28:00) [7]Прочитал ссылку. Когда то эксперементировал и понял для себе назначения CR - передвигает каретку в начало (как впечатной машинке) LF (LineFeeD) свдигает строку вниз. Получается если CR не указать то курсор окажется в втом же месте только на следующей строке а если CRLF то красиво переместится в начало следующей строки.
А в моей ситуации достаточно только символа #13.
mvgfirst (2004-06-29 23:23:00) [8]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> вот я и поставил :)
Хотя скорее всего большой роли не играет.
noname (2004-06-29 21:59:00) [9]А почему ты ставишь 0Ah? IMHO нужно ставить 0Ah 0Dh.
Смотри топик http://www.wasm.ru/forum/index.php?action=vthread&forum=7&topic=6314
jack128 (2004-06-29 19:16:00) [10]в своем коде ты не дожидаешься приглашения '>' естественно ничего не работает..
> Ну и что дало изменение DCB без SetCommState?
ну не помлностью код человек скопировал, ну что ж поделаешь ;-)
> mvgfirst
и таймауты не забудь выставить..
GuAV (2004-06-29 18:30:00) [11]
> меня смущает появление приглашающего значка ">" после которго
> надо вводить текст сообщения - как это отлавливать
Не поверишь :) прочитать из hPort.
GuAV (2004-06-29 18:18:00) [12]Ну и что дало изменение DCB без SetCommState?
mvgfirst (2004-06-29 15:59:00) [13]Люди??? Нежели никто не писал терминальных программок? Или программ обмена сообщениями с модемом???
Подсобите - укажите на место где я не прав? В чем ошибка?
mvgfirst (2004-06-29 13:03:00) [14]Никто ничего не подскажет??? Неужели никто не сталкивался???