Fórum Duvida ao enviar bloco de comandos para porta serial #339431
28/03/2007
0
Estou desenvolvendo uma rotina e preciso enviar uma sequencia de comandos pela porta serial, estou usando o Assync TapdComPort, por exemplo
[b:dc5391c4ba]procedure TForm1.BitBtn1Click(Sender: TObject);
Begin[/b:dc5391c4ba]
[color=blue:dc5391c4ba] InicializaModem.Output := ´AT´^M;
InicializaModem.Output := ´AT´^M;
InicializaModem.Output := ´ATE0´^M;
InicializaModem.Output := ´AT+CPIN?´^M;[/color:dc5391c4ba]
[b:dc5391c4ba]end[/b:dc5391c4ba]
Segue as dúvidas:
1 - O Bloco de comando acima é enviado linha a linha para porta serial ou seja envia a primeira linha processa e depois envia a segunda linha ou é enviado tudo que esta dentro do [b:dc5391c4ba]begin end[/b:dc5391c4ba] para depois processar
2 - Como faço para enviar a sequencia de comandos acima da Forma que só envio a segunda linha de comando após analisar a resposta da primeira.
Conto com a colaboração de todos.
Ariovaldo
Curtir tópico
+ 0Posts
28/03/2007
Massuda
Nessa situação o que geralmente se faz é implementar uma máquina de estados finitos (MEF). Use o evento de recepção de dados para esperar por uma determinada resposta conforme o estado da MEF; a cada resposta, você muda o estado da MEF e envia um novo comando, até a MEF terminar.
Gostei + 0
28/03/2007
Ariovaldo
Valeu até mais
Gostei + 0
28/03/2007
Ariovaldo
Gostei + 0
29/03/2007
Massuda
function TApdComPort.WaitForString( const S : String; const Timeout : LongInt; const Yield, IgnoreCase : Boolean) : Boolean;
procedure TForm1.BitBtn1Click(Sender: TObject); Begin InicializaModem.Output := ´AT´^M; if InicializaModem.WaitForString(´OK´, 1000, False, True) then begin // tudo OK end else begin // timeout ou falhou end; ...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)