Leitor de Cod Barras
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
Curtidas 0
Respostas
Aroldo Zanela
22/09/2004
Colega,
Veja no site do colega Cirilo: www.veloso.kit.net
Veja no site do colega Cirilo: www.veloso.kit.net
GOSTEI 0
Dopi
22/09/2004
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....
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....
GOSTEI 0
Tap_pedroso
22/09/2004
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.
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.
GOSTEI 0
Dopi
22/09/2004
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...
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...
GOSTEI 0
Dopi
22/09/2004
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....
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....
GOSTEI 0
Tap_pedroso
22/09/2004
olá dopi eu baixei synasnap.zip mas veio um monte de .pas qual deles eu instalo?
GOSTEI 0
Dopi
22/09/2004
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)
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
GOSTEI 0
Tap_pedroso
22/09/2004
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.
GOSTEI 0
Dopi
22/09/2004
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.
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:
crie o código para a procedure como descrito acima, e logo apos criar o TBlockSerial programa o OnStatus...
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...
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...
GOSTEI 0
Aroldo Zanela
22/09/2004
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 ] 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] of 0, 10:; 13: Begin PassarItem( LineData ); // Envia o código EAN-13 LineData := ´´; rxQtde.Value:= 1; End; Else Begin LineData := LineData + CharBuf( Buffer^)[P]; End; End; End; End; Application.ProcessMessages; Finally FreeMem( Buffer ); end; End;
GOSTEI 0
Dopi
22/09/2004
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....
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....
GOSTEI 0
Tap_pedroso
22/09/2004
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?
while ini > 0 do
begin
Result := Result + 1 ;
[b:1a40c5f671] ini := PosEx( SubStr, AString, ini + 1 ) ;[/b:1a40c5f671]
end ;
o que devo fazer?
GOSTEI 0
Dopi
22/09/2004
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
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
GOSTEI 0
Aroldo Zanela
22/09/2004
Colega,
A função PosEx esta disponível a partir do Delphi 7:
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]), PChar(SubStr)); if Tmp = nil then exit; Result := Cardinal(Tmp - PChar(@S[Offset])) + Offset; end; end;
GOSTEI 0
Leandro Amorim
22/09/2004
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
GOSTEI 0
Dopi
22/09/2004
Essa aplicação que voce precisa deve rodar em modo console ? (no prompt do DOS)
O componente ACBrLCB que estou desenvolvendo faz isso, ele nao precisa de nenhuma DLL ou driver, e tb roda no Linux.... Apenas configure nele a Porta, Baud, etc... (de acordo com o seu leitor, geralmente o padrão 9600,8,N,1)
Ele já está operacional. Nos Demos do ACBr tem um projetinho que demonstra o uso do componente. Ele exibe em um Memo tudo que passa pelo leitor, e tb traduz os caracteres de controles como #13, 10, facilitando assim conhecer o sufixo enviado pelo leitor...
Esse componente ainda não está na pagina do projeto.... Estou preparando o release 0.07a... Mas posso mandar para o seu e-mail...
O componente ACBrLCB que estou desenvolvendo faz isso, ele nao precisa de nenhuma DLL ou driver, e tb roda no Linux.... Apenas configure nele a Porta, Baud, etc... (de acordo com o seu leitor, geralmente o padrão 9600,8,N,1)
Ele já está operacional. Nos Demos do ACBr tem um projetinho que demonstra o uso do componente. Ele exibe em um Memo tudo que passa pelo leitor, e tb traduz os caracteres de controles como #13, 10, facilitando assim conhecer o sufixo enviado pelo leitor...
Esse componente ainda não está na pagina do projeto.... Estou preparando o release 0.07a... Mas posso mandar para o seu e-mail...
GOSTEI 0