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

Sign in to follow this  
amiloM1425

Ler buffer da porta COM

Recommended Posts

amiloM1425

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.