AJUDA COM SERIAL + DELPHI (voltímetro 8 canais)

Programação Delphi e Pascal

Moderadores: 51, guest2003

AJUDA COM SERIAL + DELPHI (voltímetro 8 canais)

Mensagempor vibrexbr2014 » 03 Jul 2014 20:16

Boa noite.

Estou começando a programar em Delphi e preciso comunicar com um equipamento via porta serial.
São vários comandos diferentes que precisam ser interpretados e colocar a informação em labels.
Já consegui fazer a comunicação utilizando o componente TComport e associando cada comando a um botão. Funciona perfeitamente!!!
O problema é que preciso enviar todos os comandos sequencialmente para que não precise apertar um botão de cada vez, mas sim somente um que realize todo o ciclo.
Preciso:
1) selecionar a string do comando;
2) transmitir o comando;
3) verificar se houve timeout;
4) desmembrar a rotina recebida com o comando COPY(já operacional);
5) colocar no local certo a informação
6) repetir o processo até o ultimo comando.

Tenho que executar 5 botões com essa sequência descrita acima.
Não consegui fazer em Delphi porque ainda não entendi com fazer:
FOR COMANDO 0 TO 10
BEGIN
WHILE NOT FLAG_TUDO_OK DO; // AGUARDA A PORTA SERIAL RECEBER O VALOR PARA QUE POSSA TRATAR E CONTINUAR O PROCESSO
INTERPRETA O RESULTADO DA SERIAL
EXECUTA O COMANDO
END;
END;
O problema é que o DELPHI trava durante o WHILE ... DO.
Isso funciona perfeitamente nos uC!!!
Qualquer ajuda é muito bem vinda, pois já estou quebrando a cabeça há dias!!!

Obrigado.

Vibrex.
vibrexbr2014
Bit
 
Mensagens: 10
Registrado em: 03 Jul 2014 19:54

Re: AJUDA COM SERIAL + DELPHI (voltímetro 8 canais)

Mensagempor tcpipchip » 03 Jul 2014 20:54

Ou usa thread ou timer event.
Não deixe um programa em LOOP, colocado dentro do loop a seguinte função

application.processmessages;

Que tal usar a lib da marshallsoft, que tem serialização por interrupt ?

tcpipchip
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: AJUDA COM SERIAL + DELPHI (voltímetro 8 canais)

Mensagempor vibrexbr2014 » 03 Jul 2014 21:14

Obrigado por responder!
Não tenho essa LIB.
Você poderia indicar onde posso encontrar mais informações ou exemplos?
Você já fez algum programa utilizando esse recurso?

Mais uma vez,, obrigado.
vibrexbr2014
Bit
 
Mensagens: 10
Registrado em: 03 Jul 2014 19:54

Re: AJUDA COM SERIAL + DELPHI (voltímetro 8 canais)

Mensagempor vtrx » 03 Jul 2014 21:48

O componente Tcomport trabalha com thread .
Você pode usar um truke comum que é deixar um TMemo invisivel com a largura da string que você vai usar,assim o memo vai recebendo e pulando as linhas automaticamente,você só tem que verificar cada linha do memo e pegar o dado que quiser.
Faça também a verificação da quantidade de linhas que o memo terá,assim voce executa um Memo.clear,pois o memo tem limitação de memória.
Um exemplo genérico;
1) selecionar a string do comando;

Usando o Memo seria,tipo,if Memo1.Lines.Strings[0]=
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: AJUDA COM SERIAL + DELPHI (voltímetro 8 canais)

Mensagempor vibrexbr2014 » 03 Jul 2014 22:44

Haveria a possibilidade de você enviar um exemplo de programa, pois estou começando agora e sinto certa dificuldade.
Eu tenho que executar 5 listas com 10 comandos pela porta serial.
Muito obrigado pela sua atenção.
vibrexbr2014
Bit
 
Mensagens: 10
Registrado em: 03 Jul 2014 19:54

Re: AJUDA COM SERIAL + DELPHI (voltímetro 8 canais)

Mensagempor tcpipchip » 04 Jul 2014 08:56

Código: Selecionar todos
 unit Dvce_pgm;

interface

uses
  wsc32, wsc32w, keycode, Display,
  SysUtils, WinTypes, WinProcs, Messages,
  Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, ExtCtrls;

implementation

function SendCommand(Port,Baud:Integer;Command:String;var Buffer:String:BufLen:Integer):Integer;
begin
  {reset (open) the port}
  SendCommand := fReset(Port, 1024, 1024);
  {error ? (negative return codes are errors)}
  if Code < 0 then exit;
  {set the baud rate}
  SendCommand := fBaud(Port, Baud);
  if Code < 0 then exit;
  {send string}
  SendCommand := fPuts(Port, Command, Length(Command));
  if Code < 0 then exit;
  {wait up to 250 mSec for a response}
  if(fWaitFor(Port, 250)<0) return Code;
  {allow time for entire response (depends on serial device)}
  fSleep(1);
  {return data}
  SendCommand := SendCommand fGets(Port, Buffer, BufLen)
end;

{initialization}
begin
end.


http://www.marshallsoft.com/
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: AJUDA COM SERIAL + DELPHI (voltímetro 8 canais)

Mensagempor vtrx » 05 Jul 2014 08:04

Oque voce ja tem programado?
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: AJUDA COM SERIAL + DELPHI (voltímetro 8 canais)

Mensagempor vibrexbr2014 » 05 Jul 2014 22:06

Eu estou fazendo uma interface para calibrar um equipamento, utilizando comunicação serial.
A interface deverá gerar sinais senoidais, medir tensões positivas e negativas, e medir frequência (<5kHz).
Estou utilizando o Arduíno Leonardo como interface e comprei um módulo DDS AD9850 na China.

Abraço.

André.
vibrexbr2014
Bit
 
Mensagens: 10
Registrado em: 03 Jul 2014 19:54


Voltar para Delphi e Pascal

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitantes

x