Compartir a través de


Recibir desde el puerto serie utilizando MScomm32.ocx en Visual FoxPro

En este artículo se describen dos métodos para usar en Visual FoxPro para recibir datos del puerto serie mediante el control Mscomm32.ocx.

Versión original del producto: Visual FoxPro
Número de KB original: 140525

Resumen

En este artículo se proporcionan dos técnicas que puede usar para recibir datos del puerto serie mediante el control Mscomm32.ocx. La primera usa un método controlado por eventos y no requiere que sondee el puerto serie para comprobar la presencia de caracteres recibidos. Esta técnica permite la mayor flexibilidad y no requiere una codificación extensa para evitar desbordamientos de búfer. La segunda técnica requiere que sondee el búfer de entrada periódicamente para comprobar la presencia de caracteres recibidos. En este artículo se describen estas dos técnicas y se proporcionan ejemplos para cada uno.

Más información

Establezca las siguientes propiedades independientemente de la técnica que use:

  • CommPort property: establezca esta propiedad numérica en el puerto de comunicaciones deseado. Los valores válidos son 1, 2, 3 o 4, según los puertos serie disponibles y la configuración del equipo individual. Estos valores corresponden a Com1, Com2, Com3 y Com4 respectivamente.

  • Settings propiedad: Establezca esta propiedad de carácter a la velocidad de baudios, paridad, bits de datos y bits de parada requeridos por el dispositivo conectado al puerto serie. Esta propiedad es una lista delimitada por comas y caracteres. Por ejemplo, para establecer el puerto serie en 14,400 baudios, paridad par, 7 bits de datos y 1 bit de parada, establezca la cadena en: 14400,E,7,1.

  • PortOpen property: establezca esta propiedad lógica en true para abrir las comunicaciones en el puerto serie. También puede comprobar esta propiedad para determinar si el puerto se abrió correctamente.

Técnica número uno: recepción controlada por eventos

La técnica controlada por eventos genera un OnComm evento cuando hay caracteres que esperan en el búfer de entrada. Además, la propiedad CommEvent contendrá un valor numérico 2. Para que se desencadene el OnComm evento, debe establecer la Rthreshold propiedad en un valor distinto de cero (su valor predeterminado). La configuración más común para la Rthreshold propiedad es 1, lo que significa que el OnComm evento se desencadena si un mínimo de un carácter está esperando en el búfer de entrada.

Por ejemplo, puede colocar el código siguiente en el OnComm evento para anexar datos recibidos a una propiedad de un formulario denominado mybuffer:

Procedure MyCom.OnComm
    IF This.CommEvent = 2
        ThisForm.mybuffer = ThisForm.mybuffer + This.Input
    ENDIF
ENDPROC

Técnica dos: sondear el búfer de entrada

Sondear el búfer de entrada requiere que el programa detenga periódicamente lo que está haciendo y compruebe si hay caracteres que esperan en el búfer de entrada. Al usar esta técnica, deje la Rthreshold propiedad en 0 (su valor predeterminado) y compruebe la InBufferCount propiedad para ver si es mayor que cero, lo que indica que hay caracteres que esperan en el búfer.

Nota:

El uso de una técnica como comprobar la longitud de la propiedad Input produce caracteres perdidos porque en cuanto se accede a la propiedad Input, se vacía el búfer de entrada. Use la propiedad InBufferCount en su lugar.

Suponiendo que el control Mscomm está en el formulario y tiene el nombre MyCom y que hay una propiedad de formulario denominada mybuffer, el código siguiente muestra cómo sondear los caracteres en espera:

Procedure myform.myproc
    IF Thisform.MyCom.InBufferCount > 0
        Thisform.mybuffer = Thisform.mybuffer + Thisform.MyCom.Input
    ENDIF
ENDPROC

Se podría invocar el código del procedimiento en un método de temporizador para facilitar la verificación de caracteres a intervalos semiregulares. Sin embargo, si se espera que se reciban grandes cantidades de datos desde el puerto serie, la Técnica Uno reducirá la posibilidad de sobrecargar el búfer de entrada.