¿Cómo configuro y me comunico con un puerto serie?

votos
41

Necesito enviar y recibir datos a través de conexiones en serie (RS-232 y RS-422).

¿Cómo configuro y me comunico con esa conexión? ¿Cómo averiguo cuáles deberían ser los ajustes de configuración (por ejemplo, la velocidad en baudios) y cómo los configuro?

En particular, estoy buscando hacer esto en Java, C / C ++ o uno de los principales shells de Unix, pero también tengo cierto interés en la programación en serie usando Windows / Hyperterminal.

Publicado el 06/08/2008 a las 04:19
fuente por usuario
En otros idiomas...                            


11 respuestas

votos
28

¿Construir una máquina del tiempo y volver a 1987? Ho ho.

Ok, no más comentarios sarcásticos.

¿Cómo averiguo cuáles son los ajustes de configuración (por ejemplo, la velocidad en baudios)?

Lea la hoja de datos? Bien bien. En serio, el último. Si no conoce la velocidad en baudios del dispositivo con el que está tratando de comunicarse, tiene dos opciones. Comience a adivinar, o posiblemente reventar un o-scope. Si necesita un buen punto de partida, permítame sugerir 9600-8-N-1. Mi sospecha es que puedes llegar allí con la fuerza bruta relativamente rápido. Hay una tercera opción de tener un ninja de la vieja escuela que puede decir simplemente por el MIRAR de los personajes ilegibles a una velocidad en baudios estándar cuál es la velocidad en baudios real. Un truco de fiesta impresionante para estar seguro.

Espero que tengas acceso a esta información. En Unix / Linux, puedes obtener minicom para jugar directamente con el puerto serie. Esto debería hacer que sea bastante rápido obtener la configuración resuelta.

una de las principales conchas de Unix

En Unix, los puertos serie se mapean en el subdirectorio / dev /. ttyS0, por ejemplo. Si configura la velocidad de transmisión correcta y otras cosas utilizando minicom, incluso puede enviar material a ese archivo para enviar material.

En lo esencial de la cuestión, puede acceder a ella programáticamente a través de los encabezados POSIX. termios.h es el más grande.

Ver: http://www.easysw.com/~mike/serial/serial.html#3_1 (NO DISPONIBLE MÁS)

pero también tengo cierto interés en la programación en serie usando Windows / Hyperterminal.

Hyperterminal y minicom son básicamente el mismo programa. En cuanto a cómo Windows le permite acceder al puerto serie, dejaré esa pregunta para otra persona. No he hecho eso en Windows desde los días Win95.

Respondida el 06/08/2008 a las 04:27
fuente por usuario

votos
10

Si quiere codificar en Java, realmente recomiendo SerialPort Serial . Es muy fácil de usar y le ahorra días de trabajo. ¡Nunca encontré una biblioteca de código abierto tan buena como SerialIO, REALMENTE!

Mi consejo: ¡no utilices el marco serial IO de Sun! Es de 1998 y está lleno de errores. Puedes usar rxtx pero serialio es mejor!

Respondida el 23/08/2008 a las 09:15
fuente por usuario

votos
8

Para C / C ++ en Windows tiene (al menos) dos opciones:

  1. Use la clase SerialPort proporcionada por .NET.
  2. Use la API de Win32. Hay un extenso artículo de MSDN que se remonta a 1995, y muchas bibliotecas gratuitas y ejemplos en la web para que comiences.

La opción .NET será mucho más fácil.

Respondida el 13/08/2008 a las 13:44
fuente por usuario

votos
4

Si necesita ser una plataforma cruzada, sugeriría mirar Boost Asio .

Respondida el 03/09/2008 a las 13:12
fuente por usuario

votos
3

Hace un tiempo escribí una aplicación de tamaño decente para enrutar conexiones desde una granja de módems hasta una dirección de red TCP / IP.

Inicialmente busqué una biblioteca Serial IO no grabada (gratis). Probé Sun's, IBM's y RxTx. Estaban bien para desarrollar la aplicación, y en las pruebas iniciales, pero en la producción demostraron ser inestables.

Finalmente pagué el SerialPort de SerialIO. Convertir más fue, literalmente, un ejercicio de cambio de importaciones, y la biblioteca ha sido absolutamente sólida: no puedo recomendarla lo suficiente. Mi aplicación se ha estado ejecutando en el campo las 24 horas del día, los 7 días de la semana, desde hace un par de años, sin que haya un solo problema para varios clientes.

Si comienzas el desarrollo usando SerialPort, tienen una mejor API y yo la usaría.

Si necesita soporte multiplataforma, Java con SerialPort fue la mejor opción que pude encontrar.

Por último, su licencia es bastante razonable siempre y cuando no esté preinstalando software en el equipo para su (s) cliente (s).

Respondida el 15/09/2008 a las 20:16
fuente por usuario

votos
3

En el trabajo, utilizamos teraterm y realterm para verificar que los datos en serie estén formateados correctamente. También tenemos un divisor de hardware con un interruptor para que podamos monitorear el tráfico a nuestra aplicación a través de un cable a otro puerto.

Windows le permite acceder al puerto serie a través de CreateFile. Eso te da un control y desde allí puedes configurar el acceso.

Respondida el 06/08/2008 a las 06:04
fuente por usuario

votos
3

Desde el otro lado, si quieres hacerlo usando C #, que se ejecutará tanto en Windows como en Linux, con algunas limitaciones (EDITAR: que puede estar desactualizado. No tengo forma de probarlo). Simplemente cree un objeto SerialPort , establezca su velocidad en baudios, puerto y cualquier otra configuración extraña, llame abiertamente sobre ella, y escriba su byte [] s. Después de toda la configuración, el objeto SerialPort actúa de forma muy similar a cualquier transmisión en red, por lo que debería ser fácil de descifrar.

Y como dice ibrandy, debe conocer todas estas configuraciones, como la velocidad en baudios, incluso antes de intentar comunicarse con cualquier dispositivo serie.

Respondida el 06/08/2008 a las 04:35
fuente por usuario

votos
2

Desde Java, la biblioteca rxtx ( NOT DISPONIBLE ANYMORE ) es bastante buena. Comienza donde quedó el marco serial IO de Sun.

Respondida el 08/08/2008 a las 21:24
fuente por usuario

votos
1

Si usted no está obligado a utilizar un compilador particular, sugiero usar Qt y en la nueva versión 5.3 se encuentra una clase dedicada a los puertos serie:

http://qt-project.org/doc/qt-5/qserialport.html

El código que va a escribir se ejecutará en todas las plataformas Qt supprited, al menos los que tienen puertos serie.

Respondida el 06/09/2014 a las 14:01
fuente por usuario

votos
1

Dependiendo del dispositivo con el que intente comunicarse, puede haber más parámetros que la velocidad en baudios, el número de bits de datos, el tipo de verificación de paridad y el número de bits de parada a considerar. Si recuerdo correctamente, los módems usan nueve líneas de la interfaz RS-232C. Algunos dispositivos como, por ejemplo, las cajas registradoras, pueden usar el apretón de manos de hardware en líneas RTS / CTS o en líneas DTR / STR.

En general, es bueno saber cómo funciona la interfaz. No puede comunicarse si la velocidad en baudios no coincide, pero la configuración incorrecta de otros parámetros podría funcionar. Por ejemplo, puede enviar fácilmente datos al dispositivo esperando 1 bit de parada con 2 bits de parada configurados. Los problemas comienzan cuando intenta recibir datos en tal caso. También puede usar un bit de paridad adecuadamente configurado como uno de los bits de parada, etc.

Respondida el 23/09/2008 a las 02:21
fuente por usuario

votos
0

He estado usando purejavacomm: Es una implementación de javax.comm escrito en Java puro + JNA

A diferencia de rxtx, no es necesario instalar un archivo DLL. Está escrito en Java puro + JNA, que resolvió el problema de la portabilidad entre Windows y Linux para mí. Debe ser fácil de portar a otro SO-es que es compatible con JNA, como Solaris y FreeBSD, pero yo no lo he probado.

Se podría esperar que una biblioteca de Java pura a la zaga de una implementación nativa como rxtx en el rendimiento, pero con moderna CPU, el cuello de botella es muy probable que sea la tasa de bits de su puerto serie, no ciclos de CPU. Además, es mucho más fácil de depurar que un / biblioteca nativa mixta Java o código nativo compilado puro.

Respondida el 18/03/2013 a las 11:59
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more