Click here to Skip to main content
Click here to Skip to main content

Application to Debug Serial Port Communication

By , 14 May 2007
 
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.

// 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)

About the Author

rj45
Software Developer (Senior)
Canada Canada
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
Answerspecial thanksmemberHaresh Ambaliya25 Jan '11 - 10:45 
GeneralRe: special thanksmemberrj4525 Jan '11 - 13:52 
Generalsmall application using serialport communication running on vista64membermrdavidch15 Apr '09 - 8:30 
GeneralThanks!memberDrew Loika14 Jul '08 - 15:18 
GeneralCarraige Returnmemberkamarchand21 May '08 - 9:15 
GeneralRe: Carraige Returnmemberrj4521 May '08 - 9:47 
GeneralSend asciimemberrj4511 Sep '07 - 11:33 
QuestionThanks for the awesome articlememberAmarjeetSinghMatharu21 Aug '07 - 17:22 
QuestionHow to turn off the DataReceived Event in SerialPort classmemberAmarjeetSinghMatharu10 Sep '07 - 0:25 
AnswerRe: How to turn off the DataReceived Event in SerialPort classmemberAgnius Vasiliauskas27 Nov '07 - 3:12 
Questionreceive binary data and save it in binary filememberMauricioPrincipi23 Jul '07 - 4:33 
GeneralClosing the portmemberjasperp21 May '07 - 19:58 
GeneralRe: Closing the portmemberrj4522 May '07 - 7:46 
GeneralRe: Closing the port - Doesn't this work with Virtual ports?memberVijay Chandra Sekhar Parepalli15 Dec '09 - 16:50 
GeneralRe: Closing the port - Doesn't this work with Virtual ports?memberrj4516 Dec '09 - 5:57 
GeneralRe: Closing the portmemberrj4522 May '07 - 7:55 
QuestionRe: Closing the port - App HangsmemberPaglia24 Oct '07 - 1:35 
GeneralSending Reciving Binary filemembertarikthecoder19 May '07 - 23:42 
GeneralRe: Sending Reciving Binary filememberrj4522 May '07 - 7:49 
GeneralRe: Sending using write function in serial portmemberpallaka29 Aug '09 - 1:29 
GeneralRe: Sending using write function in serial portmemberrj4531 Aug '09 - 9:25 
GeneralGood jobmemberThe Code Guru14 May '07 - 21:18 
GeneralNicememberStuart Dootson14 May '07 - 21:10 
GeneralCan't get it running with VSPD XP4.memberBartosz Bien14 May '07 - 22:03 
GeneralRe: Can't get it running with VSPD XP4.memberrj4515 May '07 - 8:17 

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

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130516.1 | Last Updated 14 May 2007
Article Copyright 2007 by rj45
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid