Foros Club Delphi

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

harimuya 30-03-2011 20:50:53

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

marcoszorrilla 30-03-2011 21:36:51

Cita:

Empezado por harimuya (Mensaje 395128)
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.

harimuya 30-03-2011 21:46:37

Cita:

Empezado por marcoszorrilla (Mensaje 395131)
Prueba de esta manera a ver.

Un Saludo.



Nada MarcosZorrila,

sigue sin funcionar y me va a volver loco este tema

Saludos.

FGarcia 30-03-2011 22:35:09

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!!

harimuya 30-03-2011 22:44:34

Cita:

Empezado por FGarcia (Mensaje 395145)
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.

FGarcia 31-03-2011 06:50:03

1 Archivos Adjunto(s)
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.

harimuya 08-04-2011 15:28:32

Estimado FGarcia:

Ante todo gracias por la respuesta, te comento los casos que tengo ahora,

1.- Probe lo que me enviastes y funciona pero la informacion que recibe se corta en algunos casos, recibiendo de las 130 muestras a veces 20 muestras, por cada pasada, es decir en cada for, no, en todo los for
2.- Hice una prueba parecida al que me enviastes y tengo el mismo problema no me funciona, no recepciona la data, cambie mi programa le cambie los propiedades, etc, y no me funciona, solo funciona el que me enviastes,
le cambiastes algo ???, ademas si le incluyo algun componente a tu proyecto cambia de propiedades, para mostrarse como windows vista,

A la espera de tus comentarios.

Saludos.

harimuya

FGarcia 09-04-2011 21:13:28

El proyecto que te envie esta hecho en D2010 con los updates 4 y 5.
El ComPort es la version 4.0 con algunas modificaciones para funcionar con D2010, pero estas modificaciones solo se hicieron para que operara correctamente el ComPacket no tengo idea si esten afectando a RxChar.

¿Que version de delphi y/o comport estas usando?


Delphi2010 esta corriendo en Win 7 Pro 64 bits SP1

Aqui esta el como modificar el comport para 2010

harimuya 11-04-2011 20:38:28

Gracias por tu tiempo FGarcia

oscarac 18-05-2011 21:30:42

donde consigo el componente comport ???

harimuya 19-05-2011 14:43:31

en esta pagina puedes encontrarla:

http://www.torry.net/pages.php?s=89

Saludos.


La franja horaria es GMT +2. Ahora son las 00:44:04.

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