• Lunes 18 de Noviembre de 2024, 01:10

Autor Tema:  Sincronización de USB-Serial ando perdido  (Leído 1474 veces)

albertosv

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Sincronización de USB-Serial ando perdido
« en: Martes 22 de Junio de 2010, 15:52 »
0
Buenas a todos/as.

Me gustaria saber si podriais ayudarme a solucionar un pequeño problema que tengo y no se si va a ser posible ya que me estoy volviendo algo loco.

Os comento, se trata de sincronizar unos dispositivos que se conectan al pc mediante un cable USB/Serial. Es decir, es una conexión USb normal pero el ordenador lo trata como un puerto COM.

El software lo estoy realizando con C# y uso para la comunicación el objeto SerialPort de .NET. El funcionamiento es totalmente correcto y la comunicación con cada dispositivo es correcta.

El problema viene cuando quiero que trabajen sincronizados. Es decir, estos dispositivos me envian una información constantemente al PC (son sensores de luz)...La comunicación con ellos es enviando una serie de comandos desde el PC a dicho componente. Digamos para que lo entendais, que tengo que enviarles un código ascii desde el pc para que empiecen a enviarme la información (supongamos que tengoque enviar el caracter 'A').  Al tener distintos puertos COM para cada sensor no puedo enviar ese caracter de arranque a la vez para que empiecen a enviar la información a la vez los 2. Es decir, tenog que hacerlo de forma secuencial y de se modo siempre tienen un retraso entre ellos 2 (porque primero mando el caracter a uno, y acto seguido con un retraso de milisegundos el caracter al otro).

Me gustaria saber si conoceis alguna forma de poder manejar distintos puertos COM de forma que fueran sincronizados, o si alguno habeis trabajado con algo parecido. Si conoceis cualquier libreria, o cualquier información que me sea util os lo agradeceria enormemente..ya que hasta donde yo puedo llegar no se me ocurren más ideas.

Si necesitais que os de más información solo teneis que preguntarme.

Muchas gracias anticipadas a todos.

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: Sincronización de USB-Serial ando perdido
« Respuesta #1 en: Martes 22 de Junio de 2010, 20:59 »
0
No se si sera la mejor forma pero ahora mismo solo se me ocurre esto. La idea seria crear varios hilos (threads o bakgrownworker) uno para cada puerto que quieras conectarte. Ahora tambien tenemos el problema que tienes que lanzar uno despues de otro (volverias a tener unos microsegundos de desfase) seguramente tambien para esto aya algo mejor para sincronizar los threads. Pero como no los domino mucho yo lo que haria es en cada uno de ellos poner al principio un "while( variable global booleana);" la variable debe estar en true antes de lanzar los hilos. Una vez lanzados todos cambias la variable a false y deberian salir del bucle while todos a la vez para empezar a ejecutar la rutina con los puertos.

Ya te digo seguro haya algo muuucho mejor que esto. Bueno, nada mas espero te sirva. Un saludo

albertosv

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Sincronización de USB-Serial ando perdido
« Respuesta #2 en: Miércoles 23 de Junio de 2010, 15:04 »
0
Cita de: "tannke"
No se si sera la mejor forma pero ahora mismo solo se me ocurre esto. La idea seria crear varios hilos (threads o bakgrownworker) uno para cada puerto que quieras conectarte. Ahora tambien tenemos el problema que tienes que lanzar uno despues de otro (volverias a tener unos microsegundos de desfase) seguramente tambien para esto aya algo mejor para sincronizar los threads. Pero como no los domino mucho yo lo que haria es en cada uno de ellos poner al principio un "while( variable global booleana);" la variable debe estar en true antes de lanzar los hilos. Una vez lanzados todos cambias la variable a false y deberian salir del bucle while todos a la vez para empezar a ejecutar la rutina con los puertos.

Ya te digo seguro haya algo muuucho mejor que esto. Bueno, nada mas espero te sirva. Un saludo

En primer lugar muchas gracias por la respuesta.

Te comento como lo hago a dia de hoy. Estoy usando el objeto SerialPort de .NET y programo cada evento DataReceived para que salte automaticamente con el nº de bytes que forman cada paquete de datos del sensor (en este caso 20 bytes).

Todo ello lo tengo en una clase que representa lo que es el sensor en si....y digamos que en este caso como quiero sincronizar 3 sensores, lo que hago es crear 3 objetos de dicha clase. El problema es que claro...como tengo que llamar 1 a 1 a su función Start() correspondiente...pues los datos van llegando segun los vaya procesando windows supongo...

A mi me interesaria que llegaran en el orden sensor 1, sensor 2, sensor 3...pero es imposible. Llegan segun quieren...no se si llegais a entender lo que quiero decir.

El tema de los hilos que me has comentado lo estuve valorando pero realmente no he trabajo nunca con dichos hilos y no se si para esto mismo que hago seria necesario (ya que creo que a su vez cada evento del objeto serial port de cada sensor seria un hilo propiamente dicho no???)

Quiza este confundido...te agradezco muchisimo tu ayuda..espero poder solucionarlo no dentro de mucho porque ya pocas cosas más se me ocurren.

Miles de gracias