|
Página 1 de 1
|
Gambas3: SerialPort1.Speed No Acepta Configuracion
Autor |
Mensaje |
AlfredoSC
Usuario
Registrado: Febrero 2020
Mensajes: 5
Edad: 65
|
Gambas3: SerialPort1.Speed No Acepta Configuracion
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.
|
#1 Viernes, 07 Febrero 2020, 00:49 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Gambas3: SerialPort1.Speed No Acepta Configuracion
AlfredoSC escribió: Hola: Quiero pedir ayuda para resolver un problema con la configuración del SerialPort1 relativo a su velociad en bps....
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.
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.
|
#2 Viernes, 07 Febrero 2020, 20:34 |
|
|
AlfredoSC
Usuario
Registrado: Febrero 2020
Mensajes: 5
Edad: 65
|
Re: Gambas3: SerialPort1.Speed No Acepta Configuracion
tincho escribió: AlfredoSC escribió: Hola: Quiero pedir ayuda para resolver un problema con la configuración del SerialPort1 relativo a su velociad en bps....
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.
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.
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.
|
#3 Sabado, 08 Febrero 2020, 23:45 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
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
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#4 Domingo, 09 Febrero 2020, 12:10 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Gambas3: SerialPort1.Speed No Acepta Configuracion
AlfredoSC escribió: 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
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
|
#5 Domingo, 09 Febrero 2020, 14:59 |
|
|
AlfredoSC
Usuario
Registrado: Febrero 2020
Mensajes: 5
Edad: 65
|
Re: Gambas3: SerialPort1.Speed No Acepta Configuracion
vuott escribió: AlfredoSC escribió: 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
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
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?
|
#6 Domingo, 09 Febrero 2020, 17:30 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Gambas3: SerialPort1.Speed No Acepta Configuracion
AlfredoSC escribió: "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?
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
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#7 Domingo, 09 Febrero 2020, 20:55 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No 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
|
|
|
|
|