Ir ao conteúdo

Problemas lendo dados da porta serial!


Pulllga

Posts recomendados

Postado

Olá, sou o Pulllga,

Estou com um problema, uso uma variável do tipo String, buffTem, e um componente SerialPort, serPri, mas acontece que quando vou preencher a variável com o conteúdo do componente, ele executa uma vez e para, o programa trava!!!

Essa é a linha:

buffTem = serPri->ReadLine();

Ele executa uma vez, mas depois desse comando, na linha seguinte, ele trava!!!

O que estou fazendo de errado???

T+ :D:D:D

  • Membro VIP
Postado

Em geral, funçõs com o nome "ReadLine()" lêem uma string de algum lugar até encontrar um "\r" (ASCII 13 - 0Dh), acredito que essa não deve ser diferente, não conheço esse componente, mas o que acontece se a porta serial não receber o "\r"?

Antes que eu esqueça... Onde você esta tentando ler a porta serial?

Postado

Olá EduardoS,

Já resolvi o problema, estou usando o Visual C++, e o problema era que ele não estava recebendo os dados da porta serial, por isso ficava eternamente executando!!!

E melhor ainda, eu não estou mais usando essa função, estou usando o ReadByte, ai converto com o "Convert::ToChar", o ReadByte lê caracter por caracter, ai concateno tudo utilizando a propriedade BytesToRead, o código é assim:


if (serPri->IsOpen){
   while (serPri->BytesToRead > 0){
      buffTem = buffTem + Convert::ToChar(serPri->ReadByte());
      }
   }

Onde:

serPri -> Componente SerialPort

buffTem -> Variável do tipo String

O código verifica se a porta serial está aberta, depois, utiliza a propriedade BytesToRead, que retorna o total de bytes que a porta vai enviar, o ReadByte lê o primeiro byte, e nesse momento, o BytesToRead diminui em 1, e o ReadByte lê o segundo caracter, e assim por diante, exemplo:

A porta serial retorna a string "Oi Mundo!!!", essa string tem 11 caracteres, logo o BytesToRead terá o valor 11 e o ReadByte vai ler "O", na próxima execução do while, o BytesToRead vai ser 10 e o ReadByte vai ser "i", e assim por diante até o BytesToRead ser 0, onde o while termina.

Esse pedaço de código já é o suficiente para efetuar uma comunicação serial, por favor não fechem este tóico, ele poderá servir para dúvidas sobre o assunto, qualquer dúvida podem postar aqui.

falou T+ :D:D:D

  • Membro VIP
Postado

DICA: Você pode usar o comando "Read()" que, se não me engano, recebe como primeiro parâmetro um array de bytes e como segundo e terceiro parâmetros inicio e fim respectivamente, depois é só criar uma string a partir dessa array, melhora um pouco o desempenho do programa por reduzir o número de concatenações.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!