Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Retraso al leer datos de una bascula (https://www.clubdelphi.com/foros/showthread.php?t=75487)

trex2000 27-08-2011 22:56:01

Retraso al leer datos de una bascula
 
Saludos a todos.

Estoy haciendo una aplicacion que lee los datos de una bascula por medio del puerto serial, utilizo los componentes AsyncPro, en especifico ApdComport, AdTerminal y un Emulator de la misma suite, lo que pasa es que si me pone los datos en la terminal pero al querer pasarlo a un Label y de ahi a un StringGrid los manda con retreso osea siempre un moviemineto anterior y no el actual, ¿alguien me podria decir a que se debe esto y como corregirlo?

Espero haberme dado a entender.

De antemano muchas gracias

Casimiro Notevi 27-08-2011 23:57:08

En principio haría falta que pongas el código que usas ;)

trex2000 28-08-2011 20:01:09

Gracias por la respuesta el codigo que utilizo en ese boton es el siguente:
Código Delphi [-]
procedure TFMov.CoolBtn_PesoClick(Sender: TObject);
Var
  I, G, L,iRenglonTerminal : Integer;
  sValRen, sCaracter, sPeso : String;
begin
  L:=1;
  If Not ApdComport1.Open Then
   ApdComport1.Open := True;
  AdTerminal1.Clear;
  AdTerminal1.ClearAll;
  ApdComport1.Output := 'P';
  I:=sGridMovtos.RowCount-1;
  iRenglonTerminal := 1;
  sValRen := AdTerminal1.Line[iRenglonTerminal];

  CoolLabel20.Caption := Trim(AdTerminal1.Line[0]);

    Application.ProcessMessages;

    If CoolLabel20.Caption <> '' Then
     Begin
      sGridMovtos.Cells[0,I]:=IntToStr(I);//Ticket
      sGridMovtos.Cells[1,I]:=txtbtn_CodProd.Text;//Codigo del producto
      sGridMovtos.Cells[2,I]:=coolLabel20.caption;//Peso Bruto
      sGridMovtos.Cells[3,I]:=IntToStr(0);//Tara
      sGridMovtos.Cells[4,I]:=coollabel20.caption;//Peso Neto
      sGridMovtos.Cells[5,I]:=IntToStr(txtLoteNumJul.AsInteger);//Lote
      sGridMovtos.Cells[6,I]:=IntToStr(txtTarima.AsInteger);//Tarima
      sGridMovtos.RowCount:=(sGridMovtos.RowCount+1);

     End
    Else
     ShowMessage('HAY UN ERRROR');

end;

Espero me puedan ayudar.

De antemano muchas gracias.

duilioisola 29-08-2011 00:04:43

No he entendido bien tu pregunta, pero creo que lo que puede estar pasando es que no se espera suficiente tiempo para que el puerto COM responda.
Tu le envías un caracter 'P'. Luego tienes que darle unos momentos para que la báscula reciba la petición, genere la respuesta, te la envíe y luego tu la recibas.
En este caso, yo probaría poniendo una pausa entre el envio de 'P' y la recepción;
Código Delphi [-]
procedure TFMov.CoolBtn_PesoClick(Sender: TObject);
Var
  I, G, L,iRenglonTerminal : Integer;
  sValRen, sCaracter, sPeso : String;
  BucleEspera : Integer;
begin
...
  {Envia 'P' a la báscula}
  ApdComport1.Output := 'P';
  I:=sGridMovtos.RowCount-1;
  iRenglonTerminal := 1;
  sValRen := AdTerminal1.Line[iRenglonTerminal];

  {Se llama a ProcessMessages unas cuantas veces, emulando una espera}
  for BucleEspera := 1 to 10 do
      Application.ProcessMessages;

  {Ahora se supone que el mensaje ya ha llegado}
  CoolLabel20.Caption := Trim(AdTerminal1.Line[0]);

    Application.ProcessMessages;

    If CoolLabel20.Caption <> '' Then
...

Prueba con diferentes valores en el bucle de espera...

trex2000 29-08-2011 01:33:12

Muchas gracias por la respuesta, voy a probarlo y cometo como me fue.


La franja horaria es GMT +2. Ahora son las 03:13:39.

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