• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

amiloM1425

SerialPort problema com 0x1A

4 mensagens neste tópico

Olá a todos,

No projecto em que estou envolvido é necessário receber dados de uma porta COM, até aqui tudo bem. Os dados recebidos vem em pacotes de 32bytes, o que também não é problema.

Após alguns testes verifiquei que havia alguns pacotes que não vinham completos, vinham até um determinado byte correctos mas depois os restantes bytes vinham sempre a 0x00. Após analisar o problema constatei que essa quebra no pacote era sempre a seguir ao valor 0x1A, ou seja ctrl+z ou então EOF.

Investiguei um bocado e vi que o .Net ao fazer a leitura dos dados que se encontram na porta COM, ao encontrar o valor 0x1A interrompe a leitura. Já procurei por uma solução para contornar este problema, mas não encontrei nada :P

Alguém já se deparou com este problema? Como posso contorna-lo? Tem alguma ideia?

Pensei que talvez, se conseguisse, fazer um override ao método Read() da SerialPort seria uma solução. Acham que é boa ideia e que é possível?

Agradeço a vossa ajuda.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei. No trabalho até temos alguns dispositivos que trabalhamos por COM, mas nunca me deparei com essa situação.

Depois de receberes 0x1A, a stream da serialport ainda diz que está aberta?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como estás a fazer a leitura? através de um BufferedReader?

Se tiveres a fazer o Read To End, é possivel q seja por isso q para no EOF.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou a utilizar o método Read() da SerialPort, mas também utilizei um BufferedReader. De qualquer das formas sempre que era lido o valor 0x1A era feito um "break" do método ficando a faltar os restantes valores.

A solução que arranjei pode não ser a melhor, mas funciona. Basicamente estou a ler o pacote um byte de cada vez.

for (int i = 0; i < 32; i++)
{
     comPort.Read(comBuffer,i, 1);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora