Hola: Quiero pedir ayuda para resolver un problema con la configuración del SerialPort1 relativo a su velociad en bps.
Tengo Ubuntu 18.04 64 bits, Gambas3. Mi proyecto ya tiene definido el gb.net. El programa no manda ningún mensaje de error, pero al enviar datos por el puerto serial (/dev/ttyS0, con sus permisos correspondientes) el receptor no responde. Así que viendo las señales con el osciloscopio y esperando observar la emisión de un solo
byte, la señal debería tener una duración de 1.04 ms aproximadamente, para 9600 bps. Sin embargo la señal que se emite es de 2.1 ms ( correspondiendo a una velocidad de aproximadamente 5000 bps) y esa es la razón por la que el receptor no recibe. Probé a 19200 bps y sigue resultando una señal de 2.1 ms. Así que algo debo estar haciendo mal. Esta es la configuración del puerto:
SerialPort1.PortName = "/dev/ttyS0"
SerialPort1.DataBits = "8" 'SerialPort.Bits8
SerialPort1.FlowControl = SerialPort.none
SerialPort1.Parity = SerialPort.None
SerialPort1.Speed = "9600"
SerialPort1.StopBits = "1" 'SerialPort.Bits1
'Sp.Open
Por favor si alguien tiene la amabilidad de darme una idea de cómo lo puedo solucionar, se lo agradeceré mucho.
Nota: En gambas2 esto no sucedía.
Gambas3: SerialPort1.Speed No Acepta Configuracion
Objetivo: Re: Gambas3: SerialPort1.Speed No Acepta Configuracion
Lo siento, pero no te puedo ayudar con ese tema, peor me viene a la mente que hay algo de estas cosas en el foro.
Saludos.
AlfredoSC escribió:
Lo siento, pero no te puedo ayudar con ese tema, peor me viene a la mente que hay algo de estas cosas en el foro.
Saludos.
Objetivo: Re: Gambas3: SerialPort1.Speed No Acepta Configuracion
Después de leer algunos de los temas del foro y hacer varios cambios, me puse a analizar el oscilograma: Yo envío como prueba un solo byte, por facilidad el "7" es decir 0x37. En el osciloscopio aparecen 2 bytes seguidos, el 0x37 y el 0x0A, por eso era la duración de 2.1 ms. De dónde viene esa 0x0A (?) me pregunté. Entonces en mi sentencia puse un ; al final, así
Print #SerialPort1, dato;
y se envío únicamente el 0x37 ("7") con duración de 1 ms. Así que el tema está solucionado y ese ; al final es muy importante. Sin embargo la literatura de SerialPort debería considerar describir, que si no se usa ; Gambas3 adicionará un LF (0x0A) por default, aunque empiezo a sospechar que es obvio....De todos modos Gracias por leer el tema y saludos.
tincho escribió:
Después de leer algunos de los temas del foro y hacer varios cambios, me puse a analizar el oscilograma: Yo envío como prueba un solo byte, por facilidad el "7" es decir 0x37. En el osciloscopio aparecen 2 bytes seguidos, el 0x37 y el 0x0A, por eso era la duración de 2.1 ms. De dónde viene esa 0x0A (?) me pregunté. Entonces en mi sentencia puse un ; al final, así
Print #SerialPort1, dato;
y se envío únicamente el 0x37 ("7") con duración de 1 ms. Así que el tema está solucionado y ese ; al final es muy importante. Sin embargo la literatura de SerialPort debería considerar describir, que si no se usa ; Gambas3 adicionará un LF (0x0A) por default, aunque empiezo a sospechar que es obvio....De todos modos Gracias por leer el tema y saludos.
Objetivo: Re: Gambas3: SerialPort1.Speed No Acepta Configuracion
Hola
Me alegra que lo hayas podido solucionar. Aunque en el pasado he utilizado bastante el puerto serie en mis programas (para comunicarme con transceptores de radio), no lograba entender tu problema sin saber cómo estabas enviando y leyendo el puerto. Aún así, me llamó la atención que le pases una cadena a los parámetros del puerto en lugar de enteros, que es lo que almacenan las constantes que se deberían usar (SerialPort.BitsX). Me imagino que gambas hará la conversión internamente.
En cualquier caso, enhorabuena y bienvenido, estamos aquí para ayudar siempre que podamos.
Saludos
Me alegra que lo hayas podido solucionar. Aunque en el pasado he utilizado bastante el puerto serie en mis programas (para comunicarme con transceptores de radio), no lograba entender tu problema sin saber cómo estabas enviando y leyendo el puerto. Aún así, me llamó la atención que le pases una cadena a los parámetros del puerto en lugar de enteros, que es lo que almacenan las constantes que se deberían usar (SerialPort.BitsX). Me imagino que gambas hará la conversión internamente.
En cualquier caso, enhorabuena y bienvenido, estamos aquí para ayudar siempre que podamos.
Saludos
Objetivo: Re: Gambas3: SerialPort1.Speed No Acepta Configuracion
La función "Print" escribe un flujo de datos de manera formateada, ponendo en fin el valor &0A (0x0A). ...típicamente una cadena de caracteres.
Para evitar este formateo, tienes que usar la función Write: http://gambaswiki.org/wiki/lang/write?nh
AlfredoSC escribió:
La función "Print" escribe un flujo de datos de manera formateada, ponendo en fin el valor &0A (0x0A). ...típicamente una cadena de caracteres.
Para evitar este formateo, tienes que usar la función Write: http://gambaswiki.org/wiki/lang/write?nh
Objetivo: Re: Gambas3: SerialPort1.Speed No Acepta Configuracion
Habiendo consultado el link que envías, encontré este Warning: When writing a string, the length of the string is sent before the string contents. "Cuando se escribe un string (cadena), la longitud del string es enviada antes del contenido del string", lo cual nos lleva al envío de 2 bytes; la longitud y la cadena, por lo que Write podría llevarme otra vez al problema original, que opinan?
vuott escribió:
Habiendo consultado el link que envías, encontré este Warning: When writing a string, the length of the string is sent before the string contents. "Cuando se escribe un string (cadena), la longitud del string es enviada antes del contenido del string", lo cual nos lleva al envío de 2 bytes; la longitud y la cadena, por lo que Write podría llevarme otra vez al problema original, que opinan?
Objetivo: Re: Gambas3: SerialPort1.Speed No Acepta Configuracion
Si especificas la longitud de la cadena a continuación de dicha cadena, no. Sólo se envía la cadena.
WRITE [ # Stream , ] String [ , Length ]
Lo que pasa es que es opcional, en caso de no especificar la longitud, entonces sí que se envía ese dato. Para obtener la longitud de la cadena previamente al envío puedes hacer esto:
Es recomendable el uso de las funciones de cadena String porque se tienen en cuenta los caracteres UTF8 especiales, que como sabes, ocupan 2 bytes en lugar de 1. De otro modo, la cadena enviada podría quedar truncada al final si contiene algún carácter acentuado o especial.
Saludos
AlfredoSC escribió:
Si especificas la longitud de la cadena a continuación de dicha cadena, no. Sólo se envía la cadena.
WRITE [ # Stream , ] String [ , Length ]
Lo que pasa es que es opcional, en caso de no especificar la longitud, entonces sí que se envía ese dato. Para obtener la longitud de la cadena previamente al envío puedes hacer esto:
Es recomendable el uso de las funciones de cadena String porque se tienen en cuenta los caracteres UTF8 especiales, que como sabes, ocupan 2 bytes en lugar de 1. De otro modo, la cadena enviada podría quedar truncada al final si contiene algún carácter acentuado o especial.
Saludos
Página 1 de 1
No puede crear mensajesNo puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario
Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.
Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo
Página generada en:: 0.5291s (PHP: -85% SQL: 185%)
Consultas SQL: 45 - Debug off - GZIP Activado