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

amiloM1425

Ler buffer da porta COM

1 mensagem neste tópico

Olá a todos,

estou a desenvolver um projecto onde tenho de ler dados recebidos na porta COM. Estou a usar o System.IO.Ports para trabalhar com a porta COM.

O problema é o seguinte:

Eu tenho de ler pacotes de 32 bytes, pelo que coloquei a propriedade

comPort.ReceivedBytesThreshold = 32;

, ou seja, o evento DataReceived só é despoletado quando existirem 32 bytes no buffer para serem lidos.

Pelo que percebi, é criado um buffer interno (de software) onde são armazenados os dados e é a esse buffer que o método Read() vai ler os dados.

A questão é que em alguns casos poderei receber mais do que um pacote quase ao mesmo tempo, e o que acontece é que não é despoletado um novo evento mas sim o seguinte:

- Recebo 1 pacote 32 Bytes

                                - Recebe inicio de outro pacote

                                - Cria buffer interno com >32 Bytes a ler

- Despoleta o evento DataReceived

- Leio 32 Bytes do 1º pacote, fica o inicio do 2º pacote no buffer da porta COM

Ao fazer isto "perco" o inicio do 2º pacote só recebendo o resto na próxima vez que o evento DataReceived for despoletado, ou seja acontece o seguinte:

- Detecta 32 Bytes na porta COM

                                - Cria buffer interno com > 32 Bytes a ler

- Lê o resto do 2º pacote mais o inicio do 3º, fica o resto do 3º pacote no buffer da porta COM

O que vai acontecer é que vou andar sempre "dessincronizado"  na recepção dos pacotes.

Existe alguma forma de ir ler directamente ao buffer da porta COM e não ao buffer interno que é criado ao serem recebidos dados?

Desde já muito obrigado pela atenção

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