Comunicar con balanza

Voy a desarrollar un programa en Fox 9 para una tienda que vende artículos a peso. La balanza estará conectada a ordenador probablemente por puerto serie. Lógicamente quiero que el peso en kg lo capture mi programa. ¿Cómo hago para comunicar con la balanza?

1 Respuesta

Respuesta
2
Dentro de un form agrega el control Microsoft Communication Control version 6
Ese control es un ocx que se llama msComm32.ocx y lo podes buscar en tu maquina o en internet..
Una ves que hayas colocado el control, ponele como nombre puerto.. (por ejemplo)
Lo primero que tenemos que hacer es fijar el puerto con los mismos valores que tiene el puerto de la balanza para que no tengas problemas de comunicación..
Entonces, en el init del formulario pones..
with thisform.puerto
.commPort=3
.setting="2400,n,8,1"
.portOpen=.t.
endwith
CommPort=numero de puerto al que conectaste la balanza
setting=tiene varios parametros:
2400=baud rate
n=parity
8=data bit
1=stop bit
Esos valores seguramente aparecen en el manual de la balanza..
La propiedad portOpen es la que abre y cierra el puerto. Tienes que tener en cuenta que no si el puerto esta abierto y lo quieres abrir de nuevo, da error, en este o en cualquier formulario que trabaje simultáneamente.
Ahora, bien.. lo que sigue depende del equipo que conectaste.. algunos equipos trabajan enviando información al puerto de la computadora automáticamente, otros esperan que vos le mandes un comando, para devolver información..
Por ejemplo; un lector de códigos de barras cuando recibe un código, envía (automáticamente) ese código a la maquina sin que tu aplicación tenga que hacer otra cosa que escuchar..
En cambio, en un medidor de temperatura, vos tienes que requerir el dato con un comando que se envía al puerto y se recibe como respuesta el dato requerido.
Los datos que se reciben entran automáticamente y se dispara el evento onComm del objeto. Entonces todo lo que queramos que pase, se programa en ese evento..
Para empezar deberías poner un editbox en el formulario y ver que datos recibís y en que formato.. también ver cual es el carácter que te dice hasta acá es un dato..
Si pones un editBox en el formulario, para probar podrías poner algo así en el evento onComm del objeto "puerto"
lParameter mQueRecibi
thisform.editBox.value=thisform.editBox.value+mQueRecibi
Y probar de pesar algo..
Dependiendo de lo que recibís, evalúas lo que tienes que hacer siempre en el evento onComm o en otro método como por ejemplo, declarando un método "procesaCaptura" en el form y poniendo algo así en el evento onComm:
LParameter lRecibi
Thisform. ProcesaCaptura(lRecibi)
El metodo procesaCaptura iria:
LParameter lLoQueProceso
... lo que quieras...
Ahora.. por ultimo, si tienes que mandar comandos por el comm, utilizas la propiedad Output y le sumas un carácter de envío como enter por ejemplo para que la información salga del buffer y se envíe...
thisform.puerto.output='COMANDO'+chr(13)
La capacidad del buffer de salida depende de la propiedad outBufferSize que casi siempre es 512 caracteres (recordá que la capacidad de fox para cadenas es 256, así que tienes de sobra.. pero si quieres más.. agregales..)
Por ultimo.. para cerrar el puerto pones algo así, en donde sea conveniente..
if thisform.puerto.portOpen
thisform.puerto.portOpen=.f.
Endif
Bueno, espero que esto te sirva para empezar a probar.. cualquier cosa no dudes en consultarme
Espero que mi respuesta haya sido de utilidad y espero tu calificación..

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas