Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Capturar datos por el puerto serie (https://www.clubdelphi.com/foros/showthread.php?t=50992)

mierda 04-12-2007 13:20:14

Capturar datos por el puerto serie
 
Hola, tengo un captador unitech ht 630, me han pedido que realice una aplicacion que capture los datos que hay dentro de el.

Yo desde el captador le obligo a mandar los datos, y desde delphi los tengo que capturar.

Me baje un componente gratis que se llama "TQCCom32" y con este lo consigo capturar.

Como no me aclaro mucho tengo un timer que va llamando al metodo read, y aqui cojo los datos.

Lo que pasa es que no se como decirle que ya ha terminado de capturar los datos. Si alguien sabe como utilizar este componente , o sabe de otro que capture los datos por el puerto serie, se lo agradeceria enormemente.

Gracias, un saludo.

FGarcia 04-12-2007 18:47:56

Hola!

Creo que independientemente del componente que uses los lectores opticos tienen una trama definida inclusive algunos colocan un * al iniciar y al terminar la cadena leida. Aqui seria necesario darle una leida la manual del lector. Por otro lado algunos componentes para lectura por el puerto serie ya traen un metodo para leer codigos de barra. No conosco el componente que mencionas, yo uso CPortLib de Djan Cernilla en sourceforge lo encuentras.

No dejes de informar como resolviste o las dudas que sigan existiendo.

egostar 04-12-2007 18:49:52

Cita:

Empezado por mierda (Mensaje 250218)
Hola, tengo un captador unitech ht 630, me han pedido que realice una aplicacion que capture los datos que hay dentro de el.

Yo desde el captador le obligo a mandar los datos, y desde delphi los tengo que capturar.

Me baje un componente gratis que se llama "TQCCom32" y con este lo consigo capturar.

Como no me aclaro mucho tengo un timer que va llamando al metodo read, y aqui cojo los datos.

Lo que pasa es que no se como decirle que ya ha terminado de capturar los datos. Si alguien sabe como utilizar este componente , o sabe de otro que capture los datos por el puerto serie, se lo agradeceria enormemente.

Gracias, un saludo.

Yo uso el APro y me resulta muy facil y muy bueno para las comunicaciones seriales.

Para saber que ya se terminó de recibir los datos normalmente se usan caracteres de control, depende del protocolo que tenga ese equipo que tienes.

Salud OS

mierda 04-12-2007 20:52:24

Me puedes decir que ejemplo ....
 
Me puedes decir que ejmeplo de los que trae deberia mirar para capturar los datos y ponerlos en un memo??

Un saludo. Gracias.

egostar 04-12-2007 21:04:33

Cita:

Empezado por mierda (Mensaje 250364)
Me puedes decir que ejmeplo de los que trae deberia mirar para capturar los datos y ponerlos en un memo??

Un saludo. Gracias.

Bueno, ejemplo como tal no creo que haya, pero has esto,

Necesitamos saber que caracter hay al final de la cadena que vas a recibir, yo imagino que debe ser un #13 o un #10 (ENTER) puede que sean los dos. Esto yo lo obtengo creando un archivo desde hiperterminal y después "mirando" los caracteres desde delphi con un "barrido" de los caracteres del archivo.

Código Delphi [-]
while not eof(Archivo) do begin
   Read(Archivo,Caracter);
   Memo1.Lines.Add(IntoStr(Ord(Caracter))+' '+Caracter); //Por ejemplo para el ASCII del caracter recibido
end;

Cuando determines que caracter es el fin de la cadena puedes hacer esto.

Pega en tu forma

1 ApdComPort
1 ApdDataPacket
1 Memo

Configuras los parametros de comunicacion del ApdComPort para que coincidan con tu equipo

Configuras las propiedades del ApdDataPacket

EndCond = [ecString]
EndString = Caracter que tienes, por ejemplo si es un 13, pon #13
StartCond = scAnyData

Luego en el evento OnStringPacket colocas esto

Código Delphi [-]
procedure TForm1.ApdDataPacket1StringPacket(Sender: TObject; Data: String);
begin
  Memo1.Lines.Add(Data);
end;

Intentalo y nos comentas.

Salud OS

PD. Puede ser que tambien tenga un Inicio de paquete o que tenga una longitud definida, vamos por partes, incluso si puedes pegar aqui el archivo que obtengas con hiperterminal podremos avanzar mas rapido.

mierda 05-12-2007 09:59:18

Probando
 
Hola, ya estoy probando como me has dicho ... pero aun no he obtenido ningun resultado, con el hyperterminal me sale esto


Inicio,9.00
3063194183062,1,21/01/2006 01:49:32
3063194183062,1,21/01/2006 01:49:33
3063194183062,1,21/01/2006 01:49:33
3063194183062,1,21/01/2006 01:49:34
Inicio,10.00
Inicio,11.00
Inicio,12.00
nicio,12.00


Sigo probando, gracias.

mierda 05-12-2007 11:15:37

Ya lo he conseguido ... pero no me sale bien
 
Hola, ya he conseguido captar los datos y volcarlos en un memo, pero me sale un caracter como un palo | pero en negrita al principio de cada linea:


Inicio,20.00
2572181205010,1,21/01/2006 04:43:28
3501167465024,1,21/01/2006 04:43:33
2002991133017,1,21/01/2006 04:43:35
002991133017,1,21/01/2006 04:43:35

Aunq si lo copio me sale bien ...

y si lo capto en un terminal de los atpro me sale asi:

0.00io,2Inicio,20.00
2572181205010,1,21/01/2006 04:43
:28 2572181205010,1,21/01/2006 04:43:28
3501167465024,1,21/01/2006 04:43
:33 3501167465024,1,21/01/2006 04:43:33
2002991133017,1,21/01/2006 04:43
:35 2002991133017,1,21/01/2006 04:43:35
Inicio,2
1.00 Inicio,21.00
nicio,21.
00 nicio,21.00

FGarcia 05-12-2007 19:16:05

Nunca he usado lo Apro por holgazan, me la llevo bien con ComPort, pero es posible que ese "palo" (|) sea un codigo de control (ascii 0..31) para indicar el inico de transmision. El Hyperterminal te los muestra pero si quieres verlos por ejemplo en un edit de delphi no se ven. Si quieres saber que codigo es necesitarias hacer una conversion a hexadecimal. Otra cosa que puedes hacer es capturar los datos con el programa de terminal que anexo que ya te hace la conversion a hexadecimal y a Ascii (los caracteres de control en ascii los muestra como un .)

egostar 05-12-2007 19:23:29

Cita:

Empezado por mierda (Mensaje 250500)
Hola, ya estoy probando como me has dicho ... pero aun no he obtenido ningun resultado, con el hyperterminal me sale esto


Inicio,9.00
3063194183062,1,21/01/2006 01:49:32
3063194183062,1,21/01/2006 01:49:33
3063194183062,1,21/01/2006 01:49:33
3063194183062,1,21/01/2006 01:49:34
Inicio,10.00
Inicio,11.00
Inicio,12.00
nicio,12.00


Sigo probando, gracias.

Bueno, asi es difícil encontrar el problema, porque no adjuntas el archivo de texto que te deja hiperterminal (o el programa que amablemente FGarcia adjuntó) y yo te ayudo a conocer los caracteres de control que tienen los paquetes de datos.

Nota: Lo mas seguro es que sean los caracteres correspondientes al ENTER. #13#10 ó #10#13

Salud OS


La franja horaria es GMT +2. Ahora son las 01:03:18.

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