Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Работа с GSM телефоном

Автор: 775
Дата сообщения: 28.07.2006 20:17
Отправлено.
Автор: spoliator
Дата сообщения: 29.07.2006 16:20
Получил. Спасибо большое ,буду разбираться. Посмотрим что получится из всего этого.
Автор: level2003
Дата сообщения: 29.07.2006 21:25
775: отправь мне тоже пожалуста.
Автор: spoliator
Дата сообщения: 30.07.2006 10:16
Не могу разобраться с русским в примере. Не отсылает на русском и все тут.
Автор: level2003
Дата сообщения: 30.07.2006 11:13
spoliator, отправь плиз прогу 775`a. моя почта level2003@list.ru
Автор: spoliator
Дата сообщения: 30.07.2006 11:47
Отправил. Лови. Если получится с русским разобраться напиши.
Автор: spoliator
Дата сообщения: 30.07.2006 18:15
Подскажите как правильно сформировать текстовую строку для отправки ?
Пересылает хрень какую то...
Автор: FireZone
Дата сообщения: 31.07.2006 12:19
spoliator
Цитата:
Подскажите как правильно сформировать текстовую строку для отправки ?
char s[] = "правильная текстовая строка\n"
Автор: spoliator
Дата сообщения: 31.07.2006 16:02
Спасибо.
Автор: KhSlv
Дата сообщения: 31.07.2006 16:45
spoliator, отправь плиз прогу 775`a. моя почта KhSlv@yandex.ru
Автор: spoliator
Дата сообщения: 01.08.2006 11:32
KhSlv

Отправлена. Попробуй может чего получится....
Автор: tolyusha
Дата сообщения: 01.08.2006 16:52
и мне, пожалуйста, вышли.
ashuba @ yandex.ru
Автор: spoliator
Дата сообщения: 01.08.2006 16:57
tolyusha
Отправлено

Добавлено:
Народ ! Пишите в ПМ ! Иначе Nep нас изнахрючит. И вообще то лучше обращайтесь к владельцу исходника.

Или на Рапиду залью ?
Исходник не отправляет СМС на русском но как пример очень даже нормально.

http://www.torry.net/pages.php?id=205

SMSModule

Link with GSM Module via Serial Port, IrDA, BT
Send and receive messages
Send long messages
Support UCS2/HEX.

Советую этот компонент.

Автор: spoliator
Дата сообщения: 22.08.2006 09:18
Ну что кто нибудь чего нибудь сделал ?
Автор: level2003
Дата сообщения: 26.08.2006 14:27

Цитата:
Ну что кто нибудь чего нибудь сделал ?

написал кодирование/расскодирование в pdu для русских сообщений UCS2, сейчас заканчиваю тоже самое при 7 битном кодирование для латиницы....

to all: какую библиотеку для com-порта посоветуете использовать?
Автор: level2003
Дата сообщения: 27.08.2006 09:26
spoliator, у самого какие результаты....? Говорил SMSModule рулит. Может расскажешь, что да как там..... и что использовал для работы с com-портом.
Автор: level2003
Дата сообщения: 30.08.2006 19:54

Цитата:
В качестве "компонента" использовать класс Synaser.

to OdesitVadim:
хорошая компонента, тока очень часть вылетают ошибки.... вот допустим кусок кода...
----------------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
const cmd: array[0..2] of string = ('AT+CGMI',
'AT+CGMM',
'AT+CGMR');
var
ser:TBlockSerial;
i: integer;
rec_str: string;

begin
ser:=TBlockSerial.Create;
ser.RaiseExcept:=True;
try
ser.Connect('COM5');
ser.Config(4800, 8, 'N', 0, false, false);
for i:=0 to 2 do begin
rec_str := ser.ATCommand(cmd[i]);
if Pos('OK', rec_str) > 0 then
memo1.lines.Add(rec_str);
end;
finally
ser.free;
end;
end;
--------------------------------------------------------------------------
пишешь вместо 'AT+CGMI' -> AT+CGMI1 и пошли ошибки.
В чем проблема может быть?????????
Автор: FireZone
Дата сообщения: 30.08.2006 20:01
level2003
Цитата:
пишешь вместо 'AT+CGMI'  -> AT+CGMI1 и пошли ошибки. В чем проблема может быть?????????
Кавычки забыл
Автор: level2003
Дата сообщения: 31.08.2006 13:30
Вот еще кусок кода. Все равно вылетают ошибки! На этот раз при переводе в PDU-режим(Error.1). Телефон его поддерживает(проверял в гипертерминале). Вот такая ошибка: 'Communication error 9997: Timeout during operation'. В чем может быть проблема? Может у кого есть хороший пример на эту компоненту и русская документация? Буду благодарен.
----------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
const READ_SMS = 'AT+CMGR=';
const DELETE_SMS = 'AT+CMGD=';
const PDU_MODE_CONVERT = 'AT+CMGF=0';
const SMS_COUNT_MEMMORY = 20;
var
ser:TBlockSerial;
i: integer;
rec_str: string;
begin
ser:=TBlockSerial.Create;
ser.RaiseExcept:=True;
try
ser.Connect('COM5');
ser.Config(9600, 8, 'N', 0, false, false);
ser.AtTimeout := 5000;
// ----- переводим чтение смс в PDU-режим --------------------------------------
rec_str := ser.ATCommand(PDU_MODE_CONVERT);
if (ser.LastError <> 0) or (not ser.ATResult) then begin
Application.MessageBox('Error.1','Error.1');
Exit;
end;
// ----- считываем смс с памяти телефона ---------------------------------------
for i:=1 to SMS_COUNT_MEMMORY do begin
rec_str := ser.ATCommand(READ_SMS + IntToStr(i));
if (ser.LastError <> 0) or (not ser.ATResult) then begin
Application.MessageBox('Error.2','Error.2');
Exit;
end;
if (Pos('+CMGR', rec_str) > 0) and (Pos('OK', rec_str) > 0) then begin
memo1.lines.Add(rec_str);
rec_str := ser.ATCommand(DELETE_SMS + IntToStr(i));
if (ser.LastError <> 0) or (not ser.ATResult) then begin
Application.MessageBox('Error.3','Error.3');
Exit;
end;
end;
if (Pos('+CMS ERROR', rec_str) > 0) and (Pos('OK', rec_str) > 0) then
break;
end;
//------------------------------------------------------------------------------
finally
ser.free;
end;
end;

ЗЫ: кавычки я там не зыбыл. Но все равно спасиб за ответ.

Добавлено:
У меня щас крышу сорвет!!! С утра ошибки были где попало... щас запустил, все нормуль.. похоже дело в тайаутах. Подскажите как исправить... и пример с доками плиз... ну очень нада.

Добавлено:
еще вот такая ошибка вылетает: 'Communication error 9999: Receive framing error'. исключительные ситуации блин...

Добавлено:
Помогите, ато я вас замучаю ))

Добавлено:
написал ser.AtTimeout := 5000; но от ошбки таймаута полностью не избавился... и Receive framing error вылетает иногда.... может компонента глючная!!!
Автор: FireZone
Дата сообщения: 31.08.2006 15:22
level2003Телефон хардварно как подключен? ИК? USB? Или обычный ком-порт? Попробуй в конфиге последний параметр поставить true. Если обычный компорт, то может не помочь, потому что компортовые кабели для телефонов недоделки.

Добавлено:
Позже гляну на этот synaser и мож ещо чего подскажу.
Автор: level2003
Дата сообщения: 31.08.2006 22:20
Через USB. Сейчас попробую в true поставить. Мне впринципе без разницы какой com-компонент использовать(пробовал TComPort, но что-то у меня там тоже не срослось)... если другой окажется лучше, могу и его использовать!

Добавлено:
в шнур для телефона у меня еще встроен переключатель для питания, может он оказывает какое-то воздействие.
Автор: level2003
Дата сообщения: 02.09.2006 20:38
FireZone, не помогает. Все равно вылетают частенько ошибки.
1. На этом месте Application.MessageBox('Error.1','Error.1');
2. 'Communication error 9999: Receive framing error'
3. и реже таймаут
Автор: FireZone
Дата сообщения: 02.09.2006 21:25
level2003
framing error означает, что контроллер ком-порта не смог распознать байт в принятом пакете битов. Такое бывает при несоответствии настроек девайсов, плохом контакте в разъёмах, неисправности контроллера, повреждении кабеля. В твоём случае половина возможных неисправностей откидывается, поскольку ком-порт виртуальный.
Попробуй скорость поменять, например, на 115200. Данные-то с порта хоть какие-нибудь идут? Что попадает в rec_str?
Автор: level2003
Дата сообщения: 02.09.2006 22:32
Да я как только не менял скорость. Если с гипертерминала, то все нормуль. А вот кода прогу эту запускаю... пошло-поехало. В rec_str(receive_str) попадают данные принятые с ком-порта.
P.S.: А ты сам такую прогу не пробовал писать? Если да, то что использовал?
Автор: FireZone
Дата сообщения: 03.09.2006 07:31
level2003
Цитата:
Если да, то что использовал?
win32 API, проблем не знал. Попробовал я щас synaser. Проблема в том, что метод ATCommand весьма негибкий, посмотри его исходник. Таймаутами он реагирует на любые строки, которые не кончаются на 'OK'<CRLF> или 'ERROR'<CRLF>. А ведь телефон кроме этих кодов может еще и +CMS ERROR: <code><CRLF> выдавать. А такая ошибка возникает у тебя, когда ты запрашиваешь с телефона несущесвующую СМС. Рекомендую объявить наследника от TBlockSerial и переопределить в нём метод ATCommand своим более гибким, который сможет распознавать +CMS ERROR и +CME ERROR и даже сохранять код ошибки.

Добавлено:
У тебя в коде много лишнего. Например, проверка LastError не нужна вовсе, поскольку если оно не ноль, то возбуждается исключение. А последнее условие вообще лишено смысла:
Цитата:
if (Pos('+CMS ERROR', rec_str) > 0) and (Pos('OK', rec_str) > 0) then         break;
. А вообще, ты уверен, что в каждой читаемой ячейке есть сообщение? По-моему, лучше получать список сообщений командой AT+CMGL, а потом по номерам ячеек из списка удалять сообщения. Накидал наследника от TBlockSerial [more]
Код: unit serdesc;

interface

uses
sysutils, synaser;

type
TAdvBlockSerial = class(TBlockSerial)
protected
FCmsCode: Integer;
public
property CMSCode: Integer read FCmsCode;
function ATCommand(value: string): string; override;
end;

implementation

function TAdvBlockSerial.ATCommand(value: string): string;
var
s: string;
ConvSave: Boolean;
begin
result := '';
FAtResult := False;
FCmsCode := 0;
ConvSave := FConvertLineEnd;
try
FConvertLineEnd := True;
SendString(value + #$0D);
repeat
s := RecvString(FAtTimeout);
if s <> Value then
result := result + s + CRLF;
if s = 'OK' then
begin
FAtResult := True;
break;
end;
if s = 'ERROR' then
break;
if Pos('+CMS ERROR:', s) = 1 then begin
Delete(s, 1, 11);
FCMSCode := StrToInt(Trim(s));
break
end
until FLastError <> sOK;
finally
FConvertLineEnd := Convsave;
end;
end;

end.
Автор: andrew_sh
Дата сообщения: 24.10.2006 04:55
Есть проблема : неполучается получить отчет о доставке

Поле PDU заполняю так.

0 - RP (Reply Path, не используем, ставим ноль)
0 - UDHI (означает, что тело сообщения содержит заголовок)
1 - SRR (Status report request, не запрашиваем отчет о доставке)
10 - VPF (Validity Period Format, ставим всегда эти два бита в состояние 10)
0 - RD (Reject Duplicates, много писать, читаем доку :). Ставим ноль и не напрягаемся)
01 - MTI (Message Type Indicator, 01 - это SMS-SUBMIT, т.е., исходящее сообщение)

СМС доходит, все читается (Кстати если даже SRR = 0).

at+cmgl=4 Выдает только 1 старую СМСку. Что я делаю не так или что нужно настроить
СМС отправляю в ПДУ формате
Автор: FireZone
Дата сообщения: 24.10.2006 10:04
andrew_sh
Цитата:
at+cmgl=4 Выдает только 1 старую СМСку. Что я делаю не так или что нужно настроить
Входящие сообщения могут сохраняться либо в память SIM, либо в память телефона. Команда AT+CMGL выдаёт сообщения либо из той, либо из другой памяти. Переключиться на желаемую память можно командой AT+CPMS. На предыдущей странице есть пример.
Автор: NNiittrroo
Дата сообщения: 06.12.2006 15:36
Народ, помогите пожалуйста.
Никак не получается послать СМС.
Пробовал вышеописанные методы, не выходит, пишет ERROR.
Задача сводится к тому, чтобы послать смс в любом формате - текстовом, или PDU с модема Siemens MC35i. Весь инет перекопал, везде пишется хорошо, но на практике никак. Может я делаю что-то не то?
Не могли бы вы работающий пример привести? Буду очень благодарен.

Вот один из вариантов который не получается:
at+cmgf?
+CMGF: 0

OK
at+csmp?
+CSMP: 81,167,0,8

OK
at+cmgs="+79099922718",<cr>05000301020204E04E04
(ctrl+z)
ERROR

, или вот еще...

at+cmgf?
+CMGF: 0

OK
at+cmgf=1
OK
at+cmgs="+79099922718",129
> Test
(ctrl+z)
ERROR
Автор: NightSpawn
Дата сообщения: 14.01.2007 13:06
Доброго всем времени суток! Есть вопрос, на который так и ненашел ответа. Может поможете...

Телефон Samsung X100
При запросе AT+CSCS=?, выдает +CSCS: ("GSM") OK.
При запросе AT+CSCS?, выдает +CSCS: "GSM" OK.

Это получается что "UCS2" нету на X100?

Автор: FireZone
Дата сообщения: 14.01.2007 14:14
NightSpawn
Слать русские смс? Не помню точно, но по-моему в его терминале тело смс можно писать прямо по-русски, возможно, выставив кое-какие параметры текстового режима. Если найду свои старые исходники, то напишу точно. Вообще, x100 сильно ограничен в терминальных возможностях:
он не поддерживает PDUmode. А поскольку он еще и hex не поддерживает, то отправить с терминала склеенную смс в его единственно доступном textmode становится невозможным.

Страницы: 12345678

Предыдущая тема: Как удалять проекты в Builder 6.0?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.