Receber da porta serial usando 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 de KB original: 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 controlado por eventos e não exige que você pesquise a porta serial para marcar para a presença de caracteres recebidos. Essa técnica permite a maior flexibilidade e não requer codificação extensiva para impedir execuções excessivas de buffer. A segunda técnica exige que você pesquise o buffer de entrada periodicamente para marcar para a presença de caracteres recebidos. Este artigo descreve essas duas técnicas e fornece exemplos para cada uma delas.

Mais informações

Defina as seguintes propriedades independentemente da técnica que você usa:

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

  • Settings propriedade: defina essa propriedade de caractere para a taxa de baud, Parity, Bits de Dados e Bits de Parada exigidos pelo dispositivo conectado à porta serial. Essa propriedade é uma lista delimitada por caracteres e vírgulas. Por exemplo, para definir a porta serial como 14.400 baud, Even Parity, 7 Data Bits e 1 Stop Bit, defina a cadeia de caracteres como: 14400,E,7,1.

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

Técnica um: recebimento controlado por eventos

A técnica do evento Driven gera um OnComm evento quando há caracteres esperando no buffer de entrada. Além disso, a propriedade CommEvent conterá um numérico 2. Para que o OnComm evento seja acionado, 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 OnComm evento é disparado se um mínimo de um caractere estiver esperando no buffer de entrada.

Por exemplo, você pode colocar o código a OnComm seguir no evento para acrescentar 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: sondar o buffer de entrada

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

Observação

Usar uma técnica como verificar o comprimento da propriedade Input resulta em caracteres perdidos porque assim que a propriedade Input é acessada, o buffer de entrada é 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 de espera:

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

O código de procedimento pode ser chamado em um método de temporizador para facilitar a verificação de caracteres em intervalos semi-regulares. No entanto, se grandes quantidades de dados forem recebidas da porta serial, o Technique One reduzirá a chance de executar o buffer de entrada em excesso.