Pregunta

Tengo un módem GSM Wavecom Supremo. Escribí una sencilla aplicación que se comunica con el módem y lee los mensajes de texto que recibe.

Mi aplicación consulta el módem para obtener información sobre el número de mensajes que almacena en su memoria y si el número es mayor que 0, lee los mensajes de borrarlos de la memoria del módem. Me consultar los módem de esta manera cada pocos segundos.

Por desgracia, sin embargo, el módem cuelga cada pocos minutos y no responde a ninguna comandos AT que envío a la misma. La única solución que se me ocurrió para desbloquear la comunicación es cerrar el puerto serie y abrirlo de nuevo. Entonces todo está bien para los próximos pocos minutos después de lo cual el puerto serie tiene que ser reabierto de nuevo cuando el módem cuelga.

Se puede por supuesto ser culpa del módem, pero me pregunto si la forma en que me comunico con él está bien.

abetos de todo, abro el puerto serie del módem para las operaciones asincrónicas. Entonces me puse la estructura DCB como sigue:

GetCommState(PortHandle, DCB);
DCB.BaudRate := 115200;
DCB.ByteSize := 8;
DCB.Parity := NOPARITY;
DCB.StopBits := ONESTOPBIT;
DCB.EvtChar := #13;
SetCommState(PortHandle, DCB);
SetCommMask(PortHandle, EV_RXFLAG);

//the modem does not respond without setting these:
EscapeCommFunction(PortHandle, SETDTR);
EscapeCommFunction(PortHandle, SETRTS);

Y entonces todo lo que hago es enviar comandos AT y esperar la respuesta del módem. No uso ningún tipo de control de flujo. Todo lo que hago es esperar para el evento de comunicaciones, leer los datos de la cola del puerto en serie cuando el módem responde y escribir algunos comandos AT, seguido por el carácter # 13 para consultar el módem de mensajes.

Creo que puede haber establecido la estructura DCB inadecuadamente, por como se puede ver, no modificar algunas de sus campos. Debido a mis conocimientos en el puerto serie no es suficiente, no sé cómo configurar los RTS y DTR (activado / desactivado / apretón de manos / conmutación).

Si se han fijado algunos errores obvios en este modo de módem de manejo, le agradecería si me explicó lo que había hecho mal. Si todo está bien, por otro lado, tal vez usted tiene una idea de por qué el módem cuelga?

Gracias de antemano.

¿Fue útil?

Solución

Normalmente la configuración de DCB son las primeras cosas que debe verificar. La documentación del módem debe mencionar los valores del puerto serie. Si no busca en línea con el número de modelo de su módem.

Otros consejos

Asegúrese de que el control de flujo en el Administrador de dispositivos, el módem y el programa operativo se definen de la misma. No sé Delphi, pero creo que el DCB debe tener un campo "Banderas". Inténtelo de a 24 para el control de flujo por hardware.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top