Ir para conteúdo
Fórum Script Brasil
  • 0

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


Guest --Anderson --

Pergunta

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 para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...