Puerto Serial Visual Basic 2005

24/07/2006 - 19:44 por Geovanny Castillo | Informe spam
Que tal amigos:

Estoy tratando de manejar el puerto serial con VB 2005. Uso el control
que viene en el, a través de programación configuro la lectura de datos
del puerto. Cuando hay datos compruebo en una bdd y escribo en el puerto
valores como 1,2,3 dependiendo del resultado, todo me funciona
correctamente hasta el momento.

Mi problema es que no puedo sincronizar bien los tiempos de lectura y
escritura del puerto (ese creo que es mi problema), el detalle es el
siguiente:

Tengo una tarjeta electrónica master que me envía al puerto serial
valores como: 01,02,03,04,05,06,07,08,09, etc hasta el 36.
Dependiendo de que valores me envíe al puerto se hace una transacción en
la bdd, por ejemplo llega el siguiente valor: 10 000100000100110, cuando
llega este valor se produce una consulta a la base y retorna valores
como 1,2,3, dependiendo de la consulta, cualquiera de estos valores debo
escribirlos en el puerto serial, lo hago tranquilamente.

Pero al seguir con la lectura, supuestamente debo seguir con el
11,12,13,14,15 etc, pero no sucede eso, le lectura del puerto inicia por
ejemplo en el 20, 21,22, etc.

He probado con el Hyperterminal el mismo ejemplo, comienzo a recibir las
señales 01,02,03, etc y cuando llego al 10, recibo el valor
000100000100110, el hyperterminal se queda ahí hasta recibir la
respuesta, una vez que le doy el valor, sigue leyendo el 11,12,13,14, etc.

Como puedo hacer que mi aplicación funcione de esta manera.

Muchas gracias por su atención

Saludos cordiales
 

Leer las respuestas

#1 Pep
26/07/2006 - 12:14 | Informe spam
Hola Geovanny,
Entiendo que es un problema de sincronia al intercambiar tramas. Si la
tarjeta electronica master, esta enviando las secuencias "01... 36" de una
manera temporizada, representa que en el tiempo de hacer la consulta a la BD
estas perdiendo el buffer de recepcion, por lo que deberias asegurarte de
gestionar un buffer circular alimentado por el disparo de un evento cada vez
que se reciben caracteres en el puerto serie.
La otra posibilidad es que la tarjeta electronica envie una secuencia cada
vez que recibe un caracter CR (13) o LF (10) y lo que este ocurriendo es que
sin querer o por casualidad estes enviando alguno de ellos, con el
consecuente salto de secuencia.
Recuerda que las instrucciones SerialPort.writeline (incluyen estos
caracteres como fin de trama).
Si crees que puedo ayudarte mas, deberias detallarme un poquito mas el
codigo que estas utilizando asi como las caracteristicas de esa tarjeta.
Saludos.
Pep Lluis,

[MVP] Visual Developer - Visual Basic


"Geovanny Castillo" escribió:

Que tal amigos:

Estoy tratando de manejar el puerto serial con VB 2005. Uso el control
que viene en el, a través de programación configuro la lectura de datos
del puerto. Cuando hay datos compruebo en una bdd y escribo en el puerto
valores como 1,2,3 dependiendo del resultado, todo me funciona
correctamente hasta el momento.

Mi problema es que no puedo sincronizar bien los tiempos de lectura y
escritura del puerto (ese creo que es mi problema), el detalle es el
siguiente:

Tengo una tarjeta electrónica master que me envía al puerto serial
valores como: 01,02,03,04,05,06,07,08,09, etc hasta el 36.
Dependiendo de que valores me envíe al puerto se hace una transacción en
la bdd, por ejemplo llega el siguiente valor: 10 000100000100110, cuando
llega este valor se produce una consulta a la base y retorna valores
como 1,2,3, dependiendo de la consulta, cualquiera de estos valores debo
escribirlos en el puerto serial, lo hago tranquilamente.

Pero al seguir con la lectura, supuestamente debo seguir con el
11,12,13,14,15 etc, pero no sucede eso, le lectura del puerto inicia por
ejemplo en el 20, 21,22, etc.

He probado con el Hyperterminal el mismo ejemplo, comienzo a recibir las
señales 01,02,03, etc y cuando llego al 10, recibo el valor
000100000100110, el hyperterminal se queda ahí hasta recibir la
respuesta, una vez que le doy el valor, sigue leyendo el 11,12,13,14, etc.

Como puedo hacer que mi aplicación funcione de esta manera.

Muchas gracias por su atención

Saludos cordiales

Preguntas similares