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.