Como se limpa o buffer da serial (Com1, com2, com3....) ?
Bom dia a todos. Tenho a seguinte função de leitura da serial:
variáveis públicas:
hComm: THandle;
bRead: array[0..255] of byte;
RetLeitor: LongBool;
Function TFprincipal.ReadComm : String;
var
BytesLidos: DWord;
i: Integer;
ReadStr: String;
begin
RetLeitor := ReadFile(hComm, bRead[0], 255, BytesLidos, nil);
if ord(RetLeitor) = -1 then
exit;
ReadStr := ´´;
If BytesLidos > 0 Then
For I := 0 To BytesLidos - 1 do
ReadStr := ReadStr + chr(bRead[i])
Else
FlushComm;
Result := ReadStr;
End;
Estou utilizando esta função para ler códigos q venham de um leitor serial a cada segundo. Para ler, funciona beleza. O problema é q se eu passar o código mais de uma vez ele acumula a leitura. Por exemplo:
se eu passar o produto 1 várias vezes fica assim: 001001001; e na verdade é para ser apenas 001.
Já tentei utilizar a função [b:ab217c879e]CancelIO(hcomm)[/b:ab217c879e], mas não funcionou.
Alguém conhece alguma função para limpar o buffer da serial?
Grato pela atenção.[b:ab217c879e][/b:ab217c879e][b:ab217c879e][/b:ab217c879e]
variáveis públicas:
hComm: THandle;
bRead: array[0..255] of byte;
RetLeitor: LongBool;
Function TFprincipal.ReadComm : String;
var
BytesLidos: DWord;
i: Integer;
ReadStr: String;
begin
RetLeitor := ReadFile(hComm, bRead[0], 255, BytesLidos, nil);
if ord(RetLeitor) = -1 then
exit;
ReadStr := ´´;
If BytesLidos > 0 Then
For I := 0 To BytesLidos - 1 do
ReadStr := ReadStr + chr(bRead[i])
Else
FlushComm;
Result := ReadStr;
End;
Estou utilizando esta função para ler códigos q venham de um leitor serial a cada segundo. Para ler, funciona beleza. O problema é q se eu passar o código mais de uma vez ele acumula a leitura. Por exemplo:
se eu passar o produto 1 várias vezes fica assim: 001001001; e na verdade é para ser apenas 001.
Já tentei utilizar a função [b:ab217c879e]CancelIO(hcomm)[/b:ab217c879e], mas não funcionou.
Alguém conhece alguma função para limpar o buffer da serial?
Grato pela atenção.[b:ab217c879e][/b:ab217c879e][b:ab217c879e][/b:ab217c879e]
Turbo Drive
Curtidas 0
Respostas
Aroldo Zanela
23/01/2006
Colega,
Na verdade nem li o seu código, pois minha proposta é indicar a utilização do Async32. Tenho total satisfação com estes componentes, pois alem de encapsular toda a complexidade é totalmente free: http://www.tmssoftware.com/ta32.htm
Na verdade nem li o seu código, pois minha proposta é indicar a utilização do Async32. Tenho total satisfação com estes componentes, pois alem de encapsular toda a complexidade é totalmente free: http://www.tmssoftware.com/ta32.htm
GOSTEI 0
Aroldo Zanela
23/01/2006
Colega,
Oops!, foi mal, não é mais free. Acabei de entrar no site para ver as atualizações.
Oops!, foi mal, não é mais free. Acabei de entrar no site para ver as atualizações.
GOSTEI 0
Turbo Drive
23/01/2006
Caro Aroldo, eu tenho este componente, o lance é q eu quero deixar minha aplicação o mais livre possível de componentes externos, sem mencionar q aprenderei um pouco mais sobre outras formas de comunicação.
Mesmo assim muito obrigado pela dica.
Mesmo assim muito obrigado pela dica.
GOSTEI 0
Massuda
23/01/2006
O jeito tradicional de limpar buffer de comunicação serial é ler até não encontrar mais caracteres recebidos.
GOSTEI 0
Turbo Drive
23/01/2006
O grande problema é justamente por eles ainda existirem.
:( :cry: :oops:
:( :cry: :oops:
GOSTEI 0