2009-05-27 17 views
18

Estoy lidiando con algunos sistemas heredados que usan RS232 para comunicarse con periféricos. No tengo mucha experiencia con las interfaces COM. Tengo un código que puede abrir y usar puertos COM, pero no puede abrir puertos que otras aplicaciones usan. Necesito guardar los paquetes en negro para que podamos usar el mismo protocolo para las comunicaciones actualizadas.Escuchando puertos Com serie que están en uso

¿Hay alguna manera de "intermediarios" de paquetes entrantes a un puerto COM abierto y detectar qué paquetes se están enviando? Estoy usando .NET, pero estoy abierto a cualquier tipo de solución.

(He encontrado this por ahí, pero no creo que esto va a funcionar para mí.)

+1

Creo que la aplicación hub4com (de com0com) podría hacer realmente lo que necesita. –

Respuesta

13

He usado com0com - que es ideal para la creación de puertos COM virtuales - que no le ayuda en todas.

La interfaz del puerto COM es básicamente una 'lectura de archivo'. Mi aplicación arroja una excepción cuando trato de conectarme a un puerto COM que ya tiene otra instancia leyendo de él. No estoy seguro de si podría intentar abrirlo como "solo lectura" en lugar de leer-escribir, pero vale la pena intentarlo.

Debería poder escribir un puerto de comunicación virtual que pueda dividir sus datos en un archivo de registro. Com0com es de código abierto, por lo que podría usarlo como punto de partida.

Otra posible solución podría ser tomar un rs232 splitter cable con la señal serie en otro puerto en serie.

O bien, otra posibilidad es un Serial Sniffer program (o un open source sniffer).

O pruebe el hub4com app desde el mismo sitio web com0com!

+1

Los sniffers que sugirió son esencialmente lo que ya he escrito. Creo que la virtualización puede ser la mejor manera de hacerlo, pero me gusta la idea de dividir la línea. ¿Sería capaz de capturar paquetes desde y hacia el dispositivo? – Daniel

+0

¿sabe dónde obtener el código para hub4com? El sitio tiene el exe pero no puedo ver el código. – baash05

+0

http://com0com.cvs.sourceforge.net/viewvc/com0com/hub4com/ llegamos allí a través de: http://sourceforge.net/scm/?type=cvs&group_id=129551 – Kieveli

4

He estado en este mismo camino. Un divisor de hardware es la solución más fácil.

la configuración de hub4com incluirá el asistente "Agregar nuevo hardware". Si tiene muchas máquinas, máquinas separadas geográficamente o usuarios que no son técnicamente expertos y carecen de los permisos necesarios, la instalación podría ser incómoda.

Si se trata de una aplicación heredada, ¿se ejecuta en ntvdm? Si es así, puede ejecutarlo en el DosBox y modificar el código DosBox para escribir en un archivo además de enviar/recibir desde/hacia el puerto serie. DosBox también es multiplataforma.

+0

Por el momento, todo lo que sé es que se ejecuta en Windows. El resto es caja completamente negra. Lamentablemente, el sistema está en Polonia y yo no. Mi contacto es razonable informático. Si dividir el cable me dará la capacidad de escuchar tanto el tráfico entrante como el saliente, ese parece el camino a seguir. – Daniel

+0

El divisor debería ser el camino a seguir, entonces. En mi caso descarté esa solución porque teníamos otro proyecto en el que un proveedor también quería usar un divisor, y no quería pensar en dividirlo dos veces. –

10

¿Hay alguna manera de "intermediario"

Sí, hay muchos. Fuerte soporte en Windows a través del concepto de un "controlador de filtro". Dicho controlador se puede insertar antes que un controlador que recibe solicitudes de E/S y ve todo lo que pasa. Normalmente está destinado a alterar las solicitudes de E/S pero también es muy adecuado para simplemente monitorear las solicitudes. Hombre en el medio.

El ejemplo canónico de un controlador de este tipo es el venerable SysInternals' PortMon utility. Muestra todo lo que una aplicación envía y recibe a/desde un puerto serie, incluida la configuración y los datos. Hay muchas aplicaciones de este tipo, solo Google "controlador de filtro de puerto serie" (pesado en muestras de código fuente) y "monitor de puerto serie".

Una nota al pie con esto, usted tiende a tener un problema en una versión de 64 bits de Windows. La gran mayoría de estas aplicaciones, incluido PortMon, solo funcionan en la versión de 32 bits.La versión de 64 bits solo permite la instalación de controladores certificados; hay muy poco dinero en la venta de estas aplicaciones para justificar el gasto. Tenga cuidado con esto cuando compre.

0

También puede usar TCPcom para convertir los datos a paquetes de Ethernet y monitorearlos con Wireshark, y también transmitirlos a otro lugar. A continuación, utiliza otra instancia de TCPcom para reenviarla a cualquier puerto de com que desee, incluido un puerto de comunicación virtual. Ahora esencialmente has secuestrado los datos a través de Ethernet. https://sourceforge.net/projects/combytcp/?source=directory

Cuestiones relacionadas