Pregunta

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

¿Cómo puedo configurar y comunicar con este tipo de conexión?¿Cómo puedo averiguar cuál es la configuración (por ejemplo,velocidad en baudios) debería ser y cómo agrego?

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

¿Fue útil?

Solución

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

Ok, no más sarcástico comentario.

¿Cómo puedo averiguar cuál es la configuración (por ejemplo,velocidad en baudios) debe ser...

Lea la hoja de datos?Ok, ok.En serio, la última.Si usted no sabe la velocidad en baudios del dispositivo que usted está tratando de comunicarse con, usted tiene dos opciones.Empezar a adivinar, o, posiblemente, el busto de un o-ámbito de aplicación.Si usted necesita un buen punto de partida, permítanme sugerir 9600-8-N-1.Mi sospecha es que se puede llegar con la fuerza bruta de una forma relativamente rápida.Hay una tercera opción de tener una vieja escuela ninja que puede indicar sólo por el ASPECTO de los caracteres ilegibles en algún estándar de la tasa de baudios de lo real de la velocidad en baudios.Un impresionante truco para estar seguro.

Esperemos que a pesar de que usted tiene acceso a esta información.En unix/linux, puede localizar el minicom para jugar con el puerto serie directamente.Esto debería hacer bastante rápido para obtener la configuración descubierto.

uno de los principales shells de Unix

En Unix el puerto serie(s) es/son asignada a archivos en /dev/ subdir.ttyS0, por ejemplo.Si la instalación de la velocidad en baudios correcta y otras cosas mediante el minicom, incluso puede gato cosas a ese archivo para enviar cosas por ahí.

A la carne de la pregunta, se puede tener acceso mediante programación a través de la POSIX encabezados.termios.h es el más grande.

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

pero también tengo un poco de interés en la programación en serie con Windows/Hyperterminal.

Hyperterminal y el minicom son básicamente el mismo programa.En cuanto a Windows le permite obtener acceso al puerto serie, te dejo esa pregunta para alguien más.Yo no he hecho esto en Windows desde Windows 95 días.

Otros consejos

Si desea código en Java realmente recomiendo SerialIOs SerialPort.Es muy fácil de usar y ahorra días de trabajo.Nunca he encontrado una librería de código libre tan bueno como SerialIO, de verdad!

Mi consejo:no utilice Sol de serie del marco IO!Es a partir de 1998 y lleno de bugs.Puede utilizar rxtx pero serialio es mejor!

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

  1. El uso de la clase SerialPort proporcionados por .NET.
  2. El uso de la API de Win32.Hay un extenso artículo de MSDN se remonta a 1995, y muchas bibliotecas y ejemplos en la web para empezar.

El .Opción RED será mucho más fácil.

Si debe ser el de la cruz plataforma, yo sugeriría mirar Boost Asio.

En el trabajo usamos teraterm y realterm para la comprobación de los datos en serie tiene el formato correcto.También tenemos un hardware splitter con un conmutador de modo que podemos controlar el tráfico de nuestra aplicación a través de un cable a otro puerto.

Windows permite el acceso al puerto serie a través de CreateFile.Que le da un mango y desde allí se puede configurar el acceso.

Hace un tiempo escribí un tamaño decente aplicación para enrutar las conexiones de una granja de módems a través de una red TCP/IP dirección.

Al principio me miró por un libre de cargas (gratis) Serial IO de la biblioteca.Traté de Sun, IBM y RxTx.Ellos estaban bien para el desarrollo de la aplicación, y en la prueba inicial, pero en la producción de cada uno de ellos resultó ser inestable.

Finalmente he pagado por SerialIO del SerialPort.La conversión de más de la era, literalmente, un ejercicio en el cambio de las importaciones, y la biblioteca ha sido absolutamente rock solid - no puedo recomendar lo suficiente.Mi aplicación ha estado funcionando en el campo 24/7 para un par de años, no con un solo problema encontrado por varios clientes.

Si usted inicio del desarrollo de la SerialPort, tienen un mejor API y me gustaría usarlo.

Si usted necesita cruzar el soporte de la plataforma, Java con SerialPort fue la mejor elección que pude encontrar.

Por último, su licencia es bastante razonable siempre y cuando usted no está preinstalación de software en el equipo para su cliente(s).

Desde el otro lado, si se desea hacer uso de C#, que se ejecute en Windows y Linux, con algunas limitaciones (EDICIÓN:que puede estar fuera de fecha.No tengo manera de probarlo.).Sólo tienes que crear una SerialPort objeto, establecer su velocidad en baudios, el puerto y cualquier otra extraña configuración, llame a abrir en él, y escribe tu byte[]s.Después de toda la configuración, el objeto SerialPort actos muy similares a los de cualquier red de flujo, por lo que debería ser bastante fácil de averiguar.

Y como ibrandy de los estados, usted necesita saber todos estos parámetros, como la velocidad en baudios, incluso antes de empezar a intentar comunicarse con cualquier dispositivo serial.

Dependiendo del dispositivo que Usted está tratando de comunicarse con el, no puede ser más parámetros que la velocidad en baudios, el número de bits de datos, el tipo de comprobación de paridad y el número de bits de parada a tener en cuenta.Si recuerdo correctamente, el uso de módems de nueve líneas de la interfaz RS-232C.Algunos dispositivos, como, por ejemplo, cajas registradoras, puede usar el hardware protocolo RTS/CTS líneas o en DTR/STR líneas.

En general es bueno saber cómo funcione la interfaz.Usted no se puede comunicar si la velocidad en baudios no coincide, pero el ajuste incorrecto de otros parámetros podrían tipo de trabajo.Por ejemplo, Usted puede fácilmente enviar datos al dispositivo de espera de 1 bit de parada con 2 bits de parada conjunto.Los problemas comienzan cuando se intenta recibir datos en este caso.También puede utilizar apropiadamente el conjunto de bits de paridad como uno de los bits de parada, etc.

Si usted no está obligado a utilizar un compilador me sugieren el uso de Qt y en la nueva versión 5.3 usted encontrará una clase dedicada a los puertos seriales:

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

El código que se escribe se ejecuta en todos los supprited Qt plataformas, al menos los que han puertos serie.

He estado usando purejavacomm:Se trata de una implementación de javax.comm escrito en java puro + JNA

A diferencia de la rxtx, usted no necesita 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 puerto a otro sistema operativo-es que JNA admite, como Solaris y FreeBSD, pero yo no lo he probado.

Se puede esperar que una pura biblioteca de java a la zaga de un nativo de la aplicación, tales como la rxtx en el rendimiento, pero con los modernos de la CPU, el cuello de botella es muy probable que sea el bitrate de su puerto serie, no de ciclos de CPU.También, es mucho más fácil de depurar de una mezcla de Java/biblioteca Nativa puro o compilado a código nativo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top