Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Leer EAN128 (https://www.clubdelphi.com/foros/showthread.php?t=86993)

newtron 02-11-2014 10:11:51

Leer EAN128
 
Hola a tod@s.

Como ya habréis visto ando liado con temas de lecturas de códigos EAN128 y me encuentro con un problema.

Cuando leo un EAN13 no hay mayor historia porque cuando llega el salto de linea sabemos que el código ha sido leido y hacemos las operaciones que queramos pero el tema en el EAN128 es distinto, al picar en el código llegan varios grupos de datos separados por saltos de linea y cada "trozo" del código significa una cosa, p.e: si leemos el código siguiente en un memo:

(01)98412254011278(3102)002660(15)140326(10)07814

nos llegará de la siguiente manera:

0198412254011278
3102002660
15140326
1007814

¿Cual es el problema? que al ir caracteres de saltos de linea dentro del código no sé cómo averiguar cuando acaba un código y empieza el siguiente que lean.

Se me ha ocurrido que cuando pase un tiempo determinado (corto) sin recibir nada de el código como leido o intentar ver si cuando van llegando "grupos" de números hay algo en el buffer del teclado pero no lo tengo claro.

¿Alguna idea?

Gracias y un saludo

Casimiro Notevi 02-11-2014 11:47:22

Hace mucho tiempo que no lo uso, pero creo recordar que el componente barcode lee los ean128.
Pongo algunos enlaces del componente y de ejemplos de instalación y uso:
http://www.activebarcode.com/howto/delphi.html
https://www.dlsoft.com/developers/ba...for_delphi.htm
http://stilius.net/tbarcode/

newtron 03-11-2014 10:01:15

Gracias. Les echaré un vistazo aunque primero intentaré arreglármelas sin componentes externos.

Saludos

newtron 03-11-2014 11:34:03

Casimiro.

Estos links están muy bien pero son para generar códigos de barras, no para leerlos. Sigo dandole vueltas al tema, pondré un post a ver si alguien sabe si hay manera de averiguar si en un momento determinado hay algo pendiente por descargar del buffer de teclado.

Gracias y un saludo

Casimiro Notevi 03-11-2014 16:39:46

¿El controlador del lector de códigos de barras que tienes lee ean128?

newtron 03-11-2014 16:44:36

Cita:

Empezado por Casimiro Notevi (Mensaje 484163)
¿El controlador del lector de códigos de barras que tienes lee ean128?

Si, eso ya lo he activado.

duilioisola 03-11-2014 20:45:04

Los primeros número significan algo: http://es.wikipedia.org/wiki/GS1-128...plicaci%C3%B3n
Quizás podrías saber cuando empieza un nuevo código. Por ejemplo, cuando el prefijo sea 01.
Código Delphi [-]
// Mientras haya líneas en el Memo
while (Memo.Lines.Count > 0) do
begin
  Finalizar := False;
  Lectura := '';

  // Trabajo con la primera linea, borrandola después de tratarla
  // Si es el comienzo de un código nuevo, salgo del bucle.
  while ((not Finalizar) and (Memo.Lines.Count > 0)) do
  begin
    // Concateno la primera linea del Memo al resultado
    Lectura := Lectura + Memo.Lines[0];

    // Si La linea es el comienzo de un nuevo código salgo
    // Sino borro la linea leida
    if (copy(Memo.Lines[0], 1, 2) = '01') then
      Finalizar := True;
    else
      Memo.Lines.Delete(0);
  end;
  
  // Proceso el código leido
  Procesar(Lectura);
end;

newtron 04-11-2014 09:36:28

Gracias duilioisola por tus comentarios. Mi problema no es saber cuando empieza el código sino cuando ha acabado porque no hay nada que informe de cuando ha acabado de leer el código puesto que los retornos de carro se van enviando con cada grupo de números tal y como puse en el primer post.

Esto de los ean 128 es un mundo y puede ir incluida (o no) mucha información que va separada en grupos acabando en un retorno de carro. El problema es que cuando se acaba de enviar el último grupo de números (que no se sabe a qué corresponde) se envía un retorno de carro y punto, o sea, no se puede determinar cuando se ha acabado de leer.

Al final he optado por modificar la configuración de la pistola (cosa que no quería) para que envía un caracter raro al final del código y así poder procesarlo.

Gracias de nuevo y un saludo

dec 04-11-2014 20:00:30

Hola,

Cita:

Empezado por newtron (Mensaje 484191)
Al final he optado por modificar la configuración de la pistola (cosa que no quería) para que envía un caracter raro al final del código y así poder procesarlo.

No entiendo mucho del asunto, pero, creo que dicha configuración es obligatoria. A no ser que la "pistola" venga ya configurada para enviar algún caracter "de control", tú mismo has comprobado que no puedes leer el código de barras si no cuentas con dicho caracter.

newtron 04-11-2014 20:12:23

Cita:

Empezado por dec (Mensaje 484210)
Hola,



No entiendo mucho del asunto, pero, creo que dicha configuración es obligatoria. A no ser que la "pistola" venga ya configurada para enviar algún caracter "de control", tú mismo has comprobado que no puedes leer el código de barras si no cuentas con dicho caracter.

Pues no sé si será obligatorio, el caso es que por defecto el lector de código de barras (pistola :D) no envía nada especial al final del código para poder detectar que ha sido enviado por completo. No sé, la verdad es que no he sabido solucionar el tema de otra manera, que no es que pase nada pero no me gusta ir cambiando las configuraciones por defecto de los "chismes".

Saludos

dec 05-11-2014 00:23:12

Hola,

¿Qué estás usando para leer el código de barras? Por ejemplo, el componente TCompPort, te permite "jugar" con no pocas opciones que acaso pudieras utilizar para leer el código de barras sin tocar la configuración del dispositivo. No sé si merecerá la pena que te compliques la vida, pero, tal vez podrías instalar este componente y echarle un vistazo. ;)

newtron 05-11-2014 09:58:01

Hola de nuevo.

El lector de código de barras es usb y lo que hace es enviar al buffer de teclado lo que lee, ahora mismo lo que hago es recoger esos datos en un memo. El componente TComPort ya lo uso para conectar básculas y "chismes" al pc por el puerto serie pero no creo que se pueda utilizar para capturar las lecturas del lector de código de barras, igual estoy equivocado.

Saludos

dec 05-11-2014 16:13:18

Hola,

Creo que sí que es posible usar el componente "TCompPort" para capturar códigos de barra. Lo que ignoro es hasta qué punto depende del software y/o del hardware. Pero lo cierto es que dicho componente ofrece no pocas opciones que acaso puedas "tocar" de manera que el trabajo resulte más sencillo, es decir, que no sea necesario configurar la "pistola", sino que a través de software puedas hacerlo todo. De todas formas, tampoco me hagas mucho caso, o, pruébalo sólo si tienes tiempo, en fin.

newtron 05-11-2014 16:51:40

Cita:

Empezado por dec (Mensaje 484265)
Hola,

Creo que sí que es posible usar el componente "TCompPort" para capturar códigos de barra. Lo que ignoro es hasta qué punto depende del software y/o del hardware. Pero lo cierto es que dicho componente ofrece no pocas opciones que acaso puedas "tocar" de manera que el trabajo resulte más sencillo, es decir, que no sea necesario configurar la "pistola", sino que a través de software puedas hacerlo todo. De todas formas, tampoco me hagas mucho caso, o, pruébalo sólo si tienes tiempo, en fin.

No tengo problema en probarlo, ya te digo que uso ese componente y no me cuesta ningún trabajo. El problema es que para ponerse a la "escucha" pide un puerto que creo que debe de ser un puerto serie, no sé si se podrá "jugar" con eso, le echaré un vistazo.

Gracias y un saludo


La franja horaria es GMT +2. Ahora son las 17:37:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi