Array
(
)

Leitor de Cod Barras

Tap_pedroso
   - 22 set 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.


Aroldo Zanela
   - 22 set 2004

Colega,

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


Dopi
   - 23 set 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....


Tap_pedroso
   - 23 set 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.


Dopi
   - 23 set 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...


Dopi
   - 23 set 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....


Tap_pedroso
   - 23 set 2004

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


Dopi
   - 23 set 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 uses synaser na sua unit

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


#Código


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



Tap_pedroso
   - 23 set 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.


Dopi
   - 23 set 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.

#Código


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:
#Código

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...
#Código

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...


Aroldo Zanela
   - 23 set 2004


Citação:
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:

#Código

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;



Dopi
   - 27 set 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....


Tap_pedroso
   - 28 set 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 ;
ini := PosEx( SubStr, AString, ini + 1 ) ;
end ;

o que devo fazer?


Dopi
   - 28 set 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


Aroldo Zanela
   - 28 set 2004

Colega,

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

#Código

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;



Leandro Amorim
   - 28 set 2004


Citação:
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


Dopi
   - 29 set 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...