FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Lectura de tramas: <SYN><DLE><STX> ... <DLE><ETX>
Hola,
Estoy realizando una aplicación que lee datos del puerto serie. Los datos que me llegan los almaceno en un buffer de recepción de bytes. Este buffer tiene la siguiente estructura:
Las tramas que me llegan tienen el siguiente formato: <SYN><DLE><STX> ... <DLE><ETX> Mi problema es que soy capaz de leer tramas, pero con mi forma de hacerlo parece ser que alguna se me escapa. Tiene alguien algún método para leer tramas de ese tipo??? Muchas gracias... |
#2
|
||||
|
||||
Cita:
Esperamos tu retroalimentación. Saludos. Al. |
#3
|
|||
|
|||
A continuación pongo el código con el que leo las tramas. El buffer que utilizo es un buffer circular. Uso un componente llamado TVaComm para usar el puerto serie. Cuando recibo un carácter por el puerto serie se produce el evento en el que compruebo si tengo una trama completa. El código es el siguiente:
Lo que hago primero es tomar los bytes del puerto serie y meterlos en el buffer de recepción. A continuación compruebo si hay una trama completa y si la hay la desempaqueto. Quizás no sea la forma más práctica ni ortodoxa, pero más o menos me funciona jeje Muchas gracias... |
#4
|
|||
|
|||
Cita:
Para este tipo de menesteres y desde mi experiencia con la recepción de paquetes de datos a través de puerto serial, te recomiendo que uses el componente TurboPower Async Professional (gracias amigo Al por recomendarmelo hace ya unos años ), el cual tiene dentro de sus particularidades un objeto de nombre ApdDataPacket, a este objeto le asignas una cadena de inicio y una cadena de final por ejemplo: En las propiedades del Objeto ApdDataPacket StartString = #22 [SYN] (Aunque yo usaria solo #2 [STX], a menos que requieras por fuerza el [SYN]) EndString = #3 [ETX]; y en código solo requieres hacer esto:
Al final, te olvidas de codificar y validar cada vez que recibes un caracter. Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#5
|
|||
|
|||
Gracias por tu ayuda Egostar... pero... pero...
El componente que uso es el TVaComm. Este viene junto con otra serie de componentes en un paquete llamado Async32 si no me equivoco. Otro de los componentes que trae es el TVaCapture que funciona como tu dices. Le indicas el comienzo y el fin de trama y cuando detecta ese comienzo y fin produce un evento que tiene como parámetro el contenido del paquete. El problema que me encontré es que el modem que uso devuelve los caracteres hexadecimales y el componente TVaCapture devuelve caracteres ASCII. En principio para algunas cosas me es igual, pero me he dado cuenta de un pequeño fallo. Resulta que el modem devuelve en muchas tramas el valor $00 (carácter NULL) y TVaCapture lo devuelve en el String de datos como un espacio en blanco ($20 si no me equivoco). Entonces esto a veces me lleva a error xq puede que alguna vez sí sea verdaderamente un espacio o a veces sea un NULL. Y estos valores puede que me sean necesarios saber el valor exacto. No sé si después de todo este palabrerío se me habrá entendido jeje. De todas formas... muchísimas gracias por el consejo!!! |
#6
|
||||
|
||||
Cita:
Saludos. Al. |
#7
|
||||
|
||||
Cita:
|
#8
|
|||
|
|||
Cita:
Puedes bajar los archivos de ayuda que tienen disponibles. tpapro_docs Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Lectura del USB por Interrupción | cisco | Varios | 0 | 25-10-2007 18:13:29 |
Documentacion para Generar Tramas TCP | bastardo10 | Varios | 0 | 07-06-2007 17:31:38 |
Lectura de un FTP con idHTTP | gluglu | Internet | 2 | 05-05-2007 00:35:50 |
Problema de lectura de un cd | dragondetierra | Varios | 0 | 18-02-2007 18:58:52 |
|