Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2010, 22:18   #1
Rek322
 
Регистрация: 10.03.2010
Сообщений: 4
По умолчанию Отправка СМС сообщений

Ребята, помогите пожалуйста! Я создал программу для отправки СМС сообщений с компьютера с помощью мобильного телефона с использованием базы данных Access на языке Delphi 7. Но программа работает только для двух абонентов (То есть отправляет только двум абонентам из всего списка). Вопрос в том, в чем я просчитался? Ошибка в этом коде, помогите найти его. Заранее спасибо!!

Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
for i:= 1 to CheckListBox1.Items.Count do
begin
if  CheckListBox1.Checked[i-1] = true then
begin
pdu.Clear;
  adotable1.RecNo:=i;
lengt:='07';
  typ:='91';
  service:=sernum(edit2.Text) ;
  SMSDELIVER:='11';
  AddressLength:=inttohex(11,2);
  typ2:='81' ;
  TPPID:='00';
  TPDCS:='08';
  time:='FF';
  {datalen:='20';}
  number:=numb(adotable1.Fields[4].AsString) ;
  smslen:=inttohex(length(edit7.Text)*2,2);
  pdu.Text:=lengt+typ+service+SMSDELIVER+'00'+AddressLength+typ2+
  number+TPPID+TPDCS+time+smslen+smstext(edit7.Text,length(edit7.Text))+chr(26);
comport1.WriteStr('AT+CMGS='+(floattostr(14.3+(length(edit7.Text)*2)))+#13#10);
 sleep(5000);
comport1.WriteStr(pdu.Text+#13#10);
sleep(5000);
application.ProcessMessages;
end;
end;
showmessage('Все сообщения отправлены !!!');
end;

Последний раз редактировалось Stilet; 11.03.2010 в 09:02.
Rek322 вне форума Ответить с цитированием
Старый 10.03.2010, 22:53   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

1- для начала в самом цикле проверьте саму выборку номера adotable1.Fields[4].AsString, скажем в memo, чтобы визуально убедиться что все номера выходят
2- floattostr(14.3+(length(edit7.Text) *2)) интересная конструкция и чавой-это у меня так
Код:
'AT+CMGS='+inttostr(length(txt.text)*2)+#13+#10
3- pdu.Text+#13#10 -перевод строки лишний, у вас в pdu.text уже есть признак отправки для модема #26


p.s.: ну вот скажем мне-то понятно, что и откуда берется, но было-бы хорошим тоном приводить весь код или сам проект
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 10.03.2010, 23:30   #3
Rek322
 
Регистрация: 10.03.2010
Сообщений: 4
По умолчанию

Номера все входят, пробовал в место команды отправить, команду сохранить в телефоне.
comport1.WriteStr('AT+WMGS(в место CMGS)='+(float tostr(14.3+(length(edit7.Text)*2))) +#13#10); сохраняет все отмеченные, но вот почему не отпровляет? Весь код программы не буду вписывать т.к. он занимает 87 страниц.

Последний раз редактировалось Rek322; 10.03.2010 в 23:35.
Rek322 вне форума Ответить с цитированием
Старый 10.03.2010, 23:51   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...что такое 14.3 ...пробовали-ли убрать #13#10 после #26 ...код в расширенном режиме можно прилагать в виде файла ...sleep это конечно хорошо, но у вас нет обратной связи от телефона.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 10.03.2010 в 23:54.
raxp вне форума Ответить с цитированием
Старый 11.03.2010, 00:05   #5
Rek322
 
Регистрация: 10.03.2010
Сообщений: 4
По умолчанию

14.5 это для телефона. Если я уберу #13#10 то откуда я узнаю состояние сообщения?
Rek322 вне форума Ответить с цитированием
Старый 11.03.2010, 00:30   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Код:
function readcom: string;
var RX_Count : cardinal;
    TempArray: array[1..255] of Byte;
    Count    : Integer;
begin
 result:= '';
 ReadFile(Com, TempArray, 255, RX_Count, nil);
 for Count:= 1 to RX_Count do result:= result + Chr(TempArray[Count])
end; 

...
  sendcom('AT+CMGS='+inttostr(length(txt.text)*2)+#13+#10);
  application.ProcessMessages;
  sleep(1000);
  memo.Lines.Add(trim(readcom)); // состояние
  sendcom(pdu.Text+#26);
  sleep(5000);
  memo.Lines.Add(trim(readcom)) // состояние
...
но sleep это не есть хорошо.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 12.03.2010, 18:22   #7
Rek322
 
Регистрация: 10.03.2010
Сообщений: 4
По умолчанию

Спасибо тебе raxp! Но я уже сам понял, надо было sleep(5000); побольше поставить, ведь на каждую СМСку уходит примероно sleep(1666).
Rek322 вне форума Ответить с цитированием
Старый 12.03.2010, 21:18   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...именно поэтому желательно использовать буфер комманд, скажем по таймеру и обрабатывать прием-ответы, тогда система не будет зависеть от того отправилось-ли оно или собственно разных задержек.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка SMS сообщений RUBEY Компоненты Delphi 11 25.06.2011 17:40
Отправка сообщений CalvinKlein Работа с сетью в Delphi 1 27.01.2010 20:46
автоматическая отправка сообщений DeDoK Общие вопросы Delphi 3 16.10.2008 08:50
Отправка сообщений в окно alexeyd Win Api 1 25.03.2008 13:32
отправка сообщений Pitbull Работа с сетью в Delphi 6 03.08.2007 17:06