FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
readstr + librería Comport
Hola
A ver, estoy usando comport como ya lo había comentado, pero hay unos problemas que no puedo resolver, primero que nada a veces me responde con una ÿ por delante de toda la respuesta, lo soluciono con un StringReplace, aunque la idea sería que ni me la regrese, algo andará mal Y el punto más importante es este: Estoy enviando comandos AT a un móvil, por ejemplo le envío AT y me debería responde OK, a la primera no lo hace, pero a la segunda si, luego envío por ejemplo AT+GMMI, y me responde solamente OK, osea la anterior respuesta del comando AT solo, y si de nuevo le envío AT+GMMI pues me muestra el resultado bien. AHora resulta que tengo que enviarle por ejemplo unos 3 comandos al móvil para primero configurarlo luego pedirle datos y ala, ahí el problema, que se hace un lío con las respuestas y al final me entrega todo menos lo esperado y además de que no llega a ejecutarse el último o penúltimo comando por el mismo hecho de que tendría que enviarse 2 veces el mismo comando para así recibir una buena respuesta, esto no siempre es así pero en la mayoría de los casos. ¿Cómo soluciono eso? este es mi código:
bueno, como ven creo creo que todo es correcto a excepción del 80, según he leido en la ayuda es la cantidad de datos a recibir, puede que por eso el problema.. pero ¿Qué número debería ir ahí? cabe decir que no estoy usando el evento writesrt del comport, o algo así se llame jeje Bueno, a los que lograron hacer eso por favor una mano que no puedo salir de esta.. lo que quiero es leer el sms del móvil, lo he logrado, pero por delphi no puedo de un SOLO tirón. Saludos! |
#3
|
||||
|
||||
Hola
Bueno, me respondo a mi mismo con una pregunta, cuando preguntaba de Count que cuanto debería poner es simple, el componente tiene una propiedad llamada ImputCount Mi código a quedado de esta manera:
Bueno, el último SHowmessage mi muestra la respuesta del comando AT+CGMI pero NO TODAS LAS VECES, aveces me muestra del anterior, ahí está el problema ahora, alguien que me sepa ayudar?? He probado con varios tiempos, y este es alto y a cada rato y supongo que debería solucionarlo ya, no creo que le tenga que poner 1 minuto no ?? Saludos! |
#4
|
|||
|
|||
No he seguido el hilo del principio pero ComPort usa el evento OnRxChar para detectar cualquier caracter que entra por el puerto serie, asi que deberas de separar en dos partes tu codigo, en uno el que usas para escribir en el puerto y en OnRxChar para leer lo que respondio.
Existen otros metodos de lectura, deberas de leer el archivo de ayuda que viene con el componenteEspero te sirva de algo lo que te comento.
__________________
ESTO ES UN FORO ... NO UN MÓVIL ¿Por qué no escribir de una manera comprensible para que los humanos lo podamos entender? Última edición por FGarcia fecha: 14-11-2008 a las 19:29:32. |
#5
|
||||
|
||||
Hola
Bueno, eso fué lo primero que hice, osea usar ese método del componente, pero SI o SI tengo que usarlo ? Osea pienso que de la manera que yo lo estaba haciendo es correcto, pero algo me falta o me sobra, ahora he descartado de usar este evento que me comentas por que qué pasará si tengo muuuuchas cosas que enviar y muuuuchas cosas que recibir ? Entonces "creo" que mi código se llenará de else if, else, if, por eso quería cojer manualmente la respuesta y hacer con ella lo que quiera en _cualquier_ parte de mi código, espero me sepas decir cuales son las "otras" formas de leerlo que me interesaría aprender, desde ya muchas gracias por el tiempo. Otra cosa, además si envío por ejemplo 4 comandos y luego paso a leer en el evento no tendrá la respuesta de los 3 en buffer? Cosa que tendría todo menos lo que necesito. Saludos! EDIT: bueno, esto igual responde igual que usando el evento [delphi] ComPort.Open; ComPort.WriteStr('AT' + chr(13) + chr(10)); Sleep(300); ComPort.WriteStr('AT+CGMM' + chr(13) + chr(10)); Sleep(300); ComPort.WriteStr('AT+CGMI' + chr(13) + chr(10)); Sleep(300); ComPort.ReadStr(resp, ComPort.InputCount); ShowMessage(resp);[\DELPHI] Y pues el mismo problema, en primer lugar no necesito así toda la respuesta de los 3 o más comandos en uno, necesito de cada uno, y ahí es donde ocurre el problema que os comenté con anterioridad, de que me muestra la anterior respuesta del comando anterior, y sigo pensando que puede ser el TIME, pero he probado con varios valores y altos y sigue lo mismo :S Saludos! Última edición por BlackDaemon fecha: 14-11-2008 a las 20:24:25. Razón: por que no quiero postear de nuevo xD |
#6
|
||||
|
||||
Hola
He probado tu código y cuando le doy por primera ves me sale un caracter "raro", luego a la segunda ves sin hacer un Connect := False ni nada me sale esto: http://omploader.org/veGM3 Es el caracter que les comenté en el primer post que hasta ahora no sé por qué me lo regresa :S Ahora usando tu código SIEMPRE me lo regresa, es el primero.. pero como yo lo hago aveces NO lo regresa y aveces sí, entonces no sé lo que pasa, estoy totalmente confundido de que pueda ser. En el delphi he visto que el tipo de datos AnsyChar va de #0..ÿ <- ahí el condenado símbolo, pero no entiendo por que me lo manda.. en la doc dice que ese componente recibe como comando un AnsiString y Regresa un AnsiString, que por cierto eso estaba mal en tu código, tú lo pusiste como un String. Actualmente ando usando delphi 2009 Desde ya muchas gracias Saludos |
#7
|
||||
|
||||
Hola
Bueno ya no sé qué hacer con esto, me tiene medio loco, he intentado de mil formas y no hay manera de hacerle responder como se debe al móvil, a ratos responde bien, a ratos mal, a ratos unas cadenas que ni dios entiende... a ratos se lía con regresarme los datos, pero sé que todo es por la librería, estoy usando portCom, me agrada, es fácil y todo, pero esto que me pasa me dan ganas de cambiarme a otra, he visto la que es fans el amigo Egostar, pero es muy... grande creo, además de eso no he podido instalarla en delphi 2009 xD Bueno, siguiendo con el problema este he usado varias cosas, cambiando el tiempo (pausa) entre envío y leer datos, pero nada sigue mal todo.. Aquí les muestro una captura de pantalla que estaba debugüeando, lo poco que se es apretar el F8 jeje, pero bueno, como ven al lado izquiero pone que las variables r1, r2, y r3 son la salida de cada comando AT, pero joder, ahí el problema que les digo, como ven me pone todo mal, hasta me la repite, otras veces pone signos raros, en fin, el buffer ? tiempo ? Yo? clubdelphi ? xD jodo, olvidaba la captura que tanto mencioné jeje http://omploader.org/veGQ2 Desde ya muchas gracias Saludos! |
#8
|
|||
|
|||
Como ando con el chamaco atravesado no habia dado la vuelta por aca. En la carpeta ejemplos de ComPort viene un ejemplo de aplicacion tipo consola para un modem. Por si las dudas lo pego aqui:
y del archivo de ayuda: Cita:
Cita:
Je Je si las dudas persisten el lunes regresa de vacaciones sensei egostar
__________________
ESTO ES UN FORO ... NO UN MÓVIL ¿Por qué no escribir de una manera comprensible para que los humanos lo podamos entender? Última edición por FGarcia fecha: 15-11-2008 a las 18:00:31. |
#9
|
||||
|
||||
Hola
Bueno, ese aplicación de consola ya la había visto, pero no he podido pasarla a una app de ventanas, soy nuevo en esto de delphi, lo siendo Bueno, he estado probando con otro móvil y no rengo ningún problema al recibir los datos, me llega todo perfecto como lo tengo, pero en el mío, (nokia n95) me llega cualquier cosa que ni dios entiende, no sé que pasará, en fin, ahora tengo otro problema. Resulta que tengo que estar enviando constantemente un comando AT al móvil, y no hay problema, lo hay y todo eso bien, es un comando para ver si hay un sms nuevo, cuando envío un sms y luego ejecuto la aplicación pues me lo lee sin problemas, y luego le puse que me diga que no hay sms nuevo, todo perfecto Ahora resulta que he probado enviar un sms mientras la aplicación estaba corriendo, un while infinito.. y mi sorpresa es que salta un error y creo que es de la librería, no sé cómo podría saber de donde viene el error, he debugueado y todo pero no pillo (igual soy malo para eso) bueno, y he dicho que podía capturarlo con un try, except y si hay error pues NO hacer nada.. que retorne una cadena vacía por ej. Tengo una función que envía un comando, y a esta la llamo cada X tiempo en el while
Bueno he hecho esa chapuza, y he dedudico que si el error sería al esribir/leer el puerto pues que no haga nada, pero igual sigue saltando el error. Esto creo que es por que el modem qué hará cuando recibe un sms, puesto que pienso que cuando el móvil está poniendo como que hay un nuevo SMS NO LEIDO y en eso la aplicación está pidiendo si hay uns sms NO LEIDO, y produce el error, acabo de probar y he dejado la aplicación corriendo, enviado un sms y sorpresa, no a lanzado el error, me lo a leido tranquilamente y como debería ser, y dije.. ok, le envío otro y plop, el error que les muestro más abajo, ¿Alguna idea de que pueda ser y cómo resolverlo? Este es el error, y como ven antes si lo leyó bien http://omploader.org/veGh0 La idea es hacer una aplicación que esté constantemente leyendo los NUEVOS sms del móvil saludos y me gustaría que me den ideas |
#10
|
|||
|
|||
A blackdaemon
Hola BlackDaemon.. vengo a ti cordialmente a intentar ocupar un pequeño espacio de tu tiempo, es que desde hace tiempo ando en busca de solucion a mi problema, y leyendote me doy cuenta que estas habil en estos temas. amigo, intento crear (o encontrar) un programa que sea capaz de detectar usando el modem, y mediante Caller Id, el numero telefonico de una llamada entrante, si dicho numero se encuentra dentro de una lista de numero aceptados a entrar a mi pc, este programa le deje conectarse y si el numero no se encuentra en dicha lista, simplemente deje sonar el telefono indefinidamente. Crees por favor que me puedas ayudar con esto, llevo bastante tiempo buscando y nada. Encontre un paquete de componentes que tiene algo que se parece a lo que busco, y ya logre un pedazo de programa que detecta el numero, lo reconoce en la lista pero cuando abro el puerto este no lo deja conectarse, o sea, no lo deja entrar a mi red porque windows no reconoce usuario y contraseña, esto apezar de que ese mismo usuario esta registrado en windows. No se bien si me entiendes, pero por favor intentalo y ayudame ok. sin mas. Saludos.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Componente ComPort | Mary Carmen G. | Varios | 1 | 06-08-2008 00:30:26 |
componente ComPort | pollo_c | Varios | 12 | 02-08-2008 23:14:33 |
Problemita con ReadStr | JoseFco | Varios | 4 | 30-07-2008 18:17:51 |
Problemas con ComPort 3.0 | jairo guzman | C++ Builder | 0 | 18-02-2007 00:12:31 |
comport interface | elbert | Noticias | 1 | 05-11-2006 17:12:38 |
|