Olá pessoal,
hoje tive problema ao instalar um leitor serial da bematech em um novo cliente. Foi instalado e configurado tudo certinho. A leitura era feita sem nenhum problema. O fato é que ao longo do dia o sistema ficava lento e travando no momento da leitura do código de barras.
passei o dia fazendo testes na bancada com um leitor idêntico e fiz uma alteração no componente ACBrLCB. Vejam abaixo as alterações que fiz:
1° Criei uma nova propriedade Chamada LeituraContinua
2° Alterei o procedimento LeSerial para:
//////////////////////////////////////////////////////////////////////////// início /////////////////////////////////////////////////////////////////////////////////////////////////////
with fsDevice.Serial do
begin
if InstanceActive then
begin
if fsModoContinuo then
AguardandoDados := WaitingDataEx > 0
else
AguardandoDados := WaitingData > 0;
if AguardandoDados then
begin
leitura := '' ;
{ Se tem Sufixo definido deve sempre ler um código completo, até
encontrar o Sufixo correto, caso contrário não lê nada, pois é
provavel que todos os bytes ainda não chegaram do leitor, nesse
caso o código completo será lido no proximo evento do Timer.
Entretanto se o sufixo estiver ERRADO, ou seja, diferente do
enviado pelo leitor, ele NUNCA lerá NADA... Para TESTES, deixe
o Sufixo VAZIO... pois nesse caso, TUDO que estiver disponível na
porta serial será lido e retornado }
if fs_Sufixo <> '' then
begin
OldRaiseExcept := RaiseExcept ;
try
{ Desliga a RaiseExcept para nao perder o Buffer da serial, se
RecvTerminated falhar (bug da Synaser) }
RaiseExcept := false ;
leitura := RecvTerminated(200,fs_Sufixo) ;
if leitura <> '' then
leitura := leitura + fs_Sufixo ;
finally
RaiseExcept := OldRaiseExcept ;
end ;
end
else
leitura := RecvPacket(200) ;
if leitura <> '' then
begin
fsUltimaLeitura := leitura ; {Leitura exatamente como veio do Leitor}
if UsarFila then
AddFila( leitura ) ;
SetUltimoCodigo( leitura );
if Assigned( fsOnLeCodigo ) then
fsOnLeCodigo( self ) ;
end ;
end;
end ;
end ;
//////////////////////////////////////////////////////////////////////////// fim /////////////////////////////////////////////////////////////////////////////////////////////////////
O que está em vervelho foi o que eu modifiquei.
Essa foi a única solução que deu certo. Alguém poderia me explicar a diferença entre WaitingData e WaitingDataEx?
Seria coerente em uma nova versão do ACBrLCB ser implementada essa propriedade LeituraContinua ou com outro nome para distinguir o uso de WaitingData/WaitingDataEx?
Att,
Att,
Gustavo de Sousa