Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-05-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por vejerf Ver Mensaje
Quizás no sea la forma más práctica ni ortodoxa, pero más o menos me funciona
Hola vejerf

Para este tipo de menesteres y desde mi experiencia con la recepción de paquetes de datos a través de puerto serial, te recomiendo que uses el componente TurboPower Async Professional (gracias amigo Al por recomendarmelo hace ya unos años ), el cual tiene dentro de sus particularidades un objeto de nombre ApdDataPacket, a este objeto le asignas una cadena de inicio y una cadena de final por ejemplo:

En las propiedades del Objeto ApdDataPacket

StartString = #22 [SYN] (Aunque yo usaria solo #2 [STX], a menos que requieras por fuerza el [SYN])
EndString = #3 [ETX];

y en código solo requieres hacer esto:

Código Delphi [-]
procedure TLector.ApdDataPacket1StringPacket(Sender: TObject; Data: string);
begin
  ProcesaInformacion(Data); //Data ya tiene todo el paquete de datos que esperas.
end;

Al final, te olvidas de codificar y validar cada vez que recibes un caracter.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #2  
Antiguo 07-05-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Gracias por tu ayuda Egostar... pero... pero...
El componente que uso es el TVaComm. Este viene junto con otra serie de componentes en un paquete llamado Async32 si no me equivoco. Otro de los componentes que trae es el TVaCapture que funciona como tu dices. Le indicas el comienzo y el fin de trama y cuando detecta ese comienzo y fin produce un evento que tiene como parámetro el contenido del paquete. El problema que me encontré es que el modem que uso devuelve los caracteres hexadecimales y el componente TVaCapture devuelve caracteres ASCII. En principio para algunas cosas me es igual, pero me he dado cuenta de un pequeño fallo. Resulta que el modem devuelve en muchas tramas el valor $00 (carácter NULL) y TVaCapture lo devuelve en el String de datos como un espacio en blanco ($20 si no me equivoco). Entonces esto a veces me lleva a error xq puede que alguna vez sí sea verdaderamente un espacio o a veces sea un NULL. Y estos valores puede que me sean necesarios saber el valor exacto.
No sé si después de todo este palabrerío se me habrá entendido jeje.

De todas formas... muchísimas gracias por el consejo!!!
Responder Con Cita
  #3  
Antiguo 07-05-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por vejerf Ver Mensaje
...El componente que uso es el TVaComm. Este viene junto con otra serie de componentes en un paquete llamado Async32 si no me equivoco. Otro de los componentes que trae es el TVaCapture que funciona como tu dices. Le indicas el comienzo y el fin de trama y cuando detecta ese comienzo y fin produce un evento que tiene como parámetro el contenido del paquete...
Sólo como dato, te comento que usas los mismos componentes que yo utilizaba antes de descubrir los de TurboPower que te sugiere Eliseo, los cuales encontré más potentes y funcionales. Y es bastante problable que con ellos tengas menos problemas.

Saludos.

Al.
Responder Con Cita
  #4  
Antiguo 07-05-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Cita:
Sólo como dato, te comento que usas los mismos componentes que yo utilizaba antes de descubrir los de TurboPower que te sugiere Eliseo, los cuales encontré más potentes y funcionales. Y es bastante problable que con ellos tengas menos problemas
Pues ante esto sólo me resta rendirme ante la evidencia. Soy un poco reacio a cambiar de componentes cuando ya más o menos sé el comportamiento de cada uno, pero supongo que por echar una ojeada a los que recomendáis no pierdo nada.

Muchas gracias otra vez a los dos!!!
Responder Con Cita
  #5  
Antiguo 08-05-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por vejerf Ver Mensaje
Pues ante esto sólo me resta rendirme ante la evidencia. Soy un poco reacio a cambiar de componentes cuando ya más o menos sé el comportamiento de cada uno, pero supongo que por echar una ojeada a los que recomendáis no pierdo nada.

Muchas gracias otra vez a los dos!!!
Sin saber como funciona tu componente y viendo que no te gusta mucho la idea, te pongo un pequeño código con lo que yo haría, digamos que es el esquema general de la lectura de puertos que normalmente yo realizo, es obvio que puede tener fallos, pero lo que quiero mostrar es que no necesitas tanto código para lo que quieres.

Código Delphi [-]
procedure TSimuladorThorcomForm.PuertoSerieRxChar(Sender: TObject;
  Count: Integer);
var
  I : Integer;
  Dato : Byte;
  Linea,DatoHx : String;
begin
  for I := 1 to count do begin
      Dato := ord(TVaComm1.GetChar); //Suponiendo que exista esa funcion (GetChar)
      DatoHx := IntToHex(Dato);
      case Dato of
           22: begin //Si es SYN, limpio la cadena para ingresar datos nuevos.
                    Linea := '';                             
           end;
           3: begin //Si es ETX, procedo a realizar lo que se tenga que hacer con el paquete de datos
                  Hago_lo_que_Sea(Linea);
           end;
      end;
      Linea := Linea +' '+ DatoHx; //Agrego todos los caracteres que le lleguen al puerto.
  end; 
end;

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #6  
Antiguo 08-05-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Gracias por tomarte la molestia de realizar un código para la lectura del puerto serie. Una pequeña pega que le veo es que la variable linea debería ser global y no local, ya que puede que no lleguen todos los caracteres de la trama en el momento en que se produzca el evento. Quizás llegue en dos veces por lo que la variable se habrá vuelto a inicializar y supongo que no funcionará, no?

Salu2...
Responder Con Cita
  #7  
Antiguo 08-05-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por vejerf Ver Mensaje
Gracias por tomarte la molestia de realizar un código para la lectura del puerto serie. Una pequeña pega que le veo es que la variable linea debería ser global y no local, ya que puede que no lleguen todos los caracteres de la trama en el momento en que se produzca el evento. Quizás llegue en dos veces por lo que la variable se habrá vuelto a inicializar y supongo que no funcionará, no?

Salu2...
Hola

Si y no, ya que al ser una comunicación serial, los caracteres te llegan como su nombre lo indica, de forma serial, uno tras otro, por lo que el conflicto que mencionas no creo que se presente ya que cuando te llega el primer caracter de la siguiente trama, inicializas la variable Linea.

La puse como local para que se viera, pero puedes hacerla global.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #8  
Antiguo 28-06-2008
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
Hola vejerf

Para este tipo de menesteres y desde mi experiencia con la recepción de paquetes de datos a través de puerto serial, te recomiendo que uses el componente TurboPower Async Professional (gracias amigo Al por recomendarmelo hace ya unos años ), el cual tiene dentro de sus particularidades un objeto de nombre ApdDataPacket, a este objeto le asignas una cadena de inicio y una cadena de final por ejemplo:

En las propiedades del Objeto ApdDataPacket

StartString = #22 [SYN] (Aunque yo usaria solo #2 [STX], a menos que requieras por fuerza el [SYN])
EndString = #3 [ETX];

y en código solo requieres hacer esto:


Código Delphi [-]
procedure TLector.ApdDataPacket1StringPacket(Sender: TObject; Data: string);
begin
ProcesaInformacion(Data); //Data ya tiene todo el paquete de datos que esperas.
end;





Al final, te olvidas de codificar y validar cada vez que recibes un caracter.

Salud OS
buenos dtardes egostar estoy leyendo el post y me baje el componenet que mencionas lo pienso usar para leer el puerto serial de un conmutador, me podrias proporcionar algun manual de como usarlo mil gracias.
Responder Con Cita
  #9  
Antiguo 29-06-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por richy08 Ver Mensaje
buenos dtardes egostar estoy leyendo el post y me baje el componenet que mencionas lo pienso usar para leer el puerto serial de un conmutador, me podrias proporcionar algun manual de como usarlo mil gracias.
Hola richy08

Puedes bajar los archivos de ayuda que tienen disponibles. tpapro_docs

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #10  
Antiguo 30-06-2008
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
ok gracias les echare un vistazo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Lectura del USB por Interrupción cisco Varios 0 25-10-2007 18:13:29
Documentacion para Generar Tramas TCP bastardo10 Varios 0 07-06-2007 17:31:38
Lectura de un FTP con idHTTP gluglu Internet 2 05-05-2007 00:35:50
Problema de lectura de un cd dragondetierra Varios 0 18-02-2007 18:58:52


La franja horaria es GMT +2. Ahora son las 22:02:23.


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
Copyright 1996-2007 Club Delphi