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 30-03-2011
harimuya harimuya is offline
Miembro
 
Registrado: ago 2003
Posts: 19
Poder: 0
harimuya Va por buen camino
Unhappy Componente Comport

Tengo un problema con el componente CPortLib, exactamente con el
Comport, no me captura la informacion a traves de un For - End
funciona bien si lo hago por partes (es decir click para capturar, click para procesar) pero no me sirve asi, debo poner todo el proceso a traves de un for, les paso algo...
Código Delphi [-]
for Wvez := 1 to 50 do
begin
ComPort.Port:='COM12';
ComPort.BaudRate:=brCustom;
ComPort.Open
ComPort.WriteStr('1');
        
ComPort.ReadStr(Str, 3000);   // Esta parte no me funciona
Memo1.Text := Str;    // Si le pongo un Message recien captura
.        // si le pongo Sleep(xx) tampoco funciona 
.
.
end;
esto debe ser automatico,
alguien podria ayudar con este tema
desde ya gracias por su respuestas

Última edición por ecfisa fecha: 30-03-2011 a las 21:16:54. Razón: Etiquetas DELPHI
Responder Con Cita
  #2  
Antiguo 30-03-2011
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Cita:
Empezado por harimuya Ver Mensaje
Tengo un problema con el componente CPortLib, exactamente con el
Comport, no me captura la informacion a traves de un For - End
funciona bien si lo hago por partes (es decir click para capturar, click para procesar) pero no me sirve asi, debo poner todo el proceso a traves de un for, les paso algo...
Código Delphi [-]
Application.Processmessages;
for Wvez := 1 to 50 do begin
 ComPort.Port:='COM12';
 ComPort.BaudRate:=brCustom;
ComPort.Open ComPort.WriteStr('1');
                  ComPort.ReadStr(Str, 3000);   
// Esta parte no me funciona
 Memo1.Text := Str;
      // Si le pongo un Message recien captura .
              // si le pongo Sleep(xx) tampoco funciona  . .
 end;
esto debe ser automatico,
alguien podria ayudar con este tema
desde ya gracias por su respuestas

Prueba de esta manera a ver.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 30-03-2011
harimuya harimuya is offline
Miembro
 
Registrado: ago 2003
Posts: 19
Poder: 0
harimuya Va por buen camino
Cita:
Empezado por marcoszorrilla Ver Mensaje
Prueba de esta manera a ver.

Un Saludo.


Nada MarcosZorrila,

sigue sin funcionar y me va a volver loco este tema

Saludos.
Responder Con Cita
  #4  
Antiguo 30-03-2011
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Hola!

1. No veo el porque en cada iteracion del ciclo for asignas puerto baudios y abres el puerto. Creo que eso lo debes de hacer antes de entrar en el ciclo for.

Código Delphi [-]
 ComPort.Port:='COM12';
 ComPort.BaudRate:=brCustom;
 ComPort.Open
Application.Processmessages;
for Wvez := 1 to 50 do 
  begin
     ComPort.WriteStr('1');
     ComPort.ReadStr(Str, 3000);   
     // Esta parte no me funciona
     Memo1.Text := Str;
     // Si le pongo un Message recien captura .
     // si le pongo Sleep(xx) tampoco funciona  . .
 end;

2. ¿Has visto los ejemplos que tre el comport? Ahi te muestra que deberias de usar el evento OnRxChar para capturar los datos entrantes:

Código Delphi [-]
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
  Str: String;
begin
  ComPort.ReadStr(Str, Count);
  Memo.Text := Memo.Text + Str;
end;

3. Por supuesto esto ultimo lo deberas adaptar a tus nececidades.

Saludos!!
__________________
ESTO ES UN FORO ... NO UN MÓVIL
¿Por qué no escribir de una manera comprensible para que los humanos lo podamos entender?
Responder Con Cita
  #5  
Antiguo 30-03-2011
harimuya harimuya is offline
Miembro
 
Registrado: ago 2003
Posts: 19
Poder: 0
harimuya Va por buen camino
Cita:
Empezado por FGarcia Ver Mensaje
Hola!

1. No veo el porque en cada iteracion del ciclo for asignas puerto baudios y abres el puerto. Creo que eso lo debes de hacer antes de entrar en el ciclo for.

Código Delphi [-]
 ComPort.Port:='COM12';
 ComPort.BaudRate:=brCustom;
 ComPort.Open
Application.Processmessages;
for Wvez := 1 to 50 do 
  begin
     ComPort.WriteStr('1');
     ComPort.ReadStr(Str, 3000);   
     // Esta parte no me funciona
     Memo1.Text := Str;
     // Si le pongo un Message recien captura .
     // si le pongo Sleep(xx) tampoco funciona  . .
 end;

2. ¿Has visto los ejemplos que tre el comport? Ahi te muestra que deberias de usar el evento OnRxChar para capturar los datos entrantes:

Código Delphi [-]
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
  Str: String;
begin
  ComPort.ReadStr(Str, Count);
  Memo.Text := Memo.Text + Str;
end;

3. Por supuesto esto ultimo lo deberas adaptar a tus nececidades.

Saludos!!

Gracias FGarcia por la respuesta.
Con respecto a asignar y abrir el puerto lo hago antes del for y con respecto al OnRxChar si fue lo primero que probe pero igual no recibo la informacion hasta que termine el programa, y necesito recibir la informacion despues de cada ComPort.WriteStr('1'); para poder trabajar con la informacion que recibo antes de tener la siguiente vuelta.

Saludos.
Responder Con Cita
  #6  
Antiguo 31-03-2011
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
harimuya:

Con un ratillo libre hice este ejemplo, revisalo y espero que sea lo que necesitas.

El proyecto esta en delphi 2010, se supone que en versiones anteriores lo puedes abrir, en caso de algun problema solo comenta la linea siguiente (en el Source Code del proyecto)

Código Delphi [-]
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True; //COMENTA ESTA LINEA
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.

La unit2 solo la cree para hacer pruebas con el hardware adecuado, no es necesario que la uses.

Otro detalle es en comport version 2010 es el uso de AnsiString en vez de String solamente, solo cambia el tipo de variable donde sea necesario en el proyecto si tienes una version anterior.

No olvides comentarnos como te fue.
Archivos Adjuntos
Tipo de Archivo: zip TestComPort_CDelphi.zip (15,9 KB, 105 visitas)
__________________
ESTO ES UN FORO ... NO UN MÓVIL
¿Por qué no escribir de una manera comprensible para que los humanos lo podamos entender?
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
problemas con comport juanpa130679 Varios 1 30-03-2011 22:34:53
Componente ComPort Mary Carmen G. Varios 1 06-08-2008 00:30:26
ayuda para instalar el componente ComPort en Builder 5 pollo_c C++ Builder 0 04-08-2008 15:05:48
componente ComPort pollo_c Varios 12 02-08-2008 23:14:33
ayuda con componente comport dperezju ASM y Microcontroladores 22 02-08-2008 20:45:08


La franja horaria es GMT +2. Ahora son las 17:27:01.


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