Отправка смс через AT Command ведет себя странно

Я использую компонент ComPort для отправки SMS-сообщений через модем, проблема в том, что иногда я получаю sms, иногда не иногда я получаю команды at в теле текстового сообщения.

Вот мой код:

procedure SendSmsCosmote(numar,text : string);
const
  buf : Byte = 26;
begin
  Form1.ComPort1.WriteStr('AT+CMGF=1'+#13#10);
  Form1.ComPort1.WriteStr('AT+CMGS="'+ numar + '"'+#13);
  Form1.ComPort1.WriteStr(text);
  Form1.ComPort1.Write(buf,1);
end;

Что я делаю неправильно? И почему при чтении с модема я получаю то, что отправил по линии tx?


person opc0de    schedule 22.05.2012    source источник
comment
позаботьтесь о режиме sincron или asincron...   -  person RBA    schedule 22.05.2012


Ответы (1)


Попробуйте добавить небольшую задержку между командами (или дождитесь ответа модема, обычно "ОК").

person Harriv    schedule 22.05.2012
comment
С задержкой (в любом случае, сколько?) вы не можете быть уверены, что команда выполнена успешно, поэтому я определенно дождусь ответа и проверю его значение. - person TLama; 22.05.2012
comment
Тайм-аут в одну секунду — это хорошо. Помните, что модемы могут отвечать в подробном или числовом режиме. Иногда полезно сначала установить связь с модемом, просто отправив AT + #13#10. - person LU RD; 22.05.2012
comment
TLama: задержка — это простой способ проверить ее, а иногда и адекватное решение. - person Harriv; 22.05.2012
comment
Это все еще только мое собственное мнение, но основанное на многолетнем опыте; Я бы никогда не стал полагаться на какие-то волшебные задержки, а проверял результаты команд везде, где это возможно, и решал, что делать, если какая-то из команд не сработает. Вы тот, кто управляет модулем, и легко может случиться так, что SMS никогда не будет отправлено. Только отправка команд подряд может привести ваше приложение в неожиданное место в прошивке модуля, что совсем плохо. - person TLama; 22.05.2012
comment
@TLama: Если отправка сообщения является критической задачей, то вам, конечно, нужно позаботиться обо всем разговоре и обработать все исключения и т. д. Но если это не критично, добавление простой задержки - это намного более быстрый способ реализации и работает, вероятно, на 99,99%. времени. - person Harriv; 29.05.2012