C# serialPort speed

Posted by MarekK on Stack Overflow See other posts from Stack Overflow or by MarekK
Published on 2009-08-21T11:39:44Z Indexed on 2010/03/20 19:11 UTC
Read the original article Hit count: 513

Filed under:
|
|
|

Hi

I am developing some monitoring tool for some kind of protocol based on serial communication.

Serial BaudRate=187,5kb I use System.IO.Ports.SerialPort class.

This protocol has 4 kinds of frames. They have 1Byte,3Bytes,6Bytes, 10-255Bytes. I can work with them but I receive them too late to respond.

For the beginning I receive first packed after ex. 96ms (too late), and it contains about 1000B. This means 20-50 frames (too much, too late). Later its work more stable, 3-10Bytes but it is still too late because it contains 1-2 frames. Of Course 1 frame is OK, but 2 is too late.

Can you point me how can I deal with it more reliable? I know it is possible.

Revision1:

I tried straight way:

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
       if (!serialPort1.IsOpen) return;
       this.BeginInvoke(new EventHandler(this.DataReceived));
}

And Backgroud worker: And ... new Tread(Read) and... always the same. Too late, too slow. Do I have to go back to WinApi and import some kernel32.dll functions?

Revision 2: this is the part of code use in the Treading way:

int c = serialPort1.BytesToRead;
byte[] b = new byte[c];
serialPort1.Read(b, 0, c);

I guess it is some problem with stream use inside SerialPort class. Or some synchronization problem.

Revision 3: I do not use both at once!! I just tried different ways.

Regards MarekK

© Stack Overflow or respective owner

Related posts about c#

Related posts about .NET