Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 3994 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

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
 
  • Este tópico foi criado há 3994 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...