Como receber da porta em série utilizando MScomm32.ocx em Visual FoxPro


Resumo


Este artigo dá-lhe duas técnicas que pode usar para receber dados da porta de série utilizando o controlo Mscomm32.ocx. O primeiro usa um método orientado para o evento e não requer que você poll a porta em série para verificar a presença de caracteres recebidos. Esta técnica permite a maior flexibilidade e não requer uma codificação extensiva para evitar sobrecargas de tampão. A segunda técnica requer que faça uma sondagem periodicamente do tampão de entrada para verificar a presença de caracteres recebidos. Este artigo descreve estas duas técnicas e fornece exemplos para cada um.

Mais Informações


Desa ajuste as seguintes propriedades independentemente da técnica que utilize:
  • Propriedade CommPort: Coloque esta propriedade numérica na porta de comunicações desejada. Os valores válidos são 1, 2, 3 ou 4, dependendo das portas em série disponíveis e da configuração do computador individual. Estes valores correspondem, respectivamente, a Com1, Com2, e Com4.
  • Definição de propriedade: Defina esta propriedade de caracteres à taxa de baud, Parity, Bits de Dados e Bits de paragem exigidos pelo dispositivo ligado à porta de série. Esta propriedade é uma lista de caracteres, delimitadas por vírgulas. Por exemplo, para definir a porta em série em 14.400 baud, Even Parity, 7 Data Bits e 1 Stop Bit, definir a cadeia para:
       14400,E,7,1
  • Propriedade PortOpen: Deite esta propriedade lógica em verdade para abrir comunicações à porta de série. Também pode verificar esta propriedade para determinar se a porta abriu corretamente.

Técnica um: Receber orientado por eventos

A técnica de evento Driven gera um evento OnComm quando há caracteres à espera no tampão de entrada. Além disso, a propriedade CommEvent conterá um numérico 2. Para que o evento OnComm seja desencadeado, deve definir a propriedade rthreshold para um valor diferente de zero (o seu padrão). A configuração mais comum para a propriedade Rthreshold é 1, o que significa que o evento OnComm é desencadeado se um mínimo de um personagem estiver esperando no tampão de entrada. Por exemplo, pode colocar o seguinte código no evento OnComm para anexar dados recebidos a uma propriedade de um formulário chamado mybuffer:
   Procedure MyCom.OnComm     IF This.CommEvent = 2       ThisForm.mybuffer = ThisForm.mybuffer + This.Input     ENDIF   ENDPROC

Técnica dois: Sondagem do tampão de entrada

A sondagem do tampão de entrada requer que o programa pare periodicamente o que está a fazer e verifique se há caracteres à espera no tampão de entrada. Ao utilizar esta técnica, deixe a propriedade Rthreshold a 0 (o seu valor padrão), e verifique a propriedade InBufferCount para ver se é maior do que zero, o que indica que há caracteres à espera no tampão.Nota A utilização de uma técnica como a verificação do comprimento da propriedade Input resulta em caracteres perdidos porque assim que a propriedade Entrada é acedida, o tampão entrada é esvaziado. Em vez disso, utilize a propriedade InBufferCount. Assumindo que o controlo da Mscomm está no formulário e tem o nome MyCom e que existe uma propriedade de formulário chamada mybuffer, o seguinte código ilustra como fazer sondagens para caracteres de espera:
   Procedure myform.myproc     IF Thisform.MyCom.InBufferCount > 0       Thisform.mybuffer = Thisform.mybuffer + Thisform.MyCom.Input     ENDIF   ENDPROC
O código de procedimento poderia ser chamado num método temporizador para facilitar a verificação dos caracteres em intervalos semi-regulares. No entanto, se se espera que sejam recebidas grandes quantidades de dados a partir da porta de série, a Técnica Um reduzirá a possibilidade de sobre-execução do tampão de entrada.