• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 846
  • Last Modified:

serial ports

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
klay8
Asked:
klay8
  • 2
1 Solution
 
elimesikaCommented:
0
 
Bruce_1975Commented:
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
 
PigtorCommented:
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
 
PigtorCommented:
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

Free learning courses: Active Directory Deep Dive

Get a firm grasp on your IT environment when you learn Active Directory best practices with Veeam! Watch all, or choose any amount, of this three-part webinar series to improve your skills. From the basics to virtualization and backup, we got you covered.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now