Click here to Skip to main content
15,867,141 members
Articles / Programming Languages / C#
Article

Application to Debug Serial Port Communication

Rate me:
Please Sign up or sign in to vote.
4.67/5 (30 votes)
14 May 2007CPOL2 min read 165.1K   9.8K   160   30
This is a very simple app I use to test serial traffic. It enumerates the COM ports, allows you to edit all properties of SerialPort class instance. It also allows you to send files randomly to the serial port and save incoming data to a file.
Screenshot - Complay.jpg

Screenshot - Complay2.jpg

Introduction

This is a very basic testing tool that I created to test my serial port handling code. I did Google for such a basic tool which you would think would exist, but...

A Few Things You Might Need

I bought a few cheap USB to serial port cables which are helpful for testing on one machine. You can also install emulated serial ports, but I'd rather go with a more real scenario for testing.

Basic Features

  1. The application allows you to send / receive data over the serial port and save it.
  2. It allows you to configure all options of the .NET SerialPort class with a propertyGrid.
  3. It allows you to select a directory and randomly send a file from that directory at a random interval.
  4. It enumerates the COM ports on your machine.

Using the Code

Almost all the functionality in the app is a one liner and completely self explanatory because .NET is such a well written high level language. The only tricky part of this app is that the serial port receives data on a separate thread. You cannot access visual controls from a separate thread, so you must invoke a delegate that will set the text and send a copy of the memory with (new object[] { text }).

It is important to notice that InvokeRequired will let you know if the thread ID is different.

What will happen when we receive data is, serialPort1_DataReceived handler will be fired when serial data is received and it will call SetText which is just a little wrapper that will in turn invoke the SetTextCallback delegate. The delegate is set to call SetText so SetText will be invoked again, but now it is on the UI thread. At this point, this.txtData.InvokeRequired will be false and we can set the text like we normally would.

C#
// This delegate enables asynchronous calls for setting
// the text property on a TextBox control.
delegate void SetTextCallback(string text);
private void serialPort1_DataReceived
    (object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
    SetText(this.serialPort1.ReadExisting());
}

private void SetText(string text)
{
    // InvokeRequired required compares the thread ID of the
    // calling thread to the thread ID of the creating thread.
    // If these threads are different, it returns true.
    if (this.txtData.InvokeRequired)
    {
        SetTextCallback d = new SetTextCallback(SetText);     
        this.Invoke(d, new object[] { text });
    }
    else
    {
        this.txtData.Text = text;
    }
}

Limitations

The serial app I am testing deals with old data matrix printer drivers and so I'm dealing with strictly text data going through the port, which is probably not what most people are looking for. I realize it would be more generically useful if it had a binary editor built in.

History

  • 14th May, 2007: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
Canada Canada
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionHelped me Pin
cmarines26-Aug-22 4:38
cmarines26-Aug-22 4:38 
QuestionSerial Port With Background Worker Pin
Member 854409416-Sep-16 0:06
Member 854409416-Sep-16 0:06 
Answerspecial thanks Pin
Haresh Ambaliya25-Jan-11 10:45
Haresh Ambaliya25-Jan-11 10:45 
GeneralRe: special thanks Pin
rj4525-Jan-11 13:52
rj4525-Jan-11 13:52 
Generalsmall application using serialport communication running on vista64 Pin
mrdavidch15-Apr-09 8:30
mrdavidch15-Apr-09 8:30 
GeneralThanks! Pin
Drew Loika14-Jul-08 15:18
Drew Loika14-Jul-08 15:18 
GeneralCarraige Return Pin
kamarchand21-May-08 9:15
kamarchand21-May-08 9:15 
GeneralRe: Carraige Return Pin
rj4521-May-08 9:47
rj4521-May-08 9:47 
GeneralSend ascii Pin
rj4511-Sep-07 11:33
rj4511-Sep-07 11:33 
I have not added this to the project but to convert to ascii



System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] bytes = encoding.GetBytes(text );
serialPort1.Write(bytes, 0, bytes.Length);

QuestionThanks for the awesome article Pin
AmarjeetSinghMatharu21-Aug-07 17:22
AmarjeetSinghMatharu21-Aug-07 17:22 
QuestionHow to turn off the DataReceived Event in SerialPort class Pin
AmarjeetSinghMatharu10-Sep-07 0:25
AmarjeetSinghMatharu10-Sep-07 0:25 
AnswerRe: How to turn off the DataReceived Event in SerialPort class Pin
Agnius Vasiliauskas27-Nov-07 3:12
Agnius Vasiliauskas27-Nov-07 3:12 
Questionreceive binary data and save it in binary file Pin
MauricioPrincipi23-Jul-07 4:33
MauricioPrincipi23-Jul-07 4:33 
GeneralClosing the port Pin
jasperp21-May-07 19:58
professionaljasperp21-May-07 19:58 
GeneralRe: Closing the port Pin
rj4522-May-07 7:46
rj4522-May-07 7:46 
GeneralRe: Closing the port - Doesn't this work with Virtual ports? Pin
VC Sekhar Parepalli15-Dec-09 16:50
VC Sekhar Parepalli15-Dec-09 16:50 
GeneralRe: Closing the port - Doesn't this work with Virtual ports? Pin
rj4516-Dec-09 5:57
rj4516-Dec-09 5:57 
GeneralRe: Closing the port Pin
rj4522-May-07 7:55
rj4522-May-07 7:55 
QuestionRe: Closing the port - App Hangs Pin
Paglia24-Oct-07 1:35
Paglia24-Oct-07 1:35 
GeneralSending Reciving Binary file Pin
Tarek K. Mahfouz19-May-07 23:42
Tarek K. Mahfouz19-May-07 23:42 
GeneralRe: Sending Reciving Binary file Pin
rj4522-May-07 7:49
rj4522-May-07 7:49 
GeneralRe: Sending using write function in serial port Pin
pallaka29-Aug-09 1:29
pallaka29-Aug-09 1:29 
GeneralRe: Sending using write function in serial port Pin
rj4531-Aug-09 9:25
rj4531-Aug-09 9:25 
GeneralGood job Pin
Bishoy Demian14-May-07 21:18
Bishoy Demian14-May-07 21:18 
GeneralNice Pin
Stuart Dootson14-May-07 21:10
professionalStuart Dootson14-May-07 21:10 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.