Comunicação Serial com Delphi 2010 76


Cabo Serial

Esta dica é para quem tem interesse em desenvolver aplicações para automação industrial que exigem comunicação pela porta Serial para controlar ou interagir com equipamentos.

O Delphi é um ambiente de desenvolvimento no mais simples estilo arrastar e soltar orientado a eventos. É uma ótima linguagem pra quem está começando e muito utilizada no desenvolvimento de aplicações comerciais no Brasil. Uma de suas principais vantagens é a possibilidade de expandir suas características e funcionalidades através de componentes de terceiros. Muitos dos quais são fornecidos gratuitamente e com código fonte, como é o caso do TComPort desenvolvido por Dejan Crnila. Seus arquivos podem ser baixados aqui: http://sourceforge.net/projects/comport/

Compatível com as versões 7, 2007, 2009 e 2010 do Delphi, o TComPort possibilita o desenvolvedor a criar aplicações que necessitam comunicar-se através da porta Serial de maneira rápida de simples. Depois de instalado, sua utilização se resume em praticamente duas partes. O método ComPort1.WriteStr e o evento ComPort1RxChar.

Enviando Dados:

Para enviar dados pela porta Serial, basta passar uma String com o conteúdo desejado para o método WriteStr conforme o exemplo abaixo disparado durante um clique em um botão:

procedure TfrmTeste.Button1Click(Sender: TObject);

begin

if ComPort1.Connected = True then // Verifica se a porta esta conectada

begin

ComPort1.WriteStr(Edit1.Text); // Enviando dados pela Serial

Edit1.Text := '';

end;

end;

Recebendo Dados:

Para receber dados pela porta Serial, basta utilizar o evento OnRxChar que é acionado automaticamente toda vez que alguma informação chega à porta Serial. Veja um exemplo abaixo:

procedure TfrmTeste.ComPort1RxChar(Sender: TObject; Count: Integer);

var

Buffer : AnsiString;

Contador: Integer;

begin

// Define o valor do Time Out

Sleep(500);

// Confere o número total de bytes dentro do pacote enviado

Contador := ComPort1.InputCount;

// Lê o pacote enviado e armazena no Buffer

ComPort1.ReadStr(Buffer, Contador);

// Alimenta um campo Memo com os dados recebidos

Memo1.Lines.Add((Buffer);

end;

Uma observação importante é o uso da função Sleep no começo do evento. Como a comunicação Serial é muito mais lenta que o processamento do computador, é importante ajustar o valor do Sleep para que de tempo de todos os dados enviados sejam recebidos pelo computador. A função Sleep faz o computador aguardar o tempo estipulado em milissegundos antes de continuar na próxima linha.

Viu como é simples enviar e receber dados pela porta Serial utilizando o Delphi? Agora com está base você pode evoluir com o código de acordo com as necessidades da sua aplicação.

Últimos 5 artigos de Fernando Fonte

Sobre Fernando Fonte

De Campinas-SP, bacharel em Ciência da Computação. Atua como Analista Programador em uma empresa de tecnologia. Tem experiência no desenvolvendo de softwares para comunicação e controle de hadware via porta serial e sistemas ERP. Possui conhecimento em sistemas operacionais Windows, programação Delphi e Visual Basic 6 e Banco de Dados SQL Server e MySQL. Atualmente estuda C# e Android. Tem interesse em Jogos, Celulares, Smartphones, Notebooks e tudo que for relacionado a tecnologia. Fundador deste site e editor chefe, convidou amigos para lhe ajudar com este projeto.

Deixe uma resposta

76 pensamentos em “Comunicação Serial com Delphi 2010

  • David

    Saudações. Como eu uso as propriedades timeout do compontente. Eu preciso tratar a situação de quando não houve resposta resposta na porta na porta selecionada. Por exemplo quando eu envio um comando à porta errada. Se a porta não me responde num certo tempo eu quero dar uma resposta de timeout.
    Desde já agradecido.

    • Fernando Fonte

      Não tem timeout. Em comunicação serial, se você tentar se conectar numa porta COM que não existe, você receberá um erro logo de cara. Se no seu PC só tiver a porta Com 3 e você tentar conectar na 4, vai dar erro.

      • David

        Agradeço a atenção, mas me desculpe por ter sido pouco especifico. Este erro já tratei. O que queria saber era sobre as propriedades de TimeOut que existem no componente. Realmente quando a porta não existe da erro logo de cara. O problema é qdo eu mando um comando para o dispositivo e ele não responde e não me retorna o erro. Por exemplo eu to montando um identificador de chamadas telefonicas. Fiz o teste enviando os comandos mas com a linha desconectada do modem para ver no que dava. No comando enviado o sistema fica esperando a resposta do modem eternamente se deixar. Precisei montar um TimeOut usando o componente TTimer. Mas o componente é joinha. To usando a mil. Valeu…

  • Fernando Jr

    Boa Dia Fernando, eu baixei os arquivos e os descompactei numa paste no diretoacute;rio do Delphi 2010, tentei instalar mas natilde;o consegui, natilde;o sei o que fazer, tentei fazer como o Leia-Me que veio junto mas natilde;o deu certo. Me ajude, por favor.

    • David

      aí mano… se eu puder ajudar eu instalei da seguinte forma: abri os arquivos CPortLibD2010.dpk e DsgnCPortD2010.dpk num só grupo de projeto. aí eu compilei os dois e instalei o DsgnCPortD2010.dpk. desse jeito eu funcionou belezinha e eu to usando ele a mil. espero ter ajudado.