Ir para conteúdo
  • Cadastre-se

dev botao

AcbrMTER - Problema ao ler dados com Leitor de codigo de barras


Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 2060 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

sempre que leio uma informação com o leitor de codigo de barras, a informação e carregada 2x...

 

exemplo....

 

eu faço uma chamada...

1 = informe comanda

2 = informe codigo do item...

 

se eu ler o numero da comanda com leitor a mesma informação ja vem preenchida quando chamo o iformar codigo do item...

impressao que da que o echo esta devolvendo 2x a informação...

mesmo eu fazendo o limpardisplay antes a informação vem...

nao sei mais como proceder...

isso ocorre tanto em minha aplicação que ja esta funcioandno antes da versao atual do acbr como no exemplo do acbr...

 

alguem poderia me ajudar nessa questao por favor.. ???

eu tentei depurar mas nao tenho muita experiencia com acbrmter para tal...

 

espero que alguem possa me dar o caminho das pedras...

 

segue o log do acbrmter

 

-- 09/04 08:38:33:418 -- EnviarTexto( 192.168.2.165, "Comanda: " )
 -- 09/04 08:38:33:438 -- Terminal: 192.168.2.165 - TX -> 12 bytes -> [STX]DComanda: [ETX]
 -- 09/04 08:38:33:445 -- Terminal: 192.168.2.165 - TX -> 3 bytes -> [STX]D[ETX]
 -- 09/04 08:38:35:335 -- Terminal: 192.168.2.165 - RX <- 6 bytes -> 2426[CR][LF]   =====>>> aki eu passei o leitor..
 -- 09/04 08:38:35:447 -- Terminal: 192.168.2.165 - RecebeResposta: 6 bytes -> 2426[CR][LF]
 -- 09/04 08:38:35:459 -- LimparDisplay( 192.168.2.165 )
 -- 09/04 08:38:35:619 -- Terminal: 192.168.2.165 - TX -> 3 bytes -> [STX]L[ETX]
 -- 09/04 08:38:35:644 -- EnviarTexto( 192.168.2.165, "Valor : 0,00" )
 -- 09/04 08:38:35:652 -- PosicionarCursor( 192.168.2.165, 2, 1 )
 -- 09/04 08:38:35:658 -- EnviarTexto( 192.168.2.165, "Item: " )
 -- 09/04 08:38:35:664 -- Terminal: 192.168.2.165 - TX -> 15 bytes -> [STX]DValor : 0,00[ETX]
 -- 09/04 08:38:35:669 -- Terminal: 192.168.2.165 - TX -> 6 bytes -> [STX]C100[ETX]
 -- 09/04 08:38:35:674 -- Terminal: 192.168.2.165 - TX -> 9 bytes -> [STX]DItem: [ETX]
 -- 09/04 08:38:35:690 -- Terminal: 192.168.2.165 - TX -> 7 bytes -> [STX]D2426[ETX] ====>>> aki é onde esta sendo enviado novamente... e ainda nao sei pq...

 

att

Tiago Passarella

 

 

 


 

  • Fundadores
Postado

Você pode desligar o Echo do próprio componente, no Evento OnRecebeDados, conforme a Lógica de sua aplicação...

procedure TForm1.ACBrMTer1RecebeDados(const IP: AnsiString;
  const Recebido: AnsiString; var EchoMode: TACBrMTerEchoMode);
begin
  EchoMode := mdeNone;   // AQUI

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Membros Pro
Postado

Entao eu pego a recepcao dos dados conforme log correto?

e chamo a segunda condição 

 

tipo li com leitor o codigo de barras

ai limpo display com a menaagem informe a qtde nesse momento na frente da qtde vem de novo a informacao do codigo lido no leitor ai que esta o problema

  • Fundadores
Postado

Veja os Fontes, em procedure TACBrMTer.DoRecebeDados

Observe que o componente, dispara o Evento OnRecebeDados...

O Seu código, provavelmente está dentro desse evento (na sua aplicação)... e quando o seu código termina, e retorna para o componente, no ponto que chamou o evento... Logo após é executado o seguinte bloco...

 DadosEcho := fMTer.LimparConteudoParaEnviarEcho(DadosRecebidos);
  case wEchoMode of
    mdeNormal  :
      fMTer.ComandoEco(wConexao.Comandos, DadosEcho);
    mdePassword:
      fMTer.ComandoEco(wConexao.Comandos, StringOfChar(PasswordChar, Length(DadosEcho)));
  end;

Então se você não quer que esse Echo seja executado... antes de encerrar o seu código no evento... e após pintar as linhas do display com toda a informação que você quiser (inclusive com o cod. do item escaneado)... basta informar para o componente que você não quer que ele execute o Echo

  EchoMode := mdeNone;

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Membros Pro
Postado
5 minutos atrás, Daniel Simoes disse:

Veja os Fontes, em procedure TACBrMTer.DoRecebeDados

Observe que o componente, dispara o Evento OnRecebeDados...

O Seu código, provavelmente está dentro desse evento (na sua aplicação)... e quando o seu código termina, e retorna para o componente, no ponto que chamou o evento... Logo após é executado o seguinte bloco...


 DadosEcho := fMTer.LimparConteudoParaEnviarEcho(DadosRecebidos);
  case wEchoMode of
    mdeNormal  :
      fMTer.ComandoEco(wConexao.Comandos, DadosEcho);
    mdePassword:
      fMTer.ComandoEco(wConexao.Comandos, StringOfChar(PasswordChar, Length(DadosEcho)));
  end;

Então se você não quer que esse Echo seja executado... antes de encerrar o seu código no evento... e após pintar as linhas do display com toda a informação que você quiser (inclusive com o cod. do item escaneado)... basta informar para o componente que você não quer que ele execute o Echo


  EchoMode := mdeNone;

 

Vou testar

  • Membros Pro
Postado
36 minutos atrás, Daniel Simoes disse:

Veja os Fontes, em procedure TACBrMTer.DoRecebeDados

Observe que o componente, dispara o Evento OnRecebeDados...

O Seu código, provavelmente está dentro desse evento (na sua aplicação)... e quando o seu código termina, e retorna para o componente, no ponto que chamou o evento... Logo após é executado o seguinte bloco...


 DadosEcho := fMTer.LimparConteudoParaEnviarEcho(DadosRecebidos);
  case wEchoMode of
    mdeNormal  :
      fMTer.ComandoEco(wConexao.Comandos, DadosEcho);
    mdePassword:
      fMTer.ComandoEco(wConexao.Comandos, StringOfChar(PasswordChar, Length(DadosEcho)));
  end;

Então se você não quer que esse Echo seja executado... antes de encerrar o seu código no evento... e após pintar as linhas do display com toda a informação que você quiser (inclusive com o cod. do item escaneado)... basta informar para o componente que você não quer que ele execute o Echo


  EchoMode := mdeNone;

 

entao mas se eu desativar como é que eu vou capturar os dados ?

e se eu deixo ativado esta voltando duas vezes quando uso o leitor... se nao usar o leitor vai normal...

 

 

  • Fundadores
Postado

O Echo não afeta a captura de dados... e mudar o EchoMode dentro do evento, apenas instruirá ao componente, o que fazer com o Echo dos dados recebidos, nesse evento em questão

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Membros Pro
Postado
1 minuto atrás, Daniel Simoes disse:

O Echo não afeta a captura de dados... e mudar o EchoMode dentro do evento, apenas instruirá ao componente, o que fazer com o Echo dos dados recebidos, nesse evento em questão

entao quando eu coloco echomode = mdnone... nao retorna mais os dados digitados no monitor do microterminal.. ai o usuario nao sabe o qeu esta sendo digitado...

  • Fundadores
  • Solution
Postado

Basta você mesmo tratar e enviar, conforme a lógica do seu programa... veja um exemplo...

procedure TForm1.ACBrMTer1RecebeDados(const IP: AnsiString;
  const Recebido: AnsiString; var EchoMode: TACBrMTerEchoMode);
begin
  ACBrMTer1.LimparDisplay(IP);
  ACBrMTer1.EnviarTexto(IP, 'RECEBIDO: '+Recebido);
  EchoMode := mdeNone;
end;    

 

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Membros Pro
Postado
4 minutos atrás, Daniel Simoes disse:

Basta você mesmo tratar e enviar, conforme a lógica do seu programa... veja um exemplo...


procedure TForm1.ACBrMTer1RecebeDados(const IP: AnsiString;
  const Recebido: AnsiString; var EchoMode: TACBrMTerEchoMode);
begin
  ACBrMTer1.LimparDisplay(IP);
  ACBrMTer1.EnviarTexto(IP, 'RECEBIDO: '+Recebido);
  EchoMode := mdeNone;
end;    

 

@Daniel Simoes agradeço pela força;;;

consegui fazendo o sequinte

a cada ENTER que no meu caso e o fim de cada comando...

eu desabilito o echomode...

e habilito no final dele... ja reolveu...

agradeço pela força...

 

att

Tiago Passarella

  • Curtir 2
×
×
  • 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.