LER CÓDIGO DE BARRAS DIRETO DO SCANNER NA SERIAL

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

LER CÓDIGO DE BARRAS DIRETO DO SCANNER NA SERIAL

Mensagem por rubens »

Olá... pessoal
alguem tem alguma rotina que faça isso...

Uso o arquivo serial.exe baixado do site da sweda, o leitor é um psc 2200vs... quando estava com o DOS funcionava belezinha sem problemas... mas tive que instalar uma placa pci serial, e tava dando conflito no dos... daí instalei o wixp e resolveu o problema da placa mas ocasionou o erro no scanner... colocando o comando serial com1:9600,n,8,2 cr no prompt dos dos, e passando um codigo de barras no leitor... consegue fazer a leitura mas quando entra no programa nao consegue.. e funcionava perfeito no win98... entao imagino que seja erro do programa serial.exe com o winxp... o windows 98 se nao reservasse a irq4 tb, nao lia... no windows xp nao sei como reservar a irq.. tb..

Alguem ai pode dar uma ajuda...

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Não sei se ajuda, mas você pode ir às "propriedades" do "meu computador", selecionar a "hardware" e clicar no botão "gerenciador de dispositivos". Encontre a serial e na "propriedades" da porta, tentar configurar a comunicação. Se não der por aí, deixo outra dica: procure no Google por algum programa que possa substituir esse que você está usando.
Outra dica: instale um programa de monitoramento de serial, como este aqui, que é excelente. Tente bisbilhotar o que a serial está recebendo, se é que está recebendo alguma coisa. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Mensagem por rubens »

Maligno... fiz mais uns teste depois que postei aqui.. e percebi que para de ler o scanner depois que entra no programa... que tem fgl e ctp.lib e etc... Agora pensando aqui... nao testei nenhum programa puro para ver como se comporta.. só que agora nao dá mais só amanha porque o leitor fica no cliente.. amanha de manha farei este teste...

Obrigado
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Ah, difícil ter alguma coisa no programa que impeça a leitura da serial. Até porque, imagino eu, este programa "serial.exe" deve ser residente. É só executar o bixo e em seguida executar o programa Clipper. Deveria funcionar.
Mas tente amanhã. Se não der e quiser trocar alguma idéia, é só dizer.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Mensagem por rubens »

Eu montei uma rotina, ainda nao deu para testar to postando ela aqui para voce dar uma olhada.

cCodigo := Space(13)
@ 10,10 say "Codigo:" GET cCodigo Valid LER_SCANNER(@cCodigo)
Read

//------------------------------------------------------------------------
Function LER_SCANNER()
Local nPorta := 1
Local cTrans := "N"
Local nBits := 8
Local nParad := 1
Local nVeloc := 9600
Local Retorno:= .T.

// Abrindo a porta
If Com_Open(nPorta,1024,1024) == .F.
Retorno := .T.
Else
// Inicializando a porta
nConf := Com_Init(nPorta,nVeloc,cTrans,nBits,nParad)
// Verificando dados na leitor
Com_Count(nPorta)
Inkey(0.10)
// Lendo dados do leitor
cCodigo := Com_read(nPorta,10)
// Tratando a vari vel
Com_Close(nPorta)
Endif
If !Retorno
BEEP()
ALERT("NAO FOI POSSIVEL LER O CODIGO DE BARRAS !!! TENTE NOVAMENTE...")
cCodigo := Space(13)
Endif
KEYBOARD CHR(13)
Return(Retorno)


O seguinte: é necessário fechar a porta depois de ler o codigo??? não poderia deixar ela aberta efechar somente quando finalizar o cupom??
Com esse abre e fecha nao pode atrasar o programa, deixa-lo mais lento??

O procedimento correto seria esse valid mesmo no get... ?

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Puxa... leitor de código de barras serial. Nunca trabalhei, penso que sendo serial complica um pouco, melhor teria sido aquele leitor que é ligado ao teclado. Sem dúvida essa é a melhor opção.

Mas pela lógica está me parecendo que não seria o VALID que deves usar e sim o WHEN. E a sua função de capturar os dados pela serial deveria ser implementada um tamanho fixo de caracteres a seremcapturados, porque pelo que eu sei essa captura após chegar o atamnho de caracteres deveria dar um KEYBOARD <conteúdo_capturado> e retornando .T. se o tamanho é o correto ou .F. se não conseguiu capturar nada. A saída desse GET deveria ser .T. quando pressionado <ESC> e tratar após o READ a sua saída do módulo de registro de compras.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Mensagem por rubens »

Esse exemplo acima nao funciona porque o scanner tem que ativar, indicar para o programa que leu alguma coisa...

fiz uma rotina simples somente lendo o codigo, sem bibliotecas e com o programa residente, e consegue ler alguns codigos, outros nao... demora muito na leitura...

Problema no scanner nao é porque com o win98 funcionava redondinho... e no prompt do dos (wnxp) quando carrega o driver e passa os codigos ele lê também...

Vou formatar outro computador novo, pra fazer outro teste...
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Rubens, coincidiu nós dois postarmos no mesmo minuto as nossas mensagens. Você leia, minha mensagem antes de formatar, talvez o que eu falei te ajude.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Mensagem por rubens »

Pablo...

Li a sua sugestão e tentei materializar isso... aí me surgiu dois problemas... se eu forçar a entrada de um numero x de carateres, pode dar problemas porque nem todo codigo de barras tem 13caracteres.. tipo perfumaria, em especifico aquele rolon... tem sete ou oito codigos se nao me engano entao a resposta do leitor seria 78910012, ou algo assim.. desse jeito ficaria num loop infinito ou pegaria parte do outro codigo passado... e tem tambem os produtos por peso ou produtos por codigo regional que nao passa na balanca e nao gera codigo de barra... imagina o cliente vai na secao de verduras pega 1 kg de tomate e nao passa na balanca.. vai direto para o caixa.. daí lê o peso e tem que digitar o codigo, com essa clausual when ele nao deixaria fazer isso.. certo...
No ng da catools.. tem um modelo contatem do que esta na porta...

Do while Com_count(1) > 13
Enddo
Seria mais ou menos isso que voce sugeriu?
e o get ficaria
@ 10,10 say "Codigo" Get Ccodigo when Ler_Scanner(@Ccodigo)
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Eu acho que deixar o tamanho para item FIXO, seria o conveniente mais ainda pela razão que você quer digitalizar peso de produto. As etiquetas são impressas pelo seu sistema ?. Se for, você simplesmente manda gravar o código de barras com STRZERO() para prencher com zeros. E nos casos de peso, você terá um GET próprio para trtar o peso. Então você estipularia o tamanho com as casas decimais de acordo peso maior possível.

Eu acho que tem que ter um limite de leitura senão como o sistema irá saber quando retornar ao GET ?. Eu nãoestou tão seguro do que eu estou propondo, ora porque não sei como está se comportando a leitura do scanner. Me diga, quando é pressionado o botão do leitor, emite algum som ?. Você conseguiu ler o conteúdo através da função READ da LIB ?. Nesse caso como veio a string ? Podias dar exemplo ?

Outra questão que eu mencionei e você não disse nada sobre isso: daria para trocar esse leitor por aquele tipo de leitor que é conectado ao teclado do PC ?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Mensagem por rubens »

Quanto a trocar o leitor pelo de teclado acho que está fora de questão.. é mais fácil o cliente trocar o meu programa do que comprar outro leitor... hehe

A leitura do leitor fixo serial é diferente do leitor de mao... nao tem que apertar nada só passa o produto... e ele lê aí tem que ter um driver residente que captura o que ele leu e bufferiza.. ou o programa faz isso.. aí entra a questão que te falei.. para o programa ler o que foi lido pelo scanner ele vai ter que sempre estar monitorando a porta.... isso nao sei fazer e o driver residente do leitor está dando pau com o windows xp...
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Ahhh sim entendí, não é leitor de mão. Então a questão de trocar está fora mesmo (sorry). Acredito que para fazer a leitura e capturar a bufferização terá que fazé-lo em looping então. A questão do tamanho, terá que ser como te disse. Pois senão estará sujeito a que um peso venha a coincidir com o código de algum produto. Lembre que 123 não é o mesmo que 0000000000123. Daí se tiver algo com respeito ao peso, terás que disponibilizar uma telca de função (digamos) para alternar outro GET que só permita peso (com tamanho limitado também).

O exemplo que você tentou, conseguiu algum resultado ?. Você disse "demora muito na leitura" será que não seria esse caso de ter que dar um ENTER para ver o código capturado ?. Se for isso o WHEN irá resolver, mas coloque um limite para ler e retornar ao GET. Você monitorou o conteúdo lido pela função da LIB ?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

como o sistema irá saber quando retornar ao GET ?
Cada código de barras, e eu imagino que ele trabalhe com EAN13 e EAN8, pode ser configurado para ser um prefixo ou sufixo. Tenho um aqui que posso colocar até 6 seqüências quaisquer e em quaisquer posições dos códigos. Normalmente os códigos já vêm com Chr(13) no final. Daí é fácil descobrir quando o código "acabou". Esses código extras são configurados por uma série de tabelas de barras especiais.
Aliás, o fato do leitor ser de mão não implica em nada, pois o modêlo do meu leitor poderia ter vindo serial. Mas eu preferi do tipo teclado. Ele também pode ser configurado para atuar sem gatilho. Portanto, a questão é o programa serial, que automaticamente deve receber os códigos e inserí-los no buffer do teclado.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

o driver residente do leitor está dando pau com o windows xp
Você tentou descolar algum outro programa serial para fazer funcionar no Window XP?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Normalmente os códigos já vêm com Chr(13) no final.
Ahhh pois é essa a incerteza que eu tenho quanto a isso. Por isso eu estava pedindo que colocasse o conteúdo capturado. pois se tiver CHR(13), com certeza já com isso iria funcionar. E quanto ao tamanho ou padrão, acho que aquele leitor de supermercado, trabalho com vários tipos.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder