Recent

Author Topic: detectar error al mandar sms por cpomandos AT  (Read 3989 times)

soymoe

  • New member
  • *
  • Posts: 17
detectar error al mandar sms por cpomandos AT
« on: January 25, 2019, 09:21:43 pm »
hola a todos, estoy tratando de hacer u n programa para mandar sms masivo usando un modulo gsm, para comunicarme con el modulo uso el componente tlazserial, yo le mando comandos por el puerto serie y el modulo responde, el programa funciona lo que me pasa es que no logro captar las respuestas del modulo para saber si hay error o el mensaje se mando con exito. aqui un ejemplo de los comandos que le envio y me responde:

AT+CMGF=1 //comando enviado

OK              ///respuesta
AT+CMGS="54154011182" //comando enviado


+CME ERROR: 765   ///respuesta con el string error
LUIS ANTONIO ORCELLET
tambien tengo instalado en lazarus el componente TComport que posee una terminal serial, pero no se como poder saber si me responde con ok o con error. me ayudan?

garlar27

  • Hero Member
  • *****
  • Posts: 595
Re: detectar error al mandar sms por cpomandos AT
« Reply #1 on: January 25, 2019, 10:36:48 pm »
Nunca he trabajado con TLazSerial. Pero ví algo que me llamó la atención.
AT+CMGS="54154011182" //comando enviado


+CME ERROR: 765   ///respuesta con el string error

asumo que 54154011182 es el número de teléfono. Si los primeros 2 dígitos son el código de pais, asumo que estás queriendo comunicarte con un celular de Argentina. de ser así el número de teléfono estaría mal ya que le faltarían dígitos.
El formato completo de un número de celular de Argentina es así:
2 dígitos código de Pais
un dígito opcional de utilidad misteriosa ~~~~
10 dígitos incluye el código de área (sin el cero) y el número del teléfono (sin incluir el prefijo de celular como 14, 15, 16 y todos los otros que vinieron después)
Code: Text  [Select]
  1. 54  [9]  12  3456  7890
  2. --   -   --  ----  ----
  3.  |   |   |         |
  4.  |   |   |         Número local
  5.  |   |   Código de área/ciudad
  6.  |   Nunca supe bien qué es este número (*)
  7.  Código de país
  8.  

Algunas aplicaciones (como WhatsApp) exigen el número 9 luego del código del país para identificar un celular. por ejemplo un celular Capital Federal sería +54 9 11 9876 5432

ETA: No sé si te sirve pero tenía que escribirlo por las dudas.....

soymoe

  • New member
  • *
  • Posts: 17
Re: detectar error al mandar sms por cpomandos AT
« Reply #2 on: January 25, 2019, 10:49:52 pm »
Gracias por  la respuesta, como dije no tengo problemas para mandar sms, el sistema funciona, logicamente el numero debe ser correcto, el tema es detectar las respuestas del modulo y obrar en consecuencia.

lucamar

  • Hero Member
  • *****
  • Posts: 1824
Re: detectar error al mandar sms por cpomandos AT
« Reply #3 on: January 25, 2019, 10:56:07 pm »
No debería ser muy difícil: envía el comando y lee la respuesta, básicamente lo mismo que si estuvieras usando un modem en los 80 :)

Si algo no funciona tendrás que mostrarnos el código que estás usando. Es imposible saber qué anda mal sin saber qué es exactamente lo que estás haciendo.
Turbo Pascal 3 CP/M - Amstrad PCW 8256 (512 KB !!!) :P
Lazarus 1.8.4 & 2.0.2 w/FPC 3.0.4 on:
(K|L)Ubuntu 12..16, Windows XP SP3, various DOSes.

soymoe

  • New member
  • *
  • Posts: 17
Re: detectar error al mandar sms por cpomandos AT
« Reply #4 on: January 25, 2019, 11:11:40 pm »
La pregunta seria: si yo mando una cadena por ejemplo: "hola", usando el componete TLazSerial, o el TComport, como hago para poder captar la respuesta, que seria: "respuesta". Lo que tengo que detectar es por ejemplo si mando el comando: "AT", tengo que saber que me responde el modulo, la respuesta puede ser "OK" o si hay ERROR, seria  el string"ERROR". no importa si los comandos son erroneos o no o para que sirve cada comando enviado, solo me interesa captar la respuesta del modulo.

lucamar

  • Hero Member
  • *****
  • Posts: 1824
Re: detectar error al mandar sms por cpomandos AT
« Reply #5 on: January 25, 2019, 11:44:56 pm »
En tu pimer post dijiste:

[...] el programa funciona lo que me pasa es que no logro captar las respuestas del modulo para saber si hay error o el mensaje se mando con exito [...]

Vale, ¿qué es lo que está haciendo tu programa? ¿Qué has intentado para leer el puerto? ¿Qué es lo que no functiona? Todo eso y más sólo puede verse si nos muestras tu código. En teoría, leer/escribir en el puerto es (casi) lo más sencillo del mundo, pero de la teoría a la realidad ... ya se sabe.
Turbo Pascal 3 CP/M - Amstrad PCW 8256 (512 KB !!!) :P
Lazarus 1.8.4 & 2.0.2 w/FPC 3.0.4 on:
(K|L)Ubuntu 12..16, Windows XP SP3, various DOSes.

soymoe

  • New member
  • *
  • Posts: 17
Re: detectar error al mandar sms por cpomandos AT
« Reply #6 on: January 26, 2019, 12:11:46 am »
lo que trate de hacer es usar el evento onRXchart del puerto para cargar un Tmemo y leer la respuesta:
Code: Pascal  [Select]
  1. procedure TFormLlamador.LazSerialRxData(Sender: TObject);
  2. begin
  3.   StrRespuesta:=LazSerial.ReadData;     //lee la respuesta
  4.   MemoRespuestas.Text:=MemoRespuestas.Text+StrRespuesta;
  5. end;                                      
el problema es que al parecer  StrRespuesta es un solo caracter y no dos o mas como la palabra 'ERROR'

lucamar

  • Hero Member
  • *****
  • Posts: 1824
Re: detectar error al mandar sms por cpomandos AT
« Reply #7 on: January 26, 2019, 12:57:52 am »
Haz
  LazSerial.RcvLineCRLF := True;
o usa algo así como:
Code: Pascal  [Select]
  1. procedure TFormLlamador.LazSerialRxData(Sender: TObject);
  2. begin
  3.   StrRespuesta := '';
  4.   while LazSerial.DataAvailable do
  5.     StrRespuesta := StrRespuesta + LazSerial.ReadData;
  6.   MemoRespuestas.Text := MemoRespuestas.Text + StrRespuesta;
  7. end;
Turbo Pascal 3 CP/M - Amstrad PCW 8256 (512 KB !!!) :P
Lazarus 1.8.4 & 2.0.2 w/FPC 3.0.4 on:
(K|L)Ubuntu 12..16, Windows XP SP3, various DOSes.