 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Niteman Lt

Registrado: 19 Dic 2002Mensajes: 92Ubicación: Sant Boi (Barcelona)
|
Publicado: Vie 13 Jul, 2007 1:21 pm Asunto: Dos programas compartiendo un puerto serie |
|
|
El tema es el siguiente:
En mi empresa han montado un almacen automatizado controlado por PC. El PC lleva instalada una pistola lectora de codigos de barras RS232 y el programa propietario. El usuario lee con la pistola el código del material y el programa propietario te devuelve el código de ubicación y mueve el almacen hasta la bandeja correspondiente (en cada bandeja hay multiples ubicaciones). Para realizar la confirmación de entrada, el programa espera que se le introduzca con la pistola el código de componente una segunda vez. Este sistema no garantiza la falta de errores por parte del usuario a la hora de poner en la ubicación correcta el material ya que de componente no puede equivocarse porque lo tiene en la mano pero si de ubicación porque hay muchas en una bandeja.
Me han propuesto que realice un programa intermedio que sustituya a la segunda lectura del componente para la confirmación. El programa nuevo leeria con la misma pistola el código de ubicación (el programa propietario filtra estos códigos ya que solo acepta de componentes) y devuelva el código de componente (usando la misma base de datos del programa propietario) y se lo "diga" por puerto serie (el mismo usado por la pistola) al programa propietario para que éste realice la confirmación.
Por una parte pienso que si escribo con mi programa en el puerto serie de la pistola, el programa propietario que está esperando una entrada, lo deberia de leer, pero tampoco estoy seguro. También tengo mis dudas de que dos programas puedan compartir el puerto serie.
No se si me he expresado claramente.
En el caso de ser posible, teneis alguna idea de como puedo hacerlo?
Salu2. |
|
| Volver arriba |
|
 |
edgar_dh Ens

Registrado: 12 Jul 2003Mensajes: 34Ubicación: Venezuela
|
Publicado: Vie 13 Jul, 2007 5:02 pm Asunto: |
|
|
Buen tratado de ayudar.....
mira yo haria lo siguiente en el puerto por ejemplo com 1 intalaria la pistola y por consguiete genero el programa que lea el puerto 1 pero escriba el codigo generado en puerto 2, para el programa propietario lo instalas para que lea el puerto com 2, en el hadware de pc conectas el pin de puerto 2 con el pin 3 de manera que el programa que genera en codigo hecho por ti lo lea el programa propietario..
esperando ser de ayuda
edgar |
|
| Volver arriba |
|
 |
jacko Master


Registrado: 03 Sep 2005Mensajes: 287Ubicación: Colombia
|
Publicado: Lun 23 Jul, 2007 5:55 pm Asunto: |
|
|
Hola Niteman
Yo creo que depende del protocolo de comunicacion que exista entrel el programa propietario y la pistola.
Si tu estableces un protocolo distinto para tu propio programa, pues el programa propietario al recibir los bytes y no entenderlos pues no va a hacer nada, pero tu aplicacion si los entiende.
Nos cuentas como te ha ido.
Saludos! _________________ Dios es real... a menos que se declare entero! |
|
| Volver arriba |
|
 |
Tor Master


Registrado: 22 Mar 2005Mensajes: 269Ubicación: obera, misiones, argentina
|
Publicado: Mar 24 Jul, 2007 4:12 am Asunto: |
|
|
hola Niteman, tu problema suele presentarse a menudo, y no tiene una solucion facil, bueno una solucion facil seria q programes todo el sistema tu mismo y descarte el sistema "propietario".
el tema es este, el puerto serie con el driver estandar no fue pensando para que dos aplicaciones distinatas lo utilisen al mismo tiempo, mas alla del protocolo que usen estos programas, estos protocolos pueden ser distintos pero eso es en la capa mas alta, en la capa de aplicacion, por ejem (modbus, Profibus, etc) incluso podria ser tcp. si el driver esta pensado para solo una aplicacion, no vas a poder porgramar una aplicacion q acceda al puerto si ya esta ocupado. cuando intentes abrir elpuerto vas a tener errores como "el dispositivo ya esta siendo utilizado" o ocupado o no disponible etc.
el puerto siere trabaja a vajo nivel con una pila circular fifo el tamaño de esta pila puede ser configurado, esta pila o bloque de memoria puede ser leida via api caracter a caracter, o por stream (flujos) y es la forma en q la mayoria de las aplicaciones leen el RS232 por eso es que hay q utilizar un createfile(....) le pasamos el puntero de un archivo y se sincroniza con la pila, por este motivo solo una aplicacion puede mantener coneccion con este dispositivo RS232 (UART). fijate q el mismo modem q la mayoria conoce cuando falla suele darte errores como "el puerto esta utilizado" o algo asi no recuerdo y tienes q reiniciar la pc y luego te funciona, es porque el puerto ya fue abierto por el mismo modem o otra aplicacion proba abrir el hiperterminal y el modem sobre el mismo puerto, no se va a poder te deberia dar un error.
una posible solucion existe en el mercado software que permiten el control concurrente al puerto serie fijate, dijimos que la UART vuelca los datos leidos de los pines en una pila fifo cirular, si tienes un sof que controla la lectura de esa pila y luego este sof dialoga con distintas aplicaciones puede compartir datos con estas, basicamente este sof hace de driver y controla la concurrencia (sof Splitter) puede ser por medio de semaforo o otros metodos no importa, te dejo el link de un sof que realiza esta tarea, compartir elpuerto serie y lo hace de una forma interesante puertos virtuales
http://www.freedownloadmanager.org/es/downloads/Divisor_de_Puerto_en_serie_45579_p/
aa si alguna ves te toca a ti optar por pistolas lectoras, usa las que se conectan en serie con el teclado, es mucho mas sencillo no tendrias estos porblemas
saludos Tor |
|
| Volver arriba |
|
 |
Niteman Lt

Registrado: 19 Dic 2002Mensajes: 92Ubicación: Sant Boi (Barcelona)
|
Publicado: Mie 25 Jul, 2007 8:01 am Asunto: |
|
|
Gracias por vuestras respuestas.
Estoy empezando a tener más datos para hacer el programa y mientras algunos de estos datos me favorecen otros no. Me explico.
La pistola lectora que se va a usar es via bluetooth con llave usb. El driver genera un puerto COM virtual dejando los COM físicos libres.
La idea es leer el codigo enviado por el puerto virtual (de hecho esto ya me funciona) y escribirlo en un puerto físico no usado por mi programa pero configurado para el programa propietario. De esta manera no hay dualidad de uso y creo que seria totalmente factible.
Mi programa seria el que leyese en todo momento el código enviado por la pistrola. Si es código de componente hace un bypass y lo escribe. Si es un código de ubicación, hace la busqueda en la base de datos (tambien me funciona) y escribe el código de componente encontrado.
El problema viene ahora. Resulta que ayer vinieron a hacer la puesta en marcha del almacen automático y del programa propietario. La persona que vino explicó que la primera vez que se entra el código debe de ser por teclado (o por pistola emulando teclado) y la segunda vez (la de confirmación) por puerto serie. Verdaderamente esto es una tocada de coj..es, los programadores se han quedado descansando!!. Obviamente lo que no vamos a hacer estener dos pistolas conectadas porque el operario se puede hacer un lio.
Mi pregunta ahora es: como puedo enviar el código al programa propietario emulando al teclado? Supongo que debe de ser difícil por que el programa propietario deberá de estar en primer plano mientras mi programa trabaja en segundo plano, no?
Salu2. |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|