Leitor de Cod Barras

22/09/2004

olá pessoal, tenho um leitor de codigo de barras serial daqueles que faz a leitura automaticamente s/ botão e quando eu passo o codigo de barras ele não passa para o sistema porque tenho que ler a porta serial alguem já trabalhou com esses leitores e sabe como ler a leitura dele.


Tap_pedroso

Respostas

22/09/2004

Aroldo Zanela

Colega,

Veja no site do colega Cirilo: www.veloso.kit.net


Responder Citar

23/09/2004

Dopi

Muito em breve, (acredito que até amanha) estarei concluindo um componente para essa finalidade.

Estou escrevendo uma biblioteca de componentes para Automação comercial, OpenSource e Multiplataforma (veja na minha assinatura)

Se quiser testar o componente posso enviar para o seu e-mail....


Responder Citar

23/09/2004

Tap_pedroso

beleza dopi eu quero testar sim meu e-mail é : tap_pedroso@hotmail.com

outro detalhe eu peguei o comp serialNG é +ou - igual ao ASync32 a única diferença é que ele não grava na porta serial eu achei o serialNG melhor mas o problema é que ele traz uns caracteres estranhos mas eu usei o leftstr e rightstr para contornar isso e o outro problema é que o leitor não pressiona o enter (não dá o evento onkeypress) e não dando o enter ele não dá o beep vcs conhecem alguma propriedade do comp. que faz isso.


Responder Citar

23/09/2004

Dopi

Ola pedro...

O componente que vou mandar para voce usa uma classe chamada SynaSer para acesso direto a porta serial....

http://www.ararat.cz/synapse/

Como a classe é uma das propriedades do Componente que estou criando (ACBrLCB) não será necessário instalar nenhum outro componente para acesso a Serial....

A grande vantagem da synaser é que ela é multiplataforma (roda no Linux), consequentemente, todos os componentes do ACBr também rodam no Linux...


Responder Citar

23/09/2004

Dopi

Voce já testou o leitor serial usando o Hiperterminal do Windows ?

O Hiperterminal é um antigo programa para comunicação com BBS usando modem. ele vem com a instalação do Win98 (no XP eu nao sei).

É so configurar a porta serial, que os códigos lidos irão aparecer no prompt do Hiperterminal....


Responder Citar

23/09/2004

Tap_pedroso

olá dopi eu baixei synasnap.zip mas veio um monte de .pas qual deles eu instalo?


Responder Citar

23/09/2004

Dopi

na verdade é o synaser.zip

Como a synaser é somente uma classe e nao um componente, não há necessidade de instalar, apenas copie os arquivos .PAS para um diretorio do seu pathlib ou pra dentro do diretorio seu projeto e insira um [b:48f9544fe7]uses synaser[/b:48f9544fe7] na sua unit

Veja esse exmplo de como criar uma conexão serial (extraido no Help da Synaser)


  var ser : TBlockSerial
begin
  ser:=TBlockSerial.Create;
  try
    ser.Connect(´COM3´ );
    ser.config(460800,8,´N´ ,0,false,true);
    ser.ATCommand(´AT´ );
    if (ser.LastError <> 0) or (not ser.ATResult) then
      Exit;
    ser.ATConnect(´ATDT+420971200111´ );
    if (ser.LastError <> 0) or (not ser.ATResult) then
      Exit;
    // you are now connected to a modem at +420971200111 
    // you can transmit or receive data now 
  finally
    ser.free;
  end



Responder Citar

23/09/2004

Tap_pedroso

certo essa unit le a porta serial mas como eu executo o enter no leitor para q a hora que t4erminar de ler ele dá um enter como nos leitores ps/2 manuais.


Responder Citar

23/09/2004

Dopi

Inserir teclas no buffer do teclado é uma tarefa trivial no DOS, mas é bastante complicado em WinX....

Lembre-se que a programação Windows é focada em ´eventos´. Voce terá que criar um evento que seja disparado toda vez que um código for lido. Com a synaser isso pode ser feito programando o evendo OnStatus e verificar se a variavel Reason é HR_CanRead.

procedure TACBrLCB.HookSerial(Sender: TObject; Reason: THookSerialReason;
  const Value: string);
var leitura : String ;
begin
  if Reason = HR_CanRead then
  begin
    { faça sua leitura aqui } 
  end;
end;


O fato da synaser não ser um componente dificulta um pouco a programação de eventos... mas é só criar uma procedure com os parametros corretos e atribui-la ao Onstatus:

defina no private do seu form:
    procedure HookSerial(Sender: TObject; Reason: THookSerialReason; const Value: string);


crie o código para a procedure como descrito acima, e logo apos criar o TBlockSerial programa o OnStatus...
serial.OnStatus := HookSerial ;


Isso fará que a procedure HookSerial seja chamada cada vez que um código seja lido.... Ai voce pode inserir o resultado da leitura no Text do seu Edit e disparar algum evento de Busca do produto...


Responder Citar

23/09/2004

Aroldo Zanela

certo essa unit le a porta serial mas como eu executo o enter no leitor para q a hora que t4erminar de ler ele dá um enter como nos leitores ps/2 manuais.

Colega,

Verifique no manual de configuração/programação de sua leitora, pois isso pode ser programado no leitor, ou seja, o próprio leitor envia o enter.

Abaixo, um fragmento de código que utilizo num sistema antigo (bem antigo - Delphi 4 + Asyn32 + Leitora Serial de Mesa ) de supermercado:

procedure TfrmCaixa_Sweda.PortaSerialRxChar(Sender: TObject; Count: Integer);
type CharBuf = Array[ 0..9999 &93; of char;
var Buffer: ^CharBuf;
      Bytes, P: Integer;
Begin

GetMem( Buffer, PortaSerial.ReadBufSize );

  try
    FillChar( Buffer^, PortaSerial.ReadBufSize, 0 );
    Bytes := PortaSerial.Read( Buffer^, Count );
    If Bytes = -1 Then
    ShowMessage( ´Erro de leirura nos dados de entrada...´ )
    Else
    Begin
    For P := 0 to Bytes -1 do
      Begin
      Case Buffer^[P&93; of
        0, 10:;
          13:
          Begin

PassarItem( LineData ); // Envia o código EAN-13
            LineData := ´´;
              rxQtde.Value:= 1;
            End;
          Else
          Begin
            LineData := LineData + CharBuf( Buffer^)&91;P&93;;
            End;
        End;
      End;
    End;
    Application.ProcessMessages;
  Finally
FreeMem( Buffer );
  end;

End;



Responder Citar

27/09/2004

Dopi

Ola Pedro... conforme combinado enviei para o seu e-mail uma pre-relase do ACBr 0.07a contendo o ACBrLCB para Leitores de Cod.Barra

Ainda estou trabalhando no componente. Estou testando se o uso de uma Thread fica melhor que um Timer interno...

Também elaborei um emulador de Leitores Cod.Barras Serial, que envia Strings (códigos) pela Serial. Útil se você não tem acesso a um leitor de verdade... Apenas ligue uma serial na outra, configure o Emulador para COM2 e o Programa de teste para COM1....


Responder Citar

28/09/2004

Tap_pedroso

olá dopi obrigado pelo componente acbr eu li o leiame e segui as instruções mas as instalar o componente deu um erro na linha onde está o seguinte código:

while ini > 0 do
begin
Result := Result + 1 ;
[b:1a40c5f671] ini := PosEx( SubStr, AString, ini + 1 ) ;[/b:1a40c5f671]
end ;

o que devo fazer?


Responder Citar

28/09/2004

Dopi

A funçao PosEx é do Delphi mesmo.... está em StrUtils.pas

Conforme e-mail que você me mandou, notei que você usa Delphi 6. Pode ser que o Delphi 6 não possua essa Funçao, ou ela esteja em outra unit que nao seja a StrUtils....


Entretanto, vou modificar o fonte para nao precisar mais da PosEx....

Volto a mandar novo e-mail para voce.... com o ACBr


Responder Citar

28/09/2004

Aroldo Zanela

Colega,

A função PosEx esta disponível a partir do Delphi 7:

function PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer;
var
  Tmp: PChar;
begin
  Result := 0;
  if (Offset > Cardinal(Length(S))) then exit;
  if Offset = 1 then
    Result := Pos(SubStr, S)
  else
  begin
    Tmp := StrPos(PChar(@S[Offset&93;), PChar(SubStr));
    if Tmp = nil then exit;
    Result := Cardinal(Tmp - PChar(@S&91;Offset&93;)) + Offset;
  end;
end;



Responder Citar

28/09/2004

Leandro Amorim

Ola Pedro... conforme combinado enviei para o seu e-mail uma pre-relase do ACBr 0.07a contendo o ACBrLCB para Leitores de Cod.Barra Ainda estou trabalhando no componente. Estou testando se o uso de uma Thread fica melhor que um Timer interno... Também elaborei um emulador de Leitores Cod.Barras Serial, que envia Strings (códigos) pela Serial. Útil se você não tem acesso a um leitor de verdade... Apenas ligue uma serial na outra, configure o Emulador para COM2 e o Programa de teste para COM1....


Olá Dopi! Estou com a seguinte necessidade: Tenho um leitor de código de barras (serial) sem driver, sem nada! Preciso de um programa que fique ´varrendo´ a COM1 e ´pegue´ o conteúdo do código de barras e joque onde o cursor estiver (não importa o programa). Isto é possível?
Muito Obrigado


Responder Citar