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.