es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Simular dispositivo de puerto serie utilizando stdin y stdout.

Actualmente, tengo una aplicación de escritorio que utilizo para leer y escribir datos en un dispositivo de hardware propietario a través de una interfaz de puerto serie. La aplicación comienza enumerando los dispositivos COM serie conectados a la computadora y una vez seleccionado un dispositivo, se puede interactuar con la aplicación para comunicarse con el dispositivo correspondiente. Ya no tengo dicho dispositivo disponible, pero me gustaría seguir utilizando la aplicación de todos modos.

Ya he desarrollado una utilidad de línea de comandos que, dado un mensaje binario en stdin, emite la respuesta binaria correspondiente (la misma respuesta que el dispositivo de hardware propietario enviaría a través del puerto serie) a stdout. Llamemos a esta utilidad un simulador.

¿Cómo puedo configurar un puerto serie virtual de modo que la aplicación pueda detectarlo y que cada vez que la aplicación envíe un mensaje utilizando el protocolo de puerto serie, dicho mensaje sea redirigido al simulador y la respuesta del simulador sea devuelta a la aplicación de escritorio?

Estoy utilizando Mac OS 12 con un procesador M1. También estoy abierto a soluciones en Windows 10 (con menor prioridad).

He revisado preguntas anteriores en StackOverflow que podrían ser similares a esta, pero eran incompletas o ligeramente diferentes, sin una forma evidente de inferir la solución para mi problema actual.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para configurar un puerto serial virtual en macOS, puedes usar un emulador de puerto serial virtual como com0com o socat. Estas herramientas te permiten crear puertos seriales virtuales que pueden ser utilizados por tu aplicación de escritorio. Aquí tienes una guía paso a paso para configurar un puerto serial virtual usando com0com:

    1. Descarga e instala com0com desde el sitio web (https://sourceforge.net/projects/com0com/).
    2. Abre el instalador de com0com y sigue las instrucciones de instalación.
    3. Después de que la instalación esté completa, abre la aplicación Com0Com Setup desde el menú de inicio.
    4. Haz clic en el botón Add Pair para crear un par de puertos seriales virtuales. Esto creará dos nuevos puertos seriales virtuales que están conectados entre sí.
    5. Abre el Administrador de Dispositivos en tu computadora y localiza los dos nuevos puertos seriales virtuales. Deberían tener nombres como “CNCB0” y “CNCB1”.
    6. Abre las Propiedades de cada puerto serial virtual y configura los ajustes de acuerdo a los requisitos de tu aplicación de escritorio (por ejemplo, velocidad de baudios, paridad, bits de datos, bits de parada). Asegúrate de que los ajustes sean los mismos para ambos puertos seriales virtuales.
    7. Guarda los ajustes y cierra la ventana de Propiedades.
    8. Inicia tu aplicación de escritorio y selecciona el puerto serial virtual que acabas de crear. La aplicación debe poder detectar el puerto serial virtual como si fuera un puerto serial real.
    9. En una ventana de terminal separada, ejecuta la utilidad del simulador y redirige la salida al puerto serial virtual utilizando el siguiente comando:
    ./simulator < input_message.bin > /dev/tty.CNCB0
    

    Reemplaza “input_message.bin” con el nombre del archivo de mensaje binario y “/dev/tty.CNCB0” con el nombre del puerto serial virtual que creaste. Este comando enviará el mensaje de entrada a la utilidad del simulador y reenviará la salida al puerto serial virtual.

    1. La aplicación de escritorio debería poder comunicarse con la utilidad del simulador a través del puerto serial virtual. Cualquier mensaje enviado por la aplicación será reenviado al simulador y la salida del simulador será devuelta a la aplicación.

    Nota: Si estás utilizando un emulador de puerto serial virtual diferente, los pasos pueden ser ligeramente diferentes pero el proceso general debería ser similar.

Comments are closed.