Jump to content
Fórum Script Brasil
  • 0

Como Pausar A Execução De Um Ontimer Até A Execução De Um Even


Guest --Anderson --

Question

Guest --Anderson --

Ae galera,

Seguinte no evento OnTimer de um timer na minha aplicação eu mando um pacote para cada placa eletronica via serial (serial) que eu tenho cadastrado no meu Banco de dados. Porem eu preciso enviar esse pacote para uma placa e então esperar a resposta da placa no evento OnRxChar do ComPort. Para depois disso eu possa mandar o pacote para a placa eletronica seguinte. Alguém sabe como fazer? Ou se é possivel?

//For para enviar o Pacote a todas as placas
  For i := 1 To Placas Do //Placas contem o numero total de placas cadastradas
    Begin
      //Carrega a variavel com o Numero da Placa
      Numero := dtmdispenser.sdsplacaenviaCODIGO.AsInteger;

      //Envia os Bytes do Pacote pela serial
      Comdispenser.Write(Inicio,1);
      Comdispenser.Write(Inicio2,1);
      Comdispenser.Write(Tamanho,1);
      Comdispenser.Write(Numero,1);
      Comdispenser.Write(Funcao,1);
      Comdispenser.Write(Ordem,1);
      Comdispenser.Write(CRC,1);
      Comdispenser.Write(Fim,1);
      Comdispenser.Write(Fim2,1);

      //pega o proximo resgitro
      dtmdispenser.sdsplacaenvia.Next;

      //AQUI EU PRECISO FICAR ESPERANDO QUE CHEGUE UM PACOTE NA COMPORT PARA DEPOIS DE CHEGAR
     //EU CONTINUE A EXECUÇÃO DO 'FOR'
     End;

Desde já agradeço,

Abraços

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Colega ... um comando for dentro de um timer fará com que esse for seja reiniciado toda a vez a cada segundo, voce até poderia parar o timer com o comando < Timer1.Enabled := false; > e esperar a resposta da placa no evento OnRxChar do ComPort, entretanto ao habilitar o timer novamente a variavel i do for seria 1 novamente, e neste caso, a variavel teria que ser declarada fora do timer. vou exemplificar:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  placas : integer = 0;
  cont : integer = 0;

implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    //Controle para enviar o Pacote a todas as placas
    cont:= cont + 1;
    if cont > placas then   //Placas contem o numero total de placas cadastradas
       begin
          Timer1.Enabled := false;
          exit;
       end;
      //Carrega a variavel com o Numero da Placa
      Numero := dtmdispenser.sdsplacaenviaCODIGO.AsInteger;

      //Envia os Bytes do Pacote pela serial
      Comdispenser.Write(Inicio,1);
      Comdispenser.Write(Inicio2,1);
      Comdispenser.Write(Tamanho,1);
      Comdispenser.Write(Numero,1);
      Comdispenser.Write(Funcao,1);
      Comdispenser.Write(Ordem,1);
      Comdispenser.Write(CRC,1);
      Comdispenser.Write(Fim,1);
      Comdispenser.Write(Fim2,1);

      //pega o proximo resgitro
      dtmdispenser.sdsplacaenvia.Next;

      //AQUI EU PRECISO FICAR ESPERANDO QUE CHEGUE UM PACOTE NA COMPORT PARA DEPOIS DE CHEGAR

      Timer1.Enabled := false;
     End;

end;

OBS: no evento OnRxChar do ComPort, assim que a resposta for obtida então voce aciona o timer novamente para a proxima leitura < Timer1.Enabled := true; >

Vale lembrar que a propriedade interval do timer deve ser um valor que permita o envio das informações, acho que de 3 a 5 segundos , ou seja , o interval deve estar entre 3000 e 5000.

Em função do exemplo voce deve fazer a modificação no seu codigo.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.5k
×
×
  • Create New...