Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.