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

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

Автор: Dzar
Дата сообщения: 22.06.2005 08:37
Нужно реализовать задачу приема и отправки смс на мобильный телефон подсоединений к ПК через COM-порт или USB. на Delphi 5 (6) (7). Если есть у когонибудь компоненты поделитесь пожалуйста... у самого есть Oxygen SMS component но без лечилки... если у кого есть лечилка помогите пожалуйста... заранее спасибо
мыло altai@altai-gtn.org
Автор: MoKC0DeR
Дата сообщения: 22.06.2005 18:16
Кампанентав не знаю, можно написать "ручками". Зависит от конкретного производителя мобилы
Автор: Dzar
Дата сообщения: 23.06.2005 10:52
был бы очень презнателен... мобила Nokia 3100 но в принципе модель не принципиально(могу купить какую нужно). подключена дата кабелем к USB или к COM
Автор: MoKC0DeR
Дата сообщения: 23.06.2005 11:09
Dzar
заходишь на сайт nokia, скачиваешь даташиты, дальше общаешься с мобилой по comm порту в соответствии со спецификациями указанымми в datasheet. Ситнаксис похож на работу с модемом по com порту (во всяком случае у самсунга).
Что вызывает затрудние я не понимаю... или может надо чтоб кто-то написал все за тебя ?
Автор: Dzar
Дата сообщения: 27.06.2005 04:15
это все понятно... меня интересует следующее: на компорт отправлять строку?
Автор: Tunga
Дата сообщения: 27.06.2005 05:38

а вот тут уже msdn рулит.
смотрим в сторону апишных функций CreateFile, WriteFile, ReadFile.
Автор: Dzar
Дата сообщения: 27.06.2005 06:42
Зачем так сложно... проблема в том что я например отправляю на компорт строку 'AT'+#13 телефон мне отвечает OK.. если посылаю например 'AT+GSN'+#13 то телефон возращает ERROR

Добавлено:
В ГИПЕРТЕРМИНАЛЕ ПОЛНОСТЬЮ АНАЛОГИЧНО
Автор: MoKC0DeR
Дата сообщения: 27.06.2005 07:42
Dzar
я не знаю наизусть все даташиты и по этому подсказать не могу, но раз возвращается ошибка - что то не верно. Возможно надо сначала дать инициализационную команду или перевести в какой-то режим или признаком завершения является не 0x0d.
А обращение с ком портом это все таки "CreateFile, WriteFile, ReadFile"
Автор: Dzar
Дата сообщения: 27.06.2005 11:59
с ком портом я работаю нормально он у меня возращает тоже самое что и терминал.. нашел еще одну рабочии команды ATI[0]..ATI4 возращают данные о телефоне..AT&F ресторе фактори сеттингс и A/ повтор команды .. остальные не работают
Автор: MisterJohn
Дата сообщения: 30.06.2005 08:08
Буквально вчера столкнулся с такой же проблемой. Для начала нашел компонент xcomdrv (http://xcomdrv.host.sk )и статью как им пользоваться - http://www.mariel.ru/article523.html, установил, скомпилировал, вроде без ошибок. При посылке команды XMODEM1.SendCommand выдает ошибку "Modem command state not present". Кто сталкивался, подскажите из-за чего ошибка.
Автор: Dzar
Дата сообщения: 29.07.2005 05:16
Я тут немного разобрался ... это просто нокия 3100 тупая... у нее какойто свой язык общения на 9230 все работает....
Только теперь другая проблема нужно при AT+CMGF=1 послать смс на русском языке...
пишу AT+CMGS="xxxxxxxxxx"#13 жду твета '>' и вгоняю текст вконце #26
Если смска на английском то все нормально.... а вот русские буквы не приходят
Если кто может помогите пожалуйста
Автор: MoKC0DeR
Дата сообщения: 29.07.2005 10:12
Dzar
hint: для русского языка используется двухбайтная кодировка
Автор: Danya
Дата сообщения: 29.07.2005 17:56
А немогли бы подсказать где найти datasheet для Samsung X100 ?
Автор: Dzar
Дата сообщения: 01.08.2005 04:34
для MoKC0DeR

Это я знаю впрос в том как их пихать в компорт... если я пишу как строку например 0430 то он в СМС так и пишит 0430... как его заставить понять что это код символа?
Автор: MoKC0DeR
Дата сообщения: 01.08.2005 07:24
Dzar
а если не как строку, а как последовательнось байт ?
Автор: rew
Дата сообщения: 01.08.2005 10:26
хорошая статья на эту тему http://www.ixbt.com/mobile/review/comp-sms.shtml
Автор: Dim2004
Дата сообщения: 01.08.2005 11:04
Dzar

Цитата:
Это я знаю впрос в том как их пихать в компорт...

Пинками ногой


Цитата:
если я пишу как строку например 0430 то он в СМС так и пишит 0430... как его заставить понять что это код символа?

Ты, небось, работаешь в режиме ASCII? Переключи в UCS2 (AT+CSCS="UCS2") и дальше суй туда Юникод (отмазка: если твой телефон так умеет).
Автор: Dzar
Дата сообщения: 02.08.2005 04:31
пробывал.... вот что получается
если пихаю как байт 04.. потом 33 то сообщение смска = '!'
если меняю at+cscs="UCS2" то как байт 04 записать сразу не получается ошибку выкидывает....
а если как строку 0433, например, не отсылает говорит ошибка.... хотя 0032 посылает и все нормально... то что нужно то и приходит.... ссылка с Ixbt на таблицу уникоде не работает.... мож я что не понимаю... помогите пожалуйста
Автор: Dim2004
Дата сообщения: 02.08.2005 12:00
Dzar

Цитата:
а если как строку 0433

Да, именно как строку. Вот что я слал на свой С-380 (строка - это, по-моему, "Привет!"):

AT+CSCS="UCS2"
AT+CMGF=1
AT+CMGS="8916*******"
041F044004380432043504420021

Если у тебя это не работает - welcome to PDU mode... никто не обещал, что заработает.


Цитата:
ссылка с Ixbt на таблицу уникоде не работает

Она находится в течение 5 минут .

Глубже не копал и копать не буду, т.к. своё любопытство удовлетворил .
Автор: gazlan
Дата сообщения: 02.08.2005 14:26
Рекомендую забыть про режим ASCII и использовать PDU - полная свобода рук. Инфы в инете - как грязи. Мануалы советую скачать у Siemens - самые подробные и точные. При отсылке SMS не забывать, что она идет в две фазы, разделяемые ответом модема '>'.
Автор: Dim2004
Дата сообщения: 02.08.2005 14:57
gazlan

Цитата:
Рекомендую забыть про режим ASCII и использовать PDU - полная свобода рук.

Количество гемора соответствует количеству возможностей .


Цитата:
Инфы в инете - как грязи.

Это точно...
Автор: Danya
Дата сообщения: 05.08.2005 17:37
А у меня другая проблема.
Я не как не могу получить ответ от телефона. Т.е Есть программа которая подключается к телефону но до него не доходят AT команды. А может они и доходят но ответа не полыучаю. Пожалуйста помогите.

Код:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Memo1: TMemo;
CheckBox1: TCheckBox;
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }


end;

var
Form1: TForm1;
ComFile: THandle; //Хэндл создаваемого нами файла
ComString: string; //(COM1, COM2 или COM3)
ComSpeed: Integer; //Скорость взаимодействия с COM-портом
Status: Boolean; //подключен или не подключен (чтобы в дальнейшем проверять статус
implementation

{$R *.dfm}

function OpenCOMPort: Boolean;
var DeviceName: array[0..80] of Char;
Device: string;
begin
Device := ComString;
StrPCopy(DeviceName, Device);
ComFile := CreateFile(DeviceName,
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if ComFile = INVALID_HANDLE_VALUE then
begin
Result := False;
Status := Result;
end
else
begin
Result := True;
Status := Result;
end;

end;

function SetupCOMPort: Boolean;
const RxBufferSize = 256;
TxBufferSize = 256;
var DCB: TDCB;
Config: string;
CommTimeouts: TCommTimeouts;
begin
Result := True;
if not SetupComm(ComFile, RxBufferSize, TxBufferSize) then
Result := False;
if not GetCommState(ComFile, DCB) then
Result := False;

Config := 'baud=' + IntToStr(ComSpeed) + ' parity=n data=8 stop=1'; //Устанавливаем скорость
if not BuildCommDCB(@Config[1], DCB) then
Result := False;
if not SetCommState(ComFile, DCB) then
Result := False;

with CommTimeouts do
begin
ReadIntervalTimeout := 0;
ReadTotalTimeoutMultiplier := 0;
ReadTotalTimeoutConstant := 1000;
WriteTotalTimeoutMultiplier := 0;
WriteTotalTimeoutConstant := 1000;
end;
if not SetCommTimeouts(ComFile, CommTimeouts) then
Result := False;
end;


procedure Connect;
begin
ComString := 'COM1';
ComSpeed := 19200;
if OpenCOMPort = true then //Открываем порт…
if SetupCOMPort = true then //…и конфигурируем его
Form1.Memo1.Lines.Add('Подключились...');
Sleep(1500); //засыпаем на полторы секунды чтобы дать время на соединение
end;

procedure Disconnect;
begin
CloseHandle(ComFile);
Form1.Memo1.Lines.Add('Отключились.');
end;


procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
Connect
else
Disconnect;

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
if Status = true then //При выходе из программы отключаемся
Disconnect;

end;

procedure TForm1.Button1Click(Sender: TObject);
var BytesWritten: DWORD;
s: string;
d: array[1..1500] of Char;
BytesRead: DWORD;
i: Integer;
Result: string;
begin
s := Edit1.Text; //Берём команды из Edit1…
s := s;
WriteFile(ComFile, s[1], Length(s), BytesWritten, nil); //…и посылаем их телефону
Result := '';
if not ReadFile(ComFile, d, SizeOf(d), BytesRead, nil) then
begin
MessageDlg('Ошибка чтения!', mtError, [mbOK], 0);
exit;
end;

s := '';
for i := 1 to BytesRead do //Считываем ответ от телефона
s := s + d[i];
Result := s;
Memo1.Lines.Add(Result); //Выводим ответ от телефона в Memo

end;

end.
Автор: OdesitVadim
Дата сообщения: 05.08.2005 17:59

Цитата:
WriteFile(ComFile, s[1], Length(s), BytesWritten, nil); //…и посылаем их телефону
Result := '';
if not ReadFile(ComFile, d, SizeOf(d), BytesRead, nil) then
begin
MessageDlg('Ошибка чтения!', mtError, [mbOK], 0);
exit;
end;

А телефон те чё, реактивный? Подождать чучуть надо перед тем, как читать.
Автор: Danya
Дата сообщения: 05.08.2005 20:45
С этим проблем нет. К тому же я уже разобрался с моей проблемой. Всем спасибо.
Автор: RQQT
Дата сообщения: 06.08.2005 00:22

Цитата:
Если есть у когонибудь компоненты поделитесь пожалуйста... у самого есть Oxygen SMS component но без лечилки...

Набор компонентов - AsyncPro ( http://sourceforge.net/projects/tpaproclx/ ). Компонент конкретно - ApdGSMPhone.
Автор: Danya
Дата сообщения: 08.08.2005 13:25
А кто может мне подсказать как перевести сообщения с телефона в нормальный читабельный вид. Я говорю про сообщения в кирилице. Я пытался разобратся в документации к PDU у меня нечего не вышло. Может подскажите алгоритм по которому можно переводить сообщения в unicod.
Автор: MoKC0DeR
Дата сообщения: 08.08.2005 15:59
Danya
hxxp://unicode.org/
под винду есть соответствующее API
Автор: Dzar
Дата сообщения: 09.08.2005 05:59

Проблема продолжается.... смс отправляется вот так
AT+CSCS="UCS2"
AT+CMGF=1
AT+CMGS="8916*******"
041F044004380432043504420021
то заместо слова "привет!" приходит " !"
может кто сталкивался?
Автор: Danya
Дата сообщения: 09.08.2005 11:06

Цитата:
под винду есть соответствующее API

Я конечно извеняюсь, но причем здесь API. Я думаю это надо самому писать.

Добавлено:
Dzar
Подскажи пожалуйста как ты получил
Цитата:
041F044004380432043504420021
?
Автор: MoKC0DeR
Дата сообщения: 09.08.2005 11:37
Danya
При том что винда позволяет переводить сообщения из win1251 в unicode
Можно и самому написать, а вот надо ли это делать ?

Страницы: 12345678

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


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