?
Solved

serial ports

Posted on 2008-06-15
4
Medium Priority
?
826 Views
Last Modified: 2013-12-17
hi
 i have to detect 3 status of a serial port in my application :
1. i opened the serialport and it's ready for use
2.the serial port is exsiting but it's busy and not by my appliccation
3.the serial port does not exist..

how can i do this in c# or C++ ,?
thanks
regard
this->serialPort1= gcnew System::IO::Ports::SerialPort("COM1",57600,System::IO::Ports::Parity::None,8,System::IO::Ports::StopBits::One);
				this->serialPort2= gcnew System::IO::Ports::SerialPort("COM2",57600,System::IO::Ports::Parity::None,8,System::IO::Ports::StopBits::One);
				this->serialPort3= gcnew System::IO::Ports::SerialPort("COM3",57600,System::IO::Ports::Parity::None,8,System::IO::Ports::StopBits::One);
				try{
					if (this->serialPort1->IsOpen) this->label1->Text="COM1 Busy";
					else {			 
						serialPort1->Open();
						if(serialPort1->IsOpen)
							this->label1->Text="COM1 is ready for use";
					}
							
					}
				catch(...)
				{
					this->label1->Text="COM1 is not existing";
				}
				try{
					if (this->serialPort2->IsOpen) this->label2->Text="COM2 Busy";
					else {			 
						serialPort2->Open();
						if(serialPort2->IsOpen)
							this->label2->Text="COM2 is ready for use";
					}
							
					}
				catch(...)
				{
					this->label2->Text="COM2 is not existing";
				}
				try{
					if (this->serialPort3->IsOpen) this->label3->Text="COM3 Busy";
					else {			 
						serialPort3->Open();
						if(serialPort3->IsOpen)
							this->label3->Text="COM3 is ready for use";
					}
							
					}
				catch(...)
				{
					this->label3->Text="COM3 is not existing";
				}

Open in new window

0
Comment
Question by:klay8
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
4 Comments
 
LVL 19

Expert Comment

by:elimesika
ID: 21790992
0
 
LVL 6

Accepted Solution

by:
Bruce_1975 earned 2000 total points
ID: 21792982
A COM-port can have just one owner. If you are unable to open the port you will get an exception:
a) Port is used by an other application (UnauthorizedAccessException)
b) Port is not existing (IOException)

If you are able to open the port, it is ready to communicate.

Regards,
Bruce
0
 
LVL 3

Expert Comment

by:Pigtor
ID: 21795855
1.  The OK status or Ready to use can be determined only when you have no exception raised during the Open method.
try
{
    ...  
port.Open();
//AT THIS POINT YOUR SERIAL PORT IS OPEN AND READY TO USE, OTHERWISE AN EXCEPTION WAS RAISED.
//YOU CAN ALSO CHECK THE "port.IsOpen" PROPERTY
}
catch (System.Exception ex)
{
//THE PORT WAS NOT OPEN
}

2.   As Bruce_1975 says, you should open the serialport and check for an UnauthorizedAccessException, but you should also check for an InvalidOperationException.  Check the msdn documentation at:
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.open.aspx

3.  To check whether a serial port exists, use the System.IO.Ports.SerialPort.GetPortNames() to retrieve all the available ports in the machine.  With this validation you can determine whether the user port selection was invalid.
If you are not using .NET 2.0, the serial port always send the error: "Invalid port number"


I hope this is what you are looking for
0
 
LVL 3

Expert Comment

by:Pigtor
ID: 21795898
This function will return the state (1, 2 or 3)

        public int CheckSerialPort(System.IO.Ports.SerialPort port)
        {
            try
            {
                string[] ports = System.IO.Ports.SerialPort.GetPortNames();
                if (System.Array.IndexOf(ports, port.PortName) == -1) return 3;
                port.Open();
                return 1;
            }
            catch (System.Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message, port.PortName, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                return 2;
            }
        }
0

Featured Post

On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Summary Displaying images in RichTextBox is a common requirement with limited solutions available. Pasting through clipboard or embedding into RTF content only support static images.  This article describes how to insert Windows control objects int…
In my previous two articles we discussed Binary Serialization (http://www.experts-exchange.com/A_4362.html) and XML Serialization (http://www.experts-exchange.com/A_4425.html). In this article we will try to know more about SOAP (Simple Object Acces…
Add bar graphs to Access queries using Unicode block characters. Graphs appear on every record in the color you want. Give life to numbers. Hopes this gives you ideas on visualizing your data in new ways ~ Create a calculated field in a query: …
In this video you will find out how to export Office 365 mailboxes using the built in eDiscovery tool. Bear in mind that although this method might be useful in some cases, using PST files as Office 365 backup is troublesome in a long run (more on t…
Suggested Courses

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question