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.


Parabens
adorei o post
o site ta cada vez melhor sempre q posso do uma lida e aprendo muito com os conteudos.
Muito bom o post. Porém tenho uma dúvida e seria grato se fosse possível você me ajudar.
Tenho o Delphi 2010 instalado, porém não consigo instalar o Comport. Você poderia me dar algumas dicas? Desde já agradeço.
André,
Você precisa baixar o componente e descompactar o conteúdo do arquivo zipado para uma pasta.
Vá até o caminho "TComPort4Beta_Delphi2010comportlib4source" e abra o projeto DsgnCPort14.dpk
Em seguida, no File Explorer do Delphi aparecerá uma estrutura de arquivos começando por "DsgnCPort14.bpl". Clique com o botão direito em cima deste nome e em seguida clique em "Build". Espere o projeto ser compilado e construído. Repita o clique com o botão direito e agora escolha "Install".
Qualquer dúvida volte a escrever aqui. Abraço!
Consegui instalar, porém instalei o DsgnCPort12.dpk no 14 continha um erro de falta do arquivo .res. Ainda vale ressaltar a necesidade de acrescentar o diretório do componente no Delphi. Agradeço a ajuda e a iniciativa, são pessoas que compartilham o conhecimento que fazem a diferença. Até logo. Abraços.
André, o arquivo .RES é criado quando você compila o projeto pela primeira vez. Depois funciona normalmente. Mas se com a versão 12 funcionou, tranquilo.
Ola amigos
Gostaria de saber que componente devo utilizar para comunicação serial (por exemplo – comport) em delphi 6 e windows 7.
Obrigado. Aguardo retorno…importante….tese de mestrado.
Alvaro – Engenheiro Biomedico
Alvaro, as versões anteriores do Comport funcionam com o Delphi 6. Veja se a 3.0 ou 3.1 serve pra você: http://sourceforge.net/projects/comport/files/com…
Ola Fernando
Desculpe-me mais uma vez… a duvida é a seguinte,:
em comunicações seriais utilizando o componente
COMPORT DA WINSOFT, funciona normalmente em SISTE-
MA WINDOWS XP E DELPHI 6… nao funcionou em WIN-
DOWS 7 E DELPHI 6.
(37) 8815-3553 ME LIGUE QUE RETORNO A LIGAÇÃO E
EXPLICO COM MAIORES DETALHES. OBRIGADO
Alvaro,
Imagino que o problema que você está tendo é com relação ao Delphi 6 com o Windows 7. Eles não são 100% compatíveis já que o Delphi 6 é muito antigo. Não tenho este ambiente aqui e por isso não posso lhe ajudar. Verifiquei neste link que muitas pessoas tem vários problemas tentando rodar o Delphi 6 no Windows 7: https://forums.embarcadero.com/thread.jspa?thread…
Uma possível solução seria usar o modo de compatibilidade com o XP (Virtual) disponível nas versões Professional e Ultimate do Windows 7.
qual é o serial do delph 2010
Matheus, o Delphi 2010 é um aplicativo pago e precisa ser ativado junto ao fabricante para ser utilizado por mais de 30 dias.
Ola gostaria de saber se é possivel a utilização do TComPort com Lazarus em uma aplicação para Linux.
Se sim como poderis implementar meu codigo??
Sérgio,
Desconheço esse ambiente de desenvolvimento em Pascal para Linux. Vou ficar te devendo essa.
Você poderia me enviar um tutorial de como instalar o comport no Delphi 2007. O meu e-mail é escolacetec@hotmail.com
Atenciosamente Leonardo.
Leonardo, vou ver se escrevo algum artigo demostrando como instalar componentes no Delphi. Fique de olho no site que em breve coloco alguma coisa.
Amigo.. Estou tentando fazer a comunicação com este componente, mas por exemplo envio uma unica msg uma vez, e se tento enviar outra o aplicativo da um erro e trava??
Vc tem algum programinha de teste que mostra como usá-lo?
Valew
Como você está enviando e qual erro que dá? Eu deu o exemplo neste artigo mesmo de como usar. Repare na linha 9 do primeiro exemplo: "ComPort1.WriteStr(Edit1.Text);" É desta forma que você envia os dados. Claro que antes você precisa configurar no componente as propriedades, como velocidades de transmissão, bits, etc e não esquecer de abrir a porta antes de enviar usando:
try
ComPort1.Open;
except on E: Exception do
ShowMessage('Problema ao conectar à porta COM. Verifique se algum programa está utilizando esta porta, feche-o e tente novamente.');
end;
Ola Fernando
Parabéns cara, gostei do POST.
Quero sabe como faço para mandar apenas um sinal pela porta COM de ligado/desligado. tipo, para acender e apagar um LUZ ..
é o mesmo principio ou tenho qe adaptar ??
Obrigado.
Everton, o princípio é o mesmo. O que muda é o lado do hardware, ou seja, o que o equipamento espera receber para acender ou apagar a luz.
Por exemplo, você pode enviar ComPort1.WriteStr('Ligado'); para acender e ComPort1.WriteStr('Desligado'); para apagar. Só que o equipamento tem que saber o que fazer quando chegar "Ligado" e "Desligado".
Estou testando esta dica, e esta dando o seguinte erro
'Property StoredProps dois not exist', o fiz de errado
Obrigado pela atenção
Osmar, você pode colar o seu código aqui? Em que momento acontece o erro?
Muito Obrigado pela atenção, eu já corrigi, foi so colocar o caminho do componente no projeto…
Valeu pela atenção
Estou precisando que meu sistema faça a leitura de uma balança rodoviária através da porta serial, será possível através do componente ComPort??? Se sim, alguém poderia me dar uma dica?
Oi Dêmis, é possível sim, porém você precisa saber o protocolo que esta balança envia via porta serial. Este protocolo você consegue com o fabricante da balança.
Depois é só monitorar o evento OnRxChar do ComPort da seguinte forma:
procedure TSeuForm.ComPort1RxChar(Sender: TObject; Count: Integer);
var
Contador: Integer;
Buffer: AnsiString;
begin
// Define o valor do Time Out
Sleep(50);
// 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);
end;
Certo. Mas onde vou usar as informações do fabricante em relação a esse protocolo, para que serve saber essa informação??? (Desculpe, ainda não trabalhei com manipulacao direta com hardware, exceto impressoras)
Obrigado
Você não falou que precisa ler os dados de uma balança? Então, estes dados vem em forma de um protocolo pré estabelecido pelo fabricante da balança.
Por exemplo, quando um caminhão passar nesta balança, ela irá disparar pela porta serial o peso num protocolo de texto. Algo como isto:
MARCADABALANCA2000131020110900
Lembrando que o que eu passei é só um exemplo. No protocolo do fabricante, diz que as 14 primeiras posições são a sua marca, do 15 ao 18 o peso, do 19 ao 26 a data e do 27 ao 30 a hora, ficando assim:
MARCADABALANCA 2000 13102011 0900
Ai você pega estes valores e usa no seu software.
Pra começar, você precisa saber qual balança que é, o fabricante, e entrar em contato com ele pra saber o protocolo que ela joga pela porta serial.
Huuuummm, certo Fernando.Cara muito obrigado pelas dicas.Hoje vou na empresa ver como o sitema exemplo, q vc mandou, vai se comportar. Cara, essas dicas acredito que são fundamentais, obrigado msm. Logo logo trago novidades. Abç
Ola,
Quando crio esse exemplo seu com um placa q tenho, ele automaticamente cria na USES CPort, CPortCtl;
e ao executar da erro nessa linha =s
Sou novo nessa area e gostaria de saber o motivo
Agradeço.
Deu algum problema na instalação do componente. Verifica se ele esta instalado corretamente. Se estiver, jogue estes arquivos da pasta do TComPort para a pasta do seu projeto e importe eles para o projeto em si.
Olá Fernando. Obrigado pela explicação deste componente.
Testei o código que você explicou, mas nenhuma linha aparece no Memo1.
Se eu tento com um "showmessage( Buffer )", aparece uma janela em branco.
Enretanto, se eu faço "showmessage( inttostr( contador ) )" o programa mostrará várias mensagens com o tamanho de cada buffer.
O que estou fazendo de errado?
Valeu.
É importante ressaltar que o buffer só é preenchido pelo componente no evento ComPort1RxChar.
Ae galera. Veja se alguem pode me ajudar: estou testando o funcionamento desse componente com o uso de um mouse serial só para ver como vai se comportar o programinha.Porém, quando executo e mando abrir
if ComPort1.Connected = True then
begin
ComPort1.WriteStr(Edit1.Text);
end
dá o seguinte erro: UNABLE TO OPEN COM PORT (WIN ERROR CODE: 2), onde estou errando?!?!
Olha, não tenho certeza, mas acho que com um mouse serial você não vai conseguir testar. O mouse serial quando conectador é automaticamente reconhecido pelo Windows que abre a porta COM onde ele está ligado automaticamente. Quando você tenta abrir a mesma porta COM no seu programa, ele da erro porque a tal porta já está em uso, no caso, pelo Windows com o Mouse Serial. Uma forma de testar uma porta serial para desenvolvimento de software sem um hardware do outro lado é comprar um conector serial DB9 e fechar curto entre os pinos 2 e 3 (Rx e Tx). Assim, tudo que você enviar pelo seu software irá receber de volta nele mesmo, monitorando o evento ComPort1RxChar.
Huuumm, certo.Mas explique um pouco mais sobre esse conector serial com curto fechado.Ainda nao trabalhei com comunicacao com hardwares antes. Abç
Este conector: http://images.tray.com.br/img/img_prod/261703/180…
Só soltar um fio atras dele deixando em curto os pinos 2 e 3. Joga no Google "Conector Serial DB9", tem bastante coisa sobre.
Cara, e se eu testar esse programa com um leitor de codigo de barras serial, será q vai funcionar???
Acho que também não funciona. Estes tipos de dispositivos, como mouse serial, leitores e etc são ativos, ou seja, eles abrem a conexão com a porta com. Você precisa de um dispositivo passivo, ou seja, que fica conectado e só responde quando seu software abre a porta e começa a enviar dados. Se você tiver uma TV LCD na sua casa pode tentar usar ela. A maioria hoje tem porta serial para automação residencial e da pra controlar canais, volume entre outras funções. Só olhar o manual delas.
Huuuuum, boa dica Fernando. Meu monitor aqui LCD é tv tbm e tem conexao serial. Vou providenciar o cabo. Vlw msm. Abç
Cara… Ja li muito forum e muitos post….. mas jamais vi alguem que se dedicasse tanto como vc fez com esse sua materia … vc respondeu todas as perguntas e ainda mais…. explicou coisas muito detalhadas…. só posso te dizer MEUS PARABENS. Vc representa o espirito da internet que ha muito ja moreu que é: COMPARTILHAR CONHECIMENTO pelo simples prazer de compartilhar. Se vc tiver um tutorial sobre o tcomport do delphi passa ai pra gente.
Obrigado! Mas esta não é uma característica exclusiva minha. Aqui no Dimensão Tech, todos os autores se esforçam o máximo para compartilhar conhecimento. Por isso somos um site diferente dos demais. Sobre ter um tutorial do TComPort, eu não tenho. O que aprendi foi desenvolvendo mesmo.
Prezado Fernando,
Parabéns está muito bom o seu blog, estou sando o COMPORT no D7.
O meu problema é o seguinte preciso ler dados escritos em uma porta serial real, enviados por uma impressora fiscal, por exemplo na COM3, fiz um exemplo de leitura seguindo suas orientações postadas, no evento RxChar, porém como a porta ja está aberta pelo aplicativo da impressora o meu exemplo retorna a mensagem "UNABLE TO OPEN COM PORT (ERROR 5).
Existe alguma forma para eu ler estes dados abrindo a porta ja em uso pelo aplicativo da impressora ?.
Aguardo e desde já muito grato pela ajuda.
Abraços
Paulo Roberto
Paulo, se já tem um software e um dispositivo trocando informações pela porta COM, você não consegue abri-la no seu software. Esta é uma característica da porta COM. Se você realmente precisa monitorar os dados que passam ali (entre o software da impressora e ela), você precisa de um programa específico para isto, que trabalhe a nível de driver, espelhando-o. Da uma busca no Google por Serial Monitor. São softwares que quando instalados no Windows mostram os dados enviados e recebidos pela porta COM.
Muito grato Fernando,
Consegui resolver através do RECURSO SPLITTER DO VIRTUAL SERIAL PORT EMULATOR, o mesmo cria uma porta virtual e conecta a mesma a porta física de forma que os programas podem se conetar a porta virtual e monitorar os dados da porta física vinculada a mesma.
Muito bom o probrama e free.
Abraços a todos.
Fernando,
Boa tarde só uma dúvida, o delay que é dado na RXCHAR do TComPort, por conta da deferença de velocidades entre o processador e a porta serial, pergunto :
a) Existe algum parametro de referência para se determinar o valor do delay ?
b) E comum se perder dados no trafego de portas seriais ?
Obrigado se puder responder.
Paulo
Paulo, não tem um valor certo. No exemplo usei 500 mili no comando Sleep, mas você pode ir aumentando ou baixando o tempo, de acordo com a sua aplicação. Sobre perder dados, não é comum, mas pode acontecer. Normalmente nos protocolos de comunicação serial existe um cálculo de CRC que serve justamente pra saber se o que você recebeu está de acordo com o que realmente era pra ter recebido. Como fazer este cálculo precisa ver no manual do protocolo do dispositivo com o qual você está comunicando.
Bom dia!
Eu gostaria de saber como eu faço para ler um telefone na porta serial. Eu utilizei o código conforme este link (http://www.dimensaotech.com/2010/07/comunicacao-serial-com-delphi-2010/) e não funcionou.
Atenciosamente;
Felipe Araújo
Felipe, não é tão simples assim. Você precisa pegar os dados deste telefone, principalmente o protocolo serial que ele usa e ai desenvolver o seu aplicativo pra falar no protocolo que o telefone entenda. Por exemplo, se você ligar ele na porta serial e só ficar ouvindo a porta, você pode não receber nada, talvez porque o telefone está aguardando primeiro você mandar um comando pra ele começar a jogar dados na porta serial. Tudo isto você só vai saber estudando o protocolo do produto.
Bom dia Fernando!
Agradeço pelas informações. Vou fazer um breve histórico e gostaria que você me ajudasse com mais algumas informações. Eu tenho um sistema em delphi e preciso fazer a interação dele com o sistema de identificação de chamadas, ou seja, tenho o serviço habilitado na linha, tenho o componente TComport, tenho um conversor DTMF/FSK e agora com tudo isso preciso fazer a interação deste para receber os dados pela serial quando por exemplo: Uma pessoa liga para uma lanchonete e imediatamente o sistema capta o telefone e expõe na tela e se caso a pessoa já tiver seus dados cadastrados no estabelecimento ele dá seguimento para se fazer o pedido do cliente e se caso não e abre uma tela permitindo o cadastro do mesmo. Enfim, eu já tenho toda a parte do sistema montado e a única coisa que está faltando é esta interação do sistema com a recepção dos dados. Coloquei o código acima conforme mencionado (procedure TfrmTeste.ComPort1RxChar(Sender: TObject; Count: Integer) e não tive sucesso. Peço a tua ajuda, explique por gentileza, como eu posso fazer a escuta na porta serial quando uma pessoa ligar e eu captar este telefone. Se tiver Msn/e-mail, para que eu possa esclarescer algumas dúvidas em tempo real eu serei mui grato. Obrigado!
Primeira coisa é pegar o manual deste conversor e ler. Como ele funciona? Assim que recebe uma chamada ele já dispara algo pela porta serial? Ele manda bytes ou ASCII? Você pode abrir o HyperTerminal no PC onde ele está ligado pra ver se chega alguma coisa pela Serial.
Boa Tarde Fernando!
Eu peguei o manual do conversor e li, e no mesmo está escrito que os dados enviados pelo conversor ao computador são em Código ASCII.
- Dados Técnicos:
VELOCIDADE (BAUD): … 19200
BITS DE DADOS: ………… 8
PARIDADE:…………………. NENHUMA
STOP BIT: …………………… 1
DTR*, RD e TD: ……………. SINAL ATIVO: (+3Vcc a +12Vcc)
SINAL EM REPOUSO (0Vcc a -12Vcc)
Obs:=Estas informações eu chequei e estão corretas conforme descrito no manual.
——————***Capítulo 5 do Manual***——————
5) FORMATAÇÃO “HEXADECIMAL” (DADOS ENVIADOS ON-LINE) ASSIM QUE
UMA CHAMADA FOR IDENTIFICADA E RECONHECIDA PELO APARELHO.
DADOS SERÃO ENVIADOS EM CÓDIGO ASCII AO COMPUTADOR
(A/B) (x1) (x2) (x3) (x4, x5, x6,….) (E) – comprimento variável
(A/B):…….. A = Chamada Recebida B = Chamada Efetuada
Número da linha telefônica.
(x1):……….. (0 a E) Numero do aparelho (eles podem ser ligados em cascata)
(x2):……….. (1 a
(x3)………… (0 a 9) Para chamadas recebidas significa a categoria do assinante.
Para chamadas efetuadas significo primeiro numero discado.
(x4,x5,…)…. (0 a 9) Números do telefone das chamadas.
(E):………… Final de Telegrama
EX : Chamada Recebida do numero 04832476868, na linha 3 do primeiro aparelho: “A0314832476868E”
- Os programas deverão reconhecer o ASCII “A” ou “B” e contar o número de entradas até o final da
string ou seja, até receber o ASCII “E”.
- O número telefônico deve ser contado a partir do último número recebido para o primeiro.
- Assim, os 8 (ou 7) últimos números correspondem ao número telefônico, os 2 anteriores ao código de
área, e o imediatamente anterior ao código de área, corresponde a categoria do telefone chamador.
EX : String recebida “A1214832473550E”
Número telefônico = 32473550 / Código de área = 48 / categoria = 1
linha 2 do sistema 1 = 11 (6a. linha) / Trata-se de uma chamada recebida = A
—————————**Fim**————————
Agora em relação ao HyperTerminal eu não consegui testar ainda, a fim de verificar se está chegando algum dado na porta. Testando e obtendo uma resposta eu te passo. Com relação ao Msn/e-mail você não pode me passar para que eu possa manter contato além do site.
Atenciosamente;
Segundo o manual, assim que o aparelho reconhece um número ele já dispara pela porta serial. Então com o HyperTerminal funcionando e configurado direito já é pra você receber os dados. Agora a linha que você esta testando já tem o identificador de chamadas habilitado? No aparelho, o número é reconhecido? Sobre o e-mail, não posso passar porque não terei tempo pra te ajudar. Tenho outros compromissos que me limitam bastante. Boa sorte.
Boa Tarde Fernando!
Em relação ao HyperTerminal eu não consegui visualizar nada na porta. O que será que pode estar acontecendo?.
Oi Felipe. Pode ser várias coisas. A configuração da porta COM ao abrir o HyperTerminal tem que ser igual a especificada pelo produto (Velocidade, paridade, bits, etc). Pode ser a sua porta COM que esta queimada (Elas queimam facilmente) ou até o dispositivo que está com defeito. Ai teria que ir testando cada item pra ir eliminando. A porta COM tem como testar com um conector DB9. Veja nos comentários acima onde eu falo como montar um. Ah, outra coisa, se a porta COM for um adaptador USB/Serial, precisa ver também, porque a maioria não funciona direito. O ideal é uma porta COM direta da placa mãe do PC ou PCI.
Fernando Bom dia!
Eu consegui fazer a comunicação entre o sistema com o Hyperterminal, fiz o teste manual a fim de verificar se este estava enviando alguma coisa pela porta serial. O sistema consegue receber e enviar telefones quando eu faço o teste manual, porém quando eu simulo uma ligação o mesmo ainda não está funcionando. As configurações foram checadas e estão corretas, o evento ComportOnRXChar está disparando e está passando valores. Enfim, segue a sequência para funcionamento: Serviço habilitado na linha(BINA – Telefônica), Convesor DTMF/FSK (Baud:19200,Bits de Dados: 8, Paridade: Nenhuma, Stop Bit: 1), Sistema + TComport com as mesmas configurações citadas acima.
Trabalhamos com sistemas para delivery é preciso de bina Para identifica o cliente quenda liga busca o cadastro do Cliente
Quando o telefone de o 1º touque
Ola Fernando gostei muito, mas sou novato em delphi e preciso ler um byte por vez da porta serial. O Dado de entra da porta seria @00HHMMSS LF/CR. Como seria o programa se usar o event OnRxFlag daria para ler um de cada vez
Obrigado
Oi Carlos. Você pode ler cada byte separadamente, mesmo eles chegando todos de uma vez. Você pega a string que armazenou esses bytes e vai lendo cada posição dela em um loop.
Boa tarde.
Fernando muito bom o seu post, estou usando o componente porém preciso de uma ajuda sua, se puder claro eu estou tentando ler o peso do módulo 9091 ac (Toledo) P03 (protocolo), estou recebendo a string tudo certinho, porém eu não consigo desativar após a leitura do peso o componente, ele ficar o evento ComPortRxChar direto.
Não sei se estou fazendo da melhor forma.
Como tenho que fazer o usuário ao chegar no campo peso (Edit) ele pressiona F12 o sistema teria que ler o peso, se ler correto passa para outro peso, são 2 ok.
Após ler 1 passa para o outro e pronto, eu criei uma procedure no Delphi que passa dá um close, envia parametros da balança e open.
meu evento do componente:
var
Str, cPeso, cTipo, cLeitura: String;
nPeso: real;
nPos: integer;
begin
Sleep(QCFGINTERVALO.asInteger);
ComPort.ReadStr(Str, Count);
Memo1.lines.Add(Str);
nPos := Pos('', Str);
cLeitura := Copy(cLeitura, nPos, 16);
If (Length(cLeitura) > 0) and (Length(cLeitura) = 16) then
// and (Copy(cLeitura, 1, 1) = '') then
Begin
cPeso := Copy(cLeitura, 5, 6);
If (StrToInt(cPeso) > 0) and ((StrToInt(Copy(cPeso, 6, 1)) = 0) or
(StrToInt(Copy(cPeso, 6, 1)) = 5)) then
begin
nPeso := StrToFloat(Copy(cPeso, 1, 5) + ',' + Copy(cPeso, 6, 1));
cTipo := Copy(cLeitura, 3, 1);
If cTipo = 'q' then
Begin
EPeso.text := FormatCurr('#,##0.00', nPeso);
End
Else
Begin
If (cTipo = 's') or (cTipo = '{') then
nPeso := ((nPeso) * (-1));
EPeso.text := FormatCurr('#,##0.00', nPeso);
End;
end;
End;
end;
Poderia me dar uma sugestão, grato.
abraços
César
César, o evento ComPortRxChar é disparado sempre que chegar qualquer coisa na porta COM. Essas balanças, se não me engano, ficam disparando informação direto. Você pode fazer 2 coisas: 1º é ligar e desligar o componente ComPort. Assim você só pega os dados quando realmente precisar. 2º é criar uma trava sua (variável) para indicar se é o momento de ler ou não os dados do ComPortRxChar. Tipo quando ela for true, você lê os dados, quando não for, vc sai da função. Infelizmente agora não tenho como analisar o seu código. Estou num projeto de VB e minha cabeça meio que chaveou prá lá deixando o Pascal de lado!
Não esto conseguindo instalar este componente no Delphi 2009, vc poderia me dar uma ajuda?
Amigo, o processo é chato mesmo, mas da pra fazer. Não tenho como explicar por aqui agora. Se você procurar no Google, certeza que vai encontrar. Quando eu tiver um tempo, vou tentar fazer um video mostrando, já que muita gente me pergunta sobre isto.
Fernando, sei que ja foi dito por aqui, mas vale reforcar…Parabens pelo seu compartilhamento de conhecimento.Tem tantos posts , que vou usá-los para tentar chegar na minha solucao, que seria ler peso que vira de uma balanca suspensa para a porta serial do coletor, usando delphi 6. Se eu nao conseguir, grito socorro…Parabens.