Compartilhar via


Receba dados da porta serial utilizando MScomm32.ocx no Visual FoxPro

Este artigo descreve dois métodos a serem usados no Visual FoxPro para receber dados da porta serial usando o controle Mscomm32.ocx.

Versão original do produto: Visual FoxPro
Número original do KB: 140525

Resumo

Este artigo fornece duas técnicas que você pode usar para receber dados da porta serial usando o controle Mscomm32.ocx. O primeiro usa um método orientado a eventos e não exige que você sonde a porta serial para verificar a presença de caracteres recebidos. Essa técnica permite mais flexibilidade e não requer codificação extensiva para evitar excessos de buffer. A segunda técnica exige que você pesquise o buffer de entrada periodicamente para verificar a presença de caracteres recebidos. Este artigo descreve essas duas técnicas e fornece exemplos para cada uma.

Mais informações

Defina as seguintes propriedades, independentemente da técnica usada:

  • CommPort property: Defina essa propriedade numérica para a porta de comunicação desejada. Os valores válidos são 1, 2, 3 ou 4, dependendo das portas seriais disponíveis e da configuração do computador individual. Esses valores correspondem a Com1, Com2, Com3 e Com4, respectivamente.

  • Settings property: Defina essa propriedade como a taxa de baud, paridade, bits de dados e bits de parada exigidos pelo dispositivo conectado à porta serial. Essa propriedade é uma lista delimitada por vírgulas de caracteres. Por exemplo, para configurar a porta serial para 14.400 baud, Paridade Par, 7 Bits de Dados e 1 Bit de Parada, ajuste a string para: 14400,E,7,1.

  • PortOpen property: Defina essa propriedade lógica como true para abrir as comunicações com a porta serial. Você também pode verificar essa propriedade para confirmar se a porta foi aberta corretamente.

Técnica número um: Recepção orientada a eventos

A técnica controlada por eventos gera um OnComm evento quando há caracteres aguardando no buffer de entrada. Além disso, a propriedade CommEvent conterá o número 2. Para que o OnComm evento seja disparado, você deve definir a Rthreshold propriedade como um valor diferente de zero (seu padrão). A configuração mais comum para a Rthreshold propriedade é 1, o que significa que o evento será disparado OnComm se pelo menos um caractere estiver aguardando no buffer de entrada.

Por exemplo, você pode colocar o seguinte código no OnComm evento para anexar os 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

Segunda técnica: interrogando o buffer de entrada

A sondagem do buffer de entrada requer que o programa pare periodicamente o que está fazendo e verifique se há caracteres aguardando no buffer de entrada. Ao usar essa técnica, deixe a Rthreshold propriedade em 0 (seu valor padrão) e verifique a InBufferCount propriedade para ver se ela é maior que zero, o que indica que há caracteres aguardando no buffer.

Observação

O uso de uma técnica como verificar o comprimento da propriedade Input resulta em caracteres perdidos porque, assim que a propriedade Input é acessada, o buffer Input é esvaziado. Em vez disso, use a propriedade InBufferCount.

Supondo que o controle Mscomm esteja no formulário e tenha o nome MyCom e que haja uma propriedade de formulário chamada mybuffer, o código a seguir ilustra como sondar caracteres em espera:

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

O código do procedimento pode ser chamado em um método de cronômetro para facilitar a verificação de caracteres em intervalos quase regulares. No entanto, se grandes quantidades de dados forem recebidas da porta serial, a Técnica Um reduzirá a chance de sobrecarregar o buffer de entrada.