Recepción desde el puerto serie mediante MScomm32.ocx en Visual FoxPro

En este artículo se describen dos métodos que se usan 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 exhaustiva para evitar que el búfer se ejecute en exceso. La segunda técnica requiere sondear periódicamente el búfer de entrada para comprobar la presencia de caracteres recibidos. En este artículo se describen estas dos técnicas y se proporcionan ejemplos para cada una.

Más información

Establezca las propiedades siguientes 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 en la velocidad en baudios, paridad, bits de datos y bits de detención 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 uniforme, 7 bits de datos y 1 bit de detención, establezca la cadena en: 14400,E,7,1.

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

Técnica uno: Recepción controlada por eventos

La técnica controlada por eventos genera un OnComm evento cuando hay caracteres esperando en el búfer de entrada. Además, la propiedad CommEvent contendrá un valor numérico 2. Para que el OnComm evento se desencadene, 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 los 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: Sondeo del 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 esperando 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 esperando en el búfer.

Nota:

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

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 llamar al código de procedimiento en un método de temporizador para facilitar la comprobación de caracteres a intervalos semi-regulares. Sin embargo, si se espera que se reciban grandes cantidades de datos desde el puerto serie, La técnica uno reducirá la posibilidad de que el búfer de entrada se ejecute en exceso.